PageSourceSearch

https://awardsradar.com/_static/??-eJydU9FSwyAQ/CEJ6oxWHxy/5UKu6VX…zrjDrIYfbDJJIRTH+bWr8PL3eb59uF+8/i0+QQM0o+o

js awardsradar.com collected 2026-10-02 06:27:23 UTC 173,238 bytes, 3,533 lines download raw bytes

1;
2(()=>{const e=document.querySelectorAll(".coblocks-animate");if("IntersectionObserver"in window){const t=new IntersectionObserver((e=>{e.forEach((e=>{e.isIntersecting&&(e.target.classList.add(e.target.dataset.coblocksAnimation),t.unobserve(e.target))}))}),{threshold:[.15]});e.forEach((e=>{t.observe(e)}))}else e.forEach((e=>{e.classList.remove("coblocks-animate"),delete e.dataset.coblocksAnimation}))})();;
3(()=>{var e={2590:function(e){e.exports=function(){"use strict";function e(){return e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},e.apply(this,arguments)}function t(e,t){void 0===t&&(t=[]),Array.isArray(t)||(t=[t]),t.forEach((function(t){return!e.classList.contains(t)&&e.classList.add(t)}))}function n(e,t,n,i){e.addEventListener(t,n,i)}function i(e,t,n){e.removeEventListener(t,n)}function r(e,t,n){return void 0===n&&(n=""),e.setAttribute(t,n),e}function o(e,t,n){return Object.keys(t).forEach((function(n){e.style[n]=t[n]})),n&&getComputedStyle(e),e}var a={direction:"horizontal",touchRatio:1,touchAngle:45,longSwipesRatio:.5,initialSlide:0,loop:!1,freeMode:!1,passiveListeners:!0,resistance:!0,resistanceRatio:.85,speed:300,longSwipesMs:300,spaceBetween:0,slidesPerView:1,centeredSlides:!1,slidePrevClass:"swiper-slide-prev",slideNextClass:"swiper-slide-next",slideActiveClass:"swiper-slide-active",slideClass:"swiper-slide",wrapperClass:"swiper-wrapper",touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchMoveStopPropagation:!1,excludeElements:[],injections:{translate:function(e,t,n,i){o(t.element.$wrapper,{transition:e.isStart?"none":"transform ease "+i+"ms",transform:n.isHorizontal?"translate3d("+e.transforms+"px, 0, 0)":"translate3d(0, "+e.transforms+"px, 0)"})}}};var s="before-init",c="after-init",u="before-slide",l="scroll",f="after-slide",p="before-destroy",d="after-destroy";var m=180/Math.PI;function v(){var t=[];return{getDuration:function(){var e=t[0],n=t[t.length-1];return e?n.time-e.time:0},getOffset:function(){var e=t[0],n=t[t.length-1];return e?{x:n.x-e.x,y:n.y-e.y}:{x:0,y:0}},getLogs:function(){return t},vector:function(){return function(t,n){var i=t[n],r=t[n-1]||i,o={x:i.x-r.x,y:i.y-r.y},a=i.time-r.time,s=o.x/a||0,c=o.y/a||0;return e({},o,{angle:Math.atan2(Math.abs(o.y),Math.abs(o.x))*m,velocityX:s,velocityY:c})}(t,t.length-1)},clear:function(){t=[]},push:function(n){t.push(e({time:Date.now()},n))}}}function h(){return performance?performance.now():Date.now()}var x=requestAnimationFrame||webkitRequestAnimationFrame||setTimeout,g=cancelAnimationFrame||webkitCancelAnimationFrame||clearTimeout;function S(){var e,t,n={run:function(n){e=void 0===e?h():e,t=x((function(){var t=h(),i=t-e;e=t,n(i)}))},stop:function(){e=void 0,g(t)}};return{run:function e(t){n.run((function(n){e(t),t(n)}))},stop:function(){n.stop()}}}function w(e,t){var n=e.tracker,i=t.initStatus;n.clear(),i()}function y(e,t,r,o){var a=e.touchable,s=["INPUT","SELECT","OPTION","TEXTAREA","BUTTON","VIDEO"],c=function(e,t,n,i){var r=i.initLayout,o=i.initStatus,a=i.render,s=i.scrollPixel,c=i.slideTo,u=i.getOffsetSteps,l=S();return{preheat:function(e,t){var i=n.tracker;l.stop(),i.clear(),i.push(e),r(t),o(t),n.isStart=!0,a()},move:function(t){var i=n.tracker,r=e.touchRatio,o=e.touchAngle,c=e.isHorizontal;if(n.isStart&&!n.isScrolling){i.push(t);var u=i.vector(),l=i.getOffset();if(l.x||l.y)if(c&&u.angle<o||!c&&90-u.angle<o||n.isTouching){var f=u[c?"x":"y"]*r;n.isTouching=!0,s(f),a()}else n.isScrolling=!0,i.clear()}},stop:function(){var r=n.index,o=n.tracker,f=t.measure;if(n.isStart)if(n.isStart=!1,e.freeMode){var p=o.vector()[e.isHorizontal?"velocityX":"velocityY"];l.run((function(e){var t=p*e;p*=.98,Math.abs(t)<.01?(l.stop(),w(n,i)):(s(t),a(0))}))}else{var d=o.getDuration(),m=o.getOffset()[e.isHorizontal?"x":"y"],v=Math.ceil(Math.abs(m)/f.boxSize),h=u(m);d>e.longSwipesMs?c(r+h*(m>0?-1:1)):c(m>0?r-v:r+v),w(n,i)}}}}(r,e,t,o),u=c.preheat,l=c.move,f=c.stop;function p(e){var t=a?e.changedTouches[0]:e;return{x:t.pageX,y:t.pageY}}function d(t){for(var n=0;n<r.excludeElements.length;n++)if(r.excludeElements[n].contains(t.target))return;
3var i,o,c,l,f=e.element.$wrapper,d=r.touchStartPreventDefault&&-1===s.indexOf(t.target.nodeName)||r.touchStartForcePreventDefault;!a&&d&&t.preventDefault(),u(p(t),(i=f,o=r.isHorizontal,c=getComputedStyle(i).transform.replace(/[a-z]|\(|\)|\s/g,"").split(",").map(parseFloat),l=[],16===c.length?l=c.slice(12,14):6===c.length&&(l=c.slice(4,6)),l[o?0:1]||0))}function m(e){r.touchMoveStopPropagation&&e.stopPropagation(),l(p(e)),t.isTouching&&!1!==e.cancelable&&e.preventDefault()}function v(){f()}return{attach:function(){var t=e.element.$el;a?(n(t,"touchstart",d,{passive:r.passiveListeners,capture:!1}),n(t,"touchmove",m),n(t,"touchend",v),n(t,"touchcancel",v)):(n(t,"mousedown",d),n(document,"mousemove",m),n(document,"mouseup",v))},detach:function(){var t=e.element.$el;i(t,"touchstart",d),i(t,"touchmove",m),i(t,"touchend",v),i(t,"touchcancel",v),i(t,"mousedown",d),i(document,"mousemove",m),i(document,"mouseup",v)}}}function b(e,t,n){var i=e.$list,r=t.viewSize,o=t.slideSize,a=t.boxSize,s=function(e){return e.loop?Math.ceil(e.slidesPerView):0}(n),c=s*a,u=-c+(n.centeredSlides?(r-o)/2:0);return{max:u,min:n.spaceBetween+(n.loop?o:r)+u-a*i.length,base:u,expand:s,buffer:c,minIndex:0,maxIndex:i.length-(n.centeredSlides||n.loop?1:Math.ceil(n.slidesPerView))}}function z(e,t){var n={};function i(e){var i=function(e,t){var n=t.$el,i=e.isHorizontal?n.offsetWidth:n.offsetHeight,r=(i-Math.ceil(e.slidesPerView-1)*e.spaceBetween)/e.slidesPerView;return{boxSize:r+e.spaceBetween,viewSize:i,slideSize:r}}(t,e),r=b(e,i,t),o=Boolean("ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0||window.DocumentTouch&&document instanceof DocumentTouch);Object.assign(n,{touchable:o,element:e,measure:i,limitation:r})}return n.update=i,i(e),n}var T="data-shallow-slider",P="data-slider";function E(e,n){function i(i){var r=e.element.$wrapper,o=i.index;r.querySelectorAll("["+P+"]").forEach((function(e){var i,r,a=~~e.getAttribute(P);i=e,void 0===(r=[n.slidePrevClass,n.slideNextClass,n.slideActiveClass])&&(r=[]),Array.isArray(r)||(r=[r]),r.forEach((function(e){return i.classList.contains(e)&&i.classList.remove(e)})),a===o&&t(e,n.slideActiveClass),a===o-1&&t(e,n.slidePrevClass),a===o+1&&t(e,n.slideNextClass)}))}function a(){e.element.$wrapper.querySelectorAll("["+T+"]").forEach((function(t){return e.element.$wrapper.removeChild(t)}))}function s(){e.element.$list.forEach((function(e,t){return r(e,P,t)})),a(),function(){if(n.loop){var t=e.element,i=e.limitation,o=t.$list,a=t.$wrapper,s=i.expand,c=o.slice(-s).map((function(e){return e.cloneNode(!0)})),u=o.slice(0,s).map((function(e){return e.cloneNode(!0)}));c.forEach((function(e,t){a.appendChild(r(u[t],T)),a.insertBefore(r(c[t],T),o[0])}))}}()}function c(){var t,i=e.element,r=e.measure,a=i.$wrapper,s={display:"flex",willChange:"transform",flexDirection:n.isHorizontal?"row":"column"},c=((t={})[n.isHorizontal?"width":"height"]=r.slideSize+"px",t[n.isHorizontal?"margin-right":"margin-bottom"]=n.spaceBetween+"px",t);o(a,s),a.querySelectorAll("["+P+"]").forEach((function(e){return o(e,c)}))}return{init:function(){s(),c()},render:function(t,r,o,a){var s=e.element.$wrapper,c=void 0===r?n.speed:r;n.injections.translate(t,e,n,c),t.isStart||i(t),a&&getComputedStyle(s).transform,o&&setTimeout(o,c)},destroy:function(){var t=e.element,i=t.$list,r=t.$wrapper,o=n.isHorizontal?"margin-right":"margin-bottom";["display","will-change","flex-direction"].forEach((function(e){r.style.removeProperty(e)})),i.forEach((function(e){return e.style.removeProperty(o)})),a()},updateSize:c}}function M(e,t){var n=e-t.max,i=e-t.min;return n>0?n:i<0?i:0}function A(t,n,i,r,o){function a(e){var n=t.measure;return Math.ceil(Math.abs(e)/n.boxSize-i.longSwipesRatio)}function s(e,t,i){r.render(n,e,t,i)}function c(r){var a,s=t.limitation,c=s.min,u=s.max,f=u-c+(i.loop?t.measure.boxSize:0),p=f+1;n.transforms=r,i.loop?(a=(u-r)%p/f,n.progress=a<0?1+a:a>1?a-1:a):(a=(u-r)/f,n.progress=a<0?0:a>1?1:a),o.emit(l,e({},n))}function p(e,r){var l=t.measure,p=t.limitation,d=p.maxIndex-p.minIndex+1,m=i.loop?(e%d+d)%d:e>p.maxIndex?p.maxIndex:e<p.minIndex?p.minIndex:e,v=-m*l.boxSize+p.base;if(0!==a(v-n.transforms)&&i.loop){var h=M(n.transforms,p),x=m-n.index,g=function(e,t,n,i){var r=n.maxIndex,o=(i>0?1:-1)*(n.minIndex-r-1)+t-e;return Math.abs(i)>Math.abs(o)?o:i}(n.index,m,p,x);g===x||h?n.index===m&&c(h>0?p.min-l.boxSize+h:p.max+l.boxSize+h):c(g<0?p.min-l.boxSize:p.max+l.boxSize),s(0,void 0,!0)}
3o.emit(u,n.index,n,m),n.index=m,c(v),s(r,(function(){o.emit(f,m,n)}))}return{update:function(){p(n.index,0),r.updateSize()},render:s,transform:c,slideTo:p,scrollPixel:function(e){var r=n.transforms,o=t.measure,a=t.limitation,s=Number(e.toExponential().split("e")[1]),u=s<=0?Math.pow(10,-(s-1)):1,l=r;if(i.resistance&&!i.loop&&(e>0&&r>=a.max?e-=Math.pow(e*u,i.resistanceRatio)/u:e<0&&r<=a.min&&(e+=Math.pow(-e*u,i.resistanceRatio)/u)),l+=e,i.loop){var f=n.tracker.vector(),p=i.isHorizontal?f.velocityX:f.velocityY,d=M(r,a);d&&function(e,t,n){return e>0&&t>n.max||e<0&&t<n.min}(p,r,a)&&(l=d>0?a.min-o.boxSize+d:a.max+o.boxSize+d)}c(l)},initStatus:function(e){void 0===e&&(e=0),n.startTransform=e,n.isStart=!1,n.isScrolling=!1,n.isTouching=!1},initLayout:function(e){c(e)},getOffsetSteps:a}}function C(e,t){var n="string"==typeof e?document.body.querySelector(e):e,i=n.querySelector("."+t.wrapperClass),r=[].slice.call(n.getElementsByClassName(t.slideClass));return{$el:n,$wrapper:i,$list:r=r.filter((function(e){return null===e.getAttribute("data-shallow-slider")}))}}var $=function t(n,i){var r,o=function(t){var n=e({},a,t);return e({},n,{isHorizontal:"horizontal"===n.direction})}(i),u=(r={},{on:function(e,t){r[e]?r[e].push(t):r[e]=[t]},off:function(e,t){if(r[e]){var n=r[e].indexOf(t);n>-1&&r[e].splice(n,1)}},emit:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];r[e]&&r[e].forEach((function(e){return e.apply(void 0,n)}))},clear:function(){r={}}}),l=z(C(n,o),o),f={tracker:v(),index:0,startTransform:0,isStart:!1,isScrolling:!1,isTouching:!1,transforms:0,progress:0},m=u.on,h=u.off,x=u.emit,g={on:m,off:h,env:l,state:f,options:o};(o.plugins||t.plugins||[]).forEach((function(e){return e(g,o)})),x(s,g);var S=E(l,o),w=A(l,f,o,S,u),b=y(l,f,o,w);var T=w.slideTo;return Object.assign(g,{update:function(){S.destroy(),l.update(C(n,o)),S.init(),w.update()},destroy:function(){x(p,g),b.detach(),S.destroy(),x(d,g),u.clear()},slideTo:T,updateSize:function(){l.update(C(n,o)),w.update()}}),S.init(),b.attach(),T(o.initialSlide,0),x(c,g),g};return $.use=function(e){$.plugins=e},$}()}},t={};!function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,n),o.exports}(2590)})();;
4(()=>{var e={7152:function(e){e.exports=function(){"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n,i=arguments[t];for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n])}return e}).apply(this,arguments)}function t(e,t){void 0===t&&(t=[]),Array.isArray(t)||(t=[t]),t.forEach((function(t){return!e.classList.contains(t)&&e.classList.add(t)}))}function n(e,t,n,i){e.addEventListener(t,n,i)}function i(e,t,n){e.removeEventListener(t,n)}function o(e,t,n){return void 0===n&&(n=""),e.setAttribute(t,n),e}function r(e,t,n){return Object.keys(t).forEach((function(n){e.style[n]=t[n]})),n&&getComputedStyle(e),e}var a={direction:"horizontal",touchRatio:1,touchAngle:45,longSwipesRatio:.5,initialSlide:0,loop:!1,freeMode:!1,passiveListeners:!0,resistance:!0,resistanceRatio:.85,speed:300,longSwipesMs:300,spaceBetween:0,slidesPerView:1,centeredSlides:!1,slidePrevClass:"swiper-slide-prev",slideNextClass:"swiper-slide-next",slideActiveClass:"swiper-slide-active",slideClass:"swiper-slide",wrapperClass:"swiper-wrapper",touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchMoveStopPropagation:!1,excludeElements:[],injections:{translate:function(e,t,n,i){r(t.element.$wrapper,{transition:e.isStart?"none":"transform ease "+i+"ms",transform:n.isHorizontal?"translate3d("+e.transforms+"px, 0, 0)":"translate3d(0, "+e.transforms+"px, 0)"})}}},s="before-slide",l="scroll",c="after-slide";var u=180/Math.PI;function d(){var t=[];return{getDuration:function(){var e=t[0],n=t[t.length-1];return e?n.time-e.time:0},getOffset:function(){var e=t[0],n=t[t.length-1];return e?{x:n.x-e.x,y:n.y-e.y}:{x:0,y:0}},getLogs:function(){return t},vector:function(){return i=(n=t).length-1,o=n[i],n=n[i-1]||o,i={x:o.x-n.x,y:o.y-n.y},o=o.time-n.time,n=i.x/o||0,o=i.y/o||0,e({},i,{angle:Math.atan2(Math.abs(i.y),Math.abs(i.x))*u,velocityX:n,velocityY:o});var n,i,o},clear:function(){t=[]},push:function(n){t.push(e({time:Date.now()},n))}}}function p(){return(performance||Date).now()}var f=requestAnimationFrame||webkitRequestAnimationFrame||setTimeout,m=cancelAnimationFrame||webkitCancelAnimationFrame||clearTimeout;function v(){var e=function(){var e,t;return{run:function(n){e=void 0===e?p():e,t=f((function(){var t=p(),i=t-e;e=t,n(i)}))},stop:function(){e=void 0,m(t)}}}();return{run:function t(n){e.run((function(e){t(n),n(e)}))},stop:function(){e.stop()}}}function x(e,t){e=e.tracker,t=t.initStatus,e.clear(),t()}function h(e,t,n,i){var o=i.initLayout,r=i.initStatus,a=i.render,s=i.scrollPixel,l=i.slideTo,c=i.getOffsetSteps,u=v();return{preheat:function(e,t){var i=n.tracker;u.stop(),i.clear(),i.push(e),o(t),r(t),n.isStart=!0,a()},move:function(t){var i,o=n.tracker,r=e.touchRatio,l=e.touchAngle,c=e.isHorizontal;n.isStart&&!n.isScrolling&&(o.push(t),i=o.vector(),((t=o.getOffset()).x||t.y)&&(c&&i.angle<l||!c&&90-i.angle<l||n.isTouching?(r=i[c?"x":"y"]*r,n.isTouching=!0,s(r),a()):(n.isScrolling=!0,o.clear())))},stop:function(){var o,r,d,p=n.index,f=n.tracker,m=t.measure;n.isStart&&(n.isStart=!1,e.freeMode?(o=f.vector()[e.isHorizontal?"velocityX":"velocityY"],u.run((function(e){e*=o,o*=.98,Math.abs(e)<.01?(u.stop(),x(n,i)):(s(e),a(0))}))):(r=f.getDuration(),d=f.getOffset()[e.isHorizontal?"x":"y"],f=Math.ceil(Math.abs(d)/m.boxSize),m=c(d),r>e.longSwipesMs?l(p+m*(0<d?-1:1)):l(0<d?p-f:p+f),x(n,i)))}}}function g(e,t){var n={};return(n.update=function(e){var i,o=function(e,t,n){var i=e.$list,o=t.viewSize,r=t.slideSize,a=t.boxSize,s=-(t=(e=(s=n).loop?Math.
4ceil(s.slidesPerView):0)*a)+(n.centeredSlides?(o-r)/2:0);return{max:s,min:n.spaceBetween+(n.loop?r:o)+s-a*i.length,base:s,expand:e,buffer:t,minIndex:0,maxIndex:i.length-(n.centeredSlides||n.loop?1:Math.ceil(n.slidesPerView))}}(e,(i=t,r=(o=e).$el,i={boxSize:(r=((o=i.isHorizontal?r.offsetWidth:r.offsetHeight)-Math.ceil(i.slidesPerView-1)*i.spaceBetween)/i.slidesPerView)+i.spaceBetween,viewSize:o,slideSize:r}),t),r=Boolean("ontouchstart"in window||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints||window.DocumentTouch&&document instanceof DocumentTouch);Object.assign(n,{touchable:r,element:e,measure:i,limitation:o})})(e),n}var b="data-shallow-slider",y="data-slider";function S(e,n){function i(){e.element.$wrapper.querySelectorAll("["+b+"]").forEach((function(t){return e.element.$wrapper.removeChild(t)}))}function a(){var t=e.element,i=e.measure,o=t.$wrapper,a={display:"flex",willChange:"transform",flexDirection:n.isHorizontal?"row":"column"},s=((t={})[n.isHorizontal?"width":"height"]=i.slideSize+"px",t[n.isHorizontal?"margin-right":"margin-bottom"]=n.spaceBetween+"px",t);r(o,a),o.querySelectorAll("["+y+"]").forEach((function(e){return r(e,s)}))}return{init:function(){(function(){var t,r,a,s,l,c;e.element.$list.forEach((function(e,t){return o(e,y,t)})),i(),n.loop&&(t=e.element,s=e.limitation,r=t.$list,a=t.$wrapper,s=s.expand,l=r.slice(-s).map((function(e){return e.cloneNode(!0)})),c=r.slice(0,s).map((function(e){return e.cloneNode(!0)})),l.forEach((function(e,t){a.appendChild(o(c[t],b)),a.insertBefore(o(l[t],b),r[0])})))})(),a()},render:function(i,o,r,a){var s=e.element.$wrapper;o=void 0===o?n.speed:o,n.injections.translate(i,e,n,o),i.isStart||function(i){var o=e.element.$wrapper,r=i.index;o.querySelectorAll("["+y+"]").forEach((function(e){var i,o,a=~~e.getAttribute(y);i=e,void 0===(o=[n.slidePrevClass,n.slideNextClass,n.slideActiveClass])&&(o=[]),Array.isArray(o)||(o=[o]),o.forEach((function(e){return i.classList.contains(e)&&i.classList.remove(e)})),a===r&&t(e,n.slideActiveClass),a==r-1&&t(e,n.slidePrevClass),a===r+1&&t(e,n.slideNextClass)}))}(i),a&&getComputedStyle(s).transform,r&&setTimeout(r,o)},destroy:function(){var t=e.element,o=t.$list,r=t.$wrapper,a=n.isHorizontal?"margin-right":"margin-bottom";["display","will-change","flex-direction"].forEach((function(e){r.style.removeProperty(e)})),o.forEach((function(e){return e.style.removeProperty(a)})),i()},updateSize:a}}function w(e,t){var n=e-t.max;return t=e-t.min,0<n?n:t<0?t:0}function E(t,n,i,o,r){function a(e){var n=t.measure;return Math.ceil(Math.abs(e)/n.boxSize-i.longSwipesRatio)}function u(e,t,i){o.render(n,e,t,i)}function d(o){var a,s,c=(s=t.limitation).min,u=s.max;c=(s=u-c+(i.loop?t.measure.boxSize:0))+1,n.transforms=o,i.loop?(a=(u-o)%c/s,n.progress=a<0?1+a:1<a?a-1:a):(a=(u-o)/s,n.progress=a<0?0:1<a?1:a),r.emit(l,e({},n))}function p(e,o){var l,p,f,m,v,x=t.measure,h=t.limitation,g=h.maxIndex-h.minIndex+1,b=i.loop?(e%g+g)%g:e>h.maxIndex?h.maxIndex:e<h.minIndex?h.minIndex:e,y=-b*x.boxSize+h.base;0!==a(y-n.transforms)&&i.loop&&(l=w(n.transforms,h),p=b-n.index,f=n.index,m=b,v=p,e=(g=h).maxIndex,f=(0<v?1:-1)*(g.minIndex-e-1)+m-f,(v=Math.abs(v)>Math.abs(f)?f:v)===p||l?n.index===b&&d(0<l?h.min-x.boxSize+l:h.max+x.boxSize+l):d(v<0?h.min-x.boxSize:h.max+x.boxSize),u(0,void 0,!0)),r.emit(s,n.index,n,b),n.index=b,d(y),u(o,(function(){r.emit(c,b,n)}))}return{update:function(){p(n.index,0),o.updateSize()},render:u,transform:d,slideTo:p,scrollPixel:function(e){var o,r=n.transforms,a=t.measure,s=t.limitation,l=(o=Number(e.toExponential().split("e")[1]))<=0?Math.pow(10,-(o-1)):1,c=r;i.resistance&&!i.loop&&(0<e&&r>=s.max?e-=Math.pow(e*l,i.resistanceRatio)/l:e<0&&r<=s.min&&(e+=Math.pow(-e*l,i.resistanceRatio)/l)),c+=e,i.loop&&(o=n.tracker.vector(),l=i.isHorizontal?o.velocityX:o.velocityY,(e=w(r,s))&&(o=r,r=s,0<l&&o>r.max||l<0&&o<r.min)&&(c=0<e?s.min-a.boxSize+e:s.max+a.boxSize+e)),d(c)},initStatus:function(e){void 0===e&&(e=0),n.startTransform=e,n.isStart=!1,n.isScrolling=!1,n.isTouching=!1},initLayout:function(e){d(e)},getOffsetSteps:a}}function z(e,t){var n="string"==typeof e?document.body.querySelector(e):e;return e=n.querySelector("."+t.wrapperClass),t=[].slice.call(n.getElementsByClassName(t.slideClass)),{$el:n,$wrapper:e,$list:t=t.filter((function(e){return null===e.getAttribute("data-shallow-slider")}))}}function L(t,o){var r=(u=e({},a,u=o),e({},u,{isHorizontal:"horizontal"===u.direction})),s=function(){var e={};return{on:function(t,n){e[t]?e[t].push(n):e[t]=[n]},off:function(t,n){!e[t]||-1<(n=e[t].indexOf(n))&&e[t].splice(n,1)},emit:function(t){for(var n=arguments.length,i=new Array(1<n?n-1:0),o=1;o<n;o++)i[o-1]=arguments[o];e[t]&&e[t].forEach((function(e){return e.apply(void 0,i)}))},clear:function(){e={}}}}(),l=g(z(t,r),r),c={tracker:d(),index:0,startTransform:0,isStart:!1,isScrolling:!1,isTouching:!1,transforms:0,progress:0},u=(o=s.on,s.off),p=s.emit,f={on:o,off:u,env:l,state:c,options:r};
4(r.plugins||L.plugins||[]).forEach((function(e){return e(f,r)})),p("before-init",f);var m=S(l,r),v=E(l,c,r,m,s),x=function(e,t,o,r){var a=e.touchable,s=["INPUT","SELECT","OPTION","TEXTAREA","BUTTON","VIDEO"],l=(r=h(o,e,t,r)).preheat,c=r.move,u=r.stop;function d(e){return{x:(e=a?e.changedTouches[0]:e).pageX,y:e.pageY}}function p(t){for(var n=0;n<o.excludeElements.length;n++)if(o.excludeElements[n].contains(t.target))return;var i,r=e.element.$wrapper,c=o.touchStartPreventDefault&&-1===s.indexOf(t.target.nodeName)||o.touchStartForcePreventDefault;!a&&c&&t.preventDefault(),l(d(t),(i=r,c=o.isHorizontal,r=getComputedStyle(i).transform.replace(/[a-z]|\(|\)|\s/g,"").split(",").map(parseFloat),i=[],16===r.length?i=r.slice(12,14):6===r.length&&(i=r.slice(4,6)),i[c?0:1]||0))}function f(e){o.touchMoveStopPropagation&&e.stopPropagation(),c(d(e)),t.isTouching&&!1!==e.cancelable&&e.preventDefault()}function m(){u()}return{attach:function(){var t=e.element.$el;a?(n(t,"touchstart",p,{passive:o.passiveListeners,capture:!1}),n(t,"touchmove",f),n(t,"touchend",m),n(t,"touchcancel",m)):(n(t,"mousedown",p),n(document,"mousemove",f),n(document,"mouseup",m))},detach:function(){var t=e.element.$el;i(t,"touchstart",p),i(t,"touchmove",f),i(t,"touchend",m),i(t,"touchcancel",m),i(t,"mousedown",p),i(document,"mousemove",f),i(document,"mouseup",m)}}}(l,c,r,v);return c=v.slideTo,Object.assign(f,{update:function(){m.destroy(),l.update(z(t,r)),m.init(),v.update()},destroy:function(){p("before-destroy",f),x.detach(),m.destroy(),p("after-destroy",f),s.clear()},slideTo:c,updateSize:function(){l.update(z(t,r)),v.update()}}),m.init(),x.attach(),c(r.initialSlide,0),p("after-init",f),f}return L.use=function(e){L.plugins=e},L}()},3266:function(e){e.exports=function(){"use strict";function e(e,t,n,i){e.addEventListener(t,n,i)}function t(e,t,n){e.removeEventListener(t,n)}return function(n,i){function o(e){c(e.target,"next")}function r(e){c(e.target,"prev")}var a=Boolean(i.navigation),s={nextEl:null,prevEl:null},l=Object.assign({disabledClass:"swiper-button-disabled"},i.navigation),c=function(e,t){u(e)&&!n.options.loop||(e=n.state.index,"next"===t&&n.slideTo(e+1),"prev"===t&&n.slideTo(e-1))},u=function(e){return e.classList.contains(l.disabledClass)};n.on("before-slide",(function(e,t,i){var o,r;n.options.loop||(o=i,i=(r=n.env.limitation).minIndex,r=r.maxIndex,s&&s.prevEl&&s.nextEl&&(s.nextEl.classList.contains(l.disabledClass)&&i<=o&&s.nextEl.classList.remove(l.disabledClass),s.prevEl.classList.contains(l.disabledClass)&&o<=r&&s.prevEl.classList.remove(l.disabledClass),o===i&&s.prevEl.classList.add(l.disabledClass),o===r&&s.nextEl.classList.add(l.disabledClass)))})),n.on("after-init",(function(){var t,i,c;a&&(s.nextEl="string"==typeof l.nextEl?document.body.querySelector(l.nextEl):l.nextEl,s.prevEl="string"==typeof l.prevEl?document.body.querySelector(l.prevEl):l.prevEl,n.options.loop||(t=n.state.index,i=n.env.element.$list,t===(c=n.env.limitation.minIndex)&&s.prevEl&&s.prevEl.classList.add(l.disabledClass),i.length===c&&s.nextEl&&s.nextEl.classList.add(l.disabledClass)),e(s.nextEl,"click",o),e(s.prevEl,"click",r))})),n.on("after-destroy",(function(){s&&s.prevEl&&s.nextEl&&(t(s.nextEl,"click",o),t(s.prevEl,"click",r),delete s.nextEl,delete s.prevEl)}))}}()}},t={};function n(i){var o=t[i];if(void 0!==o)return o.exports;var r=t[i]={exports:{}};return e[i].call(r.exports,r,r.exports,n),r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=n(7152),t=n.n(e),i=n(3266),o=n.n(i);!function(){const e=document.querySelectorAll(".wp-block-coblocks-gallery-carousel");for(let n=0;n<e.length;n++){let i=null,r=0,a=!1;const s=e[n],l=e=>{const t=s.querySelector(`.wp-block-coblocks-gallery-carousel-thumbnail-${r}`);if(t){t.classList.remove("is-active");const n=s.querySelector(`.wp-block-coblocks-gallery-carousel-thumbnail-${e}`);n&&n.classList.add("is-active")}},c=e=>{i?.slideTo(e),l(e),r=e},u=e=>{e!==r&&(l(e),r=e)},d=s.querySelector(".swiper-container");if(d){const e=d.getAttribute("data-swiper");if(e){const n=JSON.parse(e),r=s.querySelector(".nav-button__prev"),l=s.querySelector(".nav-button__next");r&&r.setAttribute("aria-label",coblocksTinyswiper.carouselPrevButtonAriaLabel),l&&l.setAttribute("aria-label",coblocksTinyswiper.carouselNextButtonAriaLabel);const p=s.querySelectorAll("img");for(let e=0;e<p.length;++e)p[e].alt||(p[e].alt=coblocksTinyswiper.sliderImageAriaLabel);const f={centeredSlides:!1,freeMode:!1,longSwipesRatio:.8,loop:!1,passiveListeners:!0,plugins:[],slidesPerView:1};if(!0===n.loop&&(f.loop=n.loop),n.slidesPerView&&(f.slidesPerView=n.slidesPerView),n.navigation&&(f.plugins=[...f.plugins,o()],f.navigation={nextEl:l,prevEl:r}),i=new(t())(d,f),new ResizeObserver((()=>{i.update()})).observe(d),n.thumbnails){const e=s.querySelectorAll(".wp-block-coblocks-gallery-carousel-thumbnail");for(const[t,n]of Object.entries(e))n.addEventListener("click",(()=>c(t)));const t=s.querySelector(".wp-block-coblocks-gallery-carousel-thumbnail-0");t&&t.classList.add("is-active")}if(!n.thumbnails&&n.pageDots){const e=s.querySelectorAll(".wp-block-coblocks-gallery-carousel-page-dot-pagination");for(const[t,n]of Object.entries(e))n.addEventListener("click",(()=>c(t)));const t=s.querySelector(".wp-block-coblocks-gallery-carousel-page-dot--0");t&&t.classList.add("is-active")}if(!0!==n.draggable){const e=s.querySelector(".swiper-wrapper");e?.addEventListener("mousedown",(e=>{e.stopPropagation()}))}!0===n.autoPlay&&n.autoPlaySpeed&&(!0===n.pauseHover&&(d.addEventListener("mouseenter",(()=>{a=!0})),d.addEventListener("mouseleave",(()=>{a=!1}))),setInterval((()=>{!0===n.pauseHover&&!0===a||i?.slideTo(i.state.index+1)}),n.autoPlaySpeed)),i.on("after-slide",u)}}}}()})()})();;
5/* global document */
6/* global jQuery */
7
8(function ($) {
9
10    'use strict';
11
12    var loadYoutube = function() {
13        $('.mace-youtube').each(function() {
14            var $youtube = $(this);
15
16            if($youtube.is('.mace-youtube-loaded')) {
17                return;
18            }
19
20            var videoUrl = $youtube.attr('data-mace-video');
21            var thumbUrl = $youtube.attr('data-mace-video-thumb');
22
23            var image = $('<img />');
24            image.attr('src', thumbUrl);
25
26            // Lazy loading.
27            image.attr({
28                'width':        1600,
29                'height':       900,
30                'src':          'data:image/svg+xml;charset=utf-8,%3Csvg xmlns%3D\'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\' viewBox%3D\'0 0 1600 900\'%2F%3
30E',
31                'data-src':     thumbUrl,
32                'data-expand':  600
33            });
34
35            image.addClass('lazyload');
36
37            image.on('load', function() {
38                $youtube.append( image );
39            }());
40
41            // Click to play YT.
42            $youtube.on('click', function() {
43                $youtube.find('iframe').remove();
44
45                var $iframe = $('<iframe>');
46
47                $iframe.on('load', function() {
48                    $youtube.trigger('maceIframeLoaded', [$iframe]);
49
50                    // Play video.
51                    $iframe[0].contentWindow.postMessage(JSON.stringify({
52                            'event': 'command',
53                            'func': 'playVideo',
54                            'args': ''}),
55                        '*');
56                });
57
58                $iframe.attr('frameborder', '0');
59                $iframe.attr('allowfullscreen', '');
60                $iframe.attr('src', videoUrl);
61
62                $youtube.empty().append($iframe);
63            });
64
65            $youtube.addClass('mace-youtube-loaded');
66        });
67    };
68
69    $(document).ready(function() {
70
71        loadYoutube();
72
73        $('body').on('maceLoadYoutube', loadYoutube);
74
75    });
76
77})(jQuery);
78
79;
80!function(a,b){var c=function(a,b,c){"use strict";var d,e;if(function(){var b,c={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};e=a.lazySizesConfig||a.lazysizesConfig||{};for(b in c)b in e||(e[b]=c[b])}(),!b||!b.getElementsByClassName)return{init:function(){},cfg:e,noSupport:!0};var f=b.documentElement,g=a.HTMLPictureElement,h=a.addEventListener.bind(a),i=a.setTimeout,j=a.requestAnimationFrame||i,k=a.requestIdleCallback,l=/^picture$/i,m=["load","error","lazyincluded","_lazyloaded"],n={},o=Array.prototype.forEach,p=function(a,b){return n[b]||(n[b]=new RegExp("(\\s|^)"+b+"(\\s|$)")),n[b].test(a.getAttribute("class")||"")&&n[b]},q=function(a,b){p(a,b)||a.setAttribute("class",(a.getAttribute("class")||"").trim()+" "+b)},r=function(a,b){var c;(c=p(a,b))&&a.setAttribute("class",(a.getAttribute("class")||"").replace(c," "))},s=function(a,b,c){var d=c?"addEventListener":"removeEventListener";c&&s(a,b),m.forEach(function(c){a[d](c,b)})},t=function(a,c,e,f,g){var h=b.createEvent("Event");return e||(e={}),e.instance=d,h.initEvent(c,!f,!g),h.detail=e,a.dispatchEvent(h),h},u=function(b,c){var d;!g&&(d=a.picturefill||e.pf)?(c&&c.src&&!b.getAttribute("srcset")&&b.setAttribute("srcset",c.src),d({reevaluate:!0,elements:[b]})):c&&c.src&&(b.src=c.src)},v=function(a,b){return(getComputedStyle(a,null)||{})[b]},w=function(a,b,c){for(c=c||a.offsetWidth;c<e.minSize&&b&&!a._lazysizesWidth;)c=b.offsetWidth,b=b.parentNode;return c},x=function(){var a,c,d=[],e=[],f=d,g=function(){var b=f;for(f=d.length?e:d,a=!0,c=!1;b.length;)b.shift()();a=!1},h=function(d,e){a&&!e?d.apply(this,arguments):(f.push(d),c||(c=!0,(b.hidden?i:j)(g)))};return h._lsFlush=g,h}(),y=function(a,b){return b?function(){x(a)}:function(){var b=this,c=arguments;x(function(){a.apply(b,c)})}},z=function(a){var b,d=0,f=e.throttleDelay,g=e.ricTimeout,h=function(){b=!1,d=c.now(),a()},j=k&&g>49?function(){k(h,{timeout:g}),g!==e.ricTimeout&&(g=e.ricTimeout)}:y(function(){i(h)},!0);return function(a){var e;(a=!0===a)&&(g=33),b||(b=!0,e=f-(c.now()-d),e<0&&(e=0),a||e<9?j():i(j,e))}},A=function(a){var b,d,e=function(){b=null,a()},f=function(){var a=c.now()-d;a<99?i(f,99-a):(k||e)(e)};return function(){d=c.now(),b||(b=i(f,99))}},B=function(){var g,k,m,n,w,B,D,E,F,G,H,I,J=/^img$/i,K=/^iframe$/i,L="onscroll"in a&&!/(gle|ing)bot/.test(navigator.userAgent),M=0,N=0,O=-1,P=function(a){N--,(!a||N<0||!a.target)&&(N=0)},Q=function(a){return null==I&&(I="hidden"==v(b.body,"visibility")),I||!("hidden"==v(a.parentNode,"visibility")&&"hidden"==v(a,"visibility"))},R=function(a,c){var d,e=a,g=Q(a);for(E-=c,H+=c,F-=c,G+=c;g&&(e=e.offsetParent)&&e!=b.body&&e!=f;)(g=(v(e,"opacity")||1)>
800)&&"visible"!=v(e,"overflow")&&(d=e.getBoundingClientRect(),g=G>d.left&&F<d.right&&H>d.top-1&&E<d.bottom+1);return g},S=function(){var a,c,h,i,j,l,m,o,p,q,r,s,t=d.elements;if((n=e.loadMode)&&N<8&&(a=t.length)){for(c=0,O++;c<a;c++)if(t[c]&&!t[c]._lazyRace)if(!L||d.prematureUnveil&&d.prematureUnveil(t[c]))$(t[c]);else if((o=t[c].getAttribute("data-expand"))&&(l=1*o)||(l=M),q||(q=!e.expand||e.expand<1?f.clientHeight>500&&f.clientWidth>500?500:370:e.expand,d._defEx=q,r=q*e.expFactor,s=e.hFac,I=null,M<r&&N<1&&O>2&&n>2&&!b.hidden?(M=r,O=0):M=n>1&&O>1&&N<6?q:0),p!==l&&(B=innerWidth+l*s,D=innerHeight+l,m=-1*l,p=l),h=t[c].getBoundingClientRect(),(H=h.bottom)>=m&&(E=h.top)<=D&&(G=h.right)>=m*s&&(F=h.left)<=B&&(H||G||F||E)&&(e.loadHidden||Q(t[c]))&&(k&&N<3&&!o&&(n<3||O<4)||R(t[c],l))){if($(t[c]),j=!0,N>9)break}else!j&&k&&!i&&N<4&&O<4&&n>2&&(g[0]||e.preloadAfterLoad)&&(g[0]||!o&&(H||G||F||E||"auto"!=t[c].getAttribute(e.sizesAttr)))&&(i=g[0]||t[c]);i&&!j&&$(i)}},T=z(S),U=function(a){var b=a.target;if(b._lazyCache)return void delete b._lazyCache;P(a),q(b,e.loadedClass),r(b,e.loadingClass),s(b,W),t(b,"lazyloaded")},V=y(U),W=function(a){V({target:a.target})},X=function(a,b){try{a.contentWindow.location.replace(b)}catch(c){a.src=b}},Y=function(a){var b,c=a.getAttribute(e.srcsetAttr);(b=e.customMedia[a.getAttribute("data-media")||a.getAttribute("media")])&&a.setAttribute("media",b),c&&a.setAttribute("srcset",c)},Z=y(function(a,b,c,d,f){var g,h,j,k,n,p;(n=t(a,"lazybeforeunveil",b)).defaultPrevented||(d&&(c?q(a,e.autosizesClass):a.setAttribute("sizes",d)),h=a.getAttribute(e.srcsetAttr),g=a.getAttribute(e.srcAttr),f&&(j=a.parentNode,k=j&&l.test(j.nodeName||"")),p=b.firesLoad||"src"in a&&(h||g||k),n={target:a},q(a,e.loadingClass),p&&(clearTimeout(m),m=i(P,2500),s(a,W,!0)),k&&o.call(j.getElementsByTagName("source"),Y),h?a.setAttribute("srcset",h):g&&!k&&(K.test(a.nodeName)?X(a,g):a.src=g),f&&(h||k)&&u(a,{src:g})),a._lazyRace&&delete a._lazyRace,r(a,e.lazyClass),x(function(){var b=a.complete&&a.naturalWidth>1;p&&!b||(b&&q(a,"ls-is-cached"),U(n),a._lazyCache=!0,i(function(){"_lazyCache"in a&&delete a._lazyCache},9)),"lazy"==a.loading&&N--},!0)}),$=function(a){if(!a._lazyRace){var b,c=J.test(a.nodeName),d=c&&(a.getAttribute(e.sizesAttr)||a.getAttribute("sizes")),f="auto"==d;(!f&&k||!c||!a.getAttribute("src")&&!a.srcset||a.complete||p(a,e.errorClass)||!p(a,e.lazyClass))&&(b=t(a,"lazyunveilread").detail,f&&C.updateElem(a,!0,a.offsetWidth),a._lazyRace=!0,N++,Z(a,b,f,d,c))}},_=A(function(){e.loadMode=3,T()}),aa=function(){3==e.loadMode&&(e.loadMode=2),_()},ba=function(){if(!k){if(c.now()-w<999)return void i(ba,999);k=!0,e.loadMode=3,T(),h("scroll",aa,!0)}};return{_:function(){w=c.now(),d.elements=b.getElementsByClassName(e.lazyClass),g=b.getElementsByClassName(e.lazyClass+" "+e.preloadClass),h("scroll",T,!0),h("resize",T,!0),h("pageshow",function(a){if(a.persisted){var c=b.querySelectorAll("."+e.loadingClass);c.length&&c.forEach&&j(function(){c.forEach(function(a){a.complete&&$(a)})})}}),a.MutationObserver?new MutationObserver(T).observe(f,{childList:!0,subtree:!0,attributes:!0}):(f.addEventListener("DOMNodeInserted",T,!0),f.addEventListener("DOMAttrModified",T,!0),setInterval(T,999)),h("hashchange",T,!0),["focus","mouseover","click","load","transitionend","animationend"].forEach(function(a){b.addEventListener(a,T,!0)}),/d$|^c/.test(b.readyState)?ba():(h("load",ba),b.addEventListener("DOMContentLoaded",T),i(ba,2e4)),d.elements.length?(S(),x._lsFlush()):T()},checkElems:T,unveil:$,_aLSL:aa}}(),C=function(){var a,c=y(function(a,b,c,d){var e,f,g;if(a._lazysizesWidth=d,d+="px",a.setAttribute("sizes",d),l.test(b.nodeName||""))for(e=b.getElementsByTagName("source"),f=0,g=e.length;f<g;f++)e[f].setAttribute("sizes",d);c.detail.dataAttr||u(a,c.detail)}),d=function(a,b,d){var e,f=a.parentNode;f&&(d=w(a,f,d),e=t(a,"lazybeforesizes",{width:d,dataAttr:!!b}),e.defaultPrevented||(d=e.detail.width)&&d!==a._lazysizesWidth&&c(a,f,e,d))},f=function(){var b,c=a.length;if(c)for(b=0;b<c;b++)d(a[b])},g=A(f);return{_:function(){a=b.getElementsByClassName(e.autosizesClass),h("resize",g)},checkElems:g,updateElem:d}}(),D=function(){!D.i&&b.getElementsByClassName&&(D.i=!0,C._(),B._())};return i(function(){e.init&&D()}),d={cfg:e,autoSizer:C,loader:B,init:D,uP:u,aC:q,rC:r,hC:p,fire:t,gW:w,rAF:x}}(a,a.document,Date);a.lazySizes=c,"object"==typeof module&&module.exports&&(module.exports=c)}("undefined"!=typeof window?window:{});;
81/*! lazysizes - v5.2.0 */
82!function(a,b){var c=function(){b(a.lazySizes),a.removeEventListener("lazyunveilread",c,!0)};b=b.bind(null,a,a.document),"object"==typeof module&&module.exports?b(require("lazysizes")):a.lazySizes?c():a.addEventListener("lazyunveilread",c,!0)}(window,function(a,b,c){"use strict";function d(a,c){if(!g[a]){var d=b.createElement(c?"link":"script"),e=b.getElementsByTagName("script")[0];c?(d.rel="stylesheet",d.href=a):d.src=a,g[a]=!0,g[d.src||d.href]=!0,e.parentNode.insertBefore(d,e)}}var e,f,g={};b.addEventListener&&(f=/\(|\)|\s|'/,e=function(a,c){var d=b.createElement("img");d.onload=function(){d.onload=null,d.onerror=null,d=null,c()},d.onerror=d.onload,d.src=a,d&&d.complete&&d.onload&&d.onload()}
82,addEventListener("lazybeforeunveil",function(a){if(a.detail.instance==c){var b,g,h,i;if(!a.defaultPrevented){var j=a.target;if("none"==j.preload&&(j.preload=j.getAttribute("data-preload")||"auto"),null!=j.getAttribute("data-autoplay"))if(j.getAttribute("data-expand")&&!j.autoplay)try{j.play()}catch(a){}else requestAnimationFrame(function(){j.setAttribute("data-expand","-10"),c.aC(j,c.cfg.lazyClass)});b=j.getAttribute("data-link"),b&&d(b,!0),b=j.getAttribute("data-script"),b&&d(b),b=j.getAttribute("data-require"),b&&(c.cfg.requireJs?c.cfg.requireJs([b]):d(b)),h=j.getAttribute("data-bg"),h&&(a.detail.firesLoad=!0,g=function(){j.style.backgroundImage="url("+(f.test(h)?JSON.stringify(h):h)+")",a.detail.firesLoad=!1,c.fire(j,"_lazyloaded",{},!0,!0)},e(h,g)),i=j.getAttribute("data-poster"),i&&(a.detail.firesLoad=!0,g=function(){j.poster=i,a.detail.firesLoad=!1,c.fire(j,"_lazyloaded",{},!0,!0)},e(i,g))}}},!1))});;
83/* global document */
84/* global window */
85/* global jQuery */
86/* global macegallery */
87
88(function ($) {
89
90    'use strict';
91
92    var config = $.parseJSON(macegallery);
93    var template = config.html;
94    var sharesTemplate = config.shares;
95
96    var Gallery = function($gallery) {
97        var data          = $gallery.attr('data-g1-gallery');
98        var galleryId     = $gallery.attr('id');
99        var items         = $.parseJSON(data);
100        var galleryLength = items.length;
101        var imagesLength  = 0;
102
103        items.forEach(function(item) {
104            if (item.type === 'image') {
105                imagesLength++;
106            }
107        });
108
109        var galleryTitle = $gallery.attr('data-g1-gallery-title');
110        var ShareUrl = $gallery.attr('data-g1-share-shortlink');
111        var currentIndex = 0;
112        var currentImageIndex = 0;
113        var isGalleryVisible = false;
114        var currentSidebarCollectionOffset = 0;
115        var maxSidebarCollectionOffset = Math.ceil((imagesLength - 9) / 3);
116        var html = template;
117
118        var init = function() {
119            captureLightbox();
120            bindEvents();
121
122            var hash = window.location.hash;
123
124            hash = hash.replace('#','');
125
126            if( hash === galleryId ) {
127                $gallery.trigger('click');
128            }
129        };
130
131        var bindEvents = function() {
132            $gallery.on('click', function(){
133                var $appendedElements = $(html);
134
135                // Don't load ad until we can check whether the sidebar is visible or not.
136                var $sidebarAd = $appendedElements.find('.g1-gallery-sidebar .g1-gallery-ad');
137                var sidebarAdHTML = $sidebarAd.html();
138                $sidebarAd.html('');
139
140                $appendedElements.appendTo("body");
141                $appendedElements.append(buildStyle());
142                $('.g1-gallery-thumbnail-1').addClass('g1-gallery-thumbnail-active');
143                bindLightboxEvents($appendedElements);
144                hideThumbnailsIfTooSmall();
145                $('body').addClass('g1-gallery-visible');
146                isGalleryVisible = true;
147                switchToIndex(0, true);
148
149                // Load ad is the sidebar is visible.
150                if ( $sidebarAd.is(':visible') ) {
151                    $sidebarAd.html(sidebarAdHTML);
152                }
153            });
154        };
155
156        var bindLightboxEvents = function($appendedElements) {
157            $( window ).resize(function() {
158                hideThumbnailsIfTooSmall();
159            });
160            $('.g1-gallery-close-button').on('click', function(){
161                $('body').removeClass('g1-gallery-visible');
162                setTimeout(function() {
163                    setSidebarThumbnailsOffset(0);
164                    $appendedElements.remove();
165                    currentSidebarCollectionOffset = 0;
166                    isGalleryVisible = false;
167                }, 375);
168            });
169
170            $('.g1-gallery-thumbs-button, .g1-gallery-back-to-slideshow').on('click', function(){
171                $appendedElements.toggleClass('g1-gallery-thumbnails-mode');
172            });
173            $('.g1-gallery-thumbnail').on('click', function(){
174                var index = parseInt($(this).attr('data-g1-gallery-index'), 10);
175                switchToIndex(index);
176            });
177
178            $('.g1-gallery-previous-frame').on('click', function(){
179                handlePrevFrame();
180            });
181            $('.g1-gallery-next-frame').on('click', function(){
182                handleNextFrame();
183            });
184
185            $(document).keydown(function (e){
186                if (isGalleryVisible) {
187                    if(e.keyCode == 37){
188                        handlePrevFrame();
189                    }
190                    if(e.keyCode == 39){
191                        handleNextFrame();
192                    }
193                }
194            });
195
196            $('.g1-gallery-thumbnails-up').on('click', function(){
197                if (currentSidebarCollectionOffset > 0) {
198                    setSidebarThumbnailsOffset(currentSidebarCollectionOffset-1);
199                }
200            });
201            $('.g1-gallery-thumbnails-down').on('click', function(){
202                if (currentSidebarCollectionOffset < maxSidebarCollectionOffset) {
203                    setSidebarThumbnailsOffset(currentSidebarCollectionOffset+1);
204                }
205            });
206        };
207
208        var hideThumbnailsIfTooSmall = function() {
209            $('.g1-gallery-thumbnails').show();
210            if($('.g1-gallery-thumbnails').height() < 200){
211                $('.g1-gallery-thumbnails').hide();
212            }
213        };
214
215        var handleNextFrame = function() {
216            if (currentIndex === galleryLength - 1){
217                return;
218            }
219
220            switchToIndex(currentIndex + 1);
221        };
222
223        var handlePrevFrame = function () {
224            if (currentIndex === 0){
225                return;
226            }
227
228            switchToIndex(currentIndex - 1);
229        };
230
231        var switchToIndex = function(index, delay){
232            var item = items[index];
233            currentIndex = index;
234
235            updateImageIndex();
236
237            $('.g1-gallery-frame-visible').removeClass('g1-gallery-frame-visible');
238            $('.g1-gallery-wrapper').removeClass('g1-gallery-ad-mode');
239
240            if (item.type === 'image') {
241                $('.g1-gallery-thumbnail').removeClass('g1-gallery-thumbnail-active');
242                $('.g1-gallery-thumbnail-' + currentIndex).addClass('g1-gallery-thumbnail-active');
243                $('.g1-gallery-frame-' + currentIndex).addClass('g1-gallery-frame-visible');
244                $('.g1-gallery-wrapper').removeClass('g1-gallery-thumbnails-mode');
245                $('.g1-gallery-numerator-current').html(currentImageIndex);
246
247                var imageUrl = $('.g1-gallery-frame-visible').attr('data-g1-share-image');
248
249                // Check why calling setupShares() affects slide switching speed.
250                if (delay) {
251                    setTimeout(function() {
252                        setupShares(imageUrl);
253                    }, 500);
254                } else {
255                    setupShares(imageUrl);
256                }
257
258                // set up sidebar thumbs.
259                var row = Math.ceil((currentIndex - 1)/3);
260                var newOffset = row - 1;
261                if (newOffset > maxSidebarCollectionOffset){
262                    newOffset = maxSidebarCollectionOffset;
263                }
264                if (newOffset < 0 ){
265                    newOffset = 0;
266                }
267
268                setSidebarThumbnailsOffset(newOffset);
269            }
270
271            if (item.type === 'ad') {
272                var $adFrame = $('.g1-gallery-frame-ad-' + index);
273
274                $('.g1-gallery-frame-' + currentIndex).removeClass('g1-gallery-frame-visible');
275                $('.g1-gallery-thumbnail').removeClass('g1-gallery-thumbnail-active');
276                $adFrame.addClass('g1-gallery-frame-visible');
277                $('.g1-gallery-wrapper').addClass('g1-gallery-ad-mode');
278
279                // Ad not loaded?
280                if ($adFrame.find('.g1-gallery-ad:not(.g1-ad-loaded)').length > 0) {
281                    $adFrame.find('.g1-gallery-ad').append(items[index].html).addClass('g1-ad-loaded');
282                }
283            }
284        };
285
286        var updateImageIndex = function() {
287            currentImageIndex = 0;
288
289            for (var index in items) {
290                if (items[index].type === 'image') {
291                    currentImageIndex++;
292                }
293
294                if (index == currentIndex) {
295                    break;
296                }
297            }
298        };
299
300        var setupShares = function(imageUrl) {
301            var shareHtml = sharesTemplate;
302            shareHtml = shareHtml.replace(new RegExp(/mace_replace_shortlink/g), encodeURIComponent(ShareUrl));
303            shareHtml = shareHtml.replace(new RegExp(/mace_replace_title/g), encodeURIComponent(galleryTitle));
304            shareHtml = shareHtml.replace(new RegExp(/mace_replace_image_url/g), encodeURIComponent(imageUrl));
305            shareHtml = shareHtml.replace(new RegExp(/mace_replace_noesc_shortlink/g), ShareUrl);
306            shareHtml = shareHtml.replace(new RegExp(/mace_replace_noesc_title/g), galleryTitle);
307            shareHtml = shareHtml.replace(new RegExp(/mace_replace_noesc_image_url/g), imageUrl);
308            shareHtml = shareHtml.replace(new RegExp(/mace_replace_unique/g), Math.random().toString(36).substr(2, 16));
309
310            $('.g1-gallery-shares').html(shareHtml);
311
312            // Remove this one as it forces entire FB SDK to reload!
313            jQuery('body').trigger('maceGalleryItemChanged');
314        };
315
316        var setSidebarThumbnailsOffset = function(offset){
317            $('.g1-gallery-sidebar .g1-gallery-thumbnail').css('top', offset * - 108);
318            currentSidebarCollectionOffset = offset;
319        };
320
321        var captureLightbox = function() {
322            var frames          = buildFrames();
323            var thumbnails      = buildThumbnails('thumbnail');
324            var thumbnails32    = buildThumbnails('3-2-thumbnail');
325            var numerator       = buildNumerator();
326            var title           = galleryTitle;
327            html = html.replace( '{frames}', frames);
328            html = html.replace( '{thumbnails}', thumbnails);
329            html = html.replace( '{thumbnails32}', thumbnails32);
330            html = html.replace( '{numerator}', numerator);
331            html = html.replace( '{title}', title);
332        };
333
334        var buildStyle = function() {
335            var out = '<style>';
336            items.forEach( function(item) {
337                if(item.type === 'image'){
338                    out += '.g1-gallery-image-' + item.id + '{ background-image:url(' + item.full +'); }';
339                }
340            });
341            return out;
342        };
343
344        var buildFrames = function() {
345            var out = '';
346            var index = 0;
347            items.forEach( function(item) {
348                if (item.type === 'image') {
349                    out += '<div class="g1-gallery-frame g1-gallery-frame-' + index + '" data-g1-share-image="' + item.full + '">';
350                    out += '<div class="g1-gallery-image g1-gallery-image-' + item.id + ' ">';
351                    out += '<a class="g1-gallery-previous-frame"></a>';
352                    out += '<a class="g1-gallery-next-frame"></a>';
353                    out += '</div>';
354                    out += '<div class="g1-gallery-image-title">' + item.title + '</div></div>'
355                }
356                if (item.type === 'ad') {
357                    out += '<div class="g1-gallery-frame g1-gallery-frame-' + index + ' g1-gallery-frame-ad g1-gallery-frame-ad-' + index + '">';
358                    out += '<div class="g1-gallery-ad">';
359                    out += '<a class="g1-gallery-previous-frame"></a>';
360                    out += '<a class="g1-gallery-next-frame"></a>';
361                    out += '</div></div>';
362                }
363
364                index += 1;
365            });
366            return out;
367        };
368
369        var buildThumbnails = function(size) {
370            var out = '';
371            for (var index in items) {
372                var item = items[index];
373
374                if (item.type === 'image') {
375                    out += '<div class="g1-gallery-thumbnail g1-gallery-thumbnail-' + index + '" data-g1-gallery-index="' + index + '">';
376                    out += '<img src="' + item[size] + '">';
377                    out += '</div>';
378                }
379            }
380
381            return out;
382        };
383
384        var buildNumerator = function() {
385            return '<span class="g1-gallery-numerator-current">1</span> ' + config.i18n.of + ' <span class="g1-gallery-numerator-max">' + imagesLength + '</span>';
386        };
387
388        return init();
389    };
390
391    // Fire.
392    $(document).ready(function() {
393        setupGalleries($('body'));
394    });
395
396    $('body').on('g1NewContentLoaded', function( e, $newContent ){
397        setupGalleries($newContent);
398    });
399
400    var setupGalleries = function($scope) {
401        $('.mace-gallery-teaser', $scope).each(function() {
402            new Gallery($(this));
403        });
404    };
405
406})(jQuery);
407;
408"undefined"==typeof window.snax_collections&&(window.snax_collections={}),function(a,b){"use strict";b.AddPopup=function(){var c,d,e={},f={},g={},h={popup:"#snax-popup-add-to-collection",popupInner:".snax-add-to-collection",leading:".snax-collections-leading",searchInput:"input[name=snax-collection-search]",searchSubmit:"input[name=snax-collection-save]",searchForm:"form.snax-form-collection-search",items:".snax-collections-items",item:".snax-collections-item",itemTitle:".snax-collection-title",itemTitleLink:".snax-collection-title > a",publicItemTpl:".snax-collections-item >
408 .snax-collection-public",privateItemTpl:".snax-collections-item > .snax-collection-private"},i={popupLoading:"snax-add-to-collection-loading"};e.open=function(a,b){if(g={postId:a,nonce:b},"function"!=typeof snax.openPopup)throw new Error("openPopup() not defined!");d.find(h.searchInput).val(""),snax.openPopup(d);var c=d.find(h.popupInner),e=d.find(h.leading);c.addClass(i.popupLoading),e.hide(),j(function(a,b){c.removeClass(i.popupLoading),0===b&&e.show()})},e.close=function(){snax.closePopup()};var j=function(b){var e=a.ajax({type:"GET",url:c.ajax_url,dataType:"json",data:{action:"snax_get_user_collections"}});e.done(function(a){var c="success"===a.status;if(c){var e=d.find(h.items);e.empty();for(var g in a.args.list){var i=a.args.list[g],j=f[i.visibility].clone(),k='<a href="#" data-snax-collection="'+i.ID+'">'+i.post_title+"</a>";j.find(h.itemTitle).html(k),e.append(j)}}"function"==typeof b&&b(c,a.args.list.length)})},k=function(b,d){var e=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_save_collection",security:g.nonce,snax_title:b}});e.done(function(a){var b="success"===a.status;d(!!b&&a.args.collection_id)})},l=function(){a(h.searchForm,d).on("submit",function(c){c.preventDefault();var d=a(this).find(h.searchInput).val();e.close(),k(d,function(a){if(!1===a)throw new Error("Collection not saved!");b.addToCollection(a,g.postId,g.nonce)})})},m=function(){d.on("click",h.item,function(c){c.preventDefault();var d=a(this).find("a").data("snax-collection");e.close(),b.addToCollection(d,g.postId,g.nonce)})},n=function(){var b=function(b){var c=d.find(h.itemTitleLink);d.find(h.item).show(),0!==b.length&&(b=b.toLowerCase(),c.each(function(){var c=a(this).text().toLowerCase();-1===c.indexOf(b)&&a(this).parents(h.item).hide()}))};d.find(h.searchInput).on("keyup",function(){var c=a(this).val(),e=d.find(h.searchSubmit);c.length>0?e.removeAttr("disabled"):e.attr("disabled","disabled"),b(c)})},o=function(){l(),m(),n()},p=function(){if(d=a(h.popup),0===d.length)throw new Error("Add collection popup not found!");return c=a.parseJSON(snax_collections_js_config),f.public=d.find(h.publicItemTpl).parent().detach(),f.private=d.find(h.privateItemTpl).parent().detach(),o(),e};return p()}}(jQuery,snax_collections),function(a,b){"use strict";var c,d,e={postContainer:".snax-post-container",collectionItems:".snax-collection-items",collectionItem:".snax-collection-item",actions:".snax-collection-actions",addAction:".snax-action-add-to-collection",clearAllAction:".snax-collection-action-clear-all",removeCollectionAction:".snax-collection-action-delete",removePostAction:".snax-collection-action-remove-post",itemCount:".snax-collection-item-count",featuredMedia:".snax-collection-essentials .entry-featured-media .g1-frame-inner",meta:".snax-collection-essentials .snax-collection-meta",editForm:"form.snax-edit-collection",cancelAction:".snax-edit-collection-actions > a",mediaForm:".snax-media-upload-form",titleField:"input[name=snax-title]",descriptionField:"textarea[name=snax-description]",visibilityField:"input[name=snax-visibility]",featuredMediaField:"input[name=snax-featured-image]"},f={itemAdded:"snax-collection-item-added",itemAdding:"snax-collection-item-adding",itemRemoved:"snax-collection-item-removed",itemRemoving:"snax-collection-item-removing"};b.addToCollection=function(b,d,e,f){var g=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_add_to_collection",security:e,snax_collection:b,snax_post_id:d}});g.done(function(a){var b="success"===a.status;b&&snax.notifications&&snax.notifications.add(a.args.html),"function"==typeof f&&f(b)})},b.removeCollection=function(b,d,e){var f=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_remove_collection",security:d,snax_collection_id:b}});f.done(function(a){var b="success"===a.status;e(b)})},b.removePost=function(b,d,e,f){var g=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_remove_post_from_collection",security:e,snax_post_id:b,snax_collection_id:d}});g.done(function(a){var b="success"===a.status;f(b)})},b.clearAll=function(b,d){var e=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_remove_all_from_collection",security:d,snax_collection_id:b}});e.done(function(a){var b="success"===a.status;b&&(window.location.href=a.args.redirect_to)})},b.updateCollectionFeaturedImage=function(b){var d=a.ajax({type:"GET",url:c.ajax_url,dataType:"json",data:{action:"snax_get_collection_featured_media",snax_collection_id:b}});d.done(function(b){var c="success"===b.status;if(c){var d=a(e.featuredMedia),f=d.find("img"),g=a(b.args.html);f.attr("src")!==g.attr("src")&&d.html(g)}})},b.updateCollectionMeta=function(b){var d=a.ajax({type:"GET",url:c.ajax_url,dataType:"json",data:{action:"snax_get_collection_meta",snax_collection_id:b}});d.done(function(b){var c="success"===b.status;c&&a(e.meta).replaceWith(b.args.html)})},b.saveCollection=function(b,d,e){var f=a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_save_collection",security:c.nonce,snax_collection_id:b,snax_title:d.title||"",snax_description:d.description||"",snax_visibility:d.visibility||"private",snax_featured_media:d.featuredMedia||""}});f.done(function(a){var b="success"===a.status;e&&e(b,a.args.collection_url)})},b.addToCollectionEvent=function(){a("body").on("click",e.addAction,function(){var e=a(this),g=parseInt(c.user_id,10);if(!g)return void(window.location.href=e.data("snax-redirect"));var h=e.data("snax-collection"),i=e.data("snax-post"),j=e.data("snax-nonce");h&&i&&j&&("custom"===h?(d||(d=b.AddPopup()),d.open(i,j)):(e.addClass(f.itemAdding),b.addToCollection(h,i,j,function(a){a&&(e.addClass(f.itemAdded),e.prop("disabled",!0))})))})},b.removeCollectionEvent=function(){a("body").on("click",e.removeCollectionAction,function(){if(confirm(c.i18n.are_you_sure_remove)){var d=a(this),f=parseInt(c.user_id,10);if(0!==f){var g=d.parents(e.actions),h=g.data("snax-collection"),i=g.data("snax-nonce");h&&i&&(snax.notifications&&snax.notifications.add(c.i18n.removed),b.removeCollection(h,i,function(a){a&&(window.location.href=c.home_url)}))}}})},b.removeFromCollectionEvent=function(){a("body").on("click",e.removePostAction,function(){var d=a(this),g=parseInt(c.user_id,10);if(0!==g){var h=d.data("snax-post"),i=d.parents(e.collectionItems).data("snax-collection"),j=d.data("snax-nonce");if(h&&i&&j){var k=d.parents(e.collectionItem);k.addClass(f.itemRemoving),b.removePost(h,i,j,function(a){a&&(k.addClass(f.itemRemoved),k.slideToggle(375),setTimeout(function(){var a=d.parents(e.postContainer).find(e.itemCount);a.text(parseInt(a.text(),10)-1)},375),b.updateCollectionFeaturedImage(i),b.updateCollectionMeta(i))})}}})},b.clearAllEvent=function(){a("body").on("click",e.clearAllAction,function(){if(confirm(c.i18n.are_you_sure_clear_all)){var d=parseInt(c.user_id,10);if(0!==d){var f=a(this).parents(e.actions),g=f.data("snax-collection"),h=f.data("snax-nonce");g&&h&&(snax.notifications&&snax.notifications.add(c.i18n.removing_items),b.clearAll(g,h))}}})},b.clearPreviewEvent=function(){var b=a(e.editForm);b.find("a.snax-media-action-delete-featured").parents(".snax-object-actions").remove();var c=b.find("a.snax-delete-collection-image").parents(".snax-object-actions").hide(),d=b.find("#snax-featured-image");if(d.length>0){var f=c.clone();f.insertAfter(d.find(".snax-object-container")).show(),f.on("click","a.snax-delete-collection-image",function(c){c.preventDefault(),b.find(e.featuredMediaField).val(""),a("#snax-featured-image").empty(),b.find(".snax-tab-content-featured-image").addClass("snax-tab-content-visible").removeClass("snax-tab-content-hidden")})}},b.editFormEvents=function(){var c=a(e.editForm),d=c.find(e.mediaForm);d.on("snaxFileUploaded",function(a,b){c.find(e.featuredMediaField).val(b)}),b.clearPreviewEvent(),d.on("snaxPreviewLoaded",function(a,c){b.clearPreviewEvent()}),c.on("submit",function(a){a.preventDefault();var d=c.data("snax-collection"),f=c.find(e.titleField).val();if(0===f.length)return void alert("Please fill in the title");var g=c.find(e.descriptionField).val(),h=c.find(e.visibilityField+":checked").val(),i=c.find(e.featuredMediaField).val(),j={title:f,description:g,visibility:h,featuredMedia:i},k=c.find("input[type=submit]");k.attr("disabled","disabled"),b.saveCollection(d,j,function(a,b){a?window.location.href=b:k.removeAttr("disabled")})}),c.on("click",e.cancelAction,function(){a(this).css("pointerEvents","none")})},b.bindEvents=function(){b.addToCollectionEvent(),b.removeCollectionEvent(),b.removeFromCollectionEvent(),b.clearAllEvent(),b.editFormEvents()},b.storeInHistory=function(b){c.user_id<=0||a.ajax({type:"POST",url:c.ajax_url,dataType:"json",data:{action:"snax_add_to_collection",security:c.nonce,snax_post_id:b,snax_collection:"history"}})},b.init=function(){c=a.parseJSON(snax_collections_js_config),b.bindEvents(),"on"===c.history&&c.post_id>0&&b.storeInHistory(c.post_id)},a(document).ready(function(){b.init()})}(jQuery,snax_collections);;
409/*! Magnific Popup - v1.1.0 - 2016-02-20
410* http://dimsemenov.com/plugins/magnific-popup/
411* Copyright (c) 2016 Dmitry Semenov; */
412!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f="",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos="auto"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x("bg").on("click"+p,function(){b.close()}),b.wrap=x("wrap").attr("tabindex",-1).on("click"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x("container",b.wrap)),b.contentContainer=x("content"),b.st.preloader&&(b.preloader=x("preloader",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b["init"+j].call(b)}y("BeforeOpen"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=" mfp-close-btn-in"):b.wrap.append(z())),b.st.alignTop&&(f+=" mfp-align-top"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:"hidden",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:"absolute"}),(b.st.fixedBgPos===!1||"auto"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:"absolute"}),b.st.enableEscapeKey&&d.on("keyup"+p,function(a){27===a.keyCode&&b.close()}),v.on("resize"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=" mfp-auto-cursor"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a("body, html").css("overflow","hidden"):n.overflow="hidden");var r=b.st.mainClass;return b.isIE7&&(r+=" mfp-ie7"),r&&b._addClassToMFP(r),b.updateItemHTML(),y("BuildControls"),a("html").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on("focusin"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+" "+q+" ";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+" "),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:""};b.isIE7?a("body, html").css("overflow",""):e.overflow="",a("html").css(e)}d.off("keyup"+p+" focusin"+p),b.ev.off(p),b.wrap.attr("class","mfp-wrap").removeAttr("style"),b.bgOverlay.attr("class","mfp-bg"),b.container.attr("class","mfp-container"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)}
412,updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css("height",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css("height",b.wH),y("Resize")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y("BeforeChange",[b.currItem?b.currItem.type:"",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y("FirstMarkupParse",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass("mfp-"+e+"-holder");var g=b["get"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y("AfterChange")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(".mfp-close").length||b.content.append(z()):b.content=a:b.content="",y(k),b.container.addClass("mfp-"+c+"-holder"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass("mfp-"+f[g])){d=f[g];break}e.src=e.el.attr("data-mfp-src"),e.src||(e.src=e.el.attr("href"))}return e.type=d||b.st.type||"inline",e.index=c,e.parsed=!0,b.items[c]=e,y("ElementParse",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e="click.magnificPopup";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass("mfp-s-"+c),d||"loading"!==a||(d=b.st.tLoading);var e={status:a,text:d};y("UpdateStatus",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find("a").on("click",function(a){a.stopImmediatePropagation()}),b.container.addClass("mfp-s-"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass("mfp-close")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("<img>").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1
412));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("<div>");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;
412var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});
412var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('<img class="mfp-img" />').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()});;
413/**
414 * Timeago is a jQuery plugin that makes it easy to support automatically
415 * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
416 *
417 * @name timeago
418 * @version 1.5.2
419 * @requires jQuery v1.2.3+
420 * @author Ryan McGeary
421 * @license MIT License - http://www.opensource.org/licenses/mit-license.php
422 *
423 * For usage and examples, visit:
424 * http://timeago.yarp.com/
425 *
426 * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
427 */
428
429(function (factory) {
430  if (typeof define === 'function' && define.amd) {
431    // AMD. Register as an anonymous module.
432    define(['jquery'], factory);
433  } else if (typeof module === 'object' && typeof module.exports === 'object') {
434    factory(require('jquery'));
435  } else {
436    // Browser globals
437    factory(jQuery);
438  }
439}(function ($) {
440  $.timeago = function(timestamp) {
441    if (timestamp instanceof Date) {
442      return inWords(timestamp);
443    } else if (typeof timestamp === "string") {
vendor: 4,288 bytes, lines 444-565
444      return inWords($.timeago.parse(timestamp));
445    } else if (typeof timestamp === "number") {
446      return inWords(new Date(timestamp));
447    } else {
448      return inWords($.timeago.datetime(timestamp));
449    }
450  };
451  var $t = $.timeago;
452
453  $.extend($.timeago, {
454    settings: {
455      refreshMillis: 60000,
456      allowPast: true,
457      allowFuture: false,
458      localeTitle: false,
459      cutoff: 0,
460      autoDispose: true,
461      strings: {
462        prefixAgo: null,
463        prefixFromNow: null,
464        suffixAgo: "ago",
465        suffixFromNow: "from now",
466        inPast: 'any moment now',
467        seconds: "less than a minute",
468        minute: "about a minute",
469        minutes: "%d minutes",
470        hour: "about an hour",
471        hours: "about %d hours",
472        day: "a day",
473        days: "%d days",
474        month: "about a month",
475        months: "%d months",
476        year: "about a year",
477        years: "%d years",
478        wordSeparator: " ",
479        numbers: []
480      }
481    },
482
483    inWords: function(distanceMillis) {
484      if (!this.settings.allowPast && ! this.settings.allowFuture) {
485        throw 'timeago allowPast and allowFuture settings can not both be set to false.';
486      }
487
488      var $l = this.settings.strings;
489      var prefix = $l.prefixAgo;
490      var suffix = $l.suffixAgo;
491      if (this.settings.allowFuture) {
492        if (distanceMillis < 0) {
493          prefix = $l.prefixFromNow;
494          suffix = $l.suffixFromNow;
495        }
496      }
497
498      if (!this.settings.allowPast && distanceMillis >= 0) {
499        return this.settings.strings.inPast;
500      }
501
502      var seconds = Math.abs(distanceMillis) / 1000;
503      var minutes = seconds / 60;
504      var hours = minutes / 60;
505      var days = hours / 24;
506      var years = days / 365;
507
508      function substitute(stringOrFunction, number) {
509        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
510        var value = ($l.numbers && $l.numbers[number]) || number;
511        return string.replace(/%d/i, value);
512      }
513
514      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
515          seconds < 90 && substitute($l.minute, 1) ||
516          minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
517          minutes < 90 && substitute($l.hour, 1) ||
518          hours < 24 && substitute($l.hours, Math.round(hours)) ||
519          hours < 42 && substitute($l.day, 1) ||
520          days < 30 && substitute($l.days, Math.round(days)) ||
521          days < 45 && substitute($l.month, 1) ||
522          days < 365 && substitute($l.months, Math.round(days / 30)) ||
523          years < 1.5 && substitute($l.year, 1) ||
524          substitute($l.years, Math.round(years));
525
526      var separator = $l.wordSeparator || "";
527      if ($l.wordSeparator === undefined) { separator = " "; }
528      return $.trim([prefix, words, suffix].join(separator));
529    },
530
531    parse: function(iso8601) {
532      var s = $.trim(iso8601);
533      s = s.replace(/\.\d+/,""); // remove milliseconds
534      s = s.replace(/-/,"/").replace(/-/,"/");
535      s = s.replace(/T/," ").replace(/Z/," UTC");
536      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
537      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
538      return new Date(s);
539    },
540    datetime: function(elem) {
541      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
542      return $t.parse(iso8601);
543    },
544    isTime: function(elem) {
545      // jQuery's `is()` doesn't play well with HTML5 in IE
546      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
547    }
548  });
549
550  // functions that can be called via $(el).timeago('action')
551  // init is default when no action is given
552  // functions are called with context of a single element
553  var functions = {
554    init: function() {
555      var refresh_el = $.proxy(refresh, this);
556      refresh_el();
557      var $s = $t.settings;
558      if ($s.refreshMillis > 0) {
559        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
560      }
561    },
562    update: function(timestamp) {
563      var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
564      $(this).data('timeago', { datetime: date });
565      if ($t.settings.localeTitle) $(this).attr("title", date.toLocaleStr
565ing());
566      refresh.apply(this);
567    },
568    updateFromDOM: function() {
569      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
570      refresh.apply(this);
571    },
572    dispose: function () {
573      if (this._timeagoInterval) {
574        window.clearInterval(this._timeagoInterval);
575        this._timeagoInterval = null;
576      }
577    }
578  };
579
580  $.fn.timeago = function(action, options) {
581    var fn = action ? functions[action] : functions.init;
582    if (!fn) {
583      throw new Error("Unknown function name '"+ action +"' for timeago");
584    }
585    // each over objects here and call the requested function
586    this.each(function() {
587      fn.call(this, options);
588    });
589    return this;
590  };
591
592  function refresh() {
593    var $s = $t.settings;
594
595    //check if it's still visible
596    if ($s.autoDispose && !$.contains(document.documentElement,this)) {
597      //stop if it has been removed
598      $(this).timeago("dispose");
599      return this;
600    }
601
602    var data = prepareData(this);
603
604    if (!isNaN(data.datetime)) {
605      if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
606        $(this).text(inWords(data.datetime));
607      }
608    }
609    return this;
610  }
611
612  function prepareData(element) {
613    element = $(element);
614    if (!element.data("timeago")) {
615      element.data("timeago", { datetime: $t.datetime(element) });
616      var text = $.trim(element.text());
617      if ($t.settings.localeTitle) {
618        element.attr("title", element.data('timeago').datetime.toLocaleString());
619      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
620        element.attr("title", text);
621      }
622    }
623    return element.data("timeago");
624  }
625
626  function inWords(date) {
627    return $t.inWords(distance(date));
628  }
629
630  function distance(date) {
631    return (new Date().getTime() - date.getTime());
632  }
633
634  // fix for IE6 suckage
635  document.createElement("abbr");
636  document.createElement("time");
637}));;
638// English (Template)
639jQuery.timeago.settings.strings = {
640  prefixAgo: null,
641  prefixFromNow: null,
642  suffixAgo: "ago",
643  suffixFromNow: "from now",
644  seconds: "less than a minute",
645  minute: "about a minute",
646  minutes: "%d minutes",
647  hour: "about an hour",
648  hours: "about %d hours",
649  day: "a day",
650  days: "%d days",
651  month: "about a month",
652  months: "%d months",
653  year: "about a year",
654  years: "%d years",
655  wordSeparator: " ",
656  numbers: []
657};
658;
659/* global document */
660/* global jQuery */
661/* global snax */
662/* global alert */
663/* global confirm */
664/* global console */
665/* global grecaptcha */
666
667// globa namespace
668if ( typeof window.snax === 'undefined' ) {
669    window.snax = {};
670}
671
672/********
673 *
674 * Core
675 *
676 *******/
677
678(function ($, ctx) {
679
680    'use strict';
681
682    /** VARS *************************/
683
684    ctx.config = $.parseJSON(window.snax_front_config);
685
686    if (!ctx.config) {
687        throw 'Snax Error: Global config is not defined!';
688    }
689
690    /** FUNCTIONS ********************/
691
692    ctx.log = function(msg) {
693        if (typeof console !== 'undefined') {
694            console.log(msg);
695        }
696    };
697
698    ctx.inDebugMode = function() {
699        return (typeof ctx.config.debug_mode !== 'undefined' && ctx.config.debug_mode);
700    };
701
702    ctx.isTouchDevice = function () {
703        return ('ontouchstart' in window) || navigator.msMaxTouchPoints;
704    };
705
706    ctx.createCookie =  function (name, value, hours) {
707        var expires;
708
709        if (hours) {
710            var date = new Date();
711            date.setTime(date.getTime() + (hours * 60 * 60 * 1000));
712            expires = '; expires=' + date.toUTCString();
713        }
714        else {
715            expires = '';
716        }
717
718        document.cookie = name.concat('=', value, expires, '; path=/');
719    };
720
721    ctx.readCookie = function (name) {
722        var nameEQ = name + '=';
723        var ca = document.cookie.split(';');
724
725        for(var i = 0; i < ca.length; i += 1) {
726            var c = ca[i];
727            while (c.charAt(0) === ' ') {
728                c = c.substring(1,c.length);
729            }
730
731            if (c.indexOf(nameEQ) === 0) {
732                return c.substring(nameEQ.length,c.length);
733            }
734        }
735
736        return null;
737    };
738
739    ctx.deleteCookie = function (name) {
740        ctx.createCookie(name, '', -1);
741    };
742
743    ctx.getUrlParameter = function (param) {
744        var sPageURL = decodeURIComponent(window.location.search.substring(1)),
745            sURLVariables = sPageURL.split('&'),
746            sParameterName,
747            i;
748
749        for (i = 0; i < sURLVariables.length; i++) {
750            sParameterName = sURLVariables[i].split('=');
751
752            if (sParameterName[0] === param) {
753                return sParameterName[1] === undefined ? true : sParameterName[1];
754            }
755    }
756};
757
758})(jQuery, snax);
759
760
761/***********
762 *
763 * Helpers
764 *
765 ***********/
766
767(function ($, ctx) {
768
769    /* Media Item Class (image, audio, video) */
770
771    ctx.MediaItem = function (data) {
772        // Public scope.
773        var instance = {};
774
775        // Constructor.
776        function init() {
777            data = data || {};
778
779            data = $.extend({
780                'type':         'image',
781                'title':        '',
782                'source':       '',
783                'refLink':      '',
784                'description':  '',
785                'mediaId':      '',
786                'postId':       0,
787                'authorId':     '',
788                'status':       '',
789                'parentFormat': 'list',
790                'origin':       'post',
791                'legal':        false,
792                'memeTemplate': ''
793            }, data);
794
795            return instance;
796        }
797
798        instance.save = function(callback) {
799            callback = callback || function() {};
800
801            var ajaxData = {
802                'action':               'snax_add_media_item',
803                'security':             $('input[name=snax-add-media-item-nonce]').val(),
804                'snax_title':           data.title,
805                'snax_source':          data.source,
806                'snax_ref_link':        data.refLink,
807                'snax_description':     data.description,
808                'snax_media_id':        data.mediaId,
809                'snax_post_id':         data.postId,
810                'snax_author_id':       data.authorId,
811                'snax_status':          data.status,
812                'snax_parent_format':   data.parentFormat,
813                'snax_origin':          data.origin,
814                'snax_legal':           data.legal ? 'accepted' : '',
815                'snax_type':            data.type,
816                'snax_meme_template':   data.memeTemplate
817            };
818
819            if (typeof ctx.saveItemImageDataFilter === 'function') {
820                ajaxData = ctx.saveItemImageDataFilter(ajaxData, data);
821            }
822
823            var xhr = $.ajax({
824                'type': 'POST',
825                'url': ctx.config.ajax_url,
826                'dataType': 'json',
827                'data': ajaxData
828            });
829
830            xhr.done(function (res) {
831                 callback(res);
832            });
833        };
834
835        return init();
836    };
837
838    /* Embed Item Class */
839
840    ctx.EmbedItem = function (data) {
841        // Public scope.
842        var instance = {};
843
844        // Constructor.
845        function init() {
846            data = data || {};
847
848            data = $.extend({
849                'type':         'embed',
850                'title':        '',
851                'source':       '',
852                'refLink':      '',
853                'description':  '',
854                'embedCode':    '',
855                'postId':       0,
856                'authorId':     '',
857                'status':       '',
858                'parentFormat': 'list',
859                'origin':       'post',
860                'legal':        false
861            }, data);
862
863            return instance;
864        }
865
866        instance.save = function(callback) {
867            callback = callback || function() {};
868
869            var ajaxData = {
870                'action':               'snax_add_embed_item',
871                'security':             $('input[name=snax-add-embed-item-nonce]').val(),
872                'snax_title':           data.title,
873                'snax_source':          data.source,
874                'snax_ref_link':        data.refLink,
875                'snax_embed_code':      data.embedCode,
876                'snax_description':     data.description,
877                'snax_post_id':         data.postId,
878                'snax_author_id':       data.authorId,
879                'snax_status':          data.status,
880                'snax_parent_format':   data.parentFormat,
881                'snax_origin':          data.origin,
882                'snax_legal':           data.legal ? 'accepted' : ''
883            };
884
885            if (typeof ctx.saveItemEmbedDataFilter === 'function') {
886                ajaxData = ctx.saveItemEmbedDataFilter(ajaxData, data);
887            }
888
889            var xhr = $.ajax({
890                'type': 'POST',
891                'url': ctx.config.ajax_url,
892                'dataType': 'json',
893                'data': ajaxData
894            });
895
896            xhr.done(function (res) {
897                callback(res);
898            });
899        };
900
901        return init();
902    };
903
904    /* Embed Item Class */
905
906    ctx.TextItem = function (data) {
907        // Public scope.
908        var instance = {};
909
910        // Constructor.
911        function init() {
912            data = data || {};
913
914            data = $.extend({
915                'type':         'text',
916                'title':        '',
917                'refLink':      '',
918                'description':  '',
919                'postId':       0,
920                'authorId':     '',
921                'status':       '',
922                'parentFormat': 'list',
923                'origin':       'post',
924                'legal':        false
925            }, data);
926
927            return instance;
928        }
929
930        instance.save = function(callback) {
931            callback = callback || function() {};
932
933            var ajaxData = {
934                'action':               'snax_add_text_item',
935                'security':             $('input[name=snax-add-text-item-nonce]').val(),
936                'snax_title':           data.title,
937                'snax_ref_link':        data.refLink,
938                'snax_description':     data.description,
939                'snax_post_id':         data.postId,
940                'snax_author_id':       data.authorId,
941                'snax_status':          data.status,
942                'snax_parent_format':   data.parentFormat,
943                'snax_origin':          data.origin,
944                'snax_legal':           data.legal ? 'accepted' : ''
945            };
946
947            if (typeof ctx.saveItemTextDataFilter === 'function') {
948                ajaxData = ctx.saveItemTextDataFilter(ajaxData, data);
949            }
950
951            var xhr = $.ajax({
952                'type': 'POST',
953                'url': ctx.config.ajax_url,
954                'dataType': 'json',
955                'data': ajaxData
956            });
957
958            xhr.done(function (res) {
959                callback(res);
960            });
961        };
962
963        return init();
964    };
965
966    ctx.deleteItem = function($link, callback) {
967        callback = callback || function() {};
968
969        var nonce       = $.trim($link.attr('data-snax-nonce'));
970        var itemId      = parseInt($link.attr('data-snax-item-id'), 10);
971        var userId      = snax.currentUserId;
972
973        var xhr = $.ajax({
974            'type': 'POST',
975            'url': ctx.config.ajax_url,
976            'dataType': 'json',
977            'data': {
978                'action':               'snax_delete_item',
979                'security':             nonce,
980                'snax_item_id':         itemId,
981                'snax_user_id':         userId
982            }
983        });
984
985        xhr.done(function (res) {
986            callback(res);
987        });
988    };
989
990    ctx.setItemAsFeatured = function($link, callback) {
991        callback = callback || function() {};
992
993        var nonce       = $.trim($link.attr('data-snax-nonce'));
994        var itemId      = parseInt($link.attr('data-snax-item-id'), 10);
995        var userId      = snax.currentUserId;
996
997        var xhr = $.ajax({
998            'type': 'POST',
999            'url': ctx.config.ajax_url,
1000            'dataType': 'json',
1001            'data': {
1002                'action':               'snax_set_item_as_featured',
1003                'security':             nonce,
1004                'snax_item_id':         itemId,
1005                'snax_user_id':         userId
1006            }
1007        });
1008
1009        xhr.done(function (res) {
1010            callback(res);
1011        });
1012    };
1013
1014    ctx.updateItems = function(items, callback) {
1015        callback = callback || function() {};
1016
1017        var xhr = $.ajax({
1018            'type': 'POST',
1019            'url': ctx.config.ajax_url,
1020            'dataType': 'json',
1021            'data': {
1022                'action':           'snax_update_items',
1023                'security':         $('input[name=snax-frontend-submission-nonce]').val(),
1024                'snax_items':       items
1025            }
1026        });
1027
1028        xhr.done(function (res) {
1029            callback(res);
1030        });
1031    };
1032
1033    ctx.deletePost = function($link, callback) {
1034        callback = callback || function() {};
1035
1036        var nonce  = $.trim($link.attr('data-snax-nonce'));
1037        var postId = parseInt($link.attr('data-snax-post-id'), 10);
1038
1039        var xhr = $.ajax({
1040            'type': 'POST',
1041            'url': ctx.config.ajax_url,
1042            'dataType': 'json',
1043            'data': {
1044                'action':           'snax_delete_post',
1045                'security':         nonce,
1046                'snax_post_id':     postId
1047            }
1048        });
1049
1050        xhr.done(function (res) {
1051            callback(res);
1052        });
1053    };
1054
1055    ctx.loginRequired = function(blocked) {
1056        $('body').trigger('snaxLoginRequired', [blocked]);
1057    };
1058
1059    ctx.getMediaHtmlTag = function(data, callback) {
1060        var xhr = $.ajax({
1061            'type': 'GET',
1062            'url': ctx.config.ajax_url,
1063            'dataType': 'json',
1064            'data': {
1065                'action':           'snax_load_media_tpl',
1066                'snax_media_id':    data.mediaId,
1067                'snax_post_id':     data.postId,
1068                'snax_type':        data.type
1069            }
1070        });
1071
1072        xhr.done(function (res) {
1073            callback(res);
1074        });
1075    };
1076
1077    ctx.deleteMedia = function(data, callback) {
1078        callback = callback || function() {};
1079
1080        var xhr = $.ajax({
1081            'type': 'POST',
1082            'url': ctx.config.ajax_url,
1083            'dataType': 'json',
1084            'data': {
1085                'action':           'snax_delete_media',
1086                'security':         $('input[name=snax-delete-media-nonce]').val(),
1087                'snax_media_id':    data.mediaId,
1088                'snax_author_id':   data.authorId
1089            }
1090        });
1091
1092        xhr.done(function (res) {
1093            callback(res);
1094        });
1095    };
1096
1097    ctx.updateMediaMetadata = function(data, callback) {
1098        callback = callback || function() {};
1099
1100        var xhr = $.ajax({
1101            'type': 'POST',
1102            'url': ctx.config.ajax_url,
1103            'dataType': 'json',
1104            'data': {
1105                'action':               'snax_update_media_meta',
1106                // @todo - use separate nonce or use generic one.
1107                'security':             $('input[name=snax-delete-media-nonce]').val(),
1108                'snax_media_id':        data.mediaId,
1109                'snax_parent_format':   data.parentFormat
1110            }
1111        });
1112
1113        xhr.done(function (res) {
1114            callback(res);
1115        });
1116    };
1117
1118    ctx.getEmbedPreview = function(embed_code, callback) {
1119        var xhr = $.ajax({
1120            'type': 'POST',
1121            'url': ctx.config.ajax_url,
1122            'dataType': 'json',
1123            'data': {
1124                'action':           'snax_load_embed_tpl',
1125                'snax_embed_code':  embed_code
1126            }
1127        });
1128
1129        xhr.done(function (res) {
1130            callback(res);
1131        });
1132    };
1133
1134    ctx.displayFeedback = function(type) {
1135        var feedbackTypeClass = 'snax-feedback-' + type;
1136
1137        // Try to get type specific feedback first.
1138        var $feedback = $('.' + feedbackTypeClass);
1139
1140        if ($feedback.length === 0) {
1141            return;
1142        }
1143
1144        ctx.hideFeedback();
1145
1146        // Activate.
1147        $feedback.toggleClass('snax-feedback-off snax-feedback-on');
1148
1149        // Show.
1150        $('body').addClass('snax-show-feedback');
1151    };
1152
1153    ctx.hideFeedback = function() {
1154        // Deactivate all.
1155        $('.snax-feedback-on').toggleClass('snax-feedback-on snax-feedback-off');
1156
1157        // Hide all.
1158        $('body').removeClass('snax-show-feedback');
1159    };
1160
1161    ctx.isValidUrl = function(url) {
1162        return url.match(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;
1162:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/);
1163    };
1164
1165})(jQuery, snax);
1166
1167
1168/*********
1169 *
1170 * Common
1171 *
1172 *********/
1173
1174(function ($, ctx) {
1175
1176    'use strict';
1177
1178    var selectors = {
1179        'feedbackCloseButton':  '.snax-close-button'
1180    };
1181
1182    // fire
1183    $(document).ready(function () {
1184
1185        /*
1186         * Close feedback button.
1187         */
1188        $(selectors.feedbackCloseButton).on('click', function(e) {
1189            e.preventDefault();
1190
1191            snax.hideFeedback();
1192        });
1193    });
1194
1195})(jQuery, snax);
1196
1197
1198/****************
1199 *
1200 * Facebook SDK
1201 *
1202 ****************/
1203
1204(function ($, ctx) {
1205
1206    'use strict';
1207
1208    ctx.resetFacebookSDK = function () {
1209        $('script#facebook-jssdk').remove();
1210        $('#fb-root').remove();
1211        if (window.FB) {
1212            delete window.FB;
1213        }
1214    };
1215
1216    $('body').on( 'snaxBeforeNewContentReady', function ( e, $newContent ) {
1217        if ($newContent.find('.fb-video')) {
1218            ctx.resetFacebookSDK();
1219        }
1220    } );
1221
1222})(jQuery, snax);
1223
1224/****************************
1225 *
1226 * Module: Media upload form
1227 *
1228 ***************************/
1229
1230(function ($, ctx) {
1231
1232    'use strict';
1233
1234    var selectors = {
1235        'form':                 '.snax-media-upload-form',
1236        'pluploadForm':          '.snax-plupload-upload-ui',
1237        'loadFormButton':       '.snax-load-form-button'
1238    };
1239
1240    ctx.mediaUploadForm = function () {
1241        if (typeof snaxPlupload === 'undefined') {
1242            return;
1243        }
1244
1245        $(selectors.form).each(function() {
1246            var $form = $(this);
1247
1248            var formInsideInactiveTab = $form.parents('.snax-tab-content:not(.snax-tab-content-current)').length > 0;
1249
1250            if (!formInsideInactiveTab) {
1251                snaxPlupload.initUploader($form);
1252            }
1253        });
1254
1255        $('body').on('snaxTabContentActive', function (e, $tabContent) {
1256            $tabContent.find(selectors.form).each(function () {
1257                snaxPlupload.initUploader($(this));
1258            });
1259        } );
1260
1261        $(selectors.loadFormButton).on('click',function() {
1262            var $link = $(this);
1263            var $form = $link.parents(selectors.form);
1264            var formClass = $link.attr('data-snax-rel-class');
1265
1266            $form.find('.' + formClass).toggle();
1267
1268            var $pluploadForm = $form.find(selectors.pluploadForm);
1269
1270            $pluploadForm.toggle();
1271
1272            if ($pluploadForm.is(':visible')) {
1273                $form.removeClass('snax-custom-form');
1274            } else {
1275                $form.addClass('snax-custom-form');
1276            }
1277        });
1278    };
1279
1280    // fire
1281    $(document).ready(function () {
1282        ctx.mediaUploadForm();
1283    });
1284
1285})(jQuery, snax);
1286
1287
1288/*************************
1289 *
1290 * Module: Date > Time ago
1291 *
1292 *************************/
1293
1294(function ($, ctx) {
1295
1296    'use strict';
1297
1298    var selectors = {
1299        'wrapper':      '.snax-time-left',
1300        'dateWrapper':  '> .snax-date-wrapper',
1301        'date':         '> .snax-date',
1302        'timeWrapper':  '> .snax-time-wrapper',
1303        'time':         '> .snax-time'
1304    };
1305
1306    ctx.timeagoSelectors = selectors;
1307
1308    ctx.dateConstans = {
1309        'day_ms':   1000 * 60 * 60 * 24,
1310        'month_ms': 1000 * 60 * 60 * 24 * 30,
1311        'year_ms':  1000 * 60 * 60 * 24 * 356
1312    };
1313
1314    ctx.dateToTimeago = function () {
1315        if (!$.fn.timeago) {
1316            return;
1317        }
1318
1319        // store current settings, thanks to $.extend we have a copy without reference to original object
1320        var origSettings = $.extend(true, {} , $.timeago.settings);
1321
1322        // override
1323        $.extend($.timeago.settings, {
1324            cutoff: ctx.dateConstans.year_ms,
1325            allowFuture: true
1326        });
1327
1328        $.extend($.timeago.settings.strings, {
1329            suffixFromNow: ''
1330        });
1331
1332        // apply
1333        $(selectors.wrapper).each(function () {
1334            var $wrapper        = $(this);
1335            var $dateWrapper    = $wrapper.find(selectors.dateWrapper);
1336            var $date           = $dateWrapper.find(selectors.date);
1337            var $timeWrapper    = $wrapper.find(selectors.timeWrapper);
1338            var $time           = $timeWrapper.find(selectors.time);
1339
1340            var timeLeftText = $.timeago($date.text());
1341
1342            $time.text(timeLeftText);
1343
1344            $dateWrapper.removeClass( '.snax-date-wrapper-unfriendly' );
1345            $timeWrapper.removeClass( 'snax-time-wrapper-unfriendly' );
1346        });
1347
1348        // restore
1349        $.timeago.settings = origSettings;
1350    };
1351
1352    // fire
1353    $(document).ready(function () {
1354        ctx.dateToTimeago();
1355    });
1356
1357})(jQuery, snax);
1358
1359
1360/**************************
1361 *
1362 * Module: Upvote/Downvote
1363 *
1364 *************************/
1365
1366(function ($, ctx) {
1367
1368    'use strict';
1369
1370    var locked = false;
1371
1372    var selectors = {
1373        'wrapper':      '.snax-voting',
1374        'upvoteLink':   '.snax-voting-upvote',
1375        'downvoteLink': '.snax-voting-downvote',
1376        'guestVoting':  '.snax-guest-voting',
1377        'voted':        '.snax-user-voted',
1378        'scoreWrapper': '.snax-voting-score',
1379        'scoreValue':   '.snax-voting-score strong'
1380    };
1381
1382    var classes = {
1383        'voted':        'snax-user-voted'
1384    };
1385
1386    ctx.votesSelectors  = selectors;
1387    ctx.votesClasses    = classes;
1388
1389    ctx.votes = function () {
1390        // Catch event on wrapper to keep it working after box content reloading
1391        $('body').on('click', selectors.upvoteLink + ', ' + selectors.downvoteLink, function (e) {
1392            e.preventDefault();
1393
1394            if (locked) {
1395                return;
1396            }
1397
1398            locked = true;
1399
1400            var $link       = $(this);
1401
1402            var voteType    = $link.is(selectors.upvoteLink) ? 'upvote' : 'downvote';
1403            var $wrapper    = $link.parents(selectors.wrapper);
1404            var nonce       = $.trim($link.attr('data-snax-nonce'));
1405            var itemId      = parseInt($link.attr('data-snax-item-id'), 10);
1406            var authorId    = parseInt($link.attr('data-snax-author-id'), 10);
1407
1408            ctx.vote({
1409                'itemId':   itemId,
1410                'authorId': authorId,
1411                'type':     voteType
1412            }, nonce, $wrapper);
1413        });
1414
1415        // Iterate over all voting boxes and update them based on cookie states.
1416        $(selectors.wrapper).each(function () {
1417            var $this   = $(this);
1418            var id      = parseInt($this.attr('data-snax-item-id'), 10);
1419
1420            if (id <= 0) {
1421                return;
1422            }
1423
1424            var typeCookie  = 'snax_vote_type_' + id;
1425            var scoreCookie = 'snax_vote_score_' + id;
1426
1427            var type  = ctx.readCookie(typeCookie);
1428            var score = ctx.readCookie(scoreCookie);
1429
1430
1431            if (!type && !score) {
1432                return;
1433            }
1434
1435            if (score) {
1436                ctx.updateVoteScore($this.find(selectors.scoreWrapper), score);
1437            }
1438
1439            if (type) {
1440                var $upVoteLink     = $this.find(selectors.upvoteLink);
1441                var $downVoteLink   = $this.find(selectors.downvoteLink);
1442
1443                if ('upvote' === type) {
1444                    $upVoteLink.addClass(classes.voted);
1445                    $downVoteLink.removeClass(classes.voted);
1446                } else {
1447                    $downVoteLink.addClass(classes.voted);
1448                    $upVoteLink.removeClass(classes.voted);
1449                }
1450            }
1451        });
1452    };
1453
1454    ctx.vote = function (data, nonce, $box) {
1455        var config = $.parseJSON(window.snax_front_config);
1456        if ( $box.find('.snax-login-required').length > 0 ){
1457            return;
1458        }
1459
1460        if (!config) {
1461            ctx.log('Item voting failed. Global config is not defined!');
1462            return;
1463        }
1464
1465        /*
1466         * Apply new voting box state before ajax response.
1467         */
1468        var $userVoted      = $box.find('.snax-user-voted');
1469        var userUpvoted     = $userVoted.length > 0 && $userVoted.is('.snax-voting-upvote');
1470        var userDownvoted   = $userVoted.length > 0 && $userVoted.is('.snax-voting-downvote');
1471        var score           = parseInt( $box.find('.snax-voting-score').data('snax-voting-score'), 10);
1472        var diff            = 'upvote' === data.type ? 1 : -1;
1473
1474        // Remove all bubbles.
1475        $box.find('.snax-voting-bubble').remove();
1476
1477        // User reverted his vote.
1478        if (userUpvoted && 'upvote' === data.type || userDownvoted && 'downvote' === data.type) {
1479            diff *= -1;
1480
1481            $box.find('.snax-user-voted').removeClass('snax-user-voted');
1482
1483            if ( 'upvote' === data.type ) {
1484                $box.find('.snax-voting-upvote').append('<span class="snax-voting-bubble snax-voting-bubble-minus-back">-1</span>');
1485            } else {
1486                $box.find('.snax-voting-downvote').append('<span class="snax-voting-bubble snax-voting-bubble-plus-back">+1</span>');
1487            }
1488
1489        // User voted opposite.
1490        } else if (userUpvoted && 'downvote' === data.type || userDownvoted && 'upvote' === data.type) {
1491            diff *= 2;
1492
1493            $box.find('.snax-user-voted').removeClass('snax-user-voted');
1494            $box.find('.snax-voting-' + data.type).addClass('snax-user-voted');
1495
1496            if ( 'upvote' === data.type ) {
1497                $box.find('.snax-voting-upvote').append('<span class="snax-voting-bubble snax-voting-bubble-plus">+2</span>');
1498            } else {
1499                $box.find('.snax-voting-downvote').append('<span class="snax-voting-bubble snax-voting-bubble-minus">-2</span>');
1500            }
1501        // User added new vote.
1502        } else {
1503            if ( 'upvote' === data.type ) {
1504                $box.find('.snax-voting-upvote').addClass('snax-user-voted').append('<span class="snax-voting-bubble snax-voting-bubble-plus">+1</span>');
1505            } else {
1506                $box.find('.snax-voting-downvote').addClass('snax-user-voted').append('<span class="snax-voting-bubble snax-voting-bubble-minus">-1</span>');
1507            }
1508        }
1509
1510        // Update score.
1511        ctx.updateVoteScore($box.find(selectors.scoreWrapper), score + diff);
1512
1513        // Send ajax.
1514        var xhr = $.ajax({
1515            'type': 'POST',
1516            'url': config.ajax_url,
1517            'dataType': 'json',
1518            'data': {
1519                'action':           'snax_vote_item',
1520                'security':         nonce,
1521                'snax_item_id':     data.itemId,
1522                'snax_author_id':   data.authorId,
1523                'snax_vote_type':   data.type,
1524                'snax_user_voted':  ctx.readCookie( 'snax_vote_type_' + data.itemId )
1525            }
1526        });
1527
1528        // Update state immediately after sending ajax. Don't wait for response.
1529        ctx.updateVoteState(data.itemId, data.type, $box);
1530
1531        xhr.done(function (res) {
1532            locked = false;
1533        });
1534    };
1535
1536    ctx.updateVoteState = function(itemId, type, $box) {
1537        var typeCookie  = 'snax_vote_type_' + itemId;
1538        var scoreCookie = 'snax_vote_score_' + itemId;
1539
1540        var currentValue = ctx.readCookie(typeCookie);
1541
1542        // Cookie can't be read immediately so we need to update CSS classes manually.
1543        $box.find(selectors.voted).removeClass(classes.voted);
1544
1545        // User voted and now he wants to remove the vote.
1546        if (currentValue === type) {
1547            ctx.deleteCookie(typeCookie);
1548        } else {
1549            ctx.createCookie(typeCookie, type, 1);
1550
1551            // Cookie can't be read immediately so we need to update CSS classes manually.
1552            $box.find('.snax-voting-' + type).addClass(classes.voted);
1553        }
1554
1555        // Update score.
1556        var score = parseInt($box.find(selectors.scoreWrapper).data('snax-voting-score'), 10);
1557
1558        ctx.createCookie(scoreCookie, score, 1);
1559    };
1560
1561    ctx.updateVoteScore = function($wrapper, score) {
1562        var $container = $wrapper.parents('.snax-voting');
1563        score = parseInt(score, 10);
1564        var scoreShort = score;
1565        var units = ['', 'k', 'M'];
1566        var i;
1567        for (i = 0; scoreShort >= 1000; i++) {
1568            scoreShort /= 1000;
1569        }
1570
1571        var scoreHtml = +scoreShort.toFixed(1) + units[i];
1572
1573        // Singular?
1574        if (1 === Math.abs(score)) {
1575            scoreHtml = ctx.config.i18n.points_singular_short_tpl.replace('%s', scoreHtml);
1576        } else {
1577            scoreHtml = ctx.config.i18n.points_plural_short_tpl.replace('%s', scoreHtml);
1578        }
1579
1580        // Remove all score related classes.
1581        $container.removeClass('snax-voting-0 snax-voting-negative snax-voting-positive');
1582
1583        // Add score related classes.
1584        if (0 < score) {
1585            $container.addClass( 'snax-voting-positive' );
1586        } else if (0 > score) {
1587            $container.addClass( 'snax-voting-negative' );
1588        } else {
1589            $container.addClass( 'snax-voting-0' );
1590        }
1591
1592        $wrapper.data('snax-voting-score', score);
1593        $wrapper.html(scoreHtml);
1594    };
1595
1596    // fire
1597    $(document).ready(function () {
1598        ctx.votes();
1599    });
1600
1601})(jQuery, snax);
1602
1603/*********************
1604 *
1605 * Module: Login form
1606 *
1607 ********************/
1608
1609(function ($, ctx) {
1610
1611    'use strict';
1612
1613    var selectors = {
1614        'loginTab':             '.snax-login-tab',
1615        'loginFormWrapper':     '.snax-login-form',
1616        'loginForm':            '.snax-login-form #loginform-in-popup',
1617        'forgotTab':            '.snax-forgot-pass-tab',
1618        'forgotFormWrapper':    '.snax-forgot-pass-form',
1619        'forgotForm':           '.snax-forgot-pass-form #lostpasswordform',
1620        'gdprTab':              '.snax-gdpr-tab',
1621        'backToLoginTab':       '.snax-back-to-login-tab',
1622        'loginErrorMessage':    '.snax-login-form .snax-login-error-message',
1623        'forgotErrorMessage':   '.snax-forgot-pass-form .snax-forgot-pass-error-message',
1624        'forgotSuccessMessage': '.snax-forgot-pass-form .snax-forgot-pass-success-message',
1625        'user': {
1626            'loginInput':       '#user_login',
1627            'emailInput':       '#user_email',
1628            'passwordInput':    '#user_pass'
1629        },
1630        'forgotPasswordLink':   '#snax-popup-content .snax-link-forgot-pass',
1631        'passwordWrapper':      '#snax-popup-content .login-password',
1632        'connectWithLabel':     '#snax-popup-content .wp-social-login-connect-with',
1633        'resetTab':             '.snax-reset-tab'
1634    };
1635
1636    ctx.loginFormSelectors = selectors;
1637
1638    var useReCaptcha;
1639    var reCaptchaToken;
1640    var urlAction = ctx.getUrlParameter(ctx.config.login_popup_url_var);
1641
1642    ctx.loginForm = function () {
1643        useReCaptcha = ctx.config.use_login_recaptcha;
1644
1645        // Add input placeholders.
1646        $.each(selectors.user, function (id, selector) {
1647            var $input = $(selector);
1648            var $label = $input.prev('label');
1649
1650            if ($label.length > 0) {
1651                $input.attr('placeholder', $label.text());
1652            }
1653        });
1654
1655        // Move forgot link after password field.
1656        $(selectors.passwordWrapper + ' input').after( $(selectors.forgotPasswordLink) );
1657
1658        // Wrap label with <h4> tag.
1659        $(selectors.connectWithLabel).wrapInner( '<h4>' );
1660
1661        $('.wp-social-login-provider').on('click', function(e) {
1662            var $that = $(this);
1663            if ($('.snax-wpsl-gdpr-consent input').length > 0) {
1664                if (!$('.snax-wpsl-gdpr-consent input').is(':checked')) {
1665                    e.stopPropagation();
1666                    e.stopImmediatePropagation();
1667                    e.preventDefault();
1668                    handleLoginGDPR($that);
1669                }
1670            }
1671        });
1672
1673        handleLoginAction();
1674        handleForgotPassAction();
1675        handleTabsSwitch();
1676
1677        if (urlAction==='reset_password'){
1678            $(selectors.loginTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1679            $(selectors.resetTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1680        }
1681
1682        if (urlAction==='forgot_password'){
1683            $(selectors.loginTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1684            $(selectors.forgotTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1685        }
1686
1687        $('body').on('snaxPopupOpened', function(e, action) {
1688            if (useReCaptcha && 'login' === action) {
1689                loadReCaptcha();
1690            }
1691        });
1692    };
1693
1694    var handleLoginGDPR = function($clickedProvider) {
1695        $(selectors.loginTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1696        $(selectors.gdprTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1697        $('.snax-login-gdpr-accept').on('click', function() {
1698            $('.snax-wpsl-gdpr-consent input').prop('checked', true);
1699            $(selectors.gdprTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1700            $(selectors.loginTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1701            var redirectTo = $clickedProvider.attr('href');
1702            window.location.href = redirectTo;
1703        });
1704    };
1705
1706    var handleLoginAction = function() {
1707        $(selectors.loginForm).on('submit', function(e) {
1708            e.preventDefault();
1709
1710            var $form = $(this);
1711            var $errorMessage = $(selectors.loginErrorMessage);
1712
1713            var requestData = {
1714                'action':   'snax_login'
1715            };
1716
1717            $.each($form.serializeArray(), function(i, field) {
1718                requestData[field.name] = field.value;
1719            });
1720
1721            // Read config directly, DO NOT use any reference. We change the value while auto logging.
1722            if (ctx.config.use_login_recaptcha) {
1723                if (!reCaptchaToken) {
1724                    $errorMessage.html( '<p class="snax-validation-tip">' + ctx.config.i18n.recaptcha_invalid + '</p>');
1725                    return;
1726                }
1727            }
1728
1729            // Clear error message.
1730            $errorMessage.html('<p>' + ctx.config.i18n.user_is_logging + '</p>');
1731
1732            var xhr = $.ajax({
1733                'type':     'POST',
1734                'url':      ctx.config.ajax_url,
1735                'dataType': 'json',
1736                'data':     requestData
1737            });
1738
1739            xhr.done(function (res) {
1740                if ('success' === res.status) {
1741                    var redirectTo = res.args.redirect_url;
1742
1743                    if (!redirectTo) {
1744                        redirectTo = window.location.href;
1745                    }
1746
1747                    if (redirectTo.indexOf('?') > 0){
1748                        redirectTo += '&' + ctx.config.login_success_var + '=true';
1749                    }else{
1750                        redirectTo += '?' + ctx.config.login_success_var + '=true';
1751                    }
1752
1753                    window.location.href = redirectTo;
1754                } else {
1755                    if (res.message) {
1756                        $errorMessage.html( '<p class="snax-validation-tip">' + res.message + '</p>');
1757                    }
1758
1759                    if (useReCaptcha) {
1760                        grecaptcha.reset();
1761                    }
1762                }
1763            });
1764
1765            // Reload page if failed.
1766            xhr.fail(function() {
1767                var reloadUrl = window.location.href;
1768
1769                if (reloadUrl.indexOf('?') > 0){
1770                    reloadUrl += '&' + ctx.config.login_success_var + '=false';
1771                }else{
1772                    reloadUrl += '?' + ctx.config.login_success_var + '=false';
1773                }
1774
1775                window.location.href = reloadUrl;
1776            });
1777        });
1778    };
1779
1780    var handleForgotPassAction = function() {
1781        $(selectors.forgotForm).on('submit', function(e) {
1782            e.preventDefault();
1783
1784            var $form = $(this);
1785            var $errorMessage = $(selectors.forgotErrorMessage);
1786            var $successMessage = $(selectors.forgotSuccessMessage);
1787
1788            var requestData = {
1789                'action':   'snax_forgot_pass'
1790            };
1791
1792            $.each($form.serializeArray(), function(i, field) {
1793                requestData[field.name] = field.value;
1794            });
1795
1796            // Clear messages.
1797            $errorMessage.text('');
1798            $successMessage.text('');
1799
1800            var xhr = $.ajax({
1801                'type':     'POST',
1802                'url':      ctx.config.ajax_url,
1803                'dataType': 'json',
1804                'data':     requestData
1805            });
1806
1807            xhr.done(function (res) {
1808                if ('success' === res.status) {
1809                    if (res.message) {
1810                        $successMessage.html( '<p class="snax-validation-tip">' + res.message + '</p>');
1811                    }
1812                } else {
1813                    if (res.message) {
1814                        $errorMessage.html( '<p class="snax-validation-tip">' + res.message + '</p>');
1815                    }
1816                }
1817            });
1818        });
1819    };
1820
1821    var handleTabsSwitch = function() {
1822        $(selectors.forgotPasswordLink).on('click', function(e) {
1823            e.preventDefault();
1824
1825            $(selectors.loginTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1826            $(selectors.forgotTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1827        });
1828
1829        $(selectors.backToLoginTab).on('click', function(e) {
1830            e.preventDefault();
1831
1832            $(selectors.resetTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1833            $(selectors.forgotTab).removeClass('snax-tab-active').addClass('snax-tab-inactive');
1834            $(selectors.loginTab).removeClass('snax-tab-inactive').addClass('snax-tab-active');
1835        });
1836    };
1837
1838    var loadReCaptcha = function() {
1839        var apiUrl  = ctx.config.recaptcha_api_url;
1840        var ver     = ctx.config.recaptcha_version;
1841        var siteKey = ctx.config.recaptcha_site_key;
1842
1843        if (!siteKey || !apiUrl) {
1844            return;
1845        }
1846
1847        var renderLoginReCaptcha = function() {
1848            try {
1849
1850                if ('30' === ver) {
1851                    grecaptcha.execute(
1852                        siteKey,
1853                        { action: 'login' }
1854                    ).then( function( token ) {
1855                        $('#snax-login-recaptcha').html('<input type="hidden" name="g-recaptcha-response" value="'+ token +'">');
1856                        reCaptchaEnteredCorrectly(token);
1857                    } );
1858                } else {
1859                    grecaptcha.render('snax-login-recaptcha', {
1860                        'sitekey' : siteKey,
1861                        'callback': reCaptchaEnteredCorrectly
1862                    });
1863                }
1864
1865            } catch (error) {}
1866            
1867        };
1868
1869        // Google reCaptcha API loaded.
1870        if (typeof grecaptcha !== 'undefined') {
1871            renderLoginReCaptcha();
1872        } else {
1873            // API not loaded. Register callback and load script.
1874            window.snaxReCaptchaOnloadCallback = function() {
1875                renderLoginReCaptcha();
1876            };
1877
1878            if ('30' === ver) {
1879                $('head').append('<script src="' + apiUrl + '?onload=snaxReCaptchaOnloadCallback&render='+siteKey+'" async defer>');
1880            } else {
1881                $('head').append('<script src="' + apiUrl + '?onload=snaxReCaptchaOnloadCallback&render=explicit" async defer>');
1882            }
1883        }
1884    };
1885
1886    var reCaptchaEnteredCorrectly = function(response) {
1887        reCaptchaToken = response;
1888    };
1889
1890    // Fire.
1891    $(document).ready(function () {
1892        ctx.loginForm();
1893    });
1894
1895})(jQuery, snax);
1896
1897/****************
1898 *
1899 * Module: Popup
1900 *
1901 ****************/
1902
1903(function ($, ctx) {
1904
1905    'use strict';
1906
1907    ctx.openPopup = function ($content, args, action) {
1908        if (!$.fn.magnificPopup) {
1909            return;
1910        }
1911
1912        args = args || {};
1913
1914        // Set translatable label.
1915        if (!args.tClose) {
1916            args.tClose = ctx.config.i18n.popup_close_label;
1917        }
1918
1919        args.items = {
1920            src: $content,
1921            type: 'inline'
1922        };
1923
1924        args.callbacks = {
1925            'open': function () {
1926                $('body').trigger('snaxPopupOpened', [ action ]);
1927            }
1928        };
1929
1930        $.magnificPopup.open(args);
1931
1932        // Override the Close action.
1933        if (typeof args.onClose === 'function') {
1934            $.magnificPopup.instance.close = args.onClose;
1935        }
1936    };
1937
1938    ctx.closePopup = function () {
1939        if (!$.fn.magnificPopup) {
1940            return;
1941        }
1942
1943        $.magnificPopup.close();
1944    };
1945
1946})(jQuery, snax);
1947
1948/***********************
1949 *
1950 * Module: Login Popup
1951 *
1952 **********************/
1953
1954(function ($, ctx) {
1955
1956    'use strict';
1957
1958    var selectors = {
1959        'popupContent':     '#snax-popup-content',
1960        'usernameField':    '#user_login'
1961    };
1962
1963    ctx.openLoginPopup = function (onClose) {
1964        var $content = $(selectors.popupContent);
1965
1966        var args = {};
1967
1968        if (typeof onClose === 'function') {
1969            args.onClose = onClose;
1970        }
1971
1972        ctx.openPopup($content, args, 'login');
1973
1974        // Delay till popup opens.
1975        setTimeout(function() {
1976            $content.find(selectors.usernameField).focus();
1977        }, 100);
1978    };
1979
1980    ctx.redirectToLoginPage = function () {
1981        window.location.href = ctx.config.login_url;
1982    };
1983
1984    // fire
1985    $(document).ready(function () {
1986        $('body').on('snaxLoginRequired', function(e, blocked) {
1987            var onClose = false;
1988
1989            if (blocked) {
1990                onClose = function() {
1991                    window.location.href = ctx.config.site_url;
1992                };
1993            }
1994
1995            // Snax Login Popup is ON.
1996            if (ctx.config.enable_login_popup) {
1997                ctx.openLoginPopup(onClose);
1998
1999            // Custom handler is defined.
2000            } else if ( typeof snaxLoginRequiredHandler === 'function' ) {
2001                snaxLoginRequiredHandler(onClose);
2002
2003            // Redirect as a fallback.
2004            } else {
2005                ctx.redirectToLoginPage();
2006            }
2007        });
2008    });
2009
2010})(jQuery, snax);
2011
2012/********************************
2013 *
2014 * Module: Login Required Action
2015 *
2016 *******************************/
2017
2018(function ($, ctx) {
2019
2020    'use strict';
2021
2022    $(document).ready(function () {
2023        var $body = $('body');
2024
2025        // Login requested by clicking link with the URL containing the login trigger.
2026        $body.on('click', 'a', function (e) {
2027            var $link = $(e.currentTarget);
2028            var url = $link.attr('href');
2029
2030            // Skip, URL not specified.
2031            if (!url || url.length === 0) {
2032                return;
2033            }
2034
2035            // Skip, URL doesn't contain the popup trigger.
2036            if (-1 === url.indexOf(ctx.config.login_popup_url_var)) {
2037                return;
2038            }
2039
2040            // Skip, other handler will be used.
2041            if ($link.hasClass('snax-login-required')) {
2042                return;
2043            }
2044
2045            e.stopImmediatePropagation();
2046            e.preventDefault();
2047
2048            ctx.loginRequired();
2049
2050            return false;
2051        });
2052
2053        // Login requested by CSS class.
2054        $body.on('click', '.snax-login-required', function (e) {
2055            e.preventDefault();
2056
2057            ctx.loginRequired();
2058
2059            return false;
2060        });
2061
2062        // Login requested by URL.
2063        if (ctx.getUrlParameter(ctx.config.login_popup_url_var) && !ctx.config.logged_in){
2064            ctx.loginRequired();
2065        }
2066
2067        // Login requested  by setting var.
2068        if (ctx.forceLoginPopup) {
2069            ctx.loginRequired(ctx.forceLoginPopup.blocked);
2070        }
2071    });
2072
2073})(jQuery, snax);
2074
2075/*************************
2076 *
2077 * Module: Actions Menu
2078 *
2079 ************************/
2080
2081(function ($, ctx) {
2082
2083    'use strict';
2084
2085    var selectors = {
2086        'actions' :         '.snax-actions',
2087        'actionsToggle':    '.snax-actions-toggle',
2088        'actionsExpanded':  '.snax-actions-expanded'
2089    };
2090
2091    var classes = {
2092        'expanded': 'snax-actions-expanded'
2093    };
2094
2095    ctx.actionsMenuSelectors = selectors;
2096    ctx.actionsMenuClasses = classes;
2097
2098    ctx.actionsMenu = function () {
2099        var $body = $('body');
2100
2101        $('body').on('click', selectors.actionsToggle, function(e) {
2102            e.preventDefault();
2103
2104            var $toggle = $(e.target);
2105
2106            $toggle.parents(selectors.actions).toggleClass(classes.expanded);
2107        });
2108
2109        // Hide on focus out.
2110        $body.on('click touchstart', function (e) {
2111            var $activeMenu = $(e.target).parents(selectors.actions);
2112
2113            // Collapse all expanded menus except active one.
2114            $(selectors.actionsExpanded).not($activeMenu).removeClass(classes.expanded);
2115        });
2116    };
2117
2118    // Fire.
2119    $(document).ready(function () {
2120        ctx.actionsMenu();
2121    });
2122
2123})(jQuery, snax);
2124
2125
2126/*************************
2127 *
2128 * Module: Item Share
2129 *
2130 ************************/
2131
2132(function ($, ctx) {
2133
2134    'use strict';
2135
2136    var selectors = {
2137        'wrapper' :         '.snax-item-share',
2138        'toggle':           '.snax-item-share-toggle',
2139        'expandedState':    '.snax-item-share-expanded'
2140    };
2141
2142    var classes = {
2143        'expanded': 'snax-item-share-expanded'
2144    };
2145
2146    ctx.itemShareSelectors = selectors;
2147    ctx.itemShareClasses   = classes;
2148
2149    ctx.itemShare = function () {
2150        // On none touchable devices, shares visibility is handled via css :hover.
2151        // On touch devices there is no "hover", so we emulate hover via CSS class toggle on click.
2152        $(selectors.toggle).on('click  touchstart', function (e) {
2153            e.preventDefault();
2154
2155            $(this).parents(selectors.wrapper).addClass(classes.expanded);
2156        });
2157
2158        // Hide shares on focus out.
2159        $('body').on('click touchstart', function (e) {
2160            var $activeElem = $(e.target).parents(selectors.expandedState);
2161
2162            // Collapse all expanded micro shares except active one.
2163            $(selectors.expandedState).not($activeElem).removeClass(classes.expanded);
2164        });
2165    };
2166
2167    // Fire.
2168    $(document).ready(function () {
2169        if (ctx.isTouchDevice()) {
2170            $('body').removeClass('snax-hoverable');
2171
2172        }
2173
2174        ctx.itemShare();
2175    });
2176
2177})(jQuery, snax);
2178
2179
2180/*************************
2181 *
2182 * Module: Delete Item
2183 *
2184 ************************/
2185
2186(function ($, ctx) {
2187
2188    'use strict';
2189
2190    /** CONFIG *******************************************/
2191
2192        // Register new component.
2193    ctx.deleteItemModule = {};
2194
2195    // Component namespace shortcut.
2196    var c = ctx.deleteItemModule;
2197
2198    // CSS selectors.
2199    var selectors = {
2200        'deleteLink':   '.snax-delete-item'
2201    };
2202
2203    var i18n = {
2204        'confirm':      'Are you sure?'
2205    };
2206
2207    // Allow accessing
2208    c.selectors = selectors;
2209    c.i18n      = i18n;
2210
2211    /** INIT *******************************************/
2212
2213    c.init = function () {
2214        c.attachEventHandlers();
2215    };
2216
2217    /** EVENTS *****************************************/
2218
2219    c.attachEventHandlers = function() {
2220
2221        /* Delete item */
2222
2223        $(selectors.deleteLink).on('click', function (e) {
2224            e.preventDefault();
2225
2226            if (!confirm(i18n.confirm)) {
2227                return;
2228            }
2229
2230            ctx.deleteItem($(this), function(res) {
2231                if (res.status === 'success') {
2232                    location.href = res.args.redirect_url;
2233                } else {
2234                    alert(res.message);
2235                }
2236            });
2237        });
2238    };
2239
2240    // Fire.
2241    $(document).ready(function () {
2242        c.init();
2243    });
2244
2245})(jQuery, snax);
2246
2247
2248/*******************************
2249 *
2250 * Module: Set Item as Featured
2251 *
2252 ******************************/
2253
2254(function ($, ctx) {
2255
2256    'use strict';
2257
2258    /** CONFIG *******************************************/
2259
2260    // Register new component.
2261    ctx.setItemAsFeaturedModule = {};
2262
2263    // Component namespace shortcut.
2264    var c = ctx.setItemAsFeaturedModule;
2265
2266    // CSS selectors.
2267    var selectors = {
2268        'link':   '.snax-set-item-as-featured'
2269    };
2270
2271    // Allow accessing
2272    c.selectors = selectors;
2273
2274    /** INIT *******************************************/
2275
2276    c.init = function () {
2277        c.attachEventHandlers();
2278    };
2279
2280    /** EVENTS *****************************************/
2281
2282    c.attachEventHandlers = function() {
2283
2284        /* Delete item */
2285
2286        $(selectors.link).on('click', function (e) {
2287            e.preventDefault();
2288
2289            ctx.setItemAsFeatured($(this), function(res) {
2290                if (res.status === 'success') {
2291                    location.reload();
2292                } else {
2293                    alert(res.message);
2294                }
2295            });
2296        });
2297    };
2298
2299    // Fire.
2300    $(document).ready(function () {
2301        c.init();
2302    });
2303
2304})(jQuery, snax);
2305
2306/*******************************
2307 *
2308 * Module: Froala for items
2309 *
2310 ******************************/
2311
2312(function ($, ctx) {
2313
2314    'use strict';
2315
2316    /** CONFIG *******************************************/
2317
2318    // Register new component.
2319    ctx.froalaSimple = {};
2320
2321    // Component namespace shortcut.
2322    var c = ctx.froalaSimple;
2323
2324    // CSS selectors.
2325    var selectors = {
2326        'froalaEditor':   '.froala-editor-simple'
2327    };
2328
2329    // Allow accessing
2330    c.selectors = selectors;
2331
2332    /** INIT *******************************************/
2333
2334    c.init = function () {
2335        c.attachEventHandlers();
2336        c.applyFroala();
2337    };
2338
2339    /** EVENTS *****************************************/
2340
2341    c.attachEventHandlers = function() {
2342        $( 'body' ).on( 'snaxNewCardAdded', function($card) {
2343            c.applyFroala();
2344        });
2345    };
2346
2347    c.renderFroala = function() {
2348        var $textarea = $(this);
2349        var config = {
2350            'key':              'CMFIZJNKLDXIREJI==',
2351            'language':         c.getFroalaEditorConfig('language'),
2352            'heightMin':        200,
2353            // Sticky toolbar.
2354            'toolbarSticky':        true,
2355            'toolbarStickyOffset':  $('body').hasClass('admin-bar') ? 32 : 0,
2356            // Toolbar buttons on large devices (≥ 1200px).
2357            'toolbarButtons':   ['bold', 'italic', 'insertLink', '|', 'undo', 'redo'],
2358            // On medium devices (≥ 992px).
2359            toolbarButtonsMD:   ['bold', 'italic', 'insertLink', '|', 'undo', 'redo'],
2360            // On small devices (≥ 768px).
2361            toolbarButtonsSM:   ['bold', 'italic', 'insertLink', '|', 'undo', 'redo'],
2362            // On extra small devices (< 768px).
2363            toolbarButtonsXS:   ['bold', 'italic', 'insertLink', '|', 'undo', 'redo'],
2364            charCounterMax:     c.getFroalaEditorMaxCharacters($textarea)
2365        };
2366        // Override Froala's config using this filter function.
2367        if (typeof c.froalaEditorConfig === 'function') {
2368            config = c.froalaEditorConfig(config);
2369        }
2370        if (snax.inDebugMode()) {
2371            snax.log(config);
2372        }
2373        // Init.
2374        $textarea.froalaEditor(config);
2375    };
2376
2377    c.getFroalaEditorConfig = function(id) {
2378        var config = c.config.froala;
2379
2380        if (typeof config[id] !== 'undefined') {
2381            return config[id];
2382        }
2383
2384        return null;
2385    };
2386
2387    c.getFroalaEditorMaxCharacters = function($editor) {
2388        var maxCharacters = parseInt($editor.attr('maxlength'), 10);
2389
2390        return maxCharacters > 0 ? maxCharacters : -1;
2391    };
2392
2393    c.applyFroala = function () {
2394
2395        // Check if Froals script is loaded.
2396        if (!$.fn.froalaEditor) {
2397            return;
2398        }
2399        $(selectors.froalaEditor).each(c.renderFroala);
2400    };
2401
2402    // Fire.
2403    $(document).ready(function () {
2404        if (snax.frontendSubmission) {
2405            c.config = snax.frontendSubmission.config;
2406        }
2407        if (snax.post) {
2408            c.config = snax.post.config;
2409        }
2410        if (typeof c.config === 'undefined') {
2411            return;
2412        }
2413        c.init();
2414    });
2415
2416})(jQuery, snax);
2417
2418/*******************************
2419 *
2420 * Module: Single item comments
2421 *
2422 ******************************/
2423
2424(function ($, ctx) {
2425
2426    'use strict';
2427
2428    /** CONFIG *******************************************/
2429
2430    // Register new component.
2431    ctx.singleItemComments = {};
2432
2433    // Component namespace shortcut.
2434    var c = ctx.singleItemComments;
2435
2436    var seeMoreHtml = '<a class="snax-see-all-replies">' + ctx.config.i18n.see_all_replies + '</a>';
2437
2438    // CSS selectors.
2439    var selectors = {
2440        'section':              '.snax-item-comments',
2441        'topLevelComment':      '.snax-item-comments .depth-1',
2442        'moreCommentsLink':     '.snax-item-comments-more-link',
2443        'allRepliesLink':       '.snax-see-all-replies',
2444        'list':                 '.comment-list',
2445        'commentForm':          '.snax-item-comments .comment-form',
2446        'textarea':             '.snax-item-comments .comment-form textarea',
2447        'submitButton':         '.submit',
2448        'cancelReply':          '#cancel-comment-reply-link',
2449        'respondSection':       '#respond',
2450        'replyLogin':           '.comment-reply-login',
2451        'respondLogin':         '.snax-comment-login',
2452        'authorFields':         '.snax-item-comment-autor',
2453    };
2454
2455     var $spinner = $('<div class="snax-upload-icon"></div>');
2456
2457    // Allow accessing
2458    c.selectors = selectors;
2459
2460    /** INIT *******************************************/
2461
2462    c.init = function () {
2463        $(selectors.submitButton, selectors.commentForm).attr('disabled', true);
2464        c.renderSeeMore();
2465        c.attachEventHandlers();
2466    };
2467
2468    /** EVENTS *****************************************/
2469
2470    c.renderSeeMore = function() {
2471        $(selectors.topLevelComment).each(function( index ) {
2472            if($('.children li', this).length>1 && $(this).attr('appendedSeeMoreLink')!== 'true'){
2473               $(this).append(seeMoreHtml);
2474               $(this).attr('appendedSeeMoreLink','true');
2475            }
2476        });
2477        $(selectors.allRepliesLink).on('click', function (e) {
2478            var $parent         = $(this).closest(selectors.topLevelComment);
2479            $('.children', $parent).addClass('children-visible');
2480            $(this).remove();
2481        });
2482    };
2483
2484    //overrides core comment-reply.js to handle multiple forms
2485    c.overrideDefaultHandler = function() {
2486        if (typeof addComment === 'undefined') {
2487            return;
2488        }
2489
2490        addComment.moveForm = function( commId, parentId, respondId, postId ) {
2491                var div,
2492                    element,
2493                    style,
2494                    cssHidden,
2495                    t           = this,
2496                    comm        = t.I( commId ),
2497                    respond     = $('.snax-item.post-' + postId).find('.comment-respond').get(0),
2498                    cancel      = respond.querySelector( '#cancel-comment-reply-link' ),
2499                    parent      = respond.querySelector( '#comment_parent' ),
2500                    post        = respond.querySelector( '#comment_post_ID' ),
2501                    commentForm = respond.getElementsByTagName( 'form' )[0];
2502
2503                if ( ! comm || ! respond || ! cancel || ! parent || ! commentForm ) {
2504                    return;
2505                }
2506
2507                t.respondId = respondId;
2508                postId = postId || false;
2509
2510                if ( ! t.I( 'wp-temp-form-div' ) ) {
2511                    div = document.createElement( 'div' );
2512                    div.id = 'wp-temp-form-div';
2513                    div.style.display = 'none';
2514                    respond.parentNode.insertBefore( div, respond );
2515                }
2516
2517                comm.parentNode.insertBefore( respond, comm.nextSibling );
2518                if ( post && postId ) {
2519                    post.value = postId;
2520                }
2521                parent.value = parentId;
2522                cancel.style.display = '';
2523
2524                cancel.onclick = function() {
2525                    var t       = addComment,
2526                        temp    = t.I( 'wp-temp-form-div' );
2527
2528                    if ( ! temp ) {
2529                        return;
2530                    }
2531
2532                    parent.value = '0';
2533                    temp.parentNode.insertBefore( respond, temp );
2534                    temp.parentNode.removeChild( temp );
2535                    this.style.display = 'none';
2536                    this.onclick = null;
2537
2538                    $(respond).find('.comment-form').trigger('snaxFormInactive');
2539
2540                    return false;
2541                };
2542
2543                /*
2544                * Set initial focus to the first form focusable element.
2545                * Try/catch used just to avoid errors in IE 7- which return visibility
2546                * 'inherit' when the visibility value is inherited from an ancestor.
2547                */
2548                try {
2549                    for ( var i = 0; i < commentForm.elements.length; i++ ) {
2550                        element = commentForm.elements[i];
2551                        cssHidden = false;
2552
2553                        // Modern browsers.
2554                        if ( 'getComputedStyle' in window ) {
2555                            style = window.getComputedStyle( element );
2556                        // IE 8.
2557                        } else if ( document.documentElement.currentStyle ) {
2558                            style = element.currentStyle;
2559                        }
2560
2561                        /*
2562                        * For display none, do the same thing jQuery does. For visibility,
2563                        * check the element computed style since browsers are already doing
2564                        * the job for us. In fact, the visibility computed style is the actual
2565                        * computed value and already takes into account the element ancestors.
2566                        */
2567                        if ( ( element.offsetWidth <= 0 && element.offsetHeight <= 0 ) || style.visibility === 'hidden' ) {
2568                            cssHidden = true;
2569                        }
2570
2571                        // Skip form elements that are hidden or disabled.
2572                        if ( 'hidden' === element.type || element.disabled || cssHidden ) {
2573                            continue;
2574                        }
2575
2576                        element.focus();
2577                        // Stop after the first focusable element.
2578                        break;
2579                    }
2580
2581                } catch( er ) {}
2582
2583                return false;
2584            };
2585
2586        addComment.I = function( id ) {
2587            return document.getElementById( id );
2588        };
2589    };
2590
2591    c.attachEventHandlers = function() {
2592
2593        var loadMoreComments = function($section) {
2594            let $commentList      = $section.find(selectors.list);
2595            let $nextCommentsLink = $section.find('.g1-comment-pagination .next');
2596
2597            if ($nextCommentsLink.length === 0) {
2598                return;
2599            }
2600
2601            $spinner.appendTo($commentList);
2602
2603            $.get($nextCommentsLink.attr('href'), function (data) {
2604                $spinner.remove();
2605
2606                let $page = $(data);
2607
2608                // Load new comments.
2609                let $newComments = $page.find('#comments-wp .comment-list .comment');
2610                $section.find('.comment-list').append($newComments);
2611
2612                // Update pagination for further calls.
2613                let $newPagination = $page.find('#comments-wp .g1-comment-pagination');
2614                $section.find('.g1-comment-pagination').html($newPagination);
2615
2616                // Hide "View most comments" button.
2617                if ($newPagination.find('.next').length === 0) {
2618                    $section.find(selectors.moreCommentsLink).hide();
2619                }
2620
2621                addComment.init();
2622            });
2623        };
2624
2625        $(selectors.moreCommentsLink).on('click', function (e) {
2626            e.preventDefault();
2627            var $section         = $(this).closest(selectors.section);
2628            loadMoreComments($section);
2629        });
2630
2631        $(selectors.commentForm).on('submit', function(e) {
2632            e.preventDefault();
2633            var $form           = $(this);
2634            var url             = $form.attr('action');
2635            var commentParent   = '0';
2636            var $textarea       = $('textarea', $form);
2637            var $section        = $form.closest(selectors.section);
2638            var $list           = $(selectors.list, $section);
2639            var $respondSection = $form.closest(selectors.respondSection);
2640            var $cancelButton   = $(selectors.cancelReply, $respondSection);
2641            var $submitButton   = $(selectors.submitButton, $form);
2642            var requestData = {};
2643
2644            $.each($form.serializeArray(), function(i, field) {
2645                requestData[field.name] = field.value;
2646            });
2647
2648            requestData['is_ajax_item_comment_form'] = true;
2649            commentParent = requestData['comment_parent'];
2650
2651            if (commentParent === '0') {
2652                $spinner.prependTo($list);
2653            } else {
2654                var $commentParent = $('#comment-' + commentParent);
2655                var $commentParentChildren = $('#comment-' + commentParent + '> .children');
2656                if (! $commentParentChildren.length) {
2657                    $commentParent.append('<ul class="children"></ul>');
2658                    $commentParentChildren = $('#comment-' + commentParent + '> .children');
2659                }
2660                $spinner.prependTo($commentParentChildren);
2661            }
2662
2663            var xhr = $.ajax({
2664                'type':     'POST',
2665                'url':      url,
2666                'data':     requestData
2667            });
2668
2669            xhr.done(function (res) {
2670                $textarea.val('');
2671                $cancelButton.trigger('click');
2672                $submitButton.attr('disabled', true);
2673                if (res.indexOf('<body id="error-page">') != -1){
2674                    res = $(res).filter('p')[1];
2675                }
2676                $spinner.replaceWith(res);
2677                if (commentParent !== '0') {
2678                    var $parent         = $commentParentChildren.closest(selectors.topLevelComment);
2679                    $('.children', $parent).addClass('children-visible');
2680                }
2681
2682                $form.trigger('snaxFormInactive');
2683            });
2684
2685            xhr.fail(function( jqXHR, textStatus ) {
2686                if(jqXHR.status===409){
2687                    alert(ctx.config.i18n.duplicate_comment);
2688                }else{
2689                    alert(ctx.config.i18n.comment_fail);
2690                }
2691                $spinner.remove();
2692            });
2693        });
2694
2695        var validateForm = function( $form ) {
2696            var $submitButton   = $(selectors.submitButton, $form);
2697            var $author         = $(selectors.authorFields, $form);
2698            var $input          = $('textarea', $form);
2699            var disable         = false;
2700            if ( $author.length > 0 ){
2701                var $authorName = $('#author', $author);
2702                var $authorMail = $('#email', $author);
2703                if ( $authorName.val() === '' || $authorMail.val() === '' ) {
2704                    disable = true;
2705                }
2706            }
2707            if ($input.val() === '') {
2708                    disable = true;
2709                }
2710            $submitButton.attr('disabled', disable);
2711        };
2712
2713        $(selectors.textarea).keyup(function() {
2714            var $parent         = $(this).closest(selectors.commentForm);
2715            var $author         = $(selectors.authorFields, $parent);
2716            while($(this).outerHeight() < this.scrollHeight + parseFloat($(this).css('borderTopWidth')) + parseFloat($(this).css('borderBottomWidth'))) {
2717                $(this).height($(this).height()+1);
2718            }
2719            if ($(this).val()){
2720                $author.show();
2721                $parent.removeClass('snax-comment-form-collapsed').addClass('snax-comment-form-extended');
2722            } else {
2723                $author.hide();
2724                $parent.removeClass('snax-comment-form-extended').addClass('snax-comment-form-collapsed');
2725            }
2726            validateForm($parent);
2727        });
2728
2729        $(selectors.authorFields).keyup(function() {
2730            var $parent         = $(this).closest(selectors.commentForm);
2731            validateForm($parent);
2732        });
2733
2734        $(selectors.replyLogin).click(function(e){
2735            e.preventDefault();
2736            ctx.loginRequired();
2737        });
2738        $(selectors.respondLogin).click(function(e){
2739            e.preventDefault();
2740            ctx.loginRequired();
2741        });
2742    };
2743
2744    // Fire.
2745    $(document).ready(function () {
2746        c.init();
2747        c.overrideDefaultHandler();
2748    });
2749
2750})(jQuery, snax);
2751
2752/*************************
2753 *
2754 * Module: Delete Post
2755 *
2756 ************************/
2757
2758(function ($, ctx) {
2759
2760    'use strict';
2761
2762    /** CONFIG *******************************************/
2763
2764        // Register new component.
2765    ctx.deletePostModule = {};
2766
2767    // Component namespace shortcut.
2768    var c = ctx.deletePostModule;
2769
2770    // CSS selectors.
2771    var selectors = {
2772        'deleteLink':   '.snax-delete-post'
2773    };
2774
2775    // Allow accessing
2776    c.selectors = selectors;
2777
2778    /** INIT *******************************************/
2779
2780    c.init = function () {
2781        c.attachEventHandlers();
2782    };
2783
2784    /** EVENTS *****************************************/
2785
2786    c.attachEventHandlers = function() {
2787
2788        /* Delete item */
2789
2790        $(selectors.deleteLink).on('click', function (e) {
2791            e.preventDefault();
2792            var $link = $(this);
2793
2794            if (!confirm(ctx.config.i18n.are_you_sure)) {
2795                return;
2796            }
2797
2798            var $item = $link.parents('.g1-collection-item');
2799
2800            if ( $item.length === 0 ) {
2801                var $item = $link.parents('article.post');
2802            }
2803
2804            $item.addClass('snax-post-removing');
2805
2806            ctx.deletePost($link, function(res) {
2807                if (res.status === 'success') {
2808                    var redirectUrl = $link.attr('href');
2809
2810                    // Redirect and show status note on top of a target page.
2811                    if (redirectUrl.length > 0) {
2812                        var queryVarDelimiter = redirectUrl.indexOf('?') === -1 ? '?' : '&';
2813
2814                        window.location.href = redirectUrl + queryVarDelimiter + ctx.config.delete_status_var + '=success';
2815                    // Remove DOM element and show notification.
2816                    } else {
2817                        $item.addClass('snax-post-removed');
2818                        $item.slideToggle(750);
2819
2820                        setTimeout(function() {
2821                            snax.notifications.add(res.message);
2822                        }, 1500);
2823                    }
2824
2825                } else {
2826                    ctx.notifications.add(res.message);
2827                }
2828            });
2829        });
2830    };
2831
2832    // Fire.
2833    $(document).ready(function () {
2834        c.init();
2835    });
2836
2837})(jQuery, snax);
2838
2839/*******************************
2840 *
2841 * Module: Password Reset
2842 *
2843 ******************************/
2844
2845(function ($, ctx) {
2846
2847    'use strict';
2848
2849    /** CONFIG *******************************************/
2850
2851    // Register new component.
2852    ctx.passwordReset = {};
2853
2854    // Component namespace shortcut.
2855    var c = ctx.passwordReset;
2856
2857    // CSS selectors.
2858    var selectors = {
2859        'resetPasswordForm':   '#snax_reset_password_form',
2860        'newPassword':          '#snax_reset_password_form #new_password',
2861        'repeatPassword':       '#snax_reset_password_form #repeat_password',
2862        'cookieName':           '#snax_reset_password_form .rp-cookie-name',
2863        'cookieValue':          '#snax_reset_password_form .rp-cookie_value',
2864        'resetErrorMessage':   '#snax_reset_password_form  .snax-reset-pass-error-message',
2865        'resetSuccessMessage': '#snax_reset_password_form  .snax-reset-pass-success-message',
2866    };
2867
2868    // Allow accessing
2869    c.selectors = selectors;
2870
2871    /** INIT *******************************************/
2872
2873    c.init = function () {
2874        c.attachEventHandlers();
2875    };
2876
2877    /** EVENTS *****************************************/
2878
2879    c.attachEventHandlers = function() {
2880        c.matchPasswords();
2881        c.handleForm();
2882    };
2883
2884    c.matchPasswords = function() {
2885            var $newPassword    = $(selectors.newPassword),
2886                $repeatPassword = $(selectors.repeatPassword);
2887
2888            $repeatPassword.on('change', function(e) {
2889                if ($newPassword.val() !== $repeatPassword.val()){
2890                    $repeatPassword.get(0).setCustomValidity( ctx.config.i18n.passwords_dont_match);
2891                } else {
2892                    $repeatPassword.get(0).setCustomValidity('');
2893                }
2894            });
2895    }
2896
2897    c.handleForm = function() {
2898        var $form           = $(selectors.resetPasswordForm),
2899            $cookieName     = $(selectors.cookieName),
2900            $cookieValue    = $(selectors.cookieValue),
2901            $newPassword    = $(selectors.newPassword),
2902            $errorMessage   = $(selectors.resetErrorMessage),
2903            $successMessage = $(selectors.resetSuccessMessage);
2904
2905        $form.on('submit', function(e) {
2906
2907            e.preventDefault();
2908            e.stopPropagation();
2909            e.stopImmediatePropagation();
2910
2911            $errorMessage.text('');
2912            $successMessage.text('');
2913
2914            ctx.createCookie($cookieName.val(), $cookieValue.val(), 24);
2915
2916            var xhr = $.ajax({
2917                'type':     'POST',
2918                'url':      $form.attr('action') + '?action=resetpass',
2919                'data':     $form.serialize(),
2920            });
2921
2922            xhr.done(function (res) {
2923                if ($('.reset-pass', res).length){
2924                    $successMessage.html( '<p class="snax-validation-tip">' + ctx.config.i18n.password_set + '</p>' );
2925                }
2926                if ($('#login_error', res).length){
2927                    $errorMessage.html( '<p class="snax-validation-tip">' + ctx.config.i18n.link_invalid + '</p>' );
2928                }
2929            });
2930
2931            return false;
2932        });
2933    };
2934
2935    // Fire.
2936    $(document).ready(function () {
2937        if ($(selectors.resetPasswordForm).length){
2938            c.init();
2939        }
2940    });
2941
2942})(jQuery, snax);
2943
2944/*******************************
2945 *
2946 * Module: BuddyPress registration captcha
2947 *
2948 ******************************/
2949
2950(function ($, ctx) {
2951
2952    'use strict';
2953
2954    var useReCaptcha;
2955    var reCaptchaToken;
2956
2957    ctx.registerForm = function () {
2958        useReCaptcha = ctx.config.use_login_recaptcha;
2959        if (useReCaptcha && $('#buddypress #register-page').length >0) {
2960            loadReCaptcha();
2961            $('#signup_submit').attr('disabled', true);
2962        }
2963    };
2964
2965    var loadReCaptcha = function() {
2966        var apiUrl  = ctx.config.recaptcha_api_url;
2967        var ver     = ctx.config.recaptcha_version;
2968        var siteKey = ctx.config.recaptcha_site_key;
2969
2970        if (!siteKey || !apiUrl) {
2971            return;
2972        }
2973
2974        var renderLoginReCaptcha = function() {
2975            if ('30' === ver) {
2976                grecaptcha.execute(
2977                    siteKey,
2978                    { action: 'login' }
2979                ).then( function( token ) {
2980                        $('#snax-register-recaptcha').html('<input type="hidden" name="g-recaptcha-response" value="'+ token +'">');
2981                        reCaptchaEnteredCorrectly(token);
2982                    } );
2983            } else {
2984                grecaptcha.render('snax-register-recaptcha', {
2985                    'sitekey' : siteKey,
2986                    'callback': reCaptchaEnteredCorrectly
2987                });
2988            }
2989        };
2990
2991        // Google reCaptcha API loaded.
2992        if (typeof grecaptcha !== 'undefined') {
2993            renderLoginReCaptcha();
2994        } else {
2995            // API not loaded. Register callback and load script.
2996            window.snaxReCaptchaOnloadCallback = function() {
2997                renderLoginReCaptcha();
2998            };
2999
3000            if ('30' === ver) {
3001                $('head').append('<script src="' + apiUrl + '?onload=snaxReCaptchaOnloadCallback&render='+siteKey+'" async defer>');
3002            } else {
3003                $('head').append('<script src="' + apiUrl + '?onload=snaxReCaptchaOnloadCallback&render=explicit" async defer>');
3004            }
3005        }
3006    };
3007
3008    var reCaptchaEnteredCorrectly = function(response) {
3009        reCaptchaToken = response;
3010        $('#signup_submit').attr('disabled', false);
3011    };
3012
3013    // Fire.
3014    $(document).ready(function () {
3015        ctx.registerForm();
3016    });
3017
3018})(jQuery, snax);
3019
3020/*******************************
3021 *
3022 * Module: Notifications
3023 *
3024 ******************************/
3025
3026(function ($, ctx) {
3027
3028    'use strict';
3029
3030    var api              = {};      // Public API.
3031    var timeout          = 5000;
3032    var $notifications   = false;
3033    var $notificationTpl = false;
3034
3035    var selectors = {
3036        'notifications':    '.snax-notifications',
3037        'notification':     '.snax-notification',
3038        'notificationText': '.snax-notification-text',
3039        'notificationClose':'.snax-notification-close'
3040    };
3041
3042    var classes = {
3043        'on':   'snax-notifications-on',
3044        'off':  'snax-notifications-off',
3045    };
3046
3047    api.add = function(html) {
3048        var $notification = $notificationTpl.clone(true);
3049        $notification.find(selectors.notificationText).html(html);
3050
3051        $notification.on('click', selectors.notificationClose, function() {
3052            api.remove($notification);
3053        });
3054
3055        // Auto-remove.
3056        setTimeout(function() {
3057            api.remove($notification);
3058        }, timeout);
3059
3060        $notifications.prepend($notification);
3061        $notifications.removeClass(classes.off).addClass(classes.on);
3062    };
3063
3064    api.remove = function($notification) {
3065        $notification.addClass('snax-notification-removed');
3066        setTimeout(function() {
3067            $notification.remove();
3068
3069            if (api.isQueueEmpty()) {
3070                $notifications.removeClass(classes.on).addClass(classe
3070s.off);
3071            }
3072        }, 5000);
3073    };
3074
3075    api.isQueueEmpty = function() {
3076        return $notifications.find(selectors.notification).length === 0;
3077    };
3078
3079    var initNotifications = function() {
3080        $notifications = $(selectors.notifications);
3081
3082        if ($notifications.length === 0) {
3083            return;
3084        }
3085
3086        // Store notification template and rmeove it from DOM.
3087        $notificationTpl = $notifications.find(selectors.notification).detach();
3088
3089        // Enable API.
3090        ctx.notifications = api;
3091    };
3092
3093    // Fire.
3094    $(document).ready(function () {
3095        initNotifications();
3096    });
3097
3098})(jQuery, snax);
3099
3100/********************************
3101 *
3102 * Social Login GDPR integration
3103 *
3104 *******************************/
3105
3106(function ($, ctx) {
3107
3108    'use strict';
3109
3110    var storeCurrentURL = function() {
3111        var url = window.location.href;
3112
3113        ctx.createCookie('snax_social_login_redirect_url', url, 1);
3114    };
3115
3116    $(document).ready(function () {
3117        var $gdpr = $('.snax-gdpr-consent-form');
3118
3119        if ($gdpr.length > 0) {
3120            $gdpr.each(function() {
3121                var $form = $(this);
3122                var $links = $form.parent().find('.snax-social-login-links');
3123                var $link;  // A requested social login link.
3124
3125                // Toggle GDPR and Social Links visibility.
3126                var toggleVisiblity = function() {
3127                    $form.toggleClass('snax-gdpr-consent-form-hidden snax-gdpr-consent-form-visible');
3128                    $links.toggleClass('snax-social-login-links-visible snax-social-login-links-hidden');
3129                };
3130
3131                // Social login link requested.
3132                $links.on('click', 'a.snax-social-login', function(e) {
3133                    e.preventDefault();
3134
3135                    $link = $(this);
3136
3137                    toggleVisiblity();
3138                });
3139
3140                // Accept GDPR.
3141                $form.on('click', '.snax-slog-gdpr-accept', function(e) {
3142                    e.preventDefault();
3143
3144                    storeCurrentURL();
3145
3146                    window.location.href = $link.attr('href');
3147                });
3148
3149                // Cancel GDPR.
3150                $form.on('click', '.snax-slog-gdpr-cancel', function(e) {
3151                    e.preventDefault();
3152
3153                    toggleVisiblity();
3154                });
3155            });
3156        } else {
3157            // Social login link requested.
3158            $('.snax-social-login-links').on('click', 'a.snax-social-login', function(e) {
3159                storeCurrentURL();
3160            });
3161        }
3162    });
3163
3164})(jQuery, snax);
3165;
3166jQuery(function($) {
3167  $('[data-opinionstage-embed-url]').each(function( ) {
3168    var $widgetEmbedded = $(this)
3169    var url = $widgetEmbedded.data('opinionstage-embed-url')
3170
3171    $.getJSON( url ).
3172      done( function( data ) {
3173        $widgetEmbedded.after(data.code)
3174      })
3175      .fail(function(jqxhr, textStatus, error) {
3176        console.error( "[social-polls-by-opinionstage] can't load widget embed code" )
3177      })
3178  })
3179})
3180;
3181/* global document */
3182/* global jQuery */
3183/* global wyr */
3184
3185// global namespace
3186if ( typeof window.wyr === 'undefined' ) {
3187    window.wyr = {};
3188}
3189
3190/********
3191 *
3192 * Core
3193 *
3194 *******/
3195
3196(function ($, ctx) {
3197
3198    'use strict';
3199
3200    /** VARS *************************/
3201
3202    ctx.config = $.parseJSON(window.wyr_front_config);
3203
3204    if (!ctx.config) {
3205        throw 'WYR Error: Global config is not defined!';
3206    }
3207
3208    /** FUNCTIONS ********************/
3209
3210    ctx.isTouchDevice = function () {
3211        return ('ontouchstart' in window) || navigator.msMaxTouchPoints;
3212    };
3213
3214    ctx.createCookie =  function (name, value, hours) {
3215        var expires;
3216
3217        if (hours) {
3218            var date = new Date();
3219            date.setTime(date.getTime() + (hours * 60 * 60 * 1000));
3220            expires = '; expires=' + date.toUTCString();
3221        }
3222        else {
3223            expires = '';
3224        }
3225
3226        document.cookie = name.concat('=', value, expires, '; path=/');
3227    };
3228
3229    ctx.readCookie = function (name) {
3230        var nameEQ = name + '=';
3231        var ca = document.cookie.split(';');
3232
3233        for(var i = 0; i < ca.length; i += 1) {
3234            var c = ca[i];
3235            while (c.charAt(0) === ' ') {
3236                c = c.substring(1,c.length);
3237            }
3238
3239            if (c.indexOf(nameEQ) === 0) {
3240                return c.substring(nameEQ.length,c.length);
3241            }
3242        }
3243
3244        return null;
3245    };
3246
3247    ctx.deleteCookie = function (name) {
3248        ctx.createCookie(name, '', -1);
3249    };
3250
3251})(jQuery, wyr);
3252
3253/*********************
3254 *
3255 * Module: Reactions
3256 *
3257 ********************/
3258
3259(function ($, ctx) {
3260
3261    'use strict';
3262
3263    var config;
3264
3265    var selectors = {
3266        'wrapper':      '.wyr-reaction-items',
3267        'link':         '.wyr-reaction',
3268        'voted':        '.wyr-reaction-voted',
3269        'value':        '.wyr-reaction-value',
3270        'bar':          '.wyr-reaction-bar'
3271    };
3272
3273    var classes = {
3274        'voted':        'wyr-reaction-voted'
3275    };
3276
3277    ctx.reactionsSelectors  = selectors;
3278    ctx.reactionsClasses    = classes;
3279
3280    ctx.reactions = function () {
3281        config = $.parseJSON(window.wyr_front_config);
3282        var $body = $('body');
3283
3284        // Catch event on wrapper to keep it working after box content reloading
3285        $body.on('click', selectors.link, function (e) {
3286            e.preventDefault();
3287
3288            var $link       = $(this);
3289            var $wrapper    = $link.parents(selectors.wrapper);
3290            var nonce       = $.trim($link.attr('data-wyr-nonce'));
3291            var postId      = parseInt($link.attr('data-wyr-post-id'), 10);
3292            var authorId    = parseInt($link.attr('data-wyr-author-id'), 10);
3293            var type        = $.trim($link.attr('data-wyr-reaction'));
3294
3295            if ($link.is(selectors.voted)) {
3296                return;
3297            }
3298
3299            ctx.reactionVote({
3300                'postId':   postId,
3301                'authorId': authorId,
3302                'type':     type
3303            }, nonce, $wrapper);
3304        });
3305
3306        // Update reactions for guests.
3307        if (!$body.is('.logged-in')) {
3308            $(selectors.link).each(function () {
3309                var $link  = $(this);
3310                var postId = parseInt($link.attr('data-wyr-post-id'), 10);
3311                var type   = $.trim($link.attr('data-wyr-reaction'));
3312                var reactionVoted = ctx.readCookie('wyr_vote_'+ type +'_' + postId);
3313
3314                if (reactionVoted) {
3315                    $link.addClass(classes.voted);
3316
3317                    var value = parseInt(reactionVoted, 10);
3318
3319                    if (value && value > 0) {
3320                        $link.find(selectors.value).attr('data-raw-value', reactionVoted);
3321                        $link.find(selectors.value).text(numberFormat(reactionVoted, config.number_format.decimals, config.number_format.dec_point, config.number_format.thousands_sep));
3322                    }
3323                } else {
3324                    $link.removeClass(classes.voted);
3325                }
3326            });
3327        }
3328        if ($body.is('.logged-in')) {
3329            $(selectors.link).each(function () {
3330                var $link  = $(this);
3331                var postId = parseInt($link.attr('data-wyr-post-id'), 10);
3332                var type   = $.trim($link.attr('data-wyr-reaction'));
3333                var reactionVoted = ctx.readCookie('wyr_vote_'+ type +'_' + postId);
3334
3335                if (reactionVoted) {
3336                    $link.addClass(classes.voted);
3337                }
3338
3339                var value = parseInt(reactionVoted, 10);
3340
3341                if (value && value > 0) {
3342                    $link.find(selectors.value).attr('data-raw-value', reactionVoted);
3343                    $link.find(selectors.value).text(numberFormat(reactionVoted, config.number_format.decimals, config.number_format.dec_point, config.number_format.thousands_sep));
3344                }
3345            });
3346        }
3347    };
3348
3349    ctx.reactionVote = function (data, nonce, $box) {
3350        if (!config) {
3351            ctx.log('Post voting failed. Global config is not defined!');
3352            return;
3353        }
3354
3355        var xhr = $.ajax({
3356            'type': 'POST',
3357            'url': config.ajax_url,
3358            'dataType': 'json',
3359            'data': {
3360                'action':           'wyr_vote_post',
3361                'security':         nonce,
3362                'wyr_post_id':      data.postId,
3363                'wyr_author_id':    data.authorId,
3364                'wyr_vote_type':    data.type
3365            }
3366        });
3367        setTimeout(function(){
3368            // Update state, without waiting for ajax response.
3369            var $reactions = $box.find(selectors.link);
3370            var reactions = ctx.getNewState($reactions, data.type);
3371
3372            ctx.reactionVoted(data.postId, data.type, $box);
3373
3374            // Update states.
3375            $reactions.each(function () {
3376                var $this = $(this);
3377
3378                var type = $.trim($this.attr('data-wyr-reaction'));
3379
3380                if (typeof reactions[type] !== 'undefined') {
3381                    $this.find(selectors.value).attr('data-raw-value', reactions[type].count);
3382                    $this.find(selectors.value).text(reactions[type].formatted_count);
3383                    $this.find(selectors.bar).css('height', reactions[type].percentage + '%');
3384                }
3385            });
3386         }, 200);
3387
3388        xhr.done(function (res) {
3389            if (res.status !== 'success') {
3390                alert(config.error_msg);
3391            }
3392        });
3393    };
3394
3395    ctx.getNewState = function($reactions, votedType) {
3396        var state = {};
3397        var total = 0;
3398
3399        $reactions.each(function () {
3400            var $this = $(this);
3401            var type = $.trim($this.attr('data-wyr-reaction'));
3402            var count = parseInt($this.find(selectors.value).attr('data-raw-value'), 10);
3403
3404            state[type] = {
3405                'count':            count,
3406                'formatted_count':  numberFormat(count, config.number_format.decimals, config.number_format.dec_point, config.number_format.thousands_sep),
3407                'percentage':       ''
3408            };
3409
3410            total += count;
3411        });
3412
3413        if (typeof state[votedType] !== 'undefined') {
3414            state[votedType]['count']++;
3415            state[votedType]['formatted_count'] = numberFormat(state[votedType]['count'], config.number_format.decimals, config.number_format.dec_point, config.number_format.thousands_sep);
3416            total++;
3417        }
3418
3419        // Recalculate percentages.
3420        for (var type in state) {
3421            state[type]['percentage'] = Math.round( ( 100 * state[type]['count'] ) / total );
3422        }
3423
3424        return state;
3425    };
3426
3427    ctx.reactionVoted = function(postId, type, $box) {
3428        var cookieName   = 'wyr_vote_'+ type +'_' + postId;
3429
3430        var $reaction = $box.find('.wyr-reaction-' + type);
3431        var currValue = parseInt($reaction.find(selectors.value).attr('data-raw-value'), 10);
3432        var newValue = currValue + 1;
3433
3434        ctx.createCookie(cookieName, newValue, 12);
3435
3436        // Cookie can't be read immediately so we need to update CSS classes manually.
3437        $reaction.addClass(classes.voted);
3438    };
3439
3440    var numberFormat = function(number, decimals, decPoint, thousandsSep) {
3441        number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
3442        var n = !isFinite(+number) ? 0 : +number;
3443        var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
3444        var sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep;
3445        var dec = (typeof decPoint === 'undefined') ? '.' : decPoint;
3446        var s = '';
3447
3448        var toFixedFix = function (n, prec) {
3449            if (('' + n).indexOf('e') === -1) {
3450                return +(Math.round(n + 'e+' + prec) + 'e-' + prec);
3451            } else {
3452                var arr = ('' + n).split('e');
3453                var sig = '';
3454                if (+arr[1] + prec > 0) {
3455                    sig = '+';
3456                }
3457
3458                return (+(Math.round(+arr[0] + 'e' + sig + (+arr[1] + prec)) + 'e-' + prec)).toFixed(prec);
3459            }
3460        };
3461
3462        // @todo: for IE parseFloat(0.55).toFixed(0) = 0;
3463        s = (prec ? toFixedFix(n, prec).toString() : '' + Math.round(n)).split('.');
3464        if (s[0].length > 3) {
3465            s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
3466        }
3467        if ((s[1] || '').length < prec) {
3468            s[1] = s[1] || '';
3469            s[1] += new Array(prec - s[1].length + 1).join('0');
3470        }
3471
3472        return s.join(dec);
3473    };
3474
3475    // fire
3476    $(document).ready(function () {
3477        ctx.reactions();
3478    });
3479
3480})(jQuery, wyr);
3481
3482/********************
3483 *
3484 * Load More Button
3485 *
3486 ********************/
3487
3488(function ($, ctx) {
3489
3490        'use strict';
3491
3492        // prevent triggering the action more than once at the time
3493        var loading = false;
3494
3495        ctx.loadMoreButton = function () {
3496            $('.wyr-load-more').on('click', function (e) {
3497                if (loading) {
3498                    return;
3499                }
3500
3501                loading = true;
3502
3503                e.preventDefault();
3504
3505                var $button = $(this);
3506                var $collectionMore = $button.prev('.wyr-links');
3507                var url = $button.attr('href');
3508
3509                // load page
3510                var xhr = $.get(url);
3511
3512                // on success
3513                xhr.done(function (data) {
3514                    loading = false;
3515                    var collectionSelector = '.wyr-links';
3516
3517                    var $resCollectionItems = $(data).find(collectionSelector).find('li');
3518                    var $newButton = $(data).find('.wyr-load-more');
3519                    $collectionMore.append($resCollectionItems);
3520                    $button.after($newButton);
3521                    $button.remove();
3522                    ctx.loadMoreButton();
3523                });
3524
3525            });
3526        };
3527
3528        $(document).ready(function () {
3529            ctx.loadMoreButton();
3530        });
3531
3532    })(jQuery, wyr);
3533;

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.