Changeset 3392493
- Timestamp:
- 11/09/2025 06:39:56 PM (5 months ago)
- Location:
- popup-for-elementor
- Files:
-
- 6 edited
- 1 copied
-
tags/1.6.2 (copied) (copied from popup-for-elementor/trunk)
-
tags/1.6.2/assets/popup-widget.js (modified) (7 diffs)
-
tags/1.6.2/popup-for-elementor.php (modified) (1 diff)
-
tags/1.6.2/readme.txt (modified) (10 diffs)
-
trunk/assets/popup-widget.js (modified) (7 diffs)
-
trunk/popup-for-elementor.php (modified) (1 diff)
-
trunk/readme.txt (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
popup-for-elementor/tags/1.6.2/assets/popup-widget.js
r3380762 r3392493 6 6 const delayInMilliseconds = parseInt(config.delay, 10) || 0; 7 7 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 8 10 9 11 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; 12 14 const EXIT_COOLDOWN_MS = 1200; 13 15 14 16 const $popupOverlay = $('.popup-overlay'); 15 17 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 }); 16 33 17 34 if (!$popupOverlay.length) { … … 58 75 $popupContent.removeClass('animate__fadeOut').addClass('animate__fadeIn'); 59 76 60 if (config.showOnce === 'yes') {61 setCookie(cookieName, 'true', cookieExpiry);62 }63 77 } 64 78 … … 95 109 }); 96 110 $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 97 117 isClosing = false; 98 118 console.log("Popup closed successfully."); 119 99 120 }); 100 121 … … 109 130 }); 110 131 $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 111 138 isClosing = false; 139 112 140 } 113 141 }, 700); … … 179 207 } 180 208 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 })(); 181 263 182 264 $popupOverlay.on('click', function (e) { … … 186 268 } 187 269 }); 270 188 271 189 272 $(document).on('keydown', function (e) { … … 204 287 }); 205 288 } 206 207 208 289 handlePopupDisplay(); 209 290 }); -
popup-for-elementor/tags/1.6.2/popup-for-elementor.php
r3383559 r3392493 4 4 * Plugin URI: https://www.popupforelementor.com 5 5 * 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. 16 * Version: 1.6.2 7 7 * Author: Veelo 8 8 * 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. 18 License: GPLv2 or later 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 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.2 8 License: GPLv2 or later 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 10 11 11 Create powerful, customizable popups with **Elementor Free** — no coding or Elementor Pro required. … … 13 13 == Description == 14 14 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**. 16 Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized. 🚀 17 17 18 18 Unlike other popup plugins, this one works **without Elementor Pro** and **without third-party modal builders**. Everything is native, simple, and fast. … … 20 20 ### 🔹 Key Features 21 21 22 – **Design Freedom with Elementor**22 – 🎨 **Design Freedom with Elementor** 23 23 Build beautiful popups visually. Control layout, colors, padding, overlay, borders, animations, and close buttons. 24 24 25 – **Free Trigger Options (No Pro Needed)**25 – ⚡ **Free Trigger Options (No Pro Needed)** 26 26 – Show on page load 27 27 – Show after a delay (in seconds) 28 – Show on exit intent *(improved )*29 – Show on click *( newin 1.5.8)*28 – Show on exit intent *(improved in 1.6.2)* 29 – Show on click *(added in 1.5.8)* 30 30 – Option to show only once (cookie-based, now works with all triggers) 31 31 32 – **Smart Popup Behavior**32 – 🧠 **Smart Popup Behavior** 33 33 – Close popup on ESC key 34 34 – Close when clicking outside (overlay) 35 35 – Option to disable right-click inside popup content 36 36 37 – **Elementor Template Integration**37 – 🧩 **Elementor Template Integration** 38 38 – Load any Elementor section or saved template directly inside the popup for ultimate flexibility 39 39 40 – **Performance-First**40 – ⚙️ **Performance-First** 41 41 – Lightweight JavaScript and CSS 42 42 – Clean code, no dependencies … … 44 44 – Works with any WordPress theme 45 45 46 – **No Elementor Pro Required**46 – 💡 **No Elementor Pro Required** 47 47 Every feature works natively with **Elementor Free**. 48 48 49 49 **Optional Pro Version:** 50 50 Adds advanced targeting and automation features: 51 – Scroll-based and inactivity triggers52 – Referral URL and login-based display53 – Time-scheduled popups54 – AdBlock detection55 – Dynamic content loading for speed and personalization51 – 📜 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 56 56 57 57 **Official Website:** https://www.popupforelementor.com … … 59 59 **Support:** support@popupforelementor.com 60 60 We 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. 62 62 63 63 == Installation == … … 75 75 76 76 = 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).77 Use the **Click Trigger** (added in version 1.5.8). 78 78 You can set a CSS selector or Elementor element to open the popup. 79 79 … … 81 81 Yes — you can trigger it **on load**, **after a delay**, **on click**, or **on exit intent**. 82 82 83 = Does Exit Intent work on mobile? = 84 Yes — since **1.6.2**, Exit Intent includes a **mobile fallback** that triggers after a minimum time on page and scroll depth. 85 83 86 = 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. 87 Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again. 88 Since **1.6.2**, the cookie is set **when the user closes the popup** (X, overlay, or Escape). 85 89 86 90 = Can I use Elementor templates inside the popup? = … … 97 101 == Changelog == 98 102 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 99 112 = 1.6.1 = 100 * **Minor bug**113 * Minor bug fix. 101 114 102 115 = 1.6 = 103 * **Fix:** File correction.116 * Fix: File correction and cleanup. 104 117 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. 109 122 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. 117 130 118 = 1.5.7 = 131 = 1.5.7 = 119 132 * Fix: Close button works properly with all trigger configurations. 120 133 * New: Internal improvements to dynamic template loading. … … 122 135 * Update: Minor UI tweaks in the widget editor. 123 136 124 = 1.5.6 = 137 = 1.5.6 = 125 138 * Fix: Resolved issues with dynamic width on mobile view. 126 139 * New: Close on Escape key and overlay click now configurable. 127 140 * Update: Improved template rendering system. 128 141 129 = 1.5.1 = 142 = 1.5.1 = 130 143 * Minor bug fixes and stability improvements. 131 144 132 = 1.5.0 = 145 = 1.5.0 = 133 146 * Initial public release. 134 147 * Added support for On Load, Delay, and Exit Intent triggers. … … 139 152 == Upgrade Notice == 140 153 141 = 1.6.1 = 142 🛠️ Minor bug 154 = 1.6.2 = 155 Now Exit Intent also works on mobile devices. 156 Popups trigger after scroll + time, and links inside popups are now fully clickable. 157 Highly recommended update for all users. -
popup-for-elementor/trunk/assets/popup-widget.js
r3380762 r3392493 6 6 const delayInMilliseconds = parseInt(config.delay, 10) || 0; 7 7 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 8 10 9 11 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; 12 14 const EXIT_COOLDOWN_MS = 1200; 13 15 14 16 const $popupOverlay = $('.popup-overlay'); 15 17 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 }); 16 33 17 34 if (!$popupOverlay.length) { … … 58 75 $popupContent.removeClass('animate__fadeOut').addClass('animate__fadeIn'); 59 76 60 if (config.showOnce === 'yes') {61 setCookie(cookieName, 'true', cookieExpiry);62 }63 77 } 64 78 … … 95 109 }); 96 110 $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 97 117 isClosing = false; 98 118 console.log("Popup closed successfully."); 119 99 120 }); 100 121 … … 109 130 }); 110 131 $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 111 138 isClosing = false; 139 112 140 } 113 141 }, 700); … … 179 207 } 180 208 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 })(); 181 263 182 264 $popupOverlay.on('click', function (e) { … … 186 268 } 187 269 }); 270 188 271 189 272 $(document).on('keydown', function (e) { … … 204 287 }); 205 288 } 206 207 208 289 handlePopupDisplay(); 209 290 }); -
popup-for-elementor/trunk/popup-for-elementor.php
r3383559 r3392493 4 4 * Plugin URI: https://www.popupforelementor.com 5 5 * 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. 16 * Version: 1.6.2 7 7 * Author: Veelo 8 8 * 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. 18 License: GPLv2 or later 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 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.2 8 License: GPLv2 or later 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 10 11 11 Create powerful, customizable popups with **Elementor Free** — no coding or Elementor Pro required. … … 13 13 == Description == 14 14 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**. 16 Design responsive, conversion-focused popups directly inside Elementor with full visual control — 100% no-code and performance-optimized. 🚀 17 17 18 18 Unlike other popup plugins, this one works **without Elementor Pro** and **without third-party modal builders**. Everything is native, simple, and fast. … … 20 20 ### 🔹 Key Features 21 21 22 – **Design Freedom with Elementor**22 – 🎨 **Design Freedom with Elementor** 23 23 Build beautiful popups visually. Control layout, colors, padding, overlay, borders, animations, and close buttons. 24 24 25 – **Free Trigger Options (No Pro Needed)**25 – ⚡ **Free Trigger Options (No Pro Needed)** 26 26 – Show on page load 27 27 – Show after a delay (in seconds) 28 – Show on exit intent *(improved )*29 – Show on click *( newin 1.5.8)*28 – Show on exit intent *(improved in 1.6.2)* 29 – Show on click *(added in 1.5.8)* 30 30 – Option to show only once (cookie-based, now works with all triggers) 31 31 32 – **Smart Popup Behavior**32 – 🧠 **Smart Popup Behavior** 33 33 – Close popup on ESC key 34 34 – Close when clicking outside (overlay) 35 35 – Option to disable right-click inside popup content 36 36 37 – **Elementor Template Integration**37 – 🧩 **Elementor Template Integration** 38 38 – Load any Elementor section or saved template directly inside the popup for ultimate flexibility 39 39 40 – **Performance-First**40 – ⚙️ **Performance-First** 41 41 – Lightweight JavaScript and CSS 42 42 – Clean code, no dependencies … … 44 44 – Works with any WordPress theme 45 45 46 – **No Elementor Pro Required**46 – 💡 **No Elementor Pro Required** 47 47 Every feature works natively with **Elementor Free**. 48 48 49 49 **Optional Pro Version:** 50 50 Adds advanced targeting and automation features: 51 – Scroll-based and inactivity triggers52 – Referral URL and login-based display53 – Time-scheduled popups54 – AdBlock detection55 – Dynamic content loading for speed and personalization51 – 📜 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 56 56 57 57 **Official Website:** https://www.popupforelementor.com … … 59 59 **Support:** support@popupforelementor.com 60 60 We 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. 62 62 63 63 == Installation == … … 75 75 76 76 = 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).77 Use the **Click Trigger** (added in version 1.5.8). 78 78 You can set a CSS selector or Elementor element to open the popup. 79 79 … … 81 81 Yes — you can trigger it **on load**, **after a delay**, **on click**, or **on exit intent**. 82 82 83 = Does Exit Intent work on mobile? = 84 Yes — since **1.6.2**, Exit Intent includes a **mobile fallback** that triggers after a minimum time on page and scroll depth. 85 83 86 = 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. 87 Yes. Enable the **Show only once** option to use a cookie that prevents the popup from appearing again. 88 Since **1.6.2**, the cookie is set **when the user closes the popup** (X, overlay, or Escape). 85 89 86 90 = Can I use Elementor templates inside the popup? = … … 97 101 == Changelog == 98 102 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 99 112 = 1.6.1 = 100 * **Minor bug**113 * Minor bug fix. 101 114 102 115 = 1.6 = 103 * **Fix:** File correction.116 * Fix: File correction and cleanup. 104 117 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. 109 122 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. 117 130 118 = 1.5.7 = 131 = 1.5.7 = 119 132 * Fix: Close button works properly with all trigger configurations. 120 133 * New: Internal improvements to dynamic template loading. … … 122 135 * Update: Minor UI tweaks in the widget editor. 123 136 124 = 1.5.6 = 137 = 1.5.6 = 125 138 * Fix: Resolved issues with dynamic width on mobile view. 126 139 * New: Close on Escape key and overlay click now configurable. 127 140 * Update: Improved template rendering system. 128 141 129 = 1.5.1 = 142 = 1.5.1 = 130 143 * Minor bug fixes and stability improvements. 131 144 132 = 1.5.0 = 145 = 1.5.0 = 133 146 * Initial public release. 134 147 * Added support for On Load, Delay, and Exit Intent triggers. … … 139 152 == Upgrade Notice == 140 153 141 = 1.6.1 = 142 🛠️ Minor bug 154 = 1.6.2 = 155 Now Exit Intent also works on mobile devices. 156 Popups trigger after scroll + time, and links inside popups are now fully clickable. 157 Highly recommended update for all users.
Note: See TracChangeset
for help on using the changeset viewer.