1 2var i=Object.defineProperty;var a=(r,e,t)=>e in r?i(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>(a(r,typeof e!="symbol"?e+"":e,t),t);class o{constructor(e){n(this,"wrapper");n(this,"uri");n(this,"type");n(this,"clickHandler",()=>{if(!this.uri){console.error("Error: data-mcuri attribute not found in parent wrapper.");return}if(!this.type){console.warn('Warning: "type" parameter not found in data-mcuri attribute.');return}this.reloadItem()});if(this.wrapper=e.closest(".mediaconsent_wrapper"),this.wrapper)this.uri=this.wrapper.dataset.mcuri,this.type=this.wrapper.dataset.mctype;else throw new Error('Parent wrapper with class "mediaconsent-wrapper" not found.');this.wrapper.addEventListener("click",this.clickHandler.bind(this))}reloadItem(){this.uri!==null&&fetch(this.uri).then(e=>{if(!e.ok)throw new Error("MediaConsent: Failed to load consent content");return e.text()}).then(e=>{this.wrapper!==null?this.wrapper.innerHTML=e:console.error("Error: Wrapper element is null.")}).catch(e=>{console.error("There is a problem with the fetch operation: ",e)})}}document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".mcb").forEach(e=>{new o(e)})}); 3//# sourceMappingURL=MediaConsent.js.map 4 5var TYPO3 = TYPO3 || {}; 6TYPO3.brochureshop = { 7 indexAction: { 8 initialize: function() { 9 TYPO3.brochureshop.attachToggleEvents(); 10 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 11 TYPO3.brochureshop.attachSubmitToCartImage(); 12 } 13 }, 14 indexWithoutPaginationAction: { 15 initialize: function() { 16 TYPO3.brochureshop.attachToggleEvents(); 17 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 18 TYPO3.brochureshop.attachSubmitToCartImage(); 19 } 20 }, 21 indexAction: { 22 initialize: function() { 23 TYPO3.brochureshop.attachToggleEvents(); 24 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 25 TYPO3.brochureshop.attachSubmitToCartImage(); 26 } 27 }, 28 showBigCartAction: { 29 initialize: function() { 30 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 31 } 32 }, 33 enterAddressAction: { 34 initialize: function() { 35 TYPO3.brochureshop.hideOrShowSeparateShippingAddress(); 36 TYPO3.brochureshop.attachSeparateShippingAddressEvent(); 37 TYPO3.brochureshop.hideOrShowSeparateInvoiceType(); 38 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 39 } 40 }, 41 confirmOrderAction: { 42 initialize: function() { 43 TYPO3.brochureshop.attachShowProgressIndicatorEvents(); 44 } 45 }, 46 attachToggleEvents: function() { 47 $(".brochureshop-toggler").click(function() { 48 $('#' + $(this).attr('target')).toggle('fast'); 49 $('span', this).toggleClass('brouchureshop-sprite-accordionClosed brouchureshop-sprite-accordionOpened'); 50 }); 51 }, 52 attachSeparateShippingAddressEvent: function() { 53 $("#differentShippingAddress").click(TYPO3.brochureshop.hideOrShowSeparateShippingAddress); 54 }, 55 hideOrShowSeparateShippingAddress: function() { 56 if ($("#differentShippingAddress").is(":checked")) { 57 ($("#brochureshop-shipping-address")).show(); 58 } else { 59 ($("#brochureshop-shipping-address")).hide(); 60 } 61 }, 62 hideOrShowSeparateInvoiceType: function() { 63 if($("input[name='tx_brochureshop_shoppingcartorderform[order][invoiceType]']").val() === '1') { 64 $("#xrechnung").show(); 65 } 66 $("input[name='tx_brochureshop_shoppingcartorderform[order][invoiceType]']").change(function(){ 67 if ($(this).val() === '1') { 68 $("#xrechnung").show(); 69 }; 70 if ($(this).val() === '2') { 71 $("#xrechnung").hide(); 72 } 73 }); 74 }, 75 attachShowProgressIndicatorEvents: function() { 76 $(".brochureshop-action").click(TYPO3.brochureshop.showProgressIndicator); 77 }, 78 showProgressIndicator: function() { 79 $("#brochureshop-spinner").show(); 80 setTimeout(function() { 81 $("input").attr('disabled', true); 82 }, 100); 83 return true; 84 }, 85 attachSubmitToCartImage: function() { 86 $('.tx-brochureshop form').each(function(){ 87 var form = $(this); 88 var submit = $(this).find('input[type="submit"]'); 89 var cartImage = $(this).find('img.shoppingcart'); 90 if (submit.length > 0 && cartImage.length > 0) { 91 $(cartImage).click(function(){ 92 form.submit(); 93 }); 94 submit.addClass('hide'); 95 } 96 }); 97 } 98}; 99/** 100 * bxSlider v4.2.1d
vendor: 16,654 bytes, lines 100-105
100 101 * Copyright 2013-2017 Steven Wanderski 102 * Written while drinking Belgian ales and listening to jazz 103 * Licensed under MIT (http://opensource.org/licenses/MIT) 104 */ 105!function(t){var e={mode:"horizontal",slideSelector:"",infiniteLoop:!0,hideControlOnEnd:!1,speed:500,easing:null,slideMargin:0,startSlide:0,randomStart:!1,captions:!1,ticker:!1,tickerHover:!1,adaptiveHeight:!1,adaptiveHeightSpeed:500,video:!1,useCSS:!0,preloadImages:"visible",responsive:!0,slideZIndex:50,wrapperClass:"bx-wrapper",touchEnabled:!0,swipeThreshold:50,oneToOneTouch:!0,preventDefaultSwipeX:!0,preventDefaultSwipeY:!1,ariaLive:!0,ariaHidden:!0,keyboardEnabled:!1,pager:!0,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:!0,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:!1,startText:"Start",stopText:"Stop",autoControlsCombine:!1,autoControlsSelector:null,auto:!1,pause:4e3,autoStart:!0,autoDirection:"next",stopAutoOnClick:!1,autoHover:!1,autoDelay:0,autoSlideForOnePage:!1,minSlides:1,maxSlides:1,moveSlides:0,slideWidth:0,shrinkItems:!1,onSliderLoad:function(){return!0},onSlideBefore:function(){return!0},onSlideAfter:function(){return!0},onSlideNext:function(){return!0},onSlidePrev:function(){return!0},onSliderResize:function(){return!0},onAutoChange:function(){return!0}};t.fn.bxSlider=function(n){if(0===this.length)return this;if(this.length>1)return this.each(function(){t(this).bxSlider(n)}),this;var s={},o=this,r=t(window).width(),a=t(window).height();if(!t(o).data("bxSlider")){var l=function(){t(o).data("bxSlider")||(s.settings=t.extend({},e,n),s.settings.slideWidth=parseInt(s.settings.slideWidth),s.children=o.children(s.settings.slideSelector),s.children.length<s.settings.minSlides&&(s.settings.minSlides=s.children.length),s.children.length<s.settings.maxSlides&&(s.settings.maxSlides=s.children.length),s.settings.randomStart&&(s.settings.startSlide=Math.floor(Math.random()*s.children.length)),s.active={index:s.settings.startSlide},s.carousel=s.settings.minSlides>1||s.settings.maxSlides>1,s.carousel&&(s.settings.preloadImages="all"),s.minThreshold=s.settings.minSlides*s.settings.slideWidth+(s.settings.minSlides-1)*s.settings.slideMargin,s.maxThreshold=s.settings.maxSlides*s.settings.slideWidth+(s.settings.maxSlides-1)*s.settings.slideMargin,s.working=!1,s.controls={},s.interval=null,s.animProp="vertical"===s.settings.mode?"top":"left",s.usingCSS=s.settings.useCSS&&"fade"!==s.settings.mode&&function(){for(var t=document.createElement("div"),e=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"],i=0;i<e.length;i++)if(void 0!==t.style[e[i]])return s.cssPrefix=e[i].replace("Perspective","").toLowerCase(),s.animProp="-"+s.cssPrefix+"-transform",!0;return!1}(),"vertical"===s.settings.mode&&(s.settings.maxSlides=s.settings.minSlides),o.data("origStyle",o.attr("style")),o.children(s.settings.slideSelector).each(function(){t(this).data("origStyle",t(this).attr("style"))}),d())},d=function(){var e=s.children.eq(s.settings.startSlide);o.wrap('<div class="'+s.settings.wrapperClass+'"><div class="bx-viewport"></div></div>'),s.viewport=o.parent(),s.settings.ariaLive&&!s.settings.ticker&&s.viewport.attr("aria-live","polite"),s.loader=t('<div class="bx-loading" />'),s.viewport.prepend(s.loader),o.css({width:"horizontal"===s.settings.mode?1e3*s.children.length+215+"%":"auto",position:"relative"}),s.usingCSS&&s.settings.easing?o.css("-"+s.cssPrefix+"-transition-timing-function",s.settings.easing):s.settings.easing||(s.settings.easing="swing"),s.viewport.css({width:"100%",overflow:"hidden",position:"relative"}),s.viewport.parent().css({maxWidth:u()}),s.children.css({float:"horizontal"===s.settings.mode?"left":"none",listStyle:"none",position:"relative"}),s.children.css("width",h()),"horizontal"===s.settings.mode&&s.settings.slideMargin>0&&s.children.css("marginRight",s.settings.slideMargin),"vertical"===s.settings.mode&&s.settings.slideMargin>0&&s.children.css("marginBottom",s.settings.slideMargin),"fade"===s.settings.mode&&(s.children.css({position:"absolute",zIndex:0,display:"none"}),s.children.eq(s.settings.startSlide).css({zIndex:s.settings.slideZIndex,display:"block"})),s.controls.el=t('<div class="bx-controls" />'),s.settings.captions&&k(),s.active.last=s.settings.startSlide===f()-1,s.settings.video&&o.fitVids(),"none"===s.settings.preloadImages?e=null:("all"===s.settings.preloadImages||s.settings.ticker)&&(e=s.children),s.settings.ticker?s.settings.pager=!1:(s.settings.controls&&C(),s.settings.auto&&s.settings.autoControls&&T(),s.settings.pager&&b(),(s.settings.controls||s.settings.autoControls||s.settings.pager)&&s.viewport.after(s.controls.el)),null===e?g():c(e,g)},c=function(e,i){var n=e.find('img:not([src=""]), iframe').length,s=0;if(0===n)return void i();e.find('img:not([src=""]), iframe').each(function(){t(this).one("load error",function(){++s===n&&i()}).each(function(){(this.complete||""==this.src)&&t(this).trigger("load")})})},g=function(){if(s.settings.infiniteLoop&&"fade"!==s.settings.mode&&!s.settings.ticker){var e="vertical"===s.settings.mode?s.settings.minSlides:s.settings.maxSlides,i=s.children.slice(0,e).clone(!0).addClass("bx-clone"),n=s.children.slice(-e).clone(!0).addClass("bx-clone");s.settings.ariaHidden&&(i.attr("aria-hidden",!0),n.attr("aria-hidden",!0)),o.append(i).prepend(n)}s.loader.remove(),m(),"vertical"===s.settings.mode&&(s.settings.adaptiveHeight=!0),s.viewport.height(p()),o.redrawSlider(),s.settings.onSliderLoad.call(o,s.active.index),s.initialized=!0,s.settings.responsive&&t(window).on("resize",U),s.settings.auto&&s.settings.autoStart&&(f()>1||s.settings.autoSlideForOnePage)&&L(),s.settings.ticker&&O(),s.settings.pager&&z(s.settings.startSlide),s.settings.controls&&q(),s.settings.touchEnabled&&!s.settings.ticker&&X(),s.settings.keyboardEnabled&&!s.settings.ticker&&t(document).keydown(B)},p=function(){var e=0,n=t();if("vertical"===s.settings.mode||s.settings.adaptiveHeight)if(s.carousel){var o=1===s.settings.moveSlides?s.active.index:s.active.index*x();for(n=s.children.eq(o),i=1;i<=s.settings.maxSlides-1;i++)n=o+i>=s.children.length?n.add(s.children.eq(i-1)):n.add(s.children.eq(o+i))}else n=s.children.eq(s.active.index);else n=s.children;return"vertical"===s.settings.mode?(n.each(function(i){e+=t(this).outerHeight()}),s.settings.slideMargin>0&&(e+=s.settings.slideMargin*(s.settings.minSlides-1))):e=Math.max.apply(Math,n.map(function(){return t(this).outerHeight(!1)}).get()),"border-box"===s.viewport.css("box-sizing")?e+=parseFloat(s.viewport.css("padding-top"))+parseFloat(s.viewport.css("padding-bottom"))+parseFloat(s.viewport.css("border-top-width"))+parseFloat(s.viewport.css("border-bottom-width")):"padding-box"===s.viewport.css("box-sizing")&&(e+=parseFloat(s.viewport.css("padding-top"))+parseFloat(s.viewport.css("padding-bottom"))),e},u=function(){var t="100%";return s.settings.slideWidth>0&&(t="horizontal"===s.settings.mode?s.settings.maxSlides*s.settings.slideWidth+(s.settings.maxSlides-1)*s.settings.slideMargin:s.settings.slideWidth),t},h=function(){var t=s.settings.slideWidth,e=s.viewport.width();if(0===s.settings.slideWidth||s.settings.slideWidth>e&&!s.carousel||"vertical"===s.settings.mode)t=e;else if(s.settings.maxSlides>1&&"horizontal"===s.settings.mode){if(e>s.maxThreshold)return t;e<s.minThreshold?t=(e-s.settings.slideMargin*(s.settings.minSlides-1))/s.settings.minSlides:s.settings.shrinkItems&&(t=Math.floor((e+s.settings.slideMargin)/Math.ceil((e+s.settings.slideMargin)/(t+s.settings.slideMargin))-s.settings.slideMargin))}return t},v=function(){var t=1,e=null;return"horizontal"===s.settings.mode&&s.settings.slideWidth>0?s.viewport.width()<s.minThreshold?t=s.settings.minSlides:s.viewport.width()>s.maxThreshold?t=s.settings.maxSlides:(e=s.children.first().width()+s.settings.slideMargin,t=Math.floor((s.viewport.width()+s.settings.slideMargin)/e)||1):"vertical"===s.settings.mode&&(t=s.settings.minSlides),t},f=function(){var t=0,e=0,i=0;if(s.settings.moveSlides>0){if(!s.settings.infiniteLoop){for(;e<s.children.length;)++t,e=i+v(),i+=s.settings.moveSlides<=v()?s.settings.moveSlides:v();return i}t=Math.ceil(s.children.length/x())}else t=Math.ceil(s.children.length/v());return t},x=function(){return s.settings.moveSlides>0&&s.settings.moveSlides<=v()?s.settings.moveSlides:v()},m=function(){var t,e,i;s.children.length>s.settings.maxSlides&&s.active.last&&!s.settings.infiniteLoop?"horizontal"===s.settings.mode?(e=s.children.last(),t=e.position(),S(-(t.left-(s.viewport.width()-e.outerWidth())),"reset",0)):"vertical"===s.settings.mode&&(i=s.children.length-s.settings.minSlides,t=s.children.eq(i).position(),S(-t.top,"reset",0)):(t=s.children.eq(s.active.index*x()).position(),s.active.index===f()-1&&(s.active.last=!0),void 0!==t&&("horizontal"===s.settings.mode?S(-t.left,"reset",0):"vertical"===s.settings.mode&&S(-t.top,"reset",0)))},S=function(e,i,n,r){var a,l;s.usingCSS?(l="vertical"===s.settings.mode?"translate3d(0, "+e+"px, 0)":"translate3d("+e+"px, 0, 0)",o.css("-"+s.cssPrefix+"-transition-duration",n/1e3+"s"),"slide"===i?(o.css(s.animProp,l),0!==n?o.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){t(e.target).is(o)&&(o.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),A())}):A()):"reset"===i?o.css(s.animProp,l):"ticker"===i&&(o.css("-"+s.cssPrefix+"-transition-timing-function","linear"),o.css(s.animProp,l),0!==n?o.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){t(e.target).is(o)&&(o.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),S(r.resetValue,"reset",0),F())}):(S(r.resetValue,"reset",0),F()))):(a={},a[s.animProp]=e,"slide"===i?o.animate(a,n,s.settings.easing,function(){A()}):"reset"===i?o.css(s.animProp,e):"ticker"===i&&o.animate(a,n,"linear",function(){S(r.resetValue,"reset",0),F()}))},w=function(){for(var e="",i="",n=f(),o=0;o<n;o++)i="",s.settings.buildPager&&t.isFunction(s.settings.buildPager)||s.settings.pagerCustom?(i=s.settings.buildPager(o),s.pagerEl.addClass("bx-custom-pager")):(i=o+1,s.pagerEl.addClass("bx-default-pager")),e+='<div class="bx-pager-item"><a href="" data-slide-index="'+o+'" class="bx-pager-link">'+i+"</a></div>";s.pagerEl.html(e)},b=function(){s.settings.pagerCustom?s.pagerEl=t(s.settings.pagerCustom):(s.pagerEl=t('<div class="bx-pager" />'),s.settings.pagerSelector?t(s.settings.pagerSelector).html(s.pagerEl):s.controls.el.addClass("bx-has-pager").append(s.pagerEl),w()),s.pagerEl.on("click touchend","a",I)},C=function(){s.controls.next=t('<a class="bx-next" href="">'+s.settings.nextText+"</a>"),s.controls.prev=t('<a class="bx-prev" href="">'+s.settings.prevText+"</a>"),s.controls.next.on("click touchend",P),s.controls.prev.on("click touchend",E),s.settings.nextSelector&&t(s.settings.nextSelector).append(s.controls.next),s.settings.prevSelector&&t(s.settings.prevSelector).append(s.controls.prev),s.settings.nextSelector||s.settings.prevSelector||(s.controls.directionEl=t('<div class="bx-controls-direction" />'),s.controls.directionEl.append(s.controls.prev).append(s.controls.next),s.controls.el.addClass("bx-has-controls-direction").append(s.controls.directionEl))},T=function(){s.controls.start=t('<div class="bx-controls-auto-item"><a class="bx-start" href="">'+s.settings.startText+"</a></div>"),s.controls.stop=t('<div class="bx-controls-auto-item"><a class="bx-stop" href="">'+s.settings.stopText+"</a></div>"),s.controls.autoEl=t('<div class="bx-controls-auto" />'),s.controls.autoEl.on("click",".bx-start",M),s.controls.autoEl.on("click",".bx-stop",y),s.settings.autoControlsCombine?s.controls.autoEl.append(s.controls.start):s.controls.autoEl.append(s.controls.start).append(s.controls.stop),s.settings.autoControlsSelector?t(s.settings.autoControlsSelector).html(s.controls.autoEl):s.controls.el.addClass("bx-has-controls-auto").append(s.controls.autoEl),D(s.settings.autoStart?"stop":"start")},k=function(){s.children.each(function(e){var i=t(this).find("img:first").attr("title");void 0!==i&&(""+i).length&&t(this).append('<div class="bx-caption"><span>'+i+"</span></div>")})},P=function(t){t.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),o.goToNextSlide())},E=function(t){t.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),o.goToPrevSlide())},M=function(t){o.startAuto(),t.preventDefault()},y=function(t){o.stopAuto(),t.preventDefault()},I=function(e){var i,n;e.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),i=t(e.currentTarget),void 0!==i.attr("data-slide-index")&&(n=parseInt(i.attr("data-slide-index")))!==s.active.index&&o.goToSlide(n))},z=function(e){var i=s.children.length;if("short"===s.settings.pagerType)return s.settings.maxSlides>1&&(i=Math.ceil(s.children.length/s.settings.maxSlides)),void s.pagerEl.html(e+1+s.settings.pagerShortSeparator+i);s.pagerEl.find("a").removeClass("active"),s.pagerEl.each(function(i,n){t(n).find("a").eq(e).addClass("active")})},A=function(){if(s.settings.infiniteLoop){var t="";0===s.active.index?t=s.children.eq(0).position():s.active.index===f()-1&&s.carousel?t=s.children.eq((f()-1)*x()).position():s.active.index===s.children.length-1&&(t=s.children.eq(s.children.length-1).position()),t&&("horizontal"===s.settings.mode?S(-t.left,"reset",0):"vertical"===s.settings.mode&&S(-t.top,"reset",0))}s.working=!1,s.settings.onSlideAfter.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)},D=function(t){s.settings.autoControlsCombine?s.controls.autoEl.html(s.controls[t]):(s.controls.autoEl.find("a").removeClass("active"),s.controls.autoEl.find("a:not(.bx-"+t+")").addClass("active"))},q=function(){1===f()?(s.controls.prev.addClass("disabled"),s.controls.next.addClass("disabled")):!s.settings.infiniteLoop&&s.settings.hideControlOnEnd&&(0===s.active.index?(s.controls.prev.addClass("disabled"),s.controls.next.removeClass("disabled")):s.active.index===f()-1?(s.controls.next.addClass("disabled"),s.controls.prev.removeClass("disabled")):(s.controls.prev.removeClass("disabled"),s.controls.next.removeClass("disabled")))},H=function(){o.startAuto()},W=function(){o.stopAuto()},L=function(){s.settings.autoDelay>0?setTimeout(o.startAuto,s.settings.autoDelay):(o.startAuto(),t(window).focus(H).blur(W)),s.settings.autoHover&&o.hover(function(){s.interval&&(o.stopAuto(!0),s.autoPaused=!0)},function(){s.autoPaused&&(o.startAuto(!0),s.autoPaused=null)})},O=function(){var e,i,n,r,a,l,d,c,g=0;"next"===s.settings.autoDirection?o.append(s.children.clone().addClass("bx-clone")):(o.prepend(s.children.clone().addClass("bx-clone")),e=s.children.first().position(),g="horizontal"===s.settings.mode?-e.left:-e.top),S(g,"reset",0),s.settings.pager=!1,s.settings.controls=!1,s.settings.autoControls=!1,s.settings.tickerHover&&(s.usingCSS?(r="horizontal"===s.settings.mode?4:5,s.viewport.hover(function(){i=o.css("-"+s.cssPrefix+"-transform"),n=parseFloat(i.split(",")[r]),S(n,"reset",0)},function(){c=0,s.children.each(function(e){c+="horizontal"===s.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)}),a=s.settings.speed/c,l="horizontal"===s.settings.mode?"left":"top",d=a*(c-Math.abs(parseInt(n))),F(d)})):s.viewport.hover(function(){o.stop()},function(){c=0,s.children.each(function(e){c+="horizontal"===s.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)}),a=s.settings.speed/c,l="horizontal"===s.settings.mode?"left":"top",d=a*(c-Math.abs(parseInt(o.css(l)))),F(d)})),F()},F=function(t){var e,i,n,r=t||s.settings.speed,a={left:0,top:0},l={left:0,top:0};"next"===s.settings.autoDirection?a=o.find(".bx-clone").first().position():l=s.children.first().position(),e="horizontal"===s.settings.mode?-a.left:-a.top,i="horizontal"===s.settings.mode?-l.left:-l.top,n={resetValue:i},S(e,"ticker",r,n)},N=function(e){var i=t(window),n={top:i.scrollTop(),left:i.scrollLeft()},s=e.offset();return n.right=n.left+i.width(),n.bottom=n.top+i.height(),s.right=s.left+e.outerWidth(),s.bottom=s.top+e.outerHeight(),!(n.right<s.left||n.left>s.right||n.bottom<s.top||n.top>s.bottom)},B=function(t){var e=document.activeElement.tagName.toLowerCase();if(null==new RegExp(e,["i"]).exec("input|textarea")&&N(o)){if(39===t.keyCode)return P(t),!1;if(37===t.keyCode)return E(t),!1}},X=function(){s.touch={start:{x:0,y:0},end:{x:0,y:0}},s.viewport.on("touchstart MSPointerDown pointerdown",Y),s.viewport.on("click",".bxslider a",function(t){s.viewport.hasClass("click-disabled")&&(t.preventDefault(),s.viewport.removeClass("click-disabled"))})},Y=function(
vendor: 7,576 bytes, line 105
105t){if("touchstart"===t.type||0===t.button)if(t.preventDefault(),s.controls.el.addClass("disabled"),s.working)s.controls.el.removeClass("disabled");else{s.touch.originalPos=o.position();var e=t.originalEvent,i=void 0!==e.changedTouches?e.changedTouches:[e],n="function"==typeof PointerEvent;if(n&&void 0===e.pointerId)return;s.touch.start.x=i[0].pageX,s.touch.start.y=i[0].pageY,s.viewport.get(0).setPointerCapture&&(s.pointerId=e.pointerId,s.viewport.get(0).setPointerCapture(s.pointerId)),s.originalClickTarget=e.originalTarget||e.target,s.originalClickButton=e.button,s.originalClickButtons=e.buttons,s.originalEventType=e.type,s.hasMove=!1,s.viewport.on("touchmove MSPointerMove pointermove",R),s.viewport.on("touchend MSPointerUp pointerup",Z),s.viewport.on("MSPointerCancel pointercancel",V)}},V=function(t){t.preventDefault(),S(s.touch.originalPos.left,"reset",0),s.controls.el.removeClass("disabled"),s.viewport.off("MSPointerCancel pointercancel",V),s.viewport.off("touchmove MSPointerMove pointermove",R),s.viewport.off("touchend MSPointerUp pointerup",Z),s.viewport.get(0).releasePointerCapture&&s.viewport.get(0).releasePointerCapture(s.pointerId)},R=function(t){var e=t.originalEvent,i=void 0!==e.changedTouches?e.changedTouches:[e],n=Math.abs(i[0].pageX-s.touch.start.x),o=Math.abs(i[0].pageY-s.touch.start.y),r=0,a=0;s.hasMove=!0,3*n>o&&s.settings.preventDefaultSwipeX?t.preventDefault():3*o>n&&s.settings.preventDefaultSwipeY&&t.preventDefault(),"touchmove"!==t.type&&t.preventDefault(),"fade"!==s.settings.mode&&s.settings.oneToOneTouch&&("horizontal"===s.settings.mode?(a=i[0].pageX-s.touch.start.x,r=s.touch.originalPos.left+a):(a=i[0].pageY-s.touch.start.y,r=s.touch.originalPos.top+a),S(r,"reset",0))},Z=function(e){e.preventDefault(),s.viewport.off("touchmove MSPointerMove pointermove",R),s.controls.el.removeClass("disabled");var i=e.originalEvent,n=void 0!==i.changedTouches?i.changedTouches:[i],r=0,a=0;s.touch.end.x=n[0].pageX,s.touch.end.y=n[0].pageY,"fade"===s.settings.mode?(a=Math.abs(s.touch.start.x-s.touch.end.x))>=s.settings.swipeThreshold&&(s.touch.start.x>s.touch.end.x?o.goToNextSlide():o.goToPrevSlide(),o.stopAuto()):("horizontal"===s.settings.mode?(a=s.touch.end.x-s.touch.start.x,r=s.touch.originalPos.left):(a=s.touch.end.y-s.touch.start.y,r=s.touch.originalPos.top),!s.settings.infiniteLoop&&(0===s.active.index&&a>0||s.active.last&&a<0)?S(r,"reset",200):Math.abs(a)>=s.settings.swipeThreshold?(a<0?o.goToNextSlide():o.goToPrevSlide(),o.stopAuto()):S(r,"reset",200)),s.viewport.off("touchend MSPointerUp pointerup",Z),s.viewport.get(0).releasePointerCapture&&s.viewport.get(0).releasePointerCapture(s.pointerId),!1!==s.hasMove||0!==s.originalClickButton&&"touchstart"!==s.originalEventType||t(s.originalClickTarget).trigger({type:"click",button:s.originalClickButton,buttons:s.originalClickButtons})},U=function(e){if(s.initialized)if(s.working)window.setTimeout(U,10);else{var i=t(window).width(),n=t(window).height();r===i&&a===n||(r=i,a=n,o.redrawSlider(),s.settings.onSliderResize.call(o,s.active.index))}},j=function(t){var e=v();s.settings.ariaHidden&&!s.settings.ticker&&(s.children.attr("aria-hidden","true"),s.children.slice(t,t+e).attr("aria-hidden","false"))},Q=function(t){return t<0?s.settings.infiniteLoop?f()-1:s.active.index:t>=f()?s.settings.infiniteLoop?0:s.active.index:t};return o.goToSlide=function(e,i){var n,r,a,l,d=!0,c=0,g={left:0,top:0},u=null;if(s.oldIndex=s.active.index,s.active.index=Q(e),!s.working&&s.active.index!==s.oldIndex){if(s.working=!0,void 0!==(d=s.settings.onSlideBefore.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index))&&!d)return s.active.index=s.oldIndex,void(s.working=!1);"next"===i?s.settings.onSlideNext.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)||(d=!1):"prev"===i&&(s.settings.onSlidePrev.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)||(d=!1)),s.active.last=s.active.index>=f()-1,(s.settings.pager||s.settings.pagerCustom)&&z(s.active.index),s.settings.controls&&q(),"fade"===s.settings.mode?(s.settings.adaptiveHeight&&s.viewport.height()!==p()&&s.viewport.animate({height:p()},s.settings.adaptiveHeightSpeed),s.children.filter(":visible").fadeOut(s.settings.speed).css({zIndex:0}),s.children.eq(s.active.index).css("zIndex",s.settings.slideZIndex+1).fadeIn(s.settings.speed,function(){t(this).css("zIndex",s.settings.slideZIndex),A()})):(s.settings.adaptiveHeight&&s.viewport.height()!==p()&&s.viewport.animate({height:p()},s.settings.adaptiveHeightSpeed),!s.settings.infiniteLoop&&s.carousel&&s.active.last?"horizontal"===s.settings.mode?(u=s.children.eq(s.children.length-1),g=u.position(),c=s.viewport.width()-u.outerWidth()):(n=s.children.length-s.settings.minSlides,g=s.children.eq(n).position()):s.carousel&&s.active.last&&"prev"===i?(r=1===s.settings.moveSlides?s.settings.maxSlides-x():(f()-1)*x()-(s.children.length-s.settings.maxSlides),u=o.children(".bx-clone").eq(r),g=u.position()):"next"===i&&0===s.active.index?(g=o.find("> .bx-clone").eq(s.settings.maxSlides).position(),s.active.last=!1):e>=0&&(l=e*parseInt(x()),g=s.children.eq(l).position()),void 0!==g&&(a="horizontal"===s.settings.mode?-(g.left-c):-g.top,S(a,"slide",s.settings.speed)),s.working=!1),s.settings.ariaHidden&&j(s.active.index*x())}},o.goToNextSlide=function(){if((s.settings.infiniteLoop||!s.active.last)&&!0!==s.working){var t=parseInt(s.active.index)+1;o.goToSlide(t,"next")}},o.goToPrevSlide=function(){if((s.settings.infiniteLoop||0!==s.active.index)&&!0!==s.working){var t=parseInt(s.active.index)-1;o.goToSlide(t,"prev")}},o.startAuto=function(t){s.interval||(s.interval=setInterval(function(){"next"===s.settings.autoDirection?o.goToNextSlide():o.goToPrevSlide()},s.settings.pause),s.settings.onAutoChange.call(o,!0),s.settings.autoControls&&!0!==t&&D("stop"))},o.stopAuto=function(t){s.autoPaused&&(s.autoPaused=!1),s.interval&&(clearInterval(s.interval),s.interval=null,s.settings.onAutoChange.call(o,!1),s.settings.autoControls&&!0!==t&&D("start"))},o.getCurrentSlide=function(){return s.active.index},o.getCurrentSlideElement=function(){return s.children.eq(s.active.index)},o.getSlideElement=function(t){return s.children.eq(t)},o.getSlideCount=function(){return s.children.length},o.isWorking=function(){return s.working},o.redrawSlider=function(){s.children.add(o.find(".bx-clone")).outerWidth(h()),s.viewport.css("height",p()),s.settings.ticker||m(),s.active.last&&(s.active.index=f()-1),s.active.index>=f()&&(s.active.last=!0),s.settings.pager&&!s.settings.pagerCustom&&(w(),z(s.active.index)),s.settings.ariaHidden&&j(s.active.index*x())},o.destroySlider=function(){s.initialized&&(s.initialized=!1,t(".bx-clone",this).remove(),s.children.each(function(){void 0!==t(this).data("origStyle")?t(this).attr("style",t(this).data("origStyle")):t(this).removeAttr("style")}),void 0!==t(this).data("origStyle")?this.attr("style",t(this).data("origStyle")):t(this).removeAttr("style"),t(this).unwrap().unwrap(),s.controls.el&&s.controls.el.remove(),s.controls.next&&s.controls.next.remove(),s.controls.prev&&s.controls.prev.remove(),s.pagerEl&&s.settings.controls&&!s.settings.pagerCustom&&s.pagerEl.remove(),t(".bx-caption",this).remove(),s.controls.autoEl&&s.controls.autoEl.remove(),clearInterval(s.interval),s.settings.responsive&&t(window).off("resize",U),s.settings.keyboardEnabled&&t(document).off("keydown",B),t(this).removeData("bxSlider"),t(window).off("blur",W).off("focus",H))},o.reloadSlider=function(e){void 0!==e&&(n=e),o.destroySlider(),l(),t(o).data("bxSlider",this)},l(),t(o).data("bxSlider",this),this}}}(jQuery);
vendor: 36,085 bytes, lines 106-112
106/** 107 * Owl Carousel v2.3.4 108 * Copyright 2013-2018 David Deutsch 109 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 110 */ 111!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,checkVisibility:!0,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",slideTransition:"",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initializeStage=function(){this.$stage=this.$element.find("."+this.settings.stageClass),this.$stage.length||(this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+">",{class:this.settings.stageClass}).wrap(a("<div/>",{class:this.settings.stageOuterClass})),this.$element.append(this.$stage.parent()))},e.prototype.initializeItems=function(){var b=this.$element.find(".owl-item");if(b.length)return this._items=b.get().map(function(b){return a(b)}),this._mergers=this._items.map(function(){return 1}),void this.refresh();this.replace(this.$element.children().not(this.$stage.parent())),this.isVisible()?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass)},e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var a,b,c;a=this.$element.find("img"),b=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,c=this.$element.children(b).width(),a.length&&c<=0&&this.preloadAutoWidthImages(a)}this.initializeStage(),this.initializeItems(),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.isVisible=function(){return!this.settings.checkVisibility||this.$element.is(":visible")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.isVisible()&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var e=-1,f=30,g=this.width(),h=this.coordinates();return this.settings.freeDrag||a.each(h,a.proxy(function(a,i){return"left"===c&&b>i-f&&b<i+f?e=a:"right"===c&&b>i-g-f&&b<i-g+f?e=a+1:this.op(b,"<",i)&&this.op(b,">",h[a+1]!==d?h[a+1]:i-g)&&(e="left"===c?a+1:a),-1===e},this)),this.settings.loop||(this.op(b,">",h[this.minimum()])?e=b=this.minimum():this.op(b,"<",h[this.maximum()])&&(e=b=this.maximum())),e},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"+(this.settings.slideTransition?" "+this.settings.slideTransition:"")}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){(a=this.normalize(a))!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){if(b=this._items.length)for(c=this._items[--b].width(),d=this.$element.width();b--&&!((c+=this._items[b].width()+this.settings.margin)>d););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2==0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,(d=((a-h)%g+g)%g+h)!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.isVisible()&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){(a=this.normalize(a,!0))!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),!1!==this.settings.responsive&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.isVisible(),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.isVisible()!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type)){var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&-1*e||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);for(c.lazyLoadEager>0&&(e+=c.lazyLoadEager,c.loop&&(g-=c.lazyLoadEager,e++));f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1,lazyLoadEager:0},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src")||f.attr("data-srcset");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):f.is("source")?f.one("load.owl.lazy",a.proxy(function(){this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("srcset",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(c){this._core=c,this._previousHeight=null,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"===a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._intervalId=null;var d=this;a(b).on("load",function(){d._core.settings.autoHeight&&d.update()}),a(b).resize(function(){d._core.settings.autoHeight&&(null!=d._intervalId&&clearTimeout(d._intervalId),d._intervalId=setTimeout(function(){d.update()},250))})};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.settings.lazyLoad,e=this._core.$stage.children().toArray().slice(b,c),f=[],g=0;a.each(e,function(b,c){f.push(a(c).height())}),g=Math.max.apply(null,f),g<=1&&d&&this._previousHeight&&(g=this._previousHeight),this._previousHeight=g,this._core.$stage.parent().height(g).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?"width:"+c.width+"px;height:"+c.height+"px;":"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(c){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?a("<div/>",{class:"owl-video-tn "+j,srcType:c}):a("<div/>",{class:"owl-video-tn",style:"opacity:1;background-image:url("+c+")"}),b.after(d),b.after(e)};if(b.wrap(a("<div/>",{class:"owl-video-wrapper",style:g})),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),c=a('<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>'),c.attr("height",h),c.attr("width",g),"youtube"===f.type?c.attr("src","//www.youtube.com/embed/"+f.id+"?autoplay=1&rel=0&v="+f.id):"vimeo"===f.type?c.attr("src","//player.vimeo.com/video/"+f.id+"?autoplay=1"):"vzaar"===f.type&&c.attr("src","//view.vzaar.com/"+f.id+"/player?autoplay=true"),a(c).wrap('<div class="owl-video-frame" />').insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1, 112animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to}
vendor: 5,569 bytes, line 112
112,this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['<span aria-label="Previous">‹</span>','<span aria-label="Next">›</span>'],navSpeed:!1,navElement:'button type="button" role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a('<button role="button">').addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","button",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d,e;e=this._core.settings;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)"$relative"===b&&e.navContainer?this._controls[b].html(""):this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(
112window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); 113$(document).ready( function () { 114 // news accordion 115 //$('.news .accordion:first-child').addClass('acc_open'); 116 $('.homepage .news .accordion').children().hide(); 117 //$('.news .accordion:first-child').children().show(); 118 119 $('.homepage .news-list-view .article').each(function(){ 120 var articleTitle = $(this).find('h3 a span').text(); 121 var accordionLink = $('<div class="articleHeader">' + articleTitle + '</div>'); 122 123 if (!$(this).hasClass('acc_open')) { 124 $(this).append(articleTitle); 125 } else 126 $(this).html($(this).children()); 127 128 $(this).on('click', function(event){ 129 if (!$(this).hasClass('acc_open')) { 130 $('.news .acc_open').children().slideToggle(200); 131 $('.news .acc_open').append($('.news .acc_open').find('h3 a span').text()); 132 $('.news .accordion').removeClass('acc_open'); 133 $(this).children().slideToggle(200); 134 $(this).addClass('acc_open'); 135 $(this).html($(this).children()); 136 } 137 }); 138 }); 139}); 140$(document).ready( function () { 141 142 document.documentElement.style.setProperty('--scrollbar-width', (window.innerWidth - document.documentElement.clientWidth) + "px"); 143 144 $('.owl-carousel').owlCarousel({ 145 nav: true, 146 responsive : { 147 0: { 148 items: 1, 149 margin: 0 150 }, 151 700: { 152 items: 2, 153 margin: 40, 154 }, 155 1024: { 156 items: 4, 157 margin: 40, 158 } 159 } 160 }); 161 162 // tables -> responsive tables 163 if( $('table.contenttable').length > 0 ){ 164 $('table.contenttable').addClass('table').wrap('<div class="table-responsive" />'); 165 } 166 167 // mobile navigation 168 $('#mobile-nav-trigger').click(function(){ 169 if ($('.mobile-nav').hasClass('isOpen')){ 170 $('.mobile-nav').slideUp().removeClass('isOpen'); 171 }else{ 172 $('.mobile-nav').slideDown().addClass('isOpen'); 173 } 174 }); 175 176 // main navigation 177 $('.mobile-nav > ul > li').each( function () { 178 if( $(this).find('ul').length > 0 ){ 179 $(this).append('<span class="toggle-subnavigation" />'); 180 } 181 }); 182 183 // sub navigation 2nd level 184 $('.mobile-nav .hidden-desktop > ul > li').each( function () { 185 if( $(this).find('ul').length > 0 ){ 186 $(this).append('<span class="toggle-subnavigation" />'); 187 } 188 }); 189 190 // sub navigation 3rd level 191 $('.mobile-nav ul > li > ul > li').each( function () { 192 if( $(this).find('ul').length > 0 ){ 193 $(this).append('<span class="toggle-subsubnavigation" />'); 194 } 195 }); 196 197 // sub navigation 4th level 198 $('.mobile-nav ul > li > ul > li > ul > li').each( function () { 199 if( $(this).find('ul').length > 0 ){ 200 $(this).find('.toggle-subsubnavigation').remove(); 201 $(this).append('<span class="toggle-subsubsubnavigation" />'); 202 } 203 }); 204 205/* // side nav 206 $('#side-nav > ul > li').each( function () { 207 if( $(this).find('ul').length > 0 ){ 208 $(this).append('<span class="toggle-subnavigation" />'); 209 $(this).find('ul').slideUp(0); 210 if ($(this).hasClass('act')) { 211 $(this).find('ul').slideDown(0); 212 } 213 } 214 }); 215 216 // toogle sidenav 217 $('#side-nav .toggle-subnavigation').click( function () { 218 219 // slideUp all open subnav's 220 $('#side-nav ul li ul').slideUp(); 221 222 // remove/add .open 223 if( $(this).hasClass('open') ){ 224 $(this).removeClass('open'); 225 }else{ 226 $('#side-nav .toggle-subnavigation').removeClass('open'); 227 $(this).addClass('open'); 228 } 229 230 // subnav slideUp/slideDown 231 var $subnavli = $(this).parent(); 232 233 234 if($subnavli.find('ul').is(':visible')){ 235 $subnavli.find('ul').slideUp(); 236 }else{ 237 $subnavli.find('ul:first').slideDown(); 238 } 239 }); */ 240 241 // toogle subnav 242 $('#mainNavigation .toggle-subnavigation').click( function () { 243 244 // slideUp all open subnav's 245 $('#mainNavigation ul li ul').slideUp(); 246 247 // remove/add .open 248 if( $(this).hasClass('open') ){ 249 $(this).removeClass('open'); 250 }else{ 251 $('#mainNavigation .toggle-subnavigation').removeClass('open'); 252 $(this).addClass('open'); 253 } 254 255 // subnav slideUp/slideDown 256 var $subnavli = $(this).parent(); 257 258 259 if($subnavli.find('ul').is(':visible')){ 260 $subnavli.find('ul').slideUp(); 261 }else{ 262 $subnavli.find('ul:first').slideDown(); 263 } 264 }); 265 266 // toogle subnav 3rd level 267 $('#mainNavigation .toggle-subsubnavigation').click( function () { 268 269 // slideUp all open subnav's 270 $('#mainNavigation ul li ul li ul').slideUp(); 271 272 // remove/add .open 273 if( $(this).hasClass('open') ){ 274 $(this).removeClass('open'); 275 }else{ 276 $('#mainNavigation .toggle-subsubnavigation').removeClass('open'); 277 $(this).addClass('open'); 278 } 279 280 // subnav slideUp/slideDown 281 var $subnavli = $(this).parent(); 282 283 if($subnavli.find('> ul').is(':visible')){ 284 $subnavli.find('> ul').slideUp(); 285 }else{ 286 $subnavli.find('> ul').slideDown(); 287 } 288 }); 289 290 // toogle subnav 4th level 291 $('#mainNavigation .toggle-subsubsubnavigation').click( function () { 292 293 // slideUp all open subnav's 294 $('#mainNavigation ul li ul li ul li ul').slideUp(); 295 296 // remove/add .open 297 if( $(this).hasClass('open') ){ 298 $(this).removeClass('open'); 299 }else{ 300 $('#mainNavigation .toggle-subsubsubnavigation').removeClass('open'); 301 $(this).addClass('open'); 302 } 303 304 // subnav slideUp/slideDown 305 var $subnavli = $(this).parent(); 306 307 if($subnavli.find('ul').is(':visible')){ 308 $subnavli.find('ul').slideUp(); 309 }else{ 310 $subnavli.find('ul').slideDown(); 311 } 312 }); 313 314 315 316 // dce accordion 317 318 $('.dce-accordion').not('.active').siblings().hide(); 319 $('.dce-accordion').click( function() { 320 if ( $(this).hasClass('active') ) { 321 $(this).siblings().slideToggle(); 322 $(this).removeClass('active'); 323 } else { 324 $('.active').siblings().slideToggle(); 325 $('.active').removeClass('active'); 326 // $('html, body').animate({ scrollTop: 0 }, 'slow'); 327 $(this).siblings().slideToggle(); 328 $(this).addClass('active'); 329 }; 330 return false; 331 }); 332 333 stickyNav(); 334}); 335 336//Open Imagemap Popups 337function openPopup(maphref, winname) { 338 popup = window.open(maphref, winname,'scrollbars=1, width=550, height=350'); 339 popup.focus(); 340} 341 342function stickyNav() { 343 $(window).scroll(function(){ 344 if ($(window).width() > 970) { 345 if ( $(this).scrollTop() > 127) { 346 $('.main-header').addClass('sticky'); 347 $('.keyvis').css('padding-top','127px'); 348 } else { 349 $('.main-header').removeClass('sticky'); 350 $('.keyvis').css('padding-top','0px'); 351 } 352 } else { 353 if ( $(this).scrollTop() > 60) { 354 $('.main-header').addClass('sticky'); 355 $('.keyvis').css('padding-top','60px'); 356 } else { 357 $('.main-header').removeClass('sticky'); 358 $('.keyvis').css('padding-top','0px'); 359 } 360 } 361 });
362} 363/** 364 * released under MIT license by Insites 365 * https://github.com/insites/cookieconsen 366 * small changes by Die Medialen 367 */ 368 369function isTrackingAllowed() { 370 if (window.cookieconsent) return cookieconsent.utils.isTrackingAllowed(); 371 else return false; 372} 373 374(function (cc) { 375 // stop from running again, if accidently included more than once. 376 if (cc.hasInitialised) return; 377 378 var util = { 379 // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex 380 escapeRegExp: function (str) { 381 return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); 382 }, 383 384 hasClass: function (element, selector) { 385 var s = ' '; 386 return element.nodeType === 1 && 387 (s + element.className + s).replace(/[\n\t]/g, s).indexOf(s + selector + s) >= 0; 388 }, 389 390 addClass: function (element, className) { 391 element.className += ' ' + className; 392 }, 393 394 removeClass: function (element, className) { 395 var regex = new RegExp('\\b' + this.escapeRegExp(className) + '\\b'); 396 element.className = element.className.replace(regex, ''); 397 }, 398 399 interpolateString: function (str, callback) { 400 var marker = /{{([a-z][a-z0-9\-_]*)}}/ig; 401 return str.replace(marker, function (matches) { 402 return callback(arguments[1]) || ''; 403 }) 404 }, 405 406 getCookie: function (name) { 407 var value = '; ' + document.cookie; 408 var parts = value.split('; ' + name + '='); 409 return parts.length != 2 ? 410 undefined : parts.pop().split(';').shift(); 411 }, 412 413 setCookie: function (name, value, expiryDays, domain, path) { 414 var exdate = new Date(); 415 exdate.setDate(exdate.getDate() + (expiryDays || 365)); 416 417 var cookie = [ 418 name + '=' + value, 419 'expires=' + exdate.toUTCString(), 420 'path=' + (path || '/') 421 ]; 422 423 if (domain) { 424 cookie.push('domain=' + domain); 425 } 426 document.cookie = cookie.join(';'); 427 }, 428 429 // only used for extending the initial options 430 deepExtend: function (target, source) { 431 for (var prop in source) { 432 if (source.hasOwnProperty(prop)) { 433 if (prop in target && this.isPlainObject(target[prop]) && this.isPlainObject(source[prop])) { 434 this.deepExtend(target[prop], source[prop]); 435 } else { 436 target[prop] = source[prop]; 437 } 438 } 439 } 440 return target; 441 } 442 , 443 444 // only used for throttling the 'mousemove' event (used for animating the revoke button when `animateRevokable` is true) 445 throttle: function (callback, limit) { 446 var wait = false; 447 return function () { 448 if (!wait) { 449 callback.apply(this, arguments); 450 wait = true; 451 setTimeout(function () { 452 wait = false; 453 }, limit); 454 } 455 } 456 } 457 , 458 459 // only used for hashing json objects (used for hash mapping palette objects, used when custom colours are passed through JavaScript) 460 hash: function (str) { 461 var hash = 0, 462 i, chr, len; 463 if (str.length === 0) return hash; 464 for (i = 0, len = str.length; i < len; ++i) { 465 chr = str.charCodeAt(i); 466 hash = ((hash << 5) - hash) + chr; 467 hash |= 0; 468 } 469 return hash; 470 } 471 , 472 473 normaliseHex: function (hex) { 474 if (hex[0] == '#') { 475 hex = hex.substr(1); 476 } 477 if (hex.length == 3) { 478 hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; 479 } 480 return hex; 481 } 482 , 483 484 // used to get text colors if not set 485 getContrast: function (hex) { 486 hex = this.normaliseHex(hex); 487 var r = parseInt(hex.substr(0, 2), 16); 488 var g = parseInt(hex.substr(2, 2), 16); 489 var b = parseInt(hex.substr(4, 2), 16); 490 var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; 491 return (yiq >= 128) ? '#000' : '#fff'; 492 } 493 , 494 495 // used to change color on highlight 496 getLuminance: function (hex) { 497 var num = parseInt(this.normaliseHex(hex), 16), 498 amt = 38, 499 R = (num >> 16) + amt, 500 B = (num >> 8 & 0x00FF) + amt, 501 G = (num & 0x0000FF) + amt; 502 var newColour = (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (B < 255 ? B < 1 ? 0 : B : 255) * 0x100 + (G < 255 ? G < 1 ? 0 : G : 255)).toString(16).slice(1); 503 return '#' + newColour; 504 } 505 , 506 507 isMobile: function () { 508 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 509 } 510 , 511 512 isPlainObject: function (obj) { 513 // The code "typeof obj === 'object' && obj !== null" allows Array objects 514 return typeof obj === 'object' && obj !== null && obj.constructor == Object; 515 } 516 , 517 isTrackingAllowed: function() { 518 var cookieValue = util.getCookie("tracking_cookie_consent"); 519 return (navigator.doNotTrack != 1) && (["dismiss", "allow"].includes(cookieValue)); 520 } 521 } 522 ; 523 524 // valid cookie values 525 cc.status = { 526 deny: 'deny', 527 allow: 'allow',
528 dismiss: 'dismiss' 529 }; 530 531 // detects the `transitionend` event name 532 cc.transitionEnd = (function () { 533 var el = document.createElement('div'); 534 var trans = { 535 t: "transitionend", 536 OT: "oTransitionEnd", 537 msT: "MSTransitionEnd", 538 MozT: "transitionend", 539 WebkitT: "webkitTransitionEnd", 540 }; 541 542 for (var prefix in trans) { 543 if (trans.hasOwnProperty(prefix) && typeof el.style[prefix + 'ransition'] != 'undefined') { 544 return trans[prefix]; 545 } 546 } 547 return ''; 548 }()); 549 550 cc.hasTransition = !!cc.transitionEnd; 551 552 // array of valid regexp escaped statuses 553 var __allowedStatuses = Object.keys(cc.status).map(util.escapeRegExp); 554 555 // contains references to the custom <style> tags 556 cc.customStyles = {}; 557 558 cc.Popup = (function () { 559 560 var defaultOptions = { 561 562 // if false, this prevents the popup from showing (useful for giving to control to another piece of code) 563 enabled: true, 564 565 // optional (expecting a HTML element) if passed, the popup is appended to this element. default is `document.body` 566 container: null, 567 568 // defaults cookie options - it is RECOMMENDED to set these values to correspond with your server 569 cookie: { 570 // This is the name of this cookie - you can ignore this 571 name: 'tracking_cookie_consent', 572 573 // This is the url path that the cookie 'name' belongs to. The cookie can only be read at this location 574 path: '/', 575 576 // This is the domain that the cookie 'name' belongs to. The cookie can only be read on this domain. 577 // - Guide to cookie domains - http://erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains/ 578 domain: '', 579 580 // The cookies expire date, specified in days (specify -1 for no expiry) 581 expiryDays: 365, 582 }, 583 584 // these callback hooks are called at certain points in the program execution 585 onPopupOpen: function () { 586 attachCheckboxHandler('cc-tracking-checkbox', this); 587 }, 588 onPopupClose: function () { 589 }, 590 onInitialise: function (status) { 591 }, 592 onStatusChange: function (status, chosenBefore) { 593 }, 594 onRevokeChoice: function () { 595 }, 596 // each item defines the inner text for the element that it references 597 content: { 598 header: 'Cookies used on the website!', 599 message: 'This website uses cookies to ensure you get the best experience on our website.', 600 dismiss: 'OK', 601 allow: 'OK', 602 deny: 'Decline', 603 link: 'Learn more',
604 href: 'http://cookiesandyou.com', 605 close: '❌', 606 optout_text: 'Von anonymer Nutzeranalyse abmelden', 607 checkbox_text: 'Tracking unterbinden', 608 dnt_text: 'Do Not Track ist in Ihrem Browser gesetzt' 609 }, 610 611 // This is the HTML for the elements above. The string {{header}} will be replaced with the equivalent text below. 612 // You can remove "{{header}}" and write the content directly inside the HTML if you want. 613 // 614 // - ARIA rules suggest to ensure controls are tabbable (so the browser can find the first control), 615 // and to set the focus to the first interactive control (http://w3c.github.io/aria-in-html/) 616 elements: { 617 header: '<span class="cc-header">{{header}}</span> ', 618 message: '<span id="cookieconsent:desc" class="cc-message">{{message}}</span>', 619 messagelink: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="_blank">{{link}}</a></span>', 620 dismiss: '<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>', 621 allow: '<a aria-label="allow cookies" role=button tabindex="0" class="cc-btn cc-allow">{{allow}}</a>', 622 deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>', 623 link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a>', 624 close: '<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>', 625 slideout: '<div class="slideout"><input type="checkbox" name="cc-tracking-checkbox" id="cc-tracking-checkbox" /><label for="cc-tracking-checkbox">{{checkbox_text}}</label></div>', 626 messageoptout: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="_blank">{{link}}</a><span class="cc-link cookieaccordion">{{optout_text}}</span></span>' 627 //compliance: compliance is also an element, but it is generated by the application, depending on `type` below 628 }, 629 630 // The placeholders {{classes}} and {{children}} both get replaced during initialisation: 631 // - {{classes}} is where additional classes get added 632 // - {{children}} is where the HTML children are placed 633 window: '<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>', 634 635 // This is the html for the revoke button. This only shows up after the user has selected their level of consent 636 // It can be enabled of disabled using the `revokable` option 637 revokeBtn: '<div class="cc-revoke {{classes}}">Cookie Policy</div>', 638 639 // define types of 'compliance' here. '{{value}}' strings in here are linked to `elements` 640 compliance: { 641 'info': '<div class="cc-compliance">{{dismiss}}</div>', 642 'opt-in': '<div class="cc-compliance cc-highlight">{{dismiss}}{{allow}}</div>', 643 'opt-out': '<div class="cc-compliance cc-highlight">{{dismiss}}{{deny}}</div>', 644 }, 645 646 // select your type of popup here 647 type: 'info', // refers to `compliance` (in other words, the buttons that are displayed) 648 649 // define layout layouts here 650 layouts: { 651 // the 'block' layout tend to be for square floating popups 652 'basic': '{{messagelink}}{{compliance}}', 653 'basic-slideout': '{{messageoptout}}{{compliance}}{{slideout}}', 654 'basic-close': '{{messagelink}}{{compliance}}{{close}}', 655 'basic-header': '{{header}}{{message}}{{link}}{{compliance}}', 656 657 // add a custom layout here, then add some new css with the class '.cc-layout-my-cool-layout' 658 //'my-cool-layout': '<div class="my-special-layout">{{message}}{{compliance}}</div>{{close}}', 659 }, 660 661 // default layout (see above) 662 layout: 'basic-slideout', 663 664 // this refers to the popup windows position. we currently support: 665 // - banner positions: top, bottom 666 // - floating positions: top-left, top-right, bottom-left, bottom-right 667 // 668 // adds a class `cc-floating` or `cc-banner` which helps when styling 669 position: 'bottom', // default position is 'bottom' 670 671 // Available styles 672 // -block (default, no extra classes) 673 // -edgeless 674 // -classic 675 // use your own style name and use `.cc-theme-STYLENAME` class in CSS to edit. 676 // Note: style "wire" is used for the configurator, but has no CSS styles of its own, only palette is used. 677 theme: 'block', 678 679 // The popup is `fixed` by default, but if you want it to be static (inline with the page content), set this to fal
679se 680 // Note: by default, we animate the height of the popup from 0 to full size 681 static: false, 682 683 // if you want custom colours, pass them in here. this object should look like this. 684 // ideally, any custom colours/themes should be created in a separate style sheet, as this is more efficient. 685 // { 686 // popup: {background: '#000000', text: '#fff', link: '#fff'}, 687 // button: {background: 'transparent', border: '#f8e71c', text: '#f8e71c'}, 688 // highlight: {background: '#f8e71c', border: '#f8e71c', text: '#000000'}, 689 // } 690 // `highlight` is optional and extends `button`. if it exists, it will apply to the first button 691 // only background needs to be defined for every element. if not set, other colors can be calculated from it 692 palette: null, 693 694 // Some countries REQUIRE that a user can change their mind. You can configure this yourself. 695 // Most of the time this should be false, but the `cookieconsent.law` can change this to `true` if it detects that it should 696 revokable: false, 697 698 // if true, the revokable button will tranlate in and out 699 animateRevokable: true, 700 701 // used to disable link on existing layouts 702 // replaces element messagelink with message and removes content of link 703 showLink: true, 704 705 // set value as scroll range to enable 706 dismissOnScroll: false, 707 708 // set value as time in milliseconds to autodismiss after set time 709 dismissOnTimeout: false, 710 711 // The application automatically decide whether the popup should open. 712 // Set this to false to prevent this from happening and to allow you to control the behaviour yourself 713 autoOpen: true, 714 715 // By default the created HTML is automatically appended to the container (which defaults to <body>). You can prevent this behaviour 716 // by setting this to false, but if you do, you must attach the `element` yourself, which is a public property of the popup instance: 717 // 718 // var instance = cookieconsent.factory(options); 719 // document.body.appendChild(instance.element); 720 // 721 autoAttach: true, 722 723 // simple whitelist/blacklist for pages. specify page by: 724 // - using a string : '/index.html' (matches '/index.html' exactly) OR 725 // - using RegExp : /\/page_[\d]+\.html/ (matched '/page_1.html' and '/page_2.html' etc) 726 whitelistPage: [], 727 blacklistPage: [], 728 729 // If this is defined, then it is used as the inner html instead of layout. This allows for ultimate customisation. 730 // Be sure to use the classes `cc-btn` and `cc-allow`, `cc-deny` or `cc-dismiss`. They enable the app to register click 731 // handlers. You can use other pre-existing classes too. See `src/styles` folder. 732 overrideHTML: null, 733 }; 734 735 function CookiePopup() { 736 this.initialise.apply(this, arguments); 737 $('.cc-window .cc-message .cookieaccordion').on('click', function () { 738 $('.cc-window .slideout').slideToggle(); 739 }); 740 } 741 742 CookiePopup.prototype.initialise = function (options) { 743 if (this.options) { 744 this.destroy(); // already rendered 745 } 746 747 // set options back to default options 748 util.deepExtend(this.options = {}, defaultOptions); 749 750 // merge in user options 751 if (util.isPlainObject(options)) { 752 util.deepExtend(this.options, options); 753 } 754 755 // returns true if `onComplete` was called 756 if (checkCallbackHooks.call(this)) { 757 // user has already answered 758 this.options.enabled = false; 759 } 760 761 // apply blacklist / whitelist
762 if (arrayContainsMatches(this.options.blacklistPage, location.pathname)) { 763 this.options.enabled = false; 764 } 765 if (arrayContainsMatches(this.options.whitelistPage, location.pathname)) { 766 this.options.enabled = true; 767 } 768 769 // the full markup either contains the wrapper or it does not (for multiple instances) 770 var cookiePopup = this.options.window 771 .replace('{{classes}}', getPopupClasses.call(this).join(' ')) 772 .replace('{{children}}', getPopupInnerMarkup.call(this)); 773 774 // if user passes html, use it instead 775 var customHTML = this.options.overrideHTML; 776 if (typeof customHTML == 'string' && customHTML.length) { 777 cookiePopup = customHTML; 778 } 779 780 // if static, we need to grow the element from 0 height so it doesn't jump the page 781 // content. we wrap an element around it which will mask the hidden content 782 if (this.options.static) { 783 // `grower` is a wrapper div with a hidden overflow whose height is animated 784 var wrapper = appendMarkup.call(this, '<div class="cc-grower">' + cookiePopup + '</div>'); 785 786 wrapper.style.display = ''; // set it to visible (because appendMarkup hides it) 787 this.element = wrapper.firstChild; // get the `element` reference from the wrapper 788 this.element.style.display = 'none'; 789 util.addClass(this.element, 'cc-invisible'); 790 } else { 791 this.element = appendMarkup.call(this, cookiePopup); 792 } 793 794 applyAutoDismiss.call(this); 795 796 applyRevokeButton.call(this); 797 798 if (this.options.autoOpen) { 799 this.autoOpen(); 800 } 801 }; 802 803 CookiePopup.prototype.destroy = function () { 804 if (this.onButtonClick && this.element) { 805 this.element.removeEventListener('click', this.onButtonClick); 806 this.onButtonClick = null; 807 } 808 809 if (this.dismissTimeout) { 810 clearTimeout(this.dismissTimeout); 811 this.dismissTimeout = null; 812 } 813 814 if (this.onWindowScroll) { 815 window.removeEventListener('scroll', this.onWindowScroll); 816 this.onWindowScroll = null; 817 } 818 819 if (this.onMouseMove) { 820 window.removeEventListener('mousemove', this.onMouseMove); 821 this.onMouseMove = null; 822 } 823 824 if (this.element && this.element.parentNode) { 825 this.element.parentNode.removeChild(this.element); 826 } 827 this.element = null; 828 829 if (this.revokeBtn && this.revokeBtn.parentNode) { 830 this.revokeBtn.parentNode.removeChild(this.revokeBtn); 831 } 832 this.revokeBtn = null; 833 834 removeCustomStyle(this.options.palette); 835 this.options = null; 836 }; 837 838 CookiePopup.prototype.open = function (callback) { 839 if (!this.element) return; 840 841 if (!this.isOpen()) { 842 if (cc.hasTransition) { 843 this.fadeIn(); 844 } else { 845 this.element.style.display = ''; 846 } 847 848 if (this.options.revokable) { 849 this.toggleRevokeButton(); 850 } 851 this.options.onPopupOpen.call(this); 852 } 853 854 return this; 855 }; 856 CookiePopup.prototype.close = function (showRevoke) { 857 if (!this.element) return; 858 859 if (this.isOpen()) { 860 if (cc.hasTransition) { 861 this.fadeOut(); 862 } else { 863 this.element.style.display = 'none'; 864 } 865 866 if (showRevoke && this.options.revokable) { 867 this.toggleRevokeButton(true); 868 } 869 this.options.onPopupClose.call(this); 870 } 871 872 return this; 873 }; 874
875 CookiePopup.prototype.fadeIn = function () { 876 var el = this.element; 877 878 if (!cc.hasTransition || !el) 879 return; 880 881 // This should always be called AFTER fadeOut (which is governed by the 'transitionend' event). 882 // 'transitionend' isn't all that reliable, so, if we try and fadeIn before 'transitionend' has 883 // has a chance to run, then we run it ourselves 884 if (this.afterTransition) { 885 afterFadeOut.call(this, el) 886 } 887 888 if (util.hasClass(el, 'cc-invisible')) { 889 el.style.display = ''; 890 891 if (this.options.static) { 892 var height = this.element.clientHeight; 893 this.element.parentNode.style.maxHeight = '100%'; 894 } 895 896 var fadeInTimeout = 20; // (ms) DO NOT MAKE THIS VALUE SMALLER. See below 897 898 // Although most browsers can handle values less than 20ms, it should remain above this value. 899 // This is because we are waiting for a "browser redraw" before we remove the 'cc-invisible' class. 900 // If the class is remvoed before a redraw could happen, then the fadeIn effect WILL NOT work, and 901 // the popup will appear from nothing. Therefore we MUST allow enough time for the browser to do 902 // its thing. The actually difference between using 0 and 20 in a set timeout is neglegible anyway 903 this.openingTimeout = setTimeout(afterFadeIn.bind(this, el), fadeInTimeout); 904 } 905 }; 906 907 CookiePopup.prototype.fadeOut = function () { 908 var el = this.element; 909 910 if (!cc.hasTransition || !el) 911 return; 912 913 if (this.openingTimeout) { 914 clearTimeout(this.openingTimeout); 915 afterFadeIn.bind(this, el); 916 } 917 918 if (!util.hasClass(el, 'cc-invisible')) { 919 if (this.options.static) { 920 this.element.parentNode.style.maxHeight = ''; 921 } 922 923 this.afterTransition = afterFadeOut.bind(this, el); 924 el.addEventListener(cc.transitionEnd, this.afterTransition); 925 926 util.addClass(el, 'cc-invisible'); 927 } 928 }; 929 930 CookiePopup.prototype.isOpen = function () { 931 return this.element && this.element.style.display == '' && (cc.hasTransition ? !util.hasClass(this.element, 'cc-invisible') : true); 932 }; 933 934 CookiePopup.prototype.toggleRevokeButton = function (show) { 935 if (this.revokeBtn) this.revokeBtn.style.display = show ? '' : 'none'; 936 }; 937 938 CookiePopup.prototype.revokeChoice = function (preventOpen) { 939 this.options.enabled = true; 940 this.clearStatus(); 941 942 this.options.onRevokeChoice.call(this); 943 944 if (!preventOpen) { 945 this.autoOpen(); 946 } 947 }; 948 949 // returns true if the cookie has a valid value 950 CookiePopup.prototype.hasAnswered = function (options) { 951 return Object.keys(cc.status).indexOf(this.getStatus()) >= 0; 952 }; 953 954 // returns true if the cookie indicates that consent has been given 955 CookiePopup.prototype.hasConsented = function (options) { 956 var val = this.getStatus(); 957 return val == cc.status.allow || val == cc.status.dismiss; 958 }; 959 960 // opens the popup if no answer has been given 961 CookiePopup.prototype.autoOpen = function (options) { 962 !this.hasAnswered() && this.options.enabled && this.open(); 963 }; 964 965 CookiePopup.prototype.setStatus = function (status) { 966 var c = this.options.cookie; 967 var value = util.getCookie(c.name); 968 var chosenBefore = Object.keys(cc.status).indexOf(value) >= 0; 969 970 // if `status` is valid 971 if (Object.keys(cc.status).indexOf(status) >= 0) { 972 973 util.setCookie(c.name, status, c.expiryDays, c.domain, c.path); 974 975 this.options.onStatusChange.call(this, status, chosenBefore); 976 } else { 977 this.clearStatus();
978 } 979 }; 980 981 CookiePopup.prototype.getStatus = function () { 982 return util.getCookie(this.options.cookie.name); 983 }; 984 985 CookiePopup.prototype.clearStatus = function () { 986 var c = this.options.cookie; 987 util.setCookie(c.name, '', -1, c.domain, c.path); 988 }; 989 990 // This needs to be called after 'fadeIn'. This is the code that actually causes the fadeIn to work 991 // There is a good reason why it's called in a timeout. Read 'fadeIn'; 992 function afterFadeIn(el) { 993 this.openingTimeout = null; 994 util.removeClass(el, 'cc-invisible'); 995 } 996 997 // This is called on 'transitionend' (only on the transition of the fadeOut). That's because after we've faded out, we need to 998 // set the display to 'none' (so there aren't annoying invisible popups all over the page). If for whenever reason this function 999 // is not called (lack of support), the open/close mechanism will still work. 1000 function afterFadeOut(el) { 1001 el.style.display = 'none'; // after close and before open, the display should be none 1002 el.removeEventListener(cc.transitionEnd, this.afterTransition); 1003 this.afterTransition = null; 1004 } 1005 1006 // this function calls the `onComplete` hook and returns true (if needed) and returns false otherwise 1007 function checkCallbackHooks() { 1008 var complete = this.options.onInitialise.bind(this); 1009 1010 if (!window.navigator.cookieEnabled) { 1011 complete(cc.status.deny); 1012 return true; 1013 } 1014 1015 if (window.CookiesOK || window.navigator.CookiesOK) { 1016 complete(cc.status.allow); 1017 return true; 1018 } 1019 1020 var allowed = Object.keys(cc.status); 1021 var answer = this.getStatus(); 1022 var match = allowed.indexOf(answer) >= 0; 1023 1024 if (match) { 1025 complete(answer); 1026 } 1027 return match; 1028 } 1029 1030 function attachCheckboxHandler(checkboxId, popup) { 1031 var cbox = document.getElementById(checkboxId); 1032 1033 if (cbox != undefined) { 1034 //checkbox anhand cookies und dnt setzen 1035 if (navigator.doNotTrack == 1) { 1036 //opt-out mandatory with DNT set 1037 cbox.checked = "checked"; 1038 if (document.querySelector) { 1039 var label = document.querySelector("label[for=" + "cc-tracking-checkbox" + "]"); 1040 label.innerHTML = popup.options.content.dnt_text; 1041 1042 } 1043 } 1044 else if (util.getCookie("tracking_cookie_consent")!="deny" && navigator.doNotTrack != 1) { 1045 cbox.checked = false; 1046 } 1047 cbox.onclick = function () { 1048 if (navigator.doNotTrack == 1) { 1049 this.checked = "checked"; //opt-out mandatory with DNT set 1050 } 1051 else if (this.checked) { 1052 util.setCookie("tracking_cookie_consent", "deny", 365); 1053 } 1054 else { 1055 util.setCookie("tracking_cookie_consent", "", 365); 1056 } 1057 // popup.close(true); 1058 }; 1059 } 1060 }; 1061 1062 function getPositionClasses() { 1063 var positions = this.options.position.split('-'); // top, bottom, left, right 1064 var classes = []; 1065 1066 // top, left, right, bottom 1067 positions.forEach(function (cur) { 1068 classes.push('cc-' + cur); 1069 }); 1070 1071 return classes; 1072 } 1073 1074 function getPopupClasses() { 1075 var opts = this.options; 1076 var positionStyle = (opts.position == 'top' || opts.position == 'bottom') ? 'banner' : 'floating'; 1077 1078 if (util.isMobile()) { 1079 positionStyle = 'floating'; 1080 } 1081 1082 var classes = [ 1083 'cc-' + positionStyle, // floating or banner 1084 'cc-type-' + opts.type, // add the compliance type 1085 'cc-theme-' + opts.theme, // add the theme 1086 ]; 1087 1088 if (opts.static) { 1089 classes.push('cc-static'); 1090 } 1091 1092 classes.push.apply(classes, getPositionClasses.call(this)); 1093 1094 // we only add extra styles if `palette` has been set to a valid value 1095 var didAttach = attachCustomPalette.call(this, this.options.palette); 1096 1097 // if we override the palette, add the class that enables this 1098 if (this.customStyleSelector) { 1099 classes.push(this.customStyleSelector); 1100 } 1101 1102 return classes; 1103 } 1104 1105 function getPopupInnerMarkup() { 1106 var interpolated = {}; 1107 var opts = this.options; 1108 1109 // removes link if showLink is false 1110 if (!opts.showLink) { 1111 opts.elements.link = ''; 1112 opts.elements.messagelink = opts.elements.message; 1113 } 1114
1115 Object.keys(opts.elements).forEach(function (prop) { 1116 interpolated[prop] = util.interpolateString(opts.elements[prop], function (name) { 1117 var str = opts.content[name]; 1118 return (name && typeof str == 'string' && str.length) ? str : ''; 1119 }) 1120 }); 1121 1122 // checks if the type is valid and defaults to info if it's not 1123 var complianceType = opts.compliance[opts.type]; 1124 if (!complianceType) { 1125 complianceType = opts.compliance.info; 1126 } 1127 1128 // build the compliance types from the already interpolated `elements` 1129 interpolated.compliance = util.interpolateString(complianceType, function (name) { 1130 return interpolated[name]; 1131 }); 1132 1133 // checks if the layout is valid and defaults to basic if it's not 1134 var layout = opts.layouts[opts.layout]; 1135 if (!layout) { 1136 layout = opts.layouts.basic; 1137 } 1138 1139 return util.interpolateString(layout, function (match) { 1140 return interpolated[match]; 1141 }); 1142 } 1143 1144 function appendMarkup(markup) { 1145 var opts = this.options; 1146 var div = document.createElement('div'); 1147 var cont = (opts.container && opts.container.nodeType === 1) ? opts.container : document.body; 1148 1149 div.innerHTML = markup; 1150 1151 var el = div.children[0]; 1152 1153 el.style.display = 'none'; 1154 1155 if (util.hasClass(el, 'cc-window') && cc.hasTransition) { 1156 util.addClass(el, 'cc-invisible'); 1157 } 1158 1159 // save ref to the function handle so we can unbind it later 1160 this.onButtonClick = handleButtonClick.bind(this); 1161 1162 el.addEventListener('click', this.onButtonClick); 1163 1164 if (opts.autoAttach) { 1165 if (!cont.firstChild) { 1166 cont.appendChild(el); 1167 } else { 1168 cont.insertBefore(el, cont.firstChild) 1169 } 1170 } 1171 1172 return el; 1173 } 1174 1175 function handleButtonClick(event) { 1176 var targ = event.target; 1177 var fin=false; 1178 if (util.hasClass(targ, 'cc-btn')) { 1179 var matches = targ.className.match(new RegExp("\\bcc-(" + __allowedStatuses.join('|') + ")\\b")); 1180 var match = (matches && matches[1]) || false; 1181 if (match == "dismiss" && util.getCookie("tracking_cookie_consent") == "deny") match = "deny"; 1182 if (match) { 1183 this.setStatus(match); 1184 this.close(true); 1185 } 1186 if (match == "dismiss" && util.getCookie("tracking_cookie_consent") !== "deny") fin=true; 1187 } 1188 if (util.hasClass(targ, 'cc-close')) { 1189 if (util.isTrackingAllowed()) { 1190 this.setStatus(cc.status.allow); 1191 } 1192 else { 1193 this.setStatus(cc.status.deny); 1194 } 1195 this.close(true); 1196 } 1197 if (util.hasClass(targ, 'cc-revoke')) { 1198 this.revokeChoice(); 1199 } 1200 if(fin) location.reload(); 1201 } 1202 1203 // I might change this function to use inline styles. I originally chose a stylesheet because I could select many elements with a 1204 // single rule (something that happened a lot), the apps has changed slightly now though, so inline styles might be more applicable. 1205 function attachCustomPalette(palette) { 1206 var hash = util.hash(JSON.stringify(palette)); 1207 var selector = 'cc-color-override-' + hash; 1208 var isValid = util.isPlainObject(palette); 1209 1210 this.customStyleSelector = isValid ? selector : null; 1211 1212 if (isValid) { 1213 addCustomStyle(hash, palette, '.' + selector); 1214 } 1215 return isValid; 1216 } 1217 1218 function addCustomStyle(hash, palette, prefix) { 1219 1220 // only add this if a style like it doesn't exist 1221 if (cc.customStyles[hash]) { 1222 // custom style already exists, so increment the reference count 1223 ++cc.customStyles[hash].references; 1224 return; 1225 } 1226 var colorStyles = {}; 1227 var popup = palette.popup; 1228 var button = palette.button; 1229 var highlight = palette.highlight; 1230 var deny = palette.deny; 1231 1232 // needs background colour, text and link will be set to black/white if not specified 1233 if (popup) { 1234 // assumes popup.background is set 1235 popup.text = popup.text ? popup.text : util.getContrast(popup.background); 1236 popup.link = popup.link ? popup.link : popup.text; 1237 colorStyles[prefix + '.cc-window'] = [ 1238 'color: ' + popup.text, 1239 'background-color: ' + popup.background 1240 ]; 1241 colorStyles[prefix + '.cc-revoke'] = [ 1242 'color: ' + popup.text, 1243 'background-color: ' + popup.background 1244 ]; 1245 colorStyles[prefix + ' .cc-link,' + prefix + ' .cc-link:active,' + prefix + ' .cc-link:visited']
1245= [ 1246 'color: ' + popup.link 1247 ]; 1248 1249 if (button) { 1250 // assumes button.background is set 1251 button.text = button.text ? button.text : util.getContrast(button.background); 1252 button.border = button.border ? button.border : 'transparent'; 1253 colorStyles[prefix + ' .cc-btn'] = [ 1254 'color: ' + button.text, 1255 'border-color: ' + button.border, 1256 'background-color: ' + button.background 1257 ]; 1258 1259 if (button.background != 'transparent') 1260 colorStyles[prefix + ' .cc-btn:hover, ' + prefix + ' .cc-btn:focus'] = [ 1261 'background-color: ' + getHoverColour(button.background) 1262 ]; 1263 1264 if (highlight) { 1265 //assumes highlight.background is set 1266 highlight.text = highlight.text ? highlight.text : util.getContrast(highlight.background); 1267 highlight.border = highlight.border ? highlight.border : 'transparent'; 1268 colorStyles[prefix + ' .cc-highlight .cc-btn:first-child'] = [ 1269 'color: ' + highlight.text, 1270 'border-color: ' + highlight.border, 1271 'background-color: ' + highlight.background 1272 ]; 1273 } 1274 } 1275 if (deny) { 1276 // assumes button.background is set 1277 deny.text = deny.text ? deny.text : util.getContrast(deny.background); 1278 deny.border = deny.border ? deny.border : 'transparent'; 1279 colorStyles[prefix + ' .cc-deny'] = [ 1280 'color: ' + deny.text, 1281 'border-color: ' + deny.border, 1282 'background-color: ' + deny.background 1283 ]; 1284 1285 if (deny.background != 'transparent') 1286 colorStyles[prefix + ' .cc-deny:hover, ' + prefix + ' .cc-deny:focus'] = [ 1287 'background-color: ' + getHoverColour(deny.background) 1288 ]; 1289 1290 if (highlight) { 1291 //assumes highlight.background is set 1292 highlight.text = highlight.text ? highlight.text : util.getContrast(highlight.background); 1293 highlight.border = highlight.border ? highlight.border : 'transparent'; 1294 colorStyles[prefix + ' .cc-highlight .cc-btn:first-child'] = [ 1295 'color: ' + highlight.text, 1296 'border-color: ' + highlight.border, 1297 'background-color: ' + highlight.background 1298 ]; 1299 } 1300 } 1301 1302 } 1303 1304 // this will be interpretted as CSS. the key is the selector, and each array element is a rule 1305 var style = document.createElement('style'); 1306 document.head.appendChild(style); 1307 1308 // custom style doesn't exist, so we create it 1309 cc.customStyles[hash] = { 1310 references: 1, 1311 element: style.sheet 1312 }; 1313 1314 var ruleIndex = -1; 1315 for (var prop in colorStyles) { 1316 if (colorStyles.hasOwnProperty(prop)) { 1317 style.sheet.insertRule(prop + '{' + colorStyles[prop].join(';') + '}', ++ruleIndex); 1318 } 1319 } 1320 } 1321 1322 function getHoverColour(hex) { 1323 hex = util.normaliseHex(hex); 1324 // for black buttons 1325 if (hex == '000000') { 1326 return '#222'; 1327 } 1328 return util.getLuminance(hex); 1329 } 1330 1331 function removeCustomStyle(palette) { 1332 if (util.isPlainObject(palette)) { 1333 var hash = util.hash(JSON.stringify(palette)); 1334 var customStyle = cc.customStyles[hash]; 1335 if (customStyle && !--customStyle.references) { 1336 var styleNode = customStyle.element.ownerNode; 1337 if (styleNode && styleNode.parentNode) { 1338 styleNode.parentNode.removeChild(styleNode); 1339 } 1340 cc.customStyles[hash] = null; 1341 } 1342 } 1343 } 1344 1345 function arrayContainsMatches(array, search) { 1346 for (var i = 0, l = array.length; i < l; ++i) { 1347 var str = array[i]; 1348 // if regex matches or string is equal, return true 1349 if ((str instanceof RegExp && str.test(search)) || 1350 (typeof str == 'string' && str.length && str === search)) { 1351 return true; 1352 } 1353 } 1354 return false; 1355 } 1356 1357 function applyAutoDismiss() { 1358 var setStatus = this.setStatus.bind(this); 1359
1360 var delay = this.options.dismissOnTimeout; 1361 if (typeof delay == 'number' && delay >= 0) { 1362 this.dismissTimeout = window.setTimeout(function () { 1363 setStatus(cc.status.dismiss); 1364 }, Math.floor(delay)); 1365 } 1366 1367 var scrollRange = this.options.dismissOnScroll; 1368 if (typeof scrollRange == 'number' && scrollRange >= 0) { 1369 var onWindowScroll = function (evt) { 1370 if (window.pageYOffset > Math.floor(scrollRange)) { 1371 setStatus(cc.status.dismiss); 1372 1373 window.removeEventListener('scroll', onWindowScroll); 1374 this.onWindowScroll = null; 1375 } 1376 }; 1377 1378 this.onWindowScroll = onWindowScroll; 1379 window.addEventListener('scroll', onWindowScroll); 1380 } 1381 } 1382 1383 function applyRevokeButton() { 1384 // revokable is true if advanced compliance is selected 1385 if (this.options.type != 'info') this.options.revokable = true; 1386 // animateRevokable false for mobile devices 1387 if (util.isMobile()) this.options.animateRevokable = false; 1388 1389 if (this.options.revokable) { 1390 var classes = getPositionClasses.call(this); 1391 if (this.options.animateRevokable) { 1392 classes.push('cc-animate'); 1393 } 1394 if (this.customStyleSelector) { 1395 classes.push(this.customStyleSelector) 1396 } 1397 var revokeBtn = this.options.revokeBtn.replace('{{classes}}', classes.join(' ')); 1398 this.revokeBtn = appendMarkup.call(this, revokeBtn); 1399 1400 var btn = this.revokeBtn; 1401 if (this.options.animateRevokable) { 1402 var wait = false; 1403 var onMouseMove = util.throttle(function (evt) { 1404 var active = false; 1405 var minY = 20; 1406 var maxY = (window.innerHeight - 20); 1407 1408 if (util.hasClass(btn, 'cc-top') && evt.clientY < minY) active = true; 1409 if (util.hasClass(btn, 'cc-bottom') && evt.clientY > maxY) active = true; 1410 1411 if (active) { 1412 if (!util.hasClass(btn, 'cc-active')) { 1413 util.addClass(btn, 'cc-active'); 1414 } 1415 } else { 1416 if (util.hasClass(btn, 'cc-active')) { 1417 util.removeClass(btn, 'cc-active'); 1418 } 1419 } 1420 }, 200); 1421 1422 this.onMouseMove = onMouseMove; 1423 window.addEventListener('mousemove', onMouseMove); 1424 } 1425 } 1426 } 1427 1428 return CookiePopup 1429 }()); 1430 1431 cc.Location = (function () { 1432 1433 // An object containing all the location services we have already set up. 1434 // When using a service, it could either return a data structure in plain text (like a JSON object) or an executable script 1435 // When the response needs to be executed by the browser, then `isScript` must be set to true, otherwise it won't work. 1436 1437 // When the service uses a script, the chances are that you'll have to use the script to make additional requests. In these 1438 // cases, the services `callback` property is called with a `done` function. When performing async operations, this must be called 1439 // with the data (or Error), and `cookieconsent.locate` will take care of the rest 1440 var defaultOptions = { 1441 1442 // The default timeout is 5 seconds. This is mainly needed to catch JSONP requests that error. 1443 // Otherwise there is no easy way to catch JSONP errors. That means that if a JSONP fails, the 1444 // app will take `timeout` milliseconds to react to a JSONP network error. 1445 timeout: 5000, 1446 1447 // the order that services will be attempted in 1448 services: [ 1449 'freegeoip', 1450 'ipinfo', 1451 'maxmind' 1452 1453 /* 1454 1455 // 'ipinfodb' requires some options, so we define it using an object 1456 // this object will be passed to the function that defines the service 1457 1458 { 1459 name: 'ipinfodb', 1460 interpolateUrl: { 1461 // obviously, this is a fake key 1462 api_key: 'vOgI3748dnIytIrsJcxS7qsDf6kbJkE9lN4yEDrXAqXcKUNvjjZPox3ekXqmMMld' 1463 }, 1464 }, 1465 1466 // as well as defining an object, you can define a function that returns an object 1467 1468 function () { 1469 return {name: 'ipinfodb'}; 1470 }, 1471 1472 */ 1473 ], 1474 1475 serviceDefinitions: { 1476 1477 freegeoip: function () { 1478 return { 1479 // This service responds with JSON, but they do not have
1479CORS set, so we must use JSONP and provide a callback 1480 // The `{callback}` is automatically rewritten by the tool 1481 url: '//freegeoip.net/json/?callback={callback}', 1482 isScript: true, // this is JSONP, therefore we must set it to run as a script 1483 callback: function (done, response) { 1484 try { 1485 var json = JSON.parse(response); 1486 return json.error ? toError(json) : { 1487 code: json.country_code 1488 }; 1489 } catch (err) { 1490 return toError({error: 'Invalid response (' + err + ')'}); 1491 } 1492 } 1493 } 1494 }, 1495 1496 ipinfo: function () { 1497 return { 1498 // This service responds with JSON, so we simply need to parse it and return the country code 1499 url: '//ipinfo.io', 1500 headers: ['Accept: application/json'], 1501 callback: function (done, response) { 1502 try { 1503 var json = JSON.parse(response); 1504 return json.error ? toError(json) : { 1505 code: json.country 1506 }; 1507 } catch (err) { 1508 return toError({error: 'Invalid response (' + err + ')'}); 1509 } 1510 } 1511 } 1512 }, 1513 1514 // This service requires an option to define `key`. Options are proived using objects or functions 1515 ipinfodb: function (options) { 1516 return { 1517 // This service responds with JSON, so we simply need to parse it and return the country code 1518 url: '//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}', 1519 isScript: true, // this is JSONP, therefore we must set it to run as a script 1520 callback: function (done, response) { 1521 try { 1522 var json = JSON.parse(response); 1523 return json.statusCode == 'ERROR' ? toError({error: json.statusMessage}) : { 1524 code: json.countryCode 1525 }; 1526 } catch (err) { 1527 return toError({error: 'Invalid response (' + err + ')'}); 1528 } 1529 } 1530 } 1531 }, 1532 1533 maxmind: function () { 1534 return { 1535 // This service responds with a JavaScript file which defines additional functionality. Once loaded, we must 1536 // make an additional AJAX call. Therefore we provide a `done` callback that can be called asynchronously 1537 url: '//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js', 1538 isScript: true, // this service responds with a JavaScript file, so it must be run as a script 1539 callback: function (done) { 1540 // if everything went okay then `geoip2` WILL be defined 1541 if (!window.geoip2) { 1542 done(new Error('Unexpected response format. The downloaded script should have exported `geoip2` to the global scope')); 1543 return; 1544 } 1545 1546 geoip2.country(function (location) { 1547 try { 1548 done({ 1549 code: location.country.iso_code 1550 }); 1551 } catch (err) { 1552 done(toError(err)); 1553 } 1554 }, function (err) { 1555 done(toError(err)); 1556 }); 1557 1558 // We can't return anything, because we need to wait for the second AJAX call to return. 1559 // Then we can 'complete' the service by passing data or an error to the `done` callback. 1560 } 1561 } 1562 }, 1563 }, 1564 }; 1565 1566 function Location(options) { 1567 // Set up options 1568 util.deepExtend(this.options = {}, defaultOptions); 1569 1570 if (util.isPlainObject(options)) { 1571 util.deepExtend(this.options, options); 1572 } 1573 1574 this.currentServiceIndex = -1; // the index (in options) of the service we're currently using 1575 } 1576 1577 Location.prototype.getNextService = function () { 1578 var service; 1579 1580 do {
1581 service = this.getServiceByIdx(++this.currentServiceIndex); 1582 } while (this.currentServiceIndex < this.options.services.length && !service); 1583 1584 return service; 1585 }; 1586 1587 Location.prototype.getServiceByIdx = function (idx) { 1588 // This can either be the name of a default locationService, or a function. 1589 var serviceOption = this.options.services[idx]; 1590 1591 // If it's a string, use one of the location services. 1592 if (typeof serviceOption === 'function') { 1593 var dynamicOpts = serviceOption(); 1594 if (dynamicOpts.name) { 1595 util.deepExtend(dynamicOpts, this.options.serviceDefinitions[dynamicOpts.name](dynamicOpts)); 1596 } 1597 return dynamicOpts; 1598 } 1599 1600 // If it's a string, use one of the location services. 1601 if (typeof serviceOption === 'string') { 1602 return this.options.serviceDefinitions[serviceOption](); 1603 } 1604 1605 // If it's an object, assume {name: 'ipinfo', ...otherOptions} 1606 // Allows user to pass in API keys etc. 1607 if (util.isPlainObject(serviceOption)) { 1608 return this.options.serviceDefinitions[serviceOption.name](serviceOption); 1609 } 1610 1611 return null; 1612 }; 1613 1614 // This runs the service located at index `currentServiceIndex`. 1615 // If the service fails, `runNextServiceOnError` will continue trying each service until all fail, or one completes successfully 1616 Location.prototype.locate = function (complete, error) { 1617 var service = this.getNextService(); 1618 1619 if (!service) { 1620 error(new Error('No services to run')); 1621 return; 1622 } 1623 1624 this.callbackComplete = complete; 1625 this.callbackError = error; 1626 1627 this.runService(service, this.runNextServiceOnError.bind(this)); 1628 }; 1629 1630 // Potentially adds a callback to a url for jsonp. 1631 Location.prototype.setupUrl = function (service) { 1632 var serviceOpts = this.getCurrentServiceOpts(); 1633 return service.url.replace(/\{(.*?)\}/g, function (_, param) { 1634 if (param === 'callback') { 1635 var tempName = 'callback' + Date.now(); 1636 window[tempName] = function (res) { 1637 service.__JSONP_DATA = JSON.stringify(res); 1638 } 1639 return tempName; 1640 } 1641 if (param in serviceOpts.interpolateUrl) { 1642 return serviceOpts.interpolateUrl[param]; 1643 } 1644 }); 1645 }; 1646 1647 // requires a `service` object that defines at least a `url` and `callback` 1648 Location.prototype.runService = function (service, complete) { 1649 var self = this; 1650 1651 // basic check to ensure it resembles a `service` 1652 if (!service || !service.url || !service.callback) { 1653 return; 1654 } 1655 1656 // we call either `getScript` or `makeAsyncRequest` depending on the type of resource 1657 var requestFunction = service.isScript ? getScript : makeAsyncRequest; 1658 1659 var url = this.setupUrl(service); 1660 1661 // both functions have similar signatures so we can pass the same arguments to both 1662 requestFunction(url, function (xhr) { 1663 // if `!xhr`, then `getScript` function was used, so there is no response text 1664 var responseText = xhr ? xhr.responseText : ''; 1665 1666 // if the resource is a script, then this function is called after the script has been run. 1667 // if the script is JSONP, then a time defined function `callback_{Date.now}` has already 1668 // been called (as the JSONP callback). This callback sets the __JSONP_DATA property 1669 if (service.__JSONP_DATA) { 1670 responseText = service.__JSONP_DATA; 1671 delete service.__JSONP_DATA; 1672 } 1673 1674 // call the service callback with the response text (so it can parse the response) 1675 self.runServiceCallback.call(self, complete, service, responseText); 1676 1677 }, this.options.timeout, service.data, service.headers); 1678 1679 // `service.data` and `service.headers` are optional (they only count if `!service.isScript` anyway) 1680 }; 1681 1682 // The service request has run (and possibly has a `responseText`) [no `responseText` if `isScript`] 1683 // We need to run its callback which determines if its successful or not 1684 // `complete` is called on success or failure 1685 Location.prototype.runServiceCallback = function (complete, service, responseText) { 1686 var self = this;
1687 // this is the function that is called if the service uses the async callback in its handler method 1688 var serviceResultHandler = function (asyncResult) { 1689 // if `result` is a valid value, then this function shouldn't really run 1690 // even if it is called by `service.callback` 1691 if (!result) { 1692 self.onServiceResult.call(self, complete, asyncResult) 1693 } 1694 }; 1695 1696 // the function `service.callback` will either extract a country code from `responseText` and return it (in `result`) 1697 // or (if it has to make additional requests) it will call a `done` callback with the country code when it is ready 1698 var result = service.callback(serviceResultHandler, responseText); 1699 1700 if (result) { 1701 this.onServiceResult.call(this, complete, result); 1702 } 1703 }; 1704 1705 // This is called with the `result` from `service.callback` regardless of how it provided that result (sync or async). 1706 // `result` will be whatever is returned from `service.callback`. A service callback should provide an object with data 1707 Location.prototype.onServiceResult = function (complete, result) { 1708 // convert result to nodejs style async callback 1709 if (result instanceof Error || (result && result.error)) { 1710 complete.call(this, result, null); 1711 } else { 1712 complete.call(this, null, result); 1713 } 1714 }; 1715 1716 // if `err` is set, the next service handler is called 1717 // if `err` is null, the `onComplete` handler is called with `data` 1718 Location.prototype.runNextServiceOnError = function (err, data) { 1719 if (err) { 1720 this.logError(err); 1721 1722 var nextService = this.getNextService(); 1723 1724 if (nextService) { 1725 this.runService(nextService, this.runNextServiceOnError.bind(this)); 1726 } else { 1727 this.completeService.call(this, this.callbackError, new Error('All services failed')); 1728 } 1729 } else { 1730 this.completeService.call(this, this.callbackComplete, data); 1731 } 1732 }; 1733 1734 Location.prototype.getCurrentServiceOpts = function () { 1735 var val = this.options.services[this.currentServiceIndex]; 1736 1737 if (typeof val == 'string') { 1738 return {name: val}; 1739 } 1740 1741 if (typeof val == 'function') { 1742 return val(); 1743 } 1744 1745 if (util.isPlainObject(val)) { 1746 return val; 1747 } 1748 1749 return {}; 1750 }; 1751 1752 // calls the `onComplete` callback after resetting the `currentServiceIndex` 1753 Location.prototype.completeService = function (fn, data) { 1754 this.currentServiceIndex = -1; 1755 1756 fn && fn(data); 1757 }; 1758 1759 Location.prototype.logError = function (err) { 1760 var idx = this.currentServiceIndex; 1761 var service = this.getServiceByIdx(idx); 1762 1763 console.error('The service[' + idx + '] (' + service.url + ') responded with the following error', err); 1764 }; 1765 1766 function getScript(url, callback, timeout) { 1767 var timeoutIdx, s = document.createElement('script'); 1768 1769 s.type = 'text/' + (url.type || 'javascript'); 1770 s.src = url.src || url; 1771 s.async = false; 1772 1773 s.onreadystatechange = s.onload = function () { 1774 // this code handles two scenarios, whether called by onload or onreadystatechange 1775 var state = s.readyState; 1776 1777 clearTimeout(timeoutIdx); 1778 1779 if (!callback.done && (!state || /loaded|complete/.test(state))) { 1780 callback.done = true; 1781 callback(); 1782 s.onreadystatechange = s.onload = null; 1783 } 1784 }; 1785 1786 document.body.appendChild(s); 1787 1788 // You can't catch JSONP Errors, because it's handled by the script tag 1789 // one way is to use a timeout 1790 timeoutIdx = setTimeout(function () { 1791 callback.done = true; 1792 callback(); 1793 s.onreadystatechange = s.onload = null; 1794 }, timeout); 1795 } 1796 1797 function makeAsyncRequest(url, onComplete, timeout, postData, requestHeaders) { 1798 var xhr = new (window.XMLHttpRequest || window.ActiveXObject)('MSXML2.XMLHTTP.3.0'); 1799 1800 xhr.open(postData ? 'POST' : 'GET', url, 1); 1801 1802 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 1803 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 1804 1805 if (Array.isArray(requestHeaders)) { 1806 for (var i = 0, l = requestHeaders.length; i < l; ++i) { 1807 var split = requestHeaders[i].split(':', 2) 1808 xhr.setRequestHeader(split[0].replace(/^\s+|\s+$/g, ''), split[1].replace(/^\s+|\s+$/g, '')); 1809 } 1810 } 1811 1812 if (typeof onComplete == 'function') { 1813 xhr.onreadystatechange = function () { 1814 if (xhr.readyState > 3) { 1815 onComplete(xhr); 1816 } 1817 }; 1818 } 1819 1820 xhr.send(postData); 1821 } 1822 1823 function toError(obj) { 1824 return new Error('Error [' + (obj.code || 'UNKNOWN') + ']: ' + obj.error); 1825 } 1826 1827 return Location; 1828 }()); 1829 1830 cc.Law = (function () { 1831 1832 var defaultOptions = { 1833 // Make this false if you want to disable all regional overrides for settings. 1834 // If true, options can differ by country, depending on their cookie law. 1835 // It does not affect hiding the popup for countries that do not have cookie law. 1836 regionalLaw: true, 1837 1838 // countries that enforce some version of a cookie law 1839 hasLaw: ['AT', 'BE', 'BG', 'HR', 'CZ', 'CY', 'DK', 'EE', 'FI', 'FR', 'DE', 'EL', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'SK', '
1839SI', 'ES', 'SE', 'GB', 'UK'], 1840 1841 // countries that say that all cookie consent choices must be revokable (a user must be able too change their mind) 1842 revokable: ['HR', 'CY', 'DK', 'EE', 'FR', 'DE', 'LV', 'LT', 'NL', 'PT', 'ES'], 1843 1844 // countries that say that a person can only "consent" if the explicitly click on "I agree". 1845 // in these countries, consent cannot be implied via a timeout or by scrolling down the page 1846 explicitAction: ['HR', 'IT', 'ES'], 1847 }; 1848 1849 function Law(options) { 1850 this.initialise.apply(this, arguments); 1851 } 1852 1853 Law.prototype.initialise = function (options) { 1854 // set options back to default options 1855 util.deepExtend(this.options = {}, defaultOptions); 1856 1857 // merge in user options 1858 if (util.isPlainObject(options)) { 1859 util.deepExtend(this.options, options); 1860 } 1861 }; 1862 1863 Law.prototype.get = function (countryCode) { 1864 var opts = this.options; 1865 return { 1866 hasLaw: opts.hasLaw.indexOf(countryCode) >= 0, 1867 revokable: opts.revokable.indexOf(countryCode) >= 0, 1868 explicitAction: opts.explicitAction.indexOf(countryCode) >= 0, 1869 }; 1870 }; 1871 1872 Law.prototype.applyLaw = function (options, countryCode) { 1873 var country = this.get(countryCode); 1874 1875 if (!country.hasLaw) { 1876 // The country has no cookie law 1877 options.enabled = false; 1878 } 1879 1880 if (this.options.regionalLaw) { 1881 if (country.revokable) { 1882 // We must provide an option to revoke consent at a later time 1883 options.revokable = true; 1884 } 1885 1886 if (country.explicitAction) { 1887 // The user must explicitly click the consent button 1888 options.dismissOnScroll = false; 1889 options.dismissOnTimeout = false; 1890 } 1891 } 1892 return options; 1893 }; 1894 1895 return Law; 1896 }()); 1897 1898 // This function initialises the app by combining the use of the Popup, Locator and Law modules 1899 // You can string together these three modules yourself however you want, by writing a new function. 1900 cc.initialise = function (options, complete, error) { 1901 1902 1903 var law = new cc.Law(options.law); 1904 1905 if (!complete) complete = function () { 1906 }; 1907 if (!error) error = function () { 1908 }; 1909 1910 cc.getCountryCode(options, function (result) { 1911 // don't need the law or location options anymore 1912 delete options.law; 1913 delete options.location; 1914 1915 if (result.code) { 1916 options = law.applyLaw(options, result.code); 1917 } 1918 1919 complete(new cc.Popup(options)); 1920 }, function (err) { 1921 // don't need the law or location options anymore 1922 delete options.law; 1923 delete options.location; 1924 1925 error(err, new cc.Popup(options)); 1926 }); 1927 }; 1928 1929 // This function tries to find your current location. It either grabs it from a hardcoded option in 1930 // `options.law.countryCode`, or attempts to make a location service request. This function accepts 1931 // options (which can configure the `law` and `location` modules) and fires a callback with which 1932 // passes an object `{code: countryCode}` as the first argument (which can have undefined properties) 1933 cc.getCountryCode = function (options, complete, error) { 1934 if (options.law && options.law.countryCode) { 1935 complete({ 1936 code: options.law.countryCode 1937 }); 1938 return; 1939 } 1940 if (options.location) { 1941 var locator = new cc.Location(options.location); 1942 locator.locate(function (serviceResult) { 1943 complete(serviceResult || {}); 1944 }, error); 1945 return; 1946 } 1947 complete({}); 1948 }; 1949 1950 // export utils (no point in hiding them, so we may as well expose them) 1951 cc.utils = util; 1952 1953 // prevent this code from being run twice
1954 cc.hasInitialised = true; 1955 1956 window.cookieconsent = cc; 1957 1958}(window.cookieconsent || {})); 1959window.addEventListener("load", function() { 1960 var consentType = cookieConsentType; 1961 var position = cookieConsentPosition; 1962 var static = false; 1963 var revokable = (cookieConsentOptOut == 1); 1964 var layout = (consentType == "info") ? "basic-slideout" : "basic"; 1965 window.cookieconsent.initialise({ 1966 "palette": { 1967 "popup": { 1968 "background": cookieConsentPopupBackgroundColor, 1969 "text": cookieConsentPopupTextColor 1970 }, 1971 "button": { 1972 "background": cookieConsentButtonBackgroundColor, 1973 "text": cookieConsentButtonTextColor 1974 }, 1975 "deny": { 1976 "background": cookieConsentDisagreeButtonBackgroundColor, 1977 "text": cookieConsentDisagreeButtonTextColor 1978 } 1979 }, 1980 "type": consentType, 1981 "layout": layout, 1982 "theme": "edgeless", 1983 "position": position, 1984 "static": static, 1985 "revokable": revokable, 1986 "content": { 1987 "message": cookieConsentMessage, 1988 "dismiss": cookieConsentConfirm, 1989 "deny": cookieConsentDeny, 1990 "allow": cookieConsentConfirm, 1991 "link": cookieConsentLinkText, 1992 "href": cookieConsentUrl, 1993 "optout_text": cookieConsentOptOutText, 1994 "checkbox_text": cookieConsentCheckboxText, 1995 "dnt_text": cookieConsentDoNotTrackSetText 1996 }, 1997 "slideout": "<div class='optOut-slideout'><input type='checkbox' name='cc-checkbox' id='cc-checkbox' /><label for='cc-checkbox'>{{checkbox_text}}</label></div>'" 1998 1999 }); 2000 var cclink = (document.getElementsByClassName("cc-link")) ? document.getElementsByClassName("cc-link") : []; 2001 2002 for (var i = 0; i < cclink.length; i++) { 2003 cclink[i].style.color = cookieConsentPopupTextColor; 2004 } 2005 2006});
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.