­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ jQuery(document).ready(function ($) { // Delegate to capture dynamically injected biggopti as well $(document).on('click', '.element-pack-biggopti.is-dismissible .bdt-biggopti-dismiss', function () { $this = $(this).parents('.element-pack-biggopti'); var $id = $this.attr('id') || ''; var $time = $this.attr('dismissible-time') || ''; var $meta = $this.attr('dismissible-meta') || ''; $.ajax({ url: (window.ElementPackBiggoptiConfig && ElementPackBiggoptiConfig.ajaxurl) ? ElementPackBiggoptiConfig.ajaxurl : (typeof ajaxurl !== 'undefined' ? ajaxurl : ''), type: 'POST', data: { action: 'element_pack_biggopti', id: $id, meta: $meta, time: $time, _wpnonce: ElementPackBiggoptiConfig.nonce } }); }); /* =================================== Admin Store API Biggopti =================================== */ /** * Initialize countdown timers for API Biggopti * This function finds all countdown elements and starts the countdown timer */ function initAPIBiggoptiCountdown() { // Find all countdown elements on the page jQuery('.bdt-biggopti-countdown').each(function() { var $countdown = jQuery(this); var $timer = $countdown.find('.countdown-timer'); var endDate = $countdown.data('end-date'); var timezone = $countdown.data('timezone'); // Skip if no end date or timer element found if (!endDate || !$timer.length) { return; } /** * Update the countdown display * Calculates time remaining and formats it for display */ function updateCountdown() { var endTime = new Date(endDate + ' ' + timezone).getTime(); var now = new Date().getTime(); var distance = endTime - now; // If countdown has expired, hide the countdown if (distance < 0) { $countdown.hide(); return; } // Calculate time units var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); // Add leading zeros days = days < 10 ? "0" + days : days; hours = hours < 10 ? "0" + hours : hours; minutes = minutes < 10 ? "0" + minutes : minutes; seconds = seconds < 10 ? "0" + seconds : seconds; // Build countdown text with wrapped numbers and labels var countdownText = ""; if (days > 0) { countdownText += '
' + days + 'days
'; } // Always show hours (even if 00) for consistent layout countdownText += '
' + hours + 'hrs
'; countdownText += '
' + minutes + 'min
'; countdownText += '
' + seconds + 'sec
'; // Update the timer display $timer.html(countdownText); } // Initial update to show countdown immediately updateCountdown(); // Set up interval to update countdown every second setInterval(updateCountdown, 1000); }); } // Initialize countdown on page load initAPIBiggoptiCountdown(); // Re-initialize countdown when new biggopti are added (for dynamic content) // This ensures countdown works even if biggopti are loaded after page load jQuery(document).on('DOMNodeInserted', '.bdt-biggopti-countdown', function() { initAPIBiggoptiCountdown(); }); // Fetch API biggopti after full page load, with try/catch setTimeout(function() { try { $.ajax({ url: (window.ElementPackBiggoptiConfig && ElementPackBiggoptiConfig.ajaxurl) ? ElementPackBiggoptiConfig.ajaxurl : (typeof ajaxurl !== 'undefined' ? ajaxurl : ''), type: 'POST', dataType: 'json', data: { action: 'ep_fetch_api_biggopti', _wpnonce: ElementPackBiggoptiConfig.nonce, current_url: window.location.href } }) .done(function (res) { if (res && res.success && res.data && res.data.html) { var $markup = $(res.data.html); var $target = $('#wpbody-content .wrap').first(); if (!$target.length) { $target = $('.wrap').first(); } if (!$target.length) { $target = $('#wpbody-content'); } // Check for existing biggopti with same class to avoid duplicates var shouldInsert = true; $markup.each(function() { var $biggopti = $(this); var biggoptiId = $biggopti.attr('id'); // Extract class pattern from biggopti ID (e.g., bdt-admin-biggopti-api-biggopti-class-xxxxx) if (biggoptiId && biggoptiId.indexOf('bdt-admin-biggopti-api-biggopti-class-') !== -1) { var classPattern = biggoptiId.substring(biggoptiId.indexOf('bdt-admin-biggopti-api-biggopti-class-')); // Check if any existing biggopti in DOM has similar class pattern from any plugin var existingBiggopties = $('[id$="' + classPattern + '"]'); if (existingBiggopties.length > 0) { shouldInsert = false; return false; // break out of each loop } } }); // Only insert if no duplicate class pattern found if (shouldInsert) { // insert right after the

if exists, otherwise at top if ($target.children('hr.wp-header-end').length) { $target.children('hr.wp-header-end').first().after($markup); } else if ($target.children('h1').length) { $target.children('h1').first().after($markup); } else { $target.prepend($markup); } } // Manually added dismiss button if (typeof wp !== 'undefined' && wp.a11y && window.jQuery) { /// $(document).trigger('wp-updates-biggopti-added'); // Manually add dismiss button if not present $markup.each(function () { var $el = $(this); if ($el.hasClass('is-dismissible') && !$el.find('.bdt-biggopti-dismiss').length) { var $button = $(''); $el.append($button); $button.on('click', function () { $el.fadeTo(100, 0, function () { $el.slideUp(100, function () { $el.remove(); }); }); }); } }); } // Initialize countdowns in injected content initAPIBiggoptiCountdown(); } }) .fail(function () { // swallow errors silently }); } catch (e) { // ignore } }, 100); // 100ms delay to ensure DOM is ready /* =================================== END Admin Store API Biggopti =================================== */ });