!function(){function t(){if(this.complete){const e=this.getAttribute("data-lazy-src");if(e&&this.src!==e)return void this.addEventListener("onload",t);const n=this.width,d=this.height;n&&n>0&&d&&d>0&&(this.setAttribute("width",n),this.setAttribute("height",d),i(this))}else this.addEventListener("onload",t)}var e=function(){const e=document.querySelectorAll("img[data-recalc-dims]");for(let i=0;i1?c:d}var f=[],g=[],h={precision:100,elapse:!1,defer:!1};g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var i={Y:"years",m:"months",n:"daysToMonth",d:"daysToWeek",w:"weeks",W:"weeksToMonth",H:"hours",M:"minutes",S:"seconds",D:"totalDays",I:"totalHours",N:"totalMinutes",T:"totalSeconds"},j=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.options=a.extend({},h),this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&("function"==typeof d?(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)):this.options=a.extend({},h,d)),this.setFinalDate(c),this.options.defer===!1&&this.start()};a.extend(j.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},this.options.precision)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},toggle:function(){this.interval?this.stop():this.start()},pause:function(){this.stop()},resume:function(){this.start()},remove:function(){this.stop.call(this),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){if(0===this.$el.closest("html").length)return void this.remove();var b,c=void 0!==a._data(this.el,"events"),d=new Date;b=this.finalDate.getTime()-d.getTime(),b=Math.ceil(b/1e3),b=!this.options.elapse&&b<0?0:Math.abs(b),this.totalSecsLeft!==b&&c&&(this.totalSecsLeft=b,this.elapsed=d>=this.finalDate,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToWeek:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToMonth:Math.floor(this.totalSecsLeft/60/60/24%30.4368),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),weeksToMonth:Math.floor(this.totalSecsLeft/60/60/24/7)%4,months:Math.floor(this.totalSecsLeft/60/60/24/30.4368),years:Math.abs(this.finalDate.getFullYear()-d.getFullYear()),totalDays:Math.floor(this.totalSecsLeft/60/60/24),totalHours:Math.floor(this.totalSecsLeft/60/60),totalMinutes:Math.floor(this.totalSecsLeft/60),totalSeconds:this.totalSecsLeft},this.options.elapse||0!==this.totalSecsLeft?this.dispatchEvent("update"):(this.stop(),this.dispatchEvent("finish")))},dispatchEvent:function(b){var c=a.Event(b+".countdown");c.finalDate=this.finalDate,c.elapsed=this.elapsed,c.offset=a.extend({},this.offset),c.strftime=d(this.offset),this.$el.trigger(c)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];j.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new j(this,b[0],b[1])})}});; "use strict"; (function ($) { "use strict"; var combinators = [" ", ">", "+", "~"]; var fraternisers = ["+", "~"]; var complexTypes = ["ATTR", "PSEUDO", "ID", "CLASS"]; function grok(msobserver) { if (!$.find.tokenize) { msobserver.isCombinatorial = true; msobserver.isFraternal = true; msobserver.isComplex = true; return; } msobserver.isCombinatorial = false; msobserver.isFraternal = false; msobserver.isComplex = false; var token = $.find.tokenize(msobserver.selector); for (var i = 0; i < token.length; i++) { for (var j = 0; j < token[i].length; j++) { if (combinators.indexOf(token[i][j].type) != -1) msobserver.isCombinatorial = true; if (fraternisers.indexOf(token[i][j].type) != -1) msobserver.isFraternal = true; if (complexTypes.indexOf(token[i][j].type) != -1) msobserver.isComplex = true; } } } var MutationSelectorObserver = function MutationSelectorObserver(selector, callback, options) { this.selector = selector.trim(); this.callback = callback; this.options = options; grok(this); }; var msobservers = []; msobservers.initialize = function (selector, callback, options) { var seen = []; var callbackOnce = function callbackOnce() { if (seen.indexOf(this) == -1) { seen.push(this); $(this).each(callback); } }; $(options.target).find(selector).each(callbackOnce); var msobserver = new MutationSelectorObserver(selector, callbackOnce, options); this.push(msobserver); var observer = new MutationObserver(function (mutations) { var matches = []; for (var m = 0; m < mutations.length; m++) { if (mutations[m].type == "attributes") { if (mutations[m].target.matches(msobserver.selector)) matches.push(mutations[m].target); if (msobserver.isFraternal) matches.push.apply(matches, mutations[m].target.parentElement.querySelectorAll(msobserver.selector));else matches.push.apply(matches, mutations[m].target.querySelectorAll(msobserver.selector)); } if (mutations[m].type == "childList") { for (var n = 0; n < mutations[m].addedNodes.length; n++) { if (!(mutations[m].addedNodes[n] instanceof Element)) continue; if (mutations[m].addedNodes[n].matches(msobserver.selector)) matches.push(mutations[m].addedNodes[n]); if (msobserver.isFraternal) matches.push.apply(matches, mutations[m].addedNodes[n].parentElement.querySelectorAll(msobserver.selector));else matches.push.apply(matches, mutations[m].addedNodes[n].querySelectorAll(msobserver.selector)); } } } for (var i = 0; i < matches.length; i++) { $(matches[i]).each(msobserver.callback); } }); var defaultObeserverOpts = { childList: true, subtree: true, attributes: msobserver.isComplex }; observer.observe(options.target, options.observer || defaultObeserverOpts); return observer; }; $.fn.initialize = function (callback, options) { return msobservers.initialize(this.selector, callback, $.extend({}, $.initialize.defaults, options)); }; $.initialize = function (selector, callback, options) { return msobservers.initialize(selector, callback, $.extend({}, $.initialize.defaults, options)); }; $.initialize.defaults = { target: document.documentElement, observer: null }; })(jQuery); 'use strict'; function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var HurrytimerAction = /*#__PURE__*/function () { function HurrytimerAction(elementRef, config) { _classCallCheck(this, HurrytimerAction); this.elementRef = elementRef; this.config = config; } _createClass(HurrytimerAction, [{ key: "changeStockStatus", value: function changeStockStatus(campaignId, status) { if (!jQuery.post) return; jQuery.post(hurrytimer_ajax_object.ajax_url, { nonce: hurrytimer_ajax_object.ajax_nonce, action: 'change_stock_status', status: status, campaign_id: campaignId }); } }, { key: "hasMessageAction", value: function hasMessageAction() { var _iterator = _createForOfIteratorHelper(this.config.actions), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var action = _step.value; if (action['id'] == hurrytimer_ajax_object.actionsOptions.displayMessage) { return true; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return false; } /** * Hide campaign. */ }, { key: "hide", value: function hide() { // We don't hide campaign if there is a message to display. if (this.hasMessageAction()) { return; } var stickyBar = this.elementRef.closest('.hurrytimer-sticky'); if (stickyBar.length) { stickyBar.addClass('hurryt-loading'); } else { this.elementRef.addClass('hurryt-loading'); } } /** * Redirect to the given url. * @param url */ }, { key: "hideAddToCartButton", value: /** * Hide "Add to cart" button. * @return void */ function hideAddToCartButton() { var $addToCartForm = jQuery('.single_add_to_cart_button').closest('form.cart'); if ($addToCartForm.length) { $addToCartForm.remove(); } } /** * Display message by replacing campaign content with the given message. * @param message */ }, { key: "displayMessage", value: function displayMessage(message) { var messageHtml = "
").concat(message, "
"); this.elementRef.find('.hurrytimer-campaign-message').remove(); var stickyBar = this.elementRef.closest('.hurrytimer-sticky'); if (stickyBar.length) { this.elementRef.addClass('hurryt-loading'); stickyBar.find('.hurrytimer-sticky-inner').append(messageHtml); } else { this.elementRef.addClass('hurryt-loading'); this.elementRef.after(messageHtml); } } }, { key: "expireCoupon", value: function expireCoupon(code, message) { jQuery.ajaxPrefilter(function (opts, originOpts, jqXHR) { if (opts.url.indexOf('wc-ajax=apply_coupon') === -1) return; if (typeof originOpts.data.coupon_code !== 'string' || typeof code !== 'string' || originOpts.data.coupon_code.toLowerCase() !== code.toLowerCase()) return; jqXHR.abort(); jQuery('.woocommerce-error').remove(); var $target = jQuery('.woocommerce-notices-wrapper:first') || jQuery('.cart-empty').closest('.woocommerce') || jQuery('.woocommerce-cart-form'); $target.prepend("")); jQuery('.checkout_coupon').removeClass('processing').unblock(); jQuery('.woocommerce-cart-form').removeClass('processing').unblock(); }); } }], [{ key: "redirect", value: function redirect(url) { document.body.style.opacity = '0'; document.body.style.display = 'none'; if (url.trim().length === 0) { return; } if (hurrytimer_ajax_object.redirect_no_back) { window.location.replace(url); } else { window.location.href = url; } } }]); return HurrytimerAction; }(); "use strict"; function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } /* * global hurrytimer_ajax_object */ var HurrytimerCampaign = /*#__PURE__*/function () { function HurrytimerCampaign(elementRef, config, state) { _classCallCheck(this, HurrytimerCampaign); this.config = config; this.elementRef = elementRef; this.actionsOptions = hurrytimer_ajax_object.actionsOptions; this.restartOptions = hurrytimer_ajax_object.restartOptions; this.recurTimeoutId = -1; this.recurIntervalId = -1; this.retryCount = 0; this.startEventDispatched = false; this.state = state; this.restartIntervalId = -1; this.currentEndDate = null; } /** * @param endDateInMS * @return void */ _createClass(HurrytimerCampaign, [{ key: "setCookie", value: function setCookie(endDateInMS) { var options = { expires: 365 }; if (hurrytimer_ajax_object.COOKIEPATH) { options.path = hurrytimer_ajax_object.COOKIEPATH; } if (hurrytimer_ajax_object.COOKIE_DOMAIN) { options.domain = hurrytimer_ajax_object.COOKIE_DOMAIN; } Cookies.set(this.config.cookieName, endDateInMS, options); if (this.config.reset_token) { Cookies.set("".concat(this.config.cookieName, "_reset_token"), this.config.reset_token, { expires: 365 }); } } /** * Returns end date for the given duration. * @return {Date} */ }, { key: "getEndDate", value: function getEndDate() { // Evergreen or recurring if (this.config.isRegular) { return new Date(this.config.endDate); } var date = new Date(parseInt(this.config.endDate)); if (!this.isValidDate(date) || !this.config.endDate || this.should_reset() || this.allowRestart() || this.config.reload_reset) { if (_typeof(date) === 'object' && date.setTime != undefined) { this.unDismissStickyBar(); date.setTime(this.calculateDate().getTime()); } } this.setCookie(date.getTime()); this.updateTimestamp(date.getTime()); this.currentEndDate = date; return date; } /** * Check if the given date is valid. * @param {*} d */ }, { key: "isValidDate", value: function isValidDate(d) { return Object.prototype.toString.call(d) === '[object Date]' && !isNaN(d.getTime()); } /** * This is useful to force timestamp update when the page is cached. */ }, { key: "updateTimestamp", value: function updateTimestamp(endDateTimeTS) { if (jQuery.ajax === undefined) return; var args = { url: hurrytimer_ajax_object.ajax_url, async: true, type: 'POST', data: { nonce: hurrytimer_ajax_object.ajax_nonce, timestamp: endDateTimeTS, cid: this.config.id, action: 'hurryt/update_timestamp' } }; jQuery.ajax(args); } /** * Returns true if the campaign should reset. * * @return {number} */ }, { key: "should_reset", value: function should_reset() { return this.config.should_reset; } /** * Remove sticky bar dismiss if available for current given campaign. */ }, { key: "unDismissStickyBar", value: function unDismissStickyBar() { Cookies.remove("_ht_CDT-".concat(this.config.id, "_dismissed")); } /** * Returns true if the campaign will restart. * @return {boolean} */ }, { key: "allowRestart", value: function allowRestart() { if (this.config.isRegular) return false; return this.isExpired() && (this.allowRestartImmediately() || this.allowRestartAfterReload() || this.durationSinceExpiryIsOver()); } /** * Campaign expired. */ }, { key: "isExpired", value: function isExpired() { var today = new Date(); return this.config.endDate < today; } }, { key: "duratinSinceExpiration", value: function duratinSinceExpiration() { var endDate = this.currentEndDate || this.config.endDate; if (!endDate) { return 0; } var now = new Date(); var diff = now.getTime() - endDate; return diff / 1000; } }, { key: "durationSinceExpiryIsOver", value: function durationSinceExpiryIsOver() { return this.shouldRestartAfterDuration() && this.duratinSinceExpiration() >= this.config.restart_duration; } /** * Restart on refresh. * * @returns {boolean} */ }, { key: "allowRestartAfterReload", value: function allowRestartAfterReload() { return parseInt(this.config.restart) === parseInt(this.restartOptions.afterReload); } /** * Restart immediatly. * * @returns {boolean} */ }, { key: "allowRestartImmediately", value: function allowRestartImmediately() { return parseInt(this.config.restart) === parseInt(this.restartOptions.immediately); } }, { key: "shouldRestartAfterDuration", value: function shouldRestartAfterDuration() { return this.config.restart == this.restartOptions.after_duration; } /** * Returns true if the campaign has an action. */ }, { key: "hasAction", value: function hasAction() { return this.config.actions.length; } /** * Calculate date based on the given duration. * @return {Date} */ }, { key: "calculateDate", value: function calculateDate() { var date = new Date(); date.setSeconds(date.getSeconds() + this.config.duration); return date; } /** * Run registered actions. */ }, { key: "executeActions", value: function executeActions() { if (parseInt(hurrytimer_ajax_object.disable_actions) === 1) { return false; } // No action, abort. if (this.hasAction()) { var _iterator = _createForOfIteratorHelper(this.config.actions), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var action = _step.value; var actionManager = new HurrytimerAction(this.elementRef, this.config); switch (action['id']) { case this.actionsOptions.redirect: HurrytimerAction.redirect(action['redirectUrl']); break; case this.actionsOptions.displayMessage: actionManager.displayMessage(action['message']); break; case this.actionsOptions.hideAddToCartButton: actionManager.hideAddToCartButton(); break; case this.actionsOptions.stockStatus: if (this.config.isRegular) { actionManager.changeStockStatus(this.config.id, action['wcStockStatus']); } break; case this.actionsOptions.hide: actionManager.hide(); break; case this.actionsOptions.expire_coupon: actionManager.expireCoupon(action['coupon'], hurrytimer_ajax_object.expire_coupon_message); break; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } } }, { key: "maybeShowCampaign", value: function maybeShowCampaign() { if (this.elementRef.length && !this.config.run_in_background) { // Remove message tag if present. var $message = this.elementRef.parent().find(".hurrytimer-campaign-message[data-id=\"".concat(this.config.id, "\"]")); if ($message.length) { $message.remove(); } this.elementRef.removeClass('hurryt-loading'); } var stickyBar = this.elementRef.closest('.hurrytimer-sticky'); if (stickyBar.length) { // Remove message tag if present. var _$message = this.elementRef.find('.hurrytimer-campaign-message'); if (_$message.length) { _$message.remove(); } stickyBar.removeClass('hurryt-loading'); } } /** * Maybe run countdown timer. */ }, { key: "waitThenRun", value: function waitThenRun() { var _this = this; this.restartIntervalId = setInterval(function () { if (_this.durationSinceExpiryIsOver()) { clearInterval(_this.restartIntervalId); _this.run(); } }, 1000); } }, { key: "run", value: function run() { var _this2 = this; this.triggerInitEvent(); this.elementRef.countdown(this.getEndDate(), function (e) { return _this2.onCountdownUpdate(e); }); var stickyBar = this.elementRef.closest('.hurrytimer-sticky'); this.handleStickyBar(stickyBar); } /** * Handle sticky bar visibility. * @param {*} stickyBar */ }, { key: "handleStickyBar", value: function handleStickyBar(stickyBar) { var _this3 = this; if (stickyBar.length === 0) return; var dismissCookie = Cookies.get("_ht_CDT-".concat(this.config.id, "_dismissed")); // Stick bar hasn't been dismissed. if (dismissCookie == undefined) { stickyBar.on('click', '.hurrytimer-sticky-close', function () { return _this3.onStickyBarDismiss(stickyBar); }); } else { this.hideStickyBar(stickyBar); } } /** * Hide Sticky Bar * @param {*} stickyBar */ }, { key: "hideStickyBar", value: function hideStickyBar(stickyBar) { if (stickyBar.length === 0) return; var isTopPinned = stickyBar.css('top') === '0px'; stickyBar.remove(); if (isTopPinned) { jQuery('body').css('margin-top', 0); } else { jQuery('body').css('margin-bottom', 0); } } /** * Handle sticky bar dismiss. */ }, { key: "onStickyBarDismiss", value: function onStickyBarDismiss(stickyBar) { this.hideStickyBar(stickyBar); Cookies.set("_ht_CDT-".concat(this.config.id, "_dismissed"), '1', { expires: +this.config.sticky_bar_hide_timeout }); } /** * Countdown timer start callback. * @param event */ }, { key: "onCountdownUpdate", value: function onCountdownUpdate(event) { this.render(event); this.maybeShowCampaign(); if (event.elapsed && event.type === 'finish') { this.executeActions(); this.triggerFinishEvent(); this.maybeRecur(); if (this.allowRestartImmediately()) { this.run(); } if (this.shouldRestartAfterDuration()) { this.waitThenRun(); } } } }, { key: "triggerFinishEvent", value: function triggerFinishEvent() { var params = { id: this.config.id, mode: this.config.mode, endAt: this.config.endDate }; this.elementRef.trigger('hurryt:finished', params); } }, { key: "triggerInitEvent", value: function triggerInitEvent() { var params = { id: this.config.id, mode: this.config.mode, endAt: this.config.endDate }; jQuery('.hurrytimer-campaign').trigger('hurryt:init', params); } }, { key: "triggerStartEvent", value: function triggerStartEvent() { if (!this.startEventDispatched) { var params = { id: this.config.id, mode: this.config.mode, endAt: this.config.endDate }; this.elementRef.trigger('hurryt:started', params); this.startEventDispatched = true; } } /** * Render countdown timer. * @param event */ }, { key: "render", value: function render(event) { if (hurrytimer_ajax_object.run_in_background) { this.elementRef.html(''); } else { this.elementRef.find('.hurrytimer-timer').html(event.strftime(this.config.template)); } this.triggerStartEvent(); } /** * Calculate the remaining time until the next recurrence. * * @return int */ }, { key: "willRecurNow", value: function willRecurNow() { var now = new Date(); var prev_recurrence_time = this.getEndDate().getTime() + this.config.timeToNextRecurrence * 1000; return now.getTime() >= prev_recurrence_time; } /** * Run the next recurrence if available. */ }, { key: "maybeRecur", value: function maybeRecur() { var _this4 = this; // Not a recurring campaign. if (!this.config.recurr) return; // the jQuery ajax function is required to fetch the next recurrence. if (jQuery.ajax === undefined) return; clearTimeout(this.recurTimeoutId); clearInterval(this.recurIntervalId); this.recurIntervalId = setInterval(function () { if (!_this4.willRecurNow()) { return; } clearInterval(_this4.recurIntervalId); jQuery.ajax({ url: hurrytimer_ajax_object.ajax_url, data: { action: 'next_recurrence', nonce: hurrytimer_ajax_object.ajax_nonce, id: _this4.config.id }, error: function error() { if (_this4.retryCount === 10) return; _this4.retryCount++; setTimeout(function () { _this4.maybeRecur(); }, 1000); }, success: function success(_ref) { var data = _ref.data; _this4.retryCount = 0; if (!data) return; if (isNaN(data.endTimestamp)) { return; } _this4.config.endDate = data.endTimestamp; // TODO: Handle lateness: // retry for one minute if the received end date is still expired. _this4.run(); } }); }, 1000); } }]); return HurrytimerCampaign; }(); 'use strict'; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } (function ($) { // TODO: delete `state`. var state = { reseting: [] }; var $body = $('body'); /* This will listen for any new `.hurrytimer-campaign` added later to DOM. */ $.initialize('.hurrytimer-campaign', function () { // Dot not run campaigns when they are inside a Elementor popup. if ($(this).parents('div[data-elementor-type=popup]').length === 0) { runCampaign($(this)); } }); $(document).on('elementor/popup/show', function (event, id) { // Run only campaigns within a Elementor popup. $(".elementor-".concat(id, " .hurrytimer-campaign")).each(function () { runCampaign($(this)); }); }); /** * * @param $campaign jQuery */ function runCampaign($campaign) { // TODO: Inject config object in the tag or inline. var config = $campaign.data('config'); if (config === undefined) return; // Check if the config object is corrupt. if (_typeof(config) !== 'object') { config = JSON.parse(config.replace(/\s+/g, " ")); } $campaign.removeAttr('data-config'); $campaign.trigger('hurryt:pre-init', { id: config.id, mode: config.mode, endAt: config.endAt }); var $sticky = $campaign.closest('.hurrytimer-sticky'); // Display sticky bar if present. if ($sticky.length) { $body.append($sticky); $(window).resize(function () { if ($sticky.css('top') === '0px') { // Pin at the top. $body.css('margin-top', $sticky.outerHeight()); } else { // Pin at the bottom. $body.css('margin-bottom', $sticky.outerHeight()); } }); setTimeout(function () { $(window).trigger('resize'); }); } new HurrytimerCampaign($campaign, config, state).run(); } })(jQuery);; function loadDisqusDynamic(t, e, a, i) { if (window.DISQUS) { document.getElementById('disqus_thread').after(t) DISQUS.reset({ reload: !0, config: function () { ;(this.page.identifier = e), (this.page.url = a), (this.page.title = i) }, }) } // jQuery('#disqus_thread').insertAfter(t), // DISQUS.reset({ // reload: !0, // config: function () { // ;(this.page.identifier = e), // (this.page.url = a), // (this.page.title = i) // }, // }) else { document.getElementById('disqus_thread').after(t) disqus_identifier = e disqus_url = a disqus_title = i // jQuery('#disqus_thread').insertAfter(t), // (disqus_identifier = e), // (disqus_url = a), // (disqus_title = i) var n = document.createElement('script') n.async = true n.src = 'https://twinfinite.disqus.com/embed.js' n.id = 'disqusScript' // (n.type = 'text/javascript'), // (n.async = !0), // (n.id = 'disqusScript'), // (n.src = 'https://twinfinite.disqus.com/embed.js'), // jQuery('head').append(n) document.getElementsByTagName('head')[0].append(n) } console.log('disqus load') } // Comments Toggle // $('.mvp-com-click').on('click', function () { // $('#comments').show() // $('#disqus_thread').show() // $('#mvp-comments-button').hide() // }) ; document.getElementById('sweetDreams').onclick = function () { if (document.getElementById('sweetDreams').checked) { setDarkTheme() } else { setLightTheme() } } document.getElementById('mobile-sweetDreams').onclick = function () { if (document.getElementById('mobile-sweetDreams').checked) { setDarkTheme() } else { setLightTheme() } } function setDarkTheme() { document.body.classList.add('theme-dark') document.body.classList.remove('theme-light') document.getElementById('site-header').classList.add('theme-dark') document.getElementById('site-header').classList.remove('theme-light') document.getElementById('site-footer').classList.add('theme-dark') document.getElementById('site-footer').classList.remove('theme-light') // document.getElementById('theme-label').innerHTML = 'Light' setTheme('theme-dark') } function setLightTheme() { document.body.classList.add('theme-light') document.body.classList.remove('theme-dark') document.getElementById('site-header').classList.add('theme-light') document.getElementById('site-header').classList.remove('theme-dark') document.getElementById('site-footer').classList.add('theme-light') document.getElementById('site-footer').classList.remove('theme-dark') // document.getElementById('theme-label').innerHTML = 'Dark' setTheme('theme-light') } // function to set a given theme/color-scheme function setTheme(themeName) { localStorage.setItem('theme', themeName) } // Immediately invoked function to set the theme on initial load if (localStorage.getItem('theme') === 'theme-dark') { document.getElementById('sweetDreams').checked = true setDarkTheme() } else { document.getElementById('sweetDreams').checked = false setLightTheme() } document .getElementById('mobile-menu-header-toggle-btn') .addEventListener('click', function () { document.getElementById('mobile-nav-wrap').classList.toggle('visible') if ( document.getElementById('mobile-nav-wrap').classList.contains('visible') ) { document.body.classList.add('no-scroll') if ( document .getElementById('mobile-header-search') .classList.contains('visible') ) { document .getElementById('mobile-header-search') .classList.remove('visible') } } else { document.body.classList.remove('no-scroll') let primis = document.querySelector('body .primis-player div[id*="primis_playerSekindoSPlayer"][style*="overflow: hidden"][style*="position: fixed"]'); if (primis) { primis.style['transition-delay'] = '0.5s'; primis.style['transition-property'] = 'all'; setTimeout(() => { primis.style['transition-delay'] = ''; primis.style['transition-property'] = ''; }, 500); } } }) document .getElementById('mobile-search-toggle') .addEventListener('click', function () { document.getElementById('mobile-header-search').classList.toggle('visible') if ( document .getElementById('mobile-header-search') .classList.contains('visible') ) { document.body.classList.add('search-active') document .querySelector( '.mobile-header-search.visible form.search-form label input.search-field' ) .focus() if ( document.getElementById('mobile-nav-wrap').classList.contains('visible') ) { document.getElementById('mobile-nav-wrap').classList.remove('visible') } } else { document.body.classList.remove('search-active') } }) ; /** * File skip-link-focus-fix.js. * * Helps with accessibility for keyboard only users. * * Learn more: https://git.io/vWdr2 */ ( function() { var isIe = /(trident|msie)/i.test( navigator.userAgent ); if ( isIe && document.getElementById && window.addEventListener ) { window.addEventListener( 'hashchange', function() { var id = location.hash.substring( 1 ), element; if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { return; } element = document.getElementById( id ); if ( element ) { if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { element.tabIndex = -1; } element.focus(); } }, false ); } } )(); ;