== AjaxPress Changelog ==

Full version history for AjaxPress - Single Page Application for WP.

== Changelog ==

= 2.3.3 =
* New: Cloudflare cache integration — purge and manage Cloudflare edge cache directly from the AjaxPress settings panel
* Fixed: Duplicate browser-history entries. Each navigation now adds exactly one entry, hovering links no longer pollutes history, and the back button no longer traps visitors in a loop
* Fixed: Back/forward navigation that hits a server redirect no longer creates unwanted forward entries
* Fixed: The ajaxpress:ready event now fires after the URL and title are updated, so analytics listeners read the correct page
* New: ajaxpress_page_view dataLayer event for Google Analytics 4 / Tag Manager. Fires once per navigation with page_location, page_title, and a measured engagement_time_msec, restoring GA4's "Average engagement time" metric that otherwise reads zero on SPA sites
* New: ajaxpress-loading and ajaxpress-complete events are now emitted as documented in the Help tab
* Fixed: Ctrl/Cmd+click and Shift+click on links now open a new tab or window instead of navigating in place
* Fixed: target="_blank" is now matched case-insensitively, and a site-wide <base target> is honored
* Fixed: Links with a download attribute are no longer intercepted by SPA navigation
* Fixed: Elements opted into persistence (data-ajaxpress-persist, .ajaxpress-persist, or the Ignore Elements setting) no longer appear twice in the page shell
* Fixed: Audio or video from the previous page no longer keeps playing invisibly after navigation. The old page is fully unloaded once the transition completes
* Fixed: Persistent media players no longer double their audio. The hidden original copy left in the page shell is removed once the player is lifted into the persistent container
* Fixed: Premium settings (Media Players, Exclude Links, loader customizations) are no longer erased when a license check fails or the plugin is re-activated. Saved values now survive license changes and simply pause while a license is inactive
* Fixed: A temporary license-server outage no longer deactivates your license. Only a definitive invalid-key response does, so seat-limited plans can't get locked out by a server hiccup
* Security: The license key is no longer printed in the public page source. The frontend now receives only a validity flag, and the site admin email is no longer exposed either

= 2.3.2 =
* New: Rebuilt licensing and activation - faster, more reliable license validation and a smoother activation flow
* New: Send feedback directly from the Help page, with a quick happy / neutral / unhappy rating
* New: Rating prompt to share your experience, plus a one-click way to leave a review
* New: Optional diagnostic sharing (only with your consent) so we can reproduce and fix issues faster
* Improved: Deactivation now asks for a quick, optional reason to help us improve the plugin
* Changed: Minimum required PHP is now 7.1
* Changed: Tested up to WordPress 7.0

= 2.3.1 =
* Fixed: JSON-LD structured data (Yoast, Rank Math, SEOPress, etc.) is now replaced cleanly on every navigation, resolving duplicated BreadcrumbList and "Missing field 'item'" errors in Google Search Console
* Fixed: Canonical, OpenGraph, and Twitter Card meta tags now sync to the parent shell on every nav, so social previews and search engines see the page being viewed instead of the initial-load URL
* Fixed: Iframe sub-document is now flagged noindex,nofollow so JS-rendering crawlers do not double-index the same URL twice
* Fixed: External links with target="_blank" now open in a new tab instead of replacing the current page
* Fixed: Persistent player no longer briefly duplicates on Mobile Safari during scroll-and-hold gestures
* Fixed: Persistent elements with sticky child widgets (Elementor) are now properly hidden in the iframe source
* New: Persistent media (audio, video, radio widgets in `<div id="persistent-*">` containers, or anything with `[data-ajaxpress-persist]` / `.ajaxpress-persist`) is now lifted into the parent shell on first encounter and reused across navigation. The same DOM element keeps playing without reload on every page change. Honors the existing Ignore Elements setting.
* New: `ajaxpress:ready` event dispatches on document after each navigation. Use it to re-initialize external scripts (ads, analytics widgets, lazy loaders): `document.addEventListener('ajaxpress:ready', e => { /* e.detail.url, e.detail.title */ })`

= 2.3.0 =
* New: SPA navigation for wp-admin area
* New: Option to block keyboard reload (F5/Ctrl+R)
* New: Prefetch on mousedown for even faster navigation
* New: Option to skip already visited links in prefetch
* Fixed: Theme and plugin compatibility issues
* Fixed: Sliders, carousels, and animations now work without configuration
* Fixed: Forms, search, and comments work out of the box
* Improved: Simplified settings panel with cleaner defaults
* Improved: No more script re-execution configuration needed

= 2.2.5 =
* Fixed: Modal not reopening after first use (event listener memory leak)
* Fixed: Sliders and countdown timers freezing (timer cleanup now preserves third-party timers)
* Fixed: Forms, comments, search, and accessibility features breaking after AJAX navigation
* Fixed: Search forms not responding on first click after page change
* Fixed: CSS breaking on theme pages (expanded protection patterns)
* Fixed: Back button issues with hash URLs
* Improved: Same-page links now properly AJAX reload
* Improved: Prevent Reloads feature uses AJAX reload and only prompts when inputs are modified
* Improved: Prefetch properly cancels when mouse leaves link

= 2.2.4 =
* Improved: Redesigned preview panel with realistic website mockup
* Improved: Simplified Help page - cleaner Getting Started and Troubleshooting sections
* Improved: Help search now scrolls to and highlights the selected result
* Fixed: Desktop/mobile toggle now works correctly in preview panel
* Update: Renamed "Appearance" section to "Customization"

= 2.2.3 =
* New: Preserve Elements - keep DOM elements intact during navigation
* New: Persistent Player - audio/video continues across pages
* Improved: Script loading with proper sequencing
* Improved: Same-page click handling

= 2.2.2 =
* New: Feature tour guide
* Improved: Script re-execution logic
* Improved: Timer/interval cleanup

= 2.2.1 =
* New: Script Re-execution for sliders
* New: Exclude Scripts by URL
* Improved: Third-party compatibility

= 2.2.0 =
* Complete UI redesign
* New: Link Prefetch, Disable on Mobile
* New: Custom CSS, Developer Hooks

= 2.1.1 =
* New: Translation support
* Improved: Caching compatibility

= 2.1.0 =
* Fixed: JS conflicts
* Improved: Page builder compatibility

= 2.0.0 =
* Major rewrite with new AJAX engine
* New: Progress bar, cursor animation, page transitions

= 1.0 =
* Initial release
