/*! elementor-pro - v3.23.0 - 05-08-2024 */ "use strict"; (self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["countdown"],{ /***/ "../modules/countdown/assets/js/frontend/handlers/countdown.js": /*!*********************************************************************!*\ !*** ../modules/countdown/assets/js/frontend/handlers/countdown.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _default = exports["default"] = elementorModules.frontend.handlers.Base.extend({ cache: null, cacheElements() { const $countDown = this.$element.find('.elementor-countdown-wrapper'); this.cache = { $countDown, timeInterval: null, elements: { $countdown: $countDown.find('.elementor-countdown-wrapper'), $daysSpan: $countDown.find('.elementor-countdown-days'), $hoursSpan: $countDown.find('.elementor-countdown-hours'), $minutesSpan: $countDown.find('.elementor-countdown-minutes'), $secondsSpan: $countDown.find('.elementor-countdown-seconds'), $expireMessage: $countDown.parent().find('.elementor-countdown-expire--message') }, data: { id: this.$element.data('id'), endTime: new Date($countDown.data('date') * 1000), actions: $countDown.data('expire-actions'), evergreenInterval: $countDown.data('evergreen-interval') } }; }, onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.cacheElements(); if (0 < this.cache.data.evergreenInterval) { this.cache.data.endTime = this.getEvergreenDate(); } this.initializeClock(); }, updateClock() { const self = this, timeRemaining = this.getTimeRemaining(this.cache.data.endTime); jQuery.each(timeRemaining.parts, function (timePart) { const $element = self.cache.elements['$' + timePart + 'Span']; let partValue = this.toString(); if (1 === partValue.length) { partValue = 0 + partValue; } if ($element.length) { $element.text(partValue); } }); if (timeRemaining.total <= 0) { clearInterval(this.cache.timeInterval); this.runActions(); } }, initializeClock() { const self = this; this.updateClock(); this.cache.timeInterval = setInterval(function () { self.updateClock(); }, 1000); }, runActions() { const self = this; // Trigger general event for 3rd patry actions self.$element.trigger('countdown_expire', self.$element); if (!this.cache.data.actions) { return; } this.cache.data.actions.forEach(function (action) { switch (action.type) { case 'hide': self.cache.$countDown.hide(); break; case 'redirect': if (action.redirect_url && action.redirect_url.startsWith('http')) { window.location.href = action.redirect_url; } break; case 'message': self.cache.elements.$expireMessage.show(); break; } }); }, getTimeRemaining(endTime) { const timeRemaining = endTime - new Date(); let seconds = Math.floor(timeRemaining / 1000 % 60), minutes = Math.floor(timeRemaining / 1000 / 60 % 60), hours = Math.floor(timeRemaining / (1000 * 60 * 60) % 24), days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24)); if (days < 0 || hours < 0 || minutes < 0) { seconds = minutes = hours = days = 0; } return { total: timeRemaining, parts: { days, hours, minutes, seconds } }; }, getEvergreenDate() { const self = this, id = this.cache.data.id, interval = this.cache.data.evergreenInterval, dueDateKey = id + '-evergreen_due_date', intervalKey = id + '-evergreen_interval', localData = { dueDate: localStorage.getItem(dueDateKey), interval: localStorage.getItem(intervalKey) }, initEvergreen = function () { var evergreenDueDate = new Date(); self.cache.data.endTime = evergreenDueDate.setSeconds(evergreenDueDate.getSeconds() + interval); localStorage.setItem(dueDateKey, self.cache.data.endTime); localStorage.setItem(intervalKey, interval); return self.cache.data.endTime; }; if (null === localData.dueDate && null === localData.interval) { return initEvergreen(); } if (null !== localData.dueDate && interval !== parseInt(localData.interval, 10)) { return initEvergreen(); } if (localData.dueDate > 0 && parseInt(localData.interval, 10) === interval) { return localData.dueDate; } } }); /***/ }) }]); //# sourceMappingURL=countdown.60cf02eaf22d71d83f3d.bundle.js.mapvar jabvfcr_selector; var jabvfcr_iframe = jQuery('.jabvfcr .js-inspector .js-site-preview-iframe')[0].contentWindow; jabvfcr_iframe.addEventListener("load", function() { jabvfcr_openInspector(); }); function jabvfcr_isValidSelector() { jQuery('.jabvfcr .invalid').addClass('dn'); var selector = jQuery('.jabvfcr .js-selector').val(); var isValid = jabvfcr_iframe.jabvfcr_isSelectorValid(selector); if (!isValid) { jQuery('.jabvfcr .invalid').removeClass('dn'); } return isValid; } function jabvfcr_selected(selector) { jQuery('.jabvfcr .js-selector').val(selector); jabvfcr_toggleOptions(); jQuery('.jabvfcr .invalid').addClass('dn'); } function jabvfcr_toggleOptions(hide) { jQuery('.jabvfcr .js-inspector .js-clear').toggleClass('dn', hide); } function jabvfcr_toggleOverlay(show) { jQuery('.jabvfcr .js-inspector')[show ? 'show' : 'hide'](); jQuery('body').css({ overflow: show ? 'hidden' : '' }); } function jabvfcr_updateCurrentSelector(selector) { jQuery('.jabvfcr .js-current-selector').text(selector); } function jabvfcr_getOptions() { var selector = jQuery('.jabvfcr .js-selector').val(); var manipulation = jQuery('.jabvfcr .js-manipulation:checked').val(); var content = tinyMCE.activeEditor && !tinyMCE.activeEditor.hidden ? tinyMCE.activeEditor.getContent() : jQuery('#content').val(); return { selector:selector, manipulation: manipulation, content: content }; } function jabvfcr_resetSelector() { jabvfcr_iframe.jabvfcr_resetSelector(); jQuery('.jabvfcr .js-selector').val(''); } function jabvfcr_openInspector() { jQuery('.jabvfcr .js-loading-screen').remove(); var selector = jQuery('.jabvfcr .js-selector').val(); if (selector && jabvfcr_iframe.jabvfcr_isSelectorValid(selector)) { jabvfcr_iframe.jabvfcr_updateSelector(selector); jabvfcr_toggleOptions(false); } jabvfcr_toggleOverlay(true); } function jabvfcr_saveSelector() { if (!jabvfcr_isValidSelector()) { return; } var data = { _ajax_nonce: jabvfcr_ajax.nonce, action: 'jabvfcr_save_selector', selector: jQuery('.jabvfcr .js-selector').val(), manipulation: jQuery('.jabvfcr .js-manipulation:checked').val(), content: tinyMCE.activeEditor && !tinyMCE.activeEditor.hidden ? tinyMCE.activeEditor.getContent() : jQuery('#content').val() }; jQuery.post(jabvfcr_ajax.url, data).then(function() { alert('Settings updated.'); }).fail(function() { alert('There was an unexpected error. Please try again.'); }); } (function ($) { jQuery( document ).on( 'tinymce-editor-init', function( event, editor ) { tinyMCE.activeEditor.onKeyUp.add(function(){ jabvfcr_iframe.jabvfcr_updateSelector(); }); tinyMCE.activeEditor.onChange.add(function(){ jabvfcr_iframe.jabvfcr_updateSelector(); }); }); jQuery('#content').keyup(function(){ jabvfcr_iframe.jabvfcr_updateSelector(); }); jQuery('#content').change(function(){ jabvfcr_iframe.jabvfcr_updateSelector(); }); $('.jabvfcr .js-inspector .js-clear').click(function(e) { jabvfcr_resetSelector(); jabvfcr_toggleOptions(); }); $('.jabvfcr .js-close-inspector').click(function(e) { e.preventDefault(); jabvfcr_toggleOverlay(false); }); $('.jabvfcr .js-toggle-advanced-options').click(function(e) { e.preventDefault(); $('.js-advanced-options').toggleClass('dn'); }); $('.jabvfcr form .js-submit').click(function(e) { e.preventDefault(); jabvfcr_saveSelector(); }); $('.jabvfcr form .js-selector').blur(function() { if (jabvfcr_isValidSelector()) { var selector = jQuery('.jabvfcr .js-selector').val(); jabvfcr_iframe.jabvfcr_updateSelector(selector); } }); $('.jabvfcr form .js-manipulation').change(function() { jabvfcr_iframe.jabvfcr_updateSelector(); }); $('.jabvfcr .js-open-inspector').click(function() { jabvfcr_openInspector(); }); })(jQuery); {"id":205,"date":"2023-09-02T16:39:04","date_gmt":"2023-09-02T16:39:04","guid":{"rendered":"https:\/\/educationway.co.uk\/?p=205"},"modified":"2023-09-02T16:39:17","modified_gmt":"2023-09-02T16:39:17","slug":"cyberlibrary-chronicles-navigating-the-realm-of-online-bookstores","status":"publish","type":"post","link":"https:\/\/educationway.co.uk\/cyberlibrary-chronicles-navigating-the-realm-of-online-bookstores\/","title":{"rendered":"CyberLibrary Chronicles: Navigating the Realm of Online Bookstores"},"content":{"rendered":"
In the digital age, the landscape of the literary world has undergone a profound transformation. The traditional bookstores with their dusty shelves have given way to the vibrant and dynamic realm of online bookstores. With the rise of e-commerce and technological advancements, readers can now explore an extensive array of titles and genres from the comfort of their homes. This transformation has led to the emergence of what can aptly be termed “cyberlibraries.” In this article, we will delve into the significance of online bookstores, their advantages, and their challenges.<\/span><\/p>\n Gone are the days when bibliophiles had to plan a trip to a physical bookstore to satiate their reading cravings. The advent of online bookstores has revolutionized how we access and consume literature. The convenience of browsing through thousands of titles, reading reviews, and making purchases with just a few clicks has made online bookstores a haven for book lovers.<\/span><\/p>\nThe Rise of CyberLibraries: A Paradigm Shift<\/b><\/h2>\n
Advantages Galore: Why Online Bookstores Shine<\/b><\/h2>\n