Files
2024-12-31 11:07:09 +01:00

3 lines
8.6 KiB
JavaScript

var NRF_Countdown_Widget_Timer=function(){function t(t,e){this.expected=null,this.timeout=null,this.instance=t,this.countdown=t.elem,this.data=t.data,this.helper=t.helper,this.interval=e||this.helper.MILLIS_IN_SECOND}var e=t.prototype;return e.start=function(){if(this.expected=Date.now()+this.interval,this.countdown.innerHTML=this.data.format,this.countdown.classList.remove("is-preview"),this.instance.tick(),this.helper.end())return!1;this.timeout=setTimeout(this.step.bind(this),this.interval)},e.stop=function(){clearTimeout(this.timeout),this.interval=null},e.step=function(){if(this.helper.end())return!1;var t=Date.now()-this.expected;this.instance.tick(),this.expected+=this.interval,this.timeout=setTimeout(this.step.bind(this),Math.max(0,this.interval-t))},t}(),NRF_Countdown_Widget_Helper=function(){function t(t){this.instance=t,this.countdown=t.elem,this.data=t.data,this.MILLIS_IN_DAY=864e5,this.MILLIS_IN_HOUR=36e5,this.MILLIS_IN_MINUTE=6e4,this.MILLIS_IN_SECOND=1e3,this.SECONDS_IN_HOUR=3600,this.SECONDS_IN_MINUTE=60,this.MINUTES_IN_HOUR=60,this.HOURS_IN_DAY=24,this.MONTHS_IN_YEAR=12}var e=t.prototype;return e.end=function(){var t=new Date(this.data.value),e=new Date;if(!this.nowPassedTarget(e,t))return!1;this.countdown.ticker.stop();var n=new CustomEvent("onFPFCountdownFinish",{detail:this.countdown,cancelable:!0});switch(this.countdown.dispatchEvent(n),this.data.countdownAction){case"keep":case"hide":"hide"!=this.data.countdownAction||n.defaultPrevented||this.countdown.classList.add("nrf-hidden");break;case"message":this.instance.showMessage(),n.defaultPrevented||this.instance.markDone();break;case"redirect":"redirect"!=this.data.countdownAction||n.defaultPrevented||(window.location.href=this.data.redirectUrl)}return"evergreen"==this.data.countdownType&&"restart"==this.data.countdownAction&&(this.instance.deleteDynamicLocalStorageItem(),this.instance.reset()),!0},e.getTimerData=function(){var t,e,n,s,a,o,i,r,c,u,h,d,l,m=this.findAllTags();return!!m&&(n=(t=new Date(this.data.value))-(e=new Date),c=this.convertDateToObject(t),s=this.convertDateToObject(e),this.nowPassedTarget(e,t)?{years:a="true"===this.data.doubleZeroesFormat?"00":"0",months:a,days:a,hours:a,minutes:a,seconds:a}:(a=c.year-s.year,o=c.month-s.month,i=c.day-s.day,u=c.hours-s.hours,h=c.minutes-s.minutes,(l=c.seconds-s.seconds)<0&&(h--,l+=this.SECONDS_IN_MINUTE),h<0&&(u--,h+=this.MINUTES_IN_HOUR),u<0&&(i--,u+=this.HOURS_IN_DAY),i<0&&(o--,r=this.calculateDaysInThisMonth(s.year,s.month),i+=(c=this.calculateDaysInPreviousMonth(c.year,c.month))<r?r:c),o<0&&(a--,o+=this.MONTHS_IN_YEAR),r=(u*this.SECONDS_IN_HOUR+h*this.SECONDS_IN_MINUTE+l)*this.MILLIS_IN_SECOND,u=(c=new Date(Date.UTC(s.year+a,s.month-1,2==s.month&&29==s.day&&1!=new Date(s.year+a,1,29).getMonth()?28:s.day,s.hours,s.minutes,s.seconds))).valueOf()-e.valueOf(),h=new Date(t.valueOf()-i*this.MILLIS_IN_DAY-r).valueOf()-c.valueOf(),d={},l=n,1!=m.years&&1!=m.months||(l-=u),1==m.years?d.years=a:1==m.months&&(o+=a*this.MONTHS_IN_YEAR),1==m.months?(l-=h,d.months=o):i=Math.floor(l/this.MILLIS_IN_DAY),1==m.days&&(d.days=Math.floor(l/this.MILLIS_IN_DAY),l-=i*this.MILLIS_IN_DAY),1==m.hours&&(d.hours=Math.floor(l/this.MILLIS_IN_HOUR),l-=d.hours*this.MILLIS_IN_HOUR),1==m.minutes&&(d.minutes=Math.floor(l/this.MILLIS_IN_MINUTE),l-=d.minutes*this.MILLIS_IN_MINUTE),d.seconds=Math.floor(l/this.MILLIS_IN_SECOND),"true"===this.data.doubleZeroesFormat&&Object.keys(d).map(function(t,e){var n;d[t]=d[t].toString().length<2?(n=2,String(d[t]).padStart(n,"0")):d[t]}),d))},e.findAllTags=function(){var e,t,n;return this.data.tags||(e={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},(t=this.data.format.match(/countdown-digit (days|hours|minutes|seconds)/g))?(t.forEach(function(t){t=t.replace("countdown-digit ",""),e[t]=1}),this.data.tags=e):!!(t=this.data.format.match(/[^{]+(?=\})/g))&&(n=this.countdown.innerHTML,t.forEach(function(t){n=n.replace("{"+t+"}",'<span class="countdown-digit '+t+'"></span>'),e[t]=1}),this.countdown.innerHTML=n,this.data.tags=e))},e.nowPassedTarget=function(t,e){t=new Date(t).getTime();return new Date(e).getTime()<t},e.convertDateToObject=function(t){return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate(),hours:t.getUTCHours(),minutes:t.getUTCMinutes(),seconds:t.getUTCSeconds()}},e.calculateDaysInPreviousMonth=function(t,e){return(e-=2)<0&&t--,new Date(Date.UTC(t,e+1,0)).getUTCDate()},e.calculateDaysInThisMonth=function(t,e){return 12==e&&(t++,e=0),new Date(Date.UTC(t,e,0)).getUTCDate()},t}(),NRF_Countdown_Widget=function(){function t(t){this.countdown=t,this.init()}var e=t.prototype;return e.init=function(){return this.elem=this.countdown,this.data=this.getCountdownInstanceData(),this.helper=new NRF_Countdown_Widget_Helper(this),this.countdown.instance=this},e.start=function(){return this.countdown.ticker=new NRF_Countdown_Widget_Timer(this),this.countdown.ticker.start(),this},e.reset=function(){this.init(),this.stop(),this.countdown.classList.remove("nrf-hidden"),this.countdown.classList.remove("showing-message"),this.countdown.classList.remove("done"),this.start()},e.stop=function(){this.countdown.ticker&&this.countdown.ticker.stop()},e.tick=function(){for(var t=this.helper.getTimerData(),e=0,n=Object.keys(t);e<n.length;e++){var s=n[e],a=this.countdown.querySelector(".countdown-digit."+s);if(a){var o=t[s].toString();1===o.length&&"custom"!==this.data.theme&&a.querySelector(".digit-1").classList.add("empty");for(var i=0;i<o.length;i++){var r=1===o.length?2:i+1,c=a.querySelector(".digit-"+r);c?c.innerHTML!=o[i]&&(c.classList.remove("empty"),c.innerHTML=o[i]):a.innerHTML+='<span class="digit-number digit-'+r+'">'+o[i]+"</span>"}}}},e.getCountdownInstanceData=function(){var t,e,n,s=Object.assign({},this.countdown.dataset);return"evergreen"===s.countdownType?(t=new Date,e=this.getDynamicCountdownDate(s),n=this.getDynamicLocalStorageKey(),localStorage.getItem(n)||localStorage.setItem(n,t),s.value=e):"static"===s.countdownType&&"client"===s.timezone&&(s.value=new Date(s.value)),s.elem=this.countdown,s.days="true"===s.days,s.hours="true"===s.hours,s.minutes="true"===s.minutes,s.seconds="true"===s.seconds,s.format=s.format,s.format=this.getThemeFormat(s),s},e.getThemeFormat=function(a){var o,i,r,c;return"custom"===a.theme?a.format:(o=[],a.days&&o.push("days"),a.hours&&o.push("hours"),a.minutes&&o.push("minutes"),a.seconds&&o.push("seconds"),i="oneline"===a.theme?" ":"",r="",c=1,o.forEach(function(t){var e=a[t+"Label"],n="",s="",n='<span class="countdown-item'+(n="default"===a.theme?""===e?" no-label":"":n)+'"><span class="countdown-digit '+t+'"><span class="digit-number digit-1 empty"></span><span class="digit-number digit-2 empty"></span></span>'+(""!=e?i+'<span class="countdown-digit-label">'+e+"</span>":"")+"</span>";"true"===a.separator&&"default"===a.theme&&(s=c!==o.length?'<span class="countdown-item separator"><span class="countdown-digit">:</span><span class="countdown-digit-label">&nbsp;</span></span>':""),"oneline"===a.theme&&(s=""!==(s=c<o.length-1?", ":c!==o.length?", "+window.parent.Joomla.JText._("NR_AND_LC")+" ":"")?'<span class="countdown-item separator"><span class="countdown-digit">'+s+"</span></span>":""),r+=n+s,c++}),r)},e.getDynamicLocalStorageKey=function(){return"NRF_evergreen_countdown_"+btoa(encodeURIComponent(JSON.stringify(Object.assign({},this.countdown.dataset))))},e.deleteDynamicLocalStorageItem=function(){"evergreen"==this.data.countdownType&&localStorage.removeItem(this.getDynamicLocalStorageKey())},e.getDynamicCountdownDate=function(t){var e=new Date,n=localStorage.getItem(this.getDynamicLocalStorageKey());return n&&(e=new Date(n)),this.applyDynamicDataToDate(e,t)},e.applyDynamicDataToDate=function(t,e){var n=parseInt(e.dynamicDays)||0,s=parseInt(e.dynamicHours)||0,a=parseInt(e.dynamicMinutes)||0,e=parseInt(e.dynamicSeconds)||0;return 0!=n&&t.setDate(t.getDate()+n),0!=s&&t.setHours(t.getHours()+s),0!=a&&t.setMinutes(t.getMinutes()+a),0!=e&&t.setSeconds(t.getSeconds()+e),t},e.showMessage=function(){this.countdown.classList.add("showing-message"),this.countdown.innerHTML=this.data.finishText},e.markDone=function(){var e=this;Object.keys(this.countdown.dataset).forEach(function(t){delete e.countdown.dataset[t]}),this.countdown.classList.add("done")},t}(),NRF_Countdown_Widget_Loader=function(){function t(){}return t.prototype.init=function(){var e;window.IntersectionObserver&&(e=new IntersectionObserver(function(t,e){t.forEach(function(t){t.isIntersecting&&(new NRF_Countdown_Widget(t.target).start(),e.unobserve(t.target))})},{rootMargin:"0px 0px 0px 0px"}),document.querySelectorAll(".nrf-countdown:not(.done)").forEach(function(t){e.observe(t)}))},t}();"loading"!=document.readyState?(new NRF_Countdown_Widget_Loader).init():document.addEventListener("DOMContentLoaded",function(){(new NRF_Countdown_Widget_Loader).init()});