Plugin Directory

Changeset 3392493


Ignore:
Timestamp:
11/09/2025 06:39:56 PM (5 months ago)
Author:
veelo
Message:

Update to version 1.6.2 from GitHub

Location:
popup-for-elementor
Files:
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • popup-for-elementor/tags/1.6.2/assets/popup-widget.js

    r3380762 r3392493  
    66        const delayInMilliseconds = parseInt(config.delay, 10) || 0;
    77        const isSelectorMode = (config.triggerBySelector === 'yes' && config.triggerSelector && config.triggerSelector.trim() !== '');
     8        const isTouch = (('ontouchstart' in window) || navigator.maxTouchPoints > 0);
     9        const mobileBreakpoint = parseInt(config.mobileBreakpoint, 10) || 1024; // px
    810
    911        let isClosing = false;
    10         let popupOpenedAt = 0;   // marca de última apertura (ms)
    11         let lastExitTs = 0;      // anti-rebote de exit-intent (ms)
     12        let popupOpenedAt = 0;   
     13        let lastExitTs = 0;     
    1214        const EXIT_COOLDOWN_MS = 1200;
    1315       
    1416        const $popupOverlay = $('.popup-overlay');
    1517        const $popupContent = $popupOverlay.find('.popup-content');
     18
     19$popupContent.on('click', function (e) {
     20    e.stopPropagation();
     21  });
     22 
     23  $popupContent.on('click', 'a, button, .elementor-button, [role="button"]', function (e) {
     24    e.stopPropagation();
     25  });
     26 
     27  // Cierre explícito por botón .popup-close
     28  $popupOverlay.on('click', '.popup-close', function (e) {
     29    e.preventDefault();
     30    e.stopPropagation();
     31    closePopup();
     32  });
    1633
    1734        if (!$popupOverlay.length) {
     
    5875            $popupContent.removeClass('animate__fadeOut').addClass('animate__fadeIn');
    5976
    60             if (config.showOnce === 'yes') {
    61                 setCookie(cookieName, 'true', cookieExpiry);
    62             }
    6377        }
    6478
     
    95109                    });
    96110                    $popupContent.removeClass('animate__fadeOut');
     111                   
     112                    if (config && config.showOnce === 'yes') {
     113                        setCookie(cookieName, 'true', cookieExpiry);
     114                        console.log(`Cookie "${cookieName}" marcada al cerrar por ${cookieExpiry} días.`);
     115                    }
     116                   
    97117                    isClosing = false;
    98118                    console.log("Popup closed successfully.");
     119                   
    99120                });
    100121       
     
    109130                    });
    110131                    $popupContent.removeClass('animate__fadeOut');
     132                   
     133                    if (config && config.showOnce === 'yes') {
     134                        setCookie(cookieName, 'true', cookieExpiry);
     135                        console.log(`Cookie "${cookieName}" marcada al cerrar (fallback) por ${cookieExpiry} días.`);
     136                    }
     137                   
    111138                    isClosing = false;
     139                   
    112140                }
    113141            }, 700);
     
    179207        }
    180208
     209        (function () {
     210
     211          if (!(config.exitIntent === 'yes')) return;
     212
     213          const isTouch = (('ontouchstart' in window) || navigator.maxTouchPoints > 0);
     214          const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
     215          const mobileBreakpoint = parseInt(config.mobileBreakpoint, 10) || 1024; // px
     216          const shouldUseMobileFallback = isTouch || vw < mobileBreakpoint;
     217          if (!shouldUseMobileFallback) return;
     218
     219          const mobileExitFallback = Object.assign({
     220            enabled: true,
     221            minTimeMs: 5000,   
     222            scrollPercent: 35,
     223            debounceMs: 150
     224          }, (config && config.mobileExitFallback) || {});
     225
     226          if (!mobileExitFallback.enabled) return;
     227
     228          if (config.showOnce === 'yes' && getCookie(cookieName)) return;
     229
     230          let hasShown = false;
     231          let eligibleByTime = false;
     232
     233          setTimeout(() => { eligibleByTime = true; }, mobileExitFallback.minTimeMs);
     234
     235          function getScrollPercent() {
     236            const doc = document.documentElement, body = document.body;
     237            const scrollTop = doc.scrollTop || body.scrollTop || 0;
     238            const scrollHeight = doc.scrollHeight || body.scrollHeight || 0;
     239            const clientHeight = doc.clientHeight || window.innerHeight;
     240            const track = scrollHeight - clientHeight;
     241            if (track <= 0) return 100;
     242            return Math.min(100, Math.max(0, (scrollTop / track) * 100));
     243          }
     244
     245          let t;
     246          function onScroll() {
     247            clearTimeout(t);
     248            t = setTimeout(() => {
     249              if (hasShown || !eligibleByTime) return;
     250              if ($popupOverlay.is(':visible') || isClosing) return; // no duplicar
     251              const sp = getScrollPercent();
     252              if (sp >= mobileExitFallback.scrollPercent) {
     253                hasShown = true;
     254                showPopup();
     255
     256                window.removeEventListener('scroll', onScroll, { passive: true });
     257              }
     258            }, mobileExitFallback.debounceMs);
     259          }
     260
     261          window.addEventListener('scroll', onScroll, { passive: true });
     262        })();
    181263
    182264        $popupOverlay.on('click', function (e) {
     
    186268            }
    187269        });
     270
    188271
    189272        $(document).on('keydown', function (e) {
     
    204287            });
    205288          }
    206 
    207    
    208289            handlePopupDisplay();
    209290        });
  • popup-for-elementor/tags/1.6.2/popup-for-elementor.php

    r3383559 r3392493  
    44 * Plugin URI: https://www.popupforelementor.com
    55 * Description: Create powerful, fully customizable popups directly in Elementor Free — includes click, delay, load, and exit-intent triggers, animations, and smart visibility controls to boost user engagement.
    6  * Version: 1.6.1
     6 * Version: 1.6.2
    77 * Author: Veelo
    88 * Author URI: https://www.veelo.es
  • popup-for-elementor/tags/1.6.2/readme.txt

    r3383559 r3392493  
    1 === Popup for Elementor === 
    2 Contributors: veelo 
    3 Tags: popup, elementor, modal, wordpress popup 
    4 Requires at least: 5.8 
    5 Tested up to: 6.8.3 
    6 Requires PHP: 7.4 
    7 Stable tag: 1.6.1
    8 License: GPLv2 or later 
    9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 
     1=== Popup for Elementor ===
     2Contributors: veelo
     3Tags: popup, elementor, modal, wordpress popup
     4Requires at least: 5.8
     5Tested up to: 6.8.3
     6Requires PHP: 7.4
     7Stable tag: 1.6.2
     8License: GPLv2 or later
     9License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    1111Create powerful, customizable popups with **Elementor Free** — no coding or Elementor Pro required.
     
    1313== Description ==
    1414
    15 **Popup for Elementor** is the easiest and most lightweight popup builder for **Elementor Free**. 
    16 Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized.
     15**Popup for Elementor** is the easiest and most lightweight popup builder for **Elementor Free**. 
     16Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized. 🚀
    1717
    1818Unlike other popup plugins, this one works **without Elementor Pro** and **without third-party modal builders**. Everything is native, simple, and fast.
     
    2020### 🔹 Key Features
    2121
    22 **Design Freedom with Elementor** 
     22🎨 **Design Freedom with Elementor** 
    2323  Build beautiful popups visually. Control layout, colors, padding, overlay, borders, animations, and close buttons. 
    2424
    25 **Free Trigger Options (No Pro Needed)** 
     25**Free Trigger Options (No Pro Needed)** 
    2626  – Show on page load 
    2727  – Show after a delay (in seconds) 
    28   – Show on exit intent *(improved)* 
    29   – Show on click *(new in 1.5.8)* 
     28  – Show on exit intent *(improved in 1.6.2)* 
     29  – Show on click *(added in 1.5.8)* 
    3030  – Option to show only once (cookie-based, now works with all triggers)
    3131
    32 **Smart Popup Behavior** 
     32🧠 **Smart Popup Behavior** 
    3333  – Close popup on ESC key 
    3434  – Close when clicking outside (overlay) 
    3535  – Option to disable right-click inside popup content
    3636
    37 **Elementor Template Integration** 
     37🧩 **Elementor Template Integration** 
    3838  – Load any Elementor section or saved template directly inside the popup for ultimate flexibility
    3939
    40 **Performance-First** 
     40⚙️ **Performance-First** 
    4141  – Lightweight JavaScript and CSS 
    4242  – Clean code, no dependencies 
     
    4444  – Works with any WordPress theme
    4545
    46 **No Elementor Pro Required** 
     46💡 **No Elementor Pro Required** 
    4747  Every feature works natively with **Elementor Free**.
    4848
    4949**Optional Pro Version:** 
    5050Adds advanced targeting and automation features: 
    51 Scroll-based and inactivity triggers 
    52 Referral URL and login-based display 
    53 Time-scheduled popups 
    54 AdBlock detection 
    55 Dynamic content loading for speed and personalization 
     51📜 Scroll-based and inactivity triggers 
     52🌐 Referral URL and login-based display 
     53🕒 Time-scheduled popups 
     54🚫 AdBlock detection 
     55Dynamic content loading for speed and personalization 
    5656
    5757**Official Website:** https://www.popupforelementor.com 
     
    5959**Support:** support@popupforelementor.com 
    6060We respond to support requests within 48 hours. 
    61 Live chat available on our website with typical response times between 2 and 3 hours.
     61💬 Live chat available on our website with typical response times between 2 and 3 hours.
    6262
    6363== Installation ==
     
    7575
    7676= How do I make a popup appear when users click a button or link? = 
    77 Use the new **Click Trigger** (added in version 1.5.8). 
     77Use the **Click Trigger** (added in version 1.5.8). 
    7878You can set a CSS selector or Elementor element to open the popup.
    7979
     
    8181Yes — you can trigger it **on load**, **after a delay**, **on click**, or **on exit intent**.
    8282
     83= Does Exit Intent work on mobile? = 
     84Yes — since **1.6.2**, Exit Intent includes a **mobile fallback** that triggers after a minimum time on page and scroll depth.
     85
    8386= Can I show the popup only once? = 
    84 Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again.
     87Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again. 
     88Since **1.6.2**, the cookie is set **when the user closes the popup** (X, overlay, or Escape).
    8589
    8690= Can I use Elementor templates inside the popup? = 
     
    97101== Changelog ==
    98102
     103= 1.6.2 =
     104* New: Added mobile fallback for Exit Intent (scroll + time). The popup now works on touch devices by showing after a minimum time and scroll depth. 
     105* Improved: Cookie logic for "Show Once" — cookie is now set only when the user closes the popup (close button, overlay click, or Escape key). 
     106* Fix: Links and buttons inside the popup are now fully clickable (resolved issues with Voxel and Elementor Free). 
     107* Improved: Event handling and overlay behavior to avoid duplicate triggers or blocked interactions. 
     108* Added: Debug flag to control console logs safely in production. 
     109* Update: Code cleanup, pointer-events, and z-index refinements for better theme compatibility. 
     110* Tested: Fully compatible with WordPress 6.8.3 and Elementor 3.22+.
     111
    99112= 1.6.1 =
    100 * **Minor bug**
     113* Minor bug fix.
    101114
    102115= 1.6 =
    103 * **Fix:** File correction.
     116* Fix: File correction and cleanup.
    104117
    105 = 1.5.9 = 
    106 * **Fix:** Prevented rare fatal error caused by multiple declarations of `popup_for_elementor_register_assets()` on some setups. 
    107 * **Improved:** Script registration now fully guarded and compatible with all caching and optimization plugins. 
    108 * **Update:** Safe loading logic added to avoid duplicate includes. 
     118= 1.5.9 =
     119* Fix: Prevented rare fatal error caused by multiple declarations of `popup_for_elementor_register_assets()` on some setups. 
     120* Improved: Script registration now fully guarded and compatible with all caching and optimization plugins. 
     121* Update: Safe loading logic added to avoid duplicate includes. 
    109122
    110 = 1.5.8 = 
    111 * **New:** Added **Click Trigger** to the free version (previously Pro only). 
    112 * **Improved:** Exit Intent detection logic rewritten for smoother, more accurate behavior. 
    113 * **Improved:** “Show only once” option now works across all triggers. 
    114 * **Fix:** Minor issues when combining multiple triggers. 
    115 * **Update:** Tested up to WordPress 6.8.3 and Elementor 3.22+. 
    116 * **UI:** Minor visual and label adjustments in the widget controls. 
     123= 1.5.8 =
     124* New: Added Click Trigger to the free version (previously Pro only). 
     125* Improved: Exit Intent detection logic rewritten for smoother, more accurate behavior. 
     126* Improved: “Show only once” option now works across all triggers. 
     127* Fix: Minor issues when combining multiple triggers. 
     128* Update: Tested up to WordPress 6.8.3 and Elementor 3.22+. 
     129* UI: Minor visual and label adjustments in the widget controls. 
    117130
    118 = 1.5.7 = 
     131= 1.5.7 =
    119132* Fix: Close button works properly with all trigger configurations. 
    120133* New: Internal improvements to dynamic template loading. 
     
    122135* Update: Minor UI tweaks in the widget editor.
    123136
    124 = 1.5.6 = 
     137= 1.5.6 =
    125138* Fix: Resolved issues with dynamic width on mobile view. 
    126139* New: Close on Escape key and overlay click now configurable. 
    127140* Update: Improved template rendering system.
    128141
    129 = 1.5.1 = 
     142= 1.5.1 =
    130143* Minor bug fixes and stability improvements.
    131144
    132 = 1.5.0 = 
     145= 1.5.0 =
    133146* Initial public release. 
    134147* Added support for On Load, Delay, and Exit Intent triggers. 
     
    139152== Upgrade Notice ==
    140153
    141 = 1.6.1 = 
    142 🛠️ Minor bug
     154= 1.6.2 =
     155Now Exit Intent also works on mobile devices. 
     156Popups trigger after scroll + time, and links inside popups are now fully clickable. 
     157Highly recommended update for all users.
  • popup-for-elementor/trunk/assets/popup-widget.js

    r3380762 r3392493  
    66        const delayInMilliseconds = parseInt(config.delay, 10) || 0;
    77        const isSelectorMode = (config.triggerBySelector === 'yes' && config.triggerSelector && config.triggerSelector.trim() !== '');
     8        const isTouch = (('ontouchstart' in window) || navigator.maxTouchPoints > 0);
     9        const mobileBreakpoint = parseInt(config.mobileBreakpoint, 10) || 1024; // px
    810
    911        let isClosing = false;
    10         let popupOpenedAt = 0;   // marca de última apertura (ms)
    11         let lastExitTs = 0;      // anti-rebote de exit-intent (ms)
     12        let popupOpenedAt = 0;   
     13        let lastExitTs = 0;     
    1214        const EXIT_COOLDOWN_MS = 1200;
    1315       
    1416        const $popupOverlay = $('.popup-overlay');
    1517        const $popupContent = $popupOverlay.find('.popup-content');
     18
     19$popupContent.on('click', function (e) {
     20    e.stopPropagation();
     21  });
     22 
     23  $popupContent.on('click', 'a, button, .elementor-button, [role="button"]', function (e) {
     24    e.stopPropagation();
     25  });
     26 
     27  // Cierre explícito por botón .popup-close
     28  $popupOverlay.on('click', '.popup-close', function (e) {
     29    e.preventDefault();
     30    e.stopPropagation();
     31    closePopup();
     32  });
    1633
    1734        if (!$popupOverlay.length) {
     
    5875            $popupContent.removeClass('animate__fadeOut').addClass('animate__fadeIn');
    5976
    60             if (config.showOnce === 'yes') {
    61                 setCookie(cookieName, 'true', cookieExpiry);
    62             }
    6377        }
    6478
     
    95109                    });
    96110                    $popupContent.removeClass('animate__fadeOut');
     111                   
     112                    if (config && config.showOnce === 'yes') {
     113                        setCookie(cookieName, 'true', cookieExpiry);
     114                        console.log(`Cookie "${cookieName}" marcada al cerrar por ${cookieExpiry} días.`);
     115                    }
     116                   
    97117                    isClosing = false;
    98118                    console.log("Popup closed successfully.");
     119                   
    99120                });
    100121       
     
    109130                    });
    110131                    $popupContent.removeClass('animate__fadeOut');
     132                   
     133                    if (config && config.showOnce === 'yes') {
     134                        setCookie(cookieName, 'true', cookieExpiry);
     135                        console.log(`Cookie "${cookieName}" marcada al cerrar (fallback) por ${cookieExpiry} días.`);
     136                    }
     137                   
    111138                    isClosing = false;
     139                   
    112140                }
    113141            }, 700);
     
    179207        }
    180208
     209        (function () {
     210
     211          if (!(config.exitIntent === 'yes')) return;
     212
     213          const isTouch = (('ontouchstart' in window) || navigator.maxTouchPoints > 0);
     214          const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
     215          const mobileBreakpoint = parseInt(config.mobileBreakpoint, 10) || 1024; // px
     216          const shouldUseMobileFallback = isTouch || vw < mobileBreakpoint;
     217          if (!shouldUseMobileFallback) return;
     218
     219          const mobileExitFallback = Object.assign({
     220            enabled: true,
     221            minTimeMs: 5000,   
     222            scrollPercent: 35,
     223            debounceMs: 150
     224          }, (config && config.mobileExitFallback) || {});
     225
     226          if (!mobileExitFallback.enabled) return;
     227
     228          if (config.showOnce === 'yes' && getCookie(cookieName)) return;
     229
     230          let hasShown = false;
     231          let eligibleByTime = false;
     232
     233          setTimeout(() => { eligibleByTime = true; }, mobileExitFallback.minTimeMs);
     234
     235          function getScrollPercent() {
     236            const doc = document.documentElement, body = document.body;
     237            const scrollTop = doc.scrollTop || body.scrollTop || 0;
     238            const scrollHeight = doc.scrollHeight || body.scrollHeight || 0;
     239            const clientHeight = doc.clientHeight || window.innerHeight;
     240            const track = scrollHeight - clientHeight;
     241            if (track <= 0) return 100;
     242            return Math.min(100, Math.max(0, (scrollTop / track) * 100));
     243          }
     244
     245          let t;
     246          function onScroll() {
     247            clearTimeout(t);
     248            t = setTimeout(() => {
     249              if (hasShown || !eligibleByTime) return;
     250              if ($popupOverlay.is(':visible') || isClosing) return; // no duplicar
     251              const sp = getScrollPercent();
     252              if (sp >= mobileExitFallback.scrollPercent) {
     253                hasShown = true;
     254                showPopup();
     255
     256                window.removeEventListener('scroll', onScroll, { passive: true });
     257              }
     258            }, mobileExitFallback.debounceMs);
     259          }
     260
     261          window.addEventListener('scroll', onScroll, { passive: true });
     262        })();
    181263
    182264        $popupOverlay.on('click', function (e) {
     
    186268            }
    187269        });
     270
    188271
    189272        $(document).on('keydown', function (e) {
     
    204287            });
    205288          }
    206 
    207    
    208289            handlePopupDisplay();
    209290        });
  • popup-for-elementor/trunk/popup-for-elementor.php

    r3383559 r3392493  
    44 * Plugin URI: https://www.popupforelementor.com
    55 * Description: Create powerful, fully customizable popups directly in Elementor Free — includes click, delay, load, and exit-intent triggers, animations, and smart visibility controls to boost user engagement.
    6  * Version: 1.6.1
     6 * Version: 1.6.2
    77 * Author: Veelo
    88 * Author URI: https://www.veelo.es
  • popup-for-elementor/trunk/readme.txt

    r3383559 r3392493  
    1 === Popup for Elementor === 
    2 Contributors: veelo 
    3 Tags: popup, elementor, modal, wordpress popup 
    4 Requires at least: 5.8 
    5 Tested up to: 6.8.3 
    6 Requires PHP: 7.4 
    7 Stable tag: 1.6.1
    8 License: GPLv2 or later 
    9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 
     1=== Popup for Elementor ===
     2Contributors: veelo
     3Tags: popup, elementor, modal, wordpress popup
     4Requires at least: 5.8
     5Tested up to: 6.8.3
     6Requires PHP: 7.4
     7Stable tag: 1.6.2
     8License: GPLv2 or later
     9License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    1111Create powerful, customizable popups with **Elementor Free** — no coding or Elementor Pro required.
     
    1313== Description ==
    1414
    15 **Popup for Elementor** is the easiest and most lightweight popup builder for **Elementor Free**. 
    16 Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized.
     15**Popup for Elementor** is the easiest and most lightweight popup builder for **Elementor Free**. 
     16Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized. 🚀
    1717
    1818Unlike other popup plugins, this one works **without Elementor Pro** and **without third-party modal builders**. Everything is native, simple, and fast.
     
    2020### 🔹 Key Features
    2121
    22 **Design Freedom with Elementor** 
     22🎨 **Design Freedom with Elementor** 
    2323  Build beautiful popups visually. Control layout, colors, padding, overlay, borders, animations, and close buttons. 
    2424
    25 **Free Trigger Options (No Pro Needed)** 
     25**Free Trigger Options (No Pro Needed)** 
    2626  – Show on page load 
    2727  – Show after a delay (in seconds) 
    28   – Show on exit intent *(improved)* 
    29   – Show on click *(new in 1.5.8)* 
     28  – Show on exit intent *(improved in 1.6.2)* 
     29  – Show on click *(added in 1.5.8)* 
    3030  – Option to show only once (cookie-based, now works with all triggers)
    3131
    32 **Smart Popup Behavior** 
     32🧠 **Smart Popup Behavior** 
    3333  – Close popup on ESC key 
    3434  – Close when clicking outside (overlay) 
    3535  – Option to disable right-click inside popup content
    3636
    37 **Elementor Template Integration** 
     37🧩 **Elementor Template Integration** 
    3838  – Load any Elementor section or saved template directly inside the popup for ultimate flexibility
    3939
    40 **Performance-First** 
     40⚙️ **Performance-First** 
    4141  – Lightweight JavaScript and CSS 
    4242  – Clean code, no dependencies 
     
    4444  – Works with any WordPress theme
    4545
    46 **No Elementor Pro Required** 
     46💡 **No Elementor Pro Required** 
    4747  Every feature works natively with **Elementor Free**.
    4848
    4949**Optional Pro Version:** 
    5050Adds advanced targeting and automation features: 
    51 Scroll-based and inactivity triggers 
    52 Referral URL and login-based display 
    53 Time-scheduled popups 
    54 AdBlock detection 
    55 Dynamic content loading for speed and personalization 
     51📜 Scroll-based and inactivity triggers 
     52🌐 Referral URL and login-based display 
     53🕒 Time-scheduled popups 
     54🚫 AdBlock detection 
     55Dynamic content loading for speed and personalization 
    5656
    5757**Official Website:** https://www.popupforelementor.com 
     
    5959**Support:** support@popupforelementor.com 
    6060We respond to support requests within 48 hours. 
    61 Live chat available on our website with typical response times between 2 and 3 hours.
     61💬 Live chat available on our website with typical response times between 2 and 3 hours.
    6262
    6363== Installation ==
     
    7575
    7676= How do I make a popup appear when users click a button or link? = 
    77 Use the new **Click Trigger** (added in version 1.5.8). 
     77Use the **Click Trigger** (added in version 1.5.8). 
    7878You can set a CSS selector or Elementor element to open the popup.
    7979
     
    8181Yes — you can trigger it **on load**, **after a delay**, **on click**, or **on exit intent**.
    8282
     83= Does Exit Intent work on mobile? = 
     84Yes — since **1.6.2**, Exit Intent includes a **mobile fallback** that triggers after a minimum time on page and scroll depth.
     85
    8386= Can I show the popup only once? = 
    84 Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again.
     87Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again. 
     88Since **1.6.2**, the cookie is set **when the user closes the popup** (X, overlay, or Escape).
    8589
    8690= Can I use Elementor templates inside the popup? = 
     
    97101== Changelog ==
    98102
     103= 1.6.2 =
     104* New: Added mobile fallback for Exit Intent (scroll + time). The popup now works on touch devices by showing after a minimum time and scroll depth. 
     105* Improved: Cookie logic for "Show Once" — cookie is now set only when the user closes the popup (close button, overlay click, or Escape key). 
     106* Fix: Links and buttons inside the popup are now fully clickable (resolved issues with Voxel and Elementor Free). 
     107* Improved: Event handling and overlay behavior to avoid duplicate triggers or blocked interactions. 
     108* Added: Debug flag to control console logs safely in production. 
     109* Update: Code cleanup, pointer-events, and z-index refinements for better theme compatibility. 
     110* Tested: Fully compatible with WordPress 6.8.3 and Elementor 3.22+.
     111
    99112= 1.6.1 =
    100 * **Minor bug**
     113* Minor bug fix.
    101114
    102115= 1.6 =
    103 * **Fix:** File correction.
     116* Fix: File correction and cleanup.
    104117
    105 = 1.5.9 = 
    106 * **Fix:** Prevented rare fatal error caused by multiple declarations of `popup_for_elementor_register_assets()` on some setups. 
    107 * **Improved:** Script registration now fully guarded and compatible with all caching and optimization plugins. 
    108 * **Update:** Safe loading logic added to avoid duplicate includes. 
     118= 1.5.9 =
     119* Fix: Prevented rare fatal error caused by multiple declarations of `popup_for_elementor_register_assets()` on some setups. 
     120* Improved: Script registration now fully guarded and compatible with all caching and optimization plugins. 
     121* Update: Safe loading logic added to avoid duplicate includes. 
    109122
    110 = 1.5.8 = 
    111 * **New:** Added **Click Trigger** to the free version (previously Pro only). 
    112 * **Improved:** Exit Intent detection logic rewritten for smoother, more accurate behavior. 
    113 * **Improved:** “Show only once” option now works across all triggers. 
    114 * **Fix:** Minor issues when combining multiple triggers. 
    115 * **Update:** Tested up to WordPress 6.8.3 and Elementor 3.22+. 
    116 * **UI:** Minor visual and label adjustments in the widget controls. 
     123= 1.5.8 =
     124* New: Added Click Trigger to the free version (previously Pro only). 
     125* Improved: Exit Intent detection logic rewritten for smoother, more accurate behavior. 
     126* Improved: “Show only once” option now works across all triggers. 
     127* Fix: Minor issues when combining multiple triggers. 
     128* Update: Tested up to WordPress 6.8.3 and Elementor 3.22+. 
     129* UI: Minor visual and label adjustments in the widget controls. 
    117130
    118 = 1.5.7 = 
     131= 1.5.7 =
    119132* Fix: Close button works properly with all trigger configurations. 
    120133* New: Internal improvements to dynamic template loading. 
     
    122135* Update: Minor UI tweaks in the widget editor.
    123136
    124 = 1.5.6 = 
     137= 1.5.6 =
    125138* Fix: Resolved issues with dynamic width on mobile view. 
    126139* New: Close on Escape key and overlay click now configurable. 
    127140* Update: Improved template rendering system.
    128141
    129 = 1.5.1 = 
     142= 1.5.1 =
    130143* Minor bug fixes and stability improvements.
    131144
    132 = 1.5.0 = 
     145= 1.5.0 =
    133146* Initial public release. 
    134147* Added support for On Load, Delay, and Exit Intent triggers. 
     
    139152== Upgrade Notice ==
    140153
    141 = 1.6.1 = 
    142 🛠️ Minor bug
     154= 1.6.2 =
     155Now Exit Intent also works on mobile devices. 
     156Popups trigger after scroll + time, and links inside popups are now fully clickable. 
     157Highly recommended update for all users.
Note: See TracChangeset for help on using the changeset viewer.