= 3.2.2 = * changed: improved detection for site URL changes * fixed: Lazy Load JS throws error if inline script vars are missing * fixed: Easy IO + Lazy Load auto-scale produces invalid URL if an image with no query string is constrained by height = 3.2.1 = * fixed: PHP notices when Easy IO filters srcset URLs = 3.2.0 = * added: exclude by page for Easy IO and Lazy Load * changed: include upstream lazysizes unveilhooks for use by developers, props @saas786 * fixed: better compatibility with S3 Uploads when using autoload * fixed: Easy IO srcset URL construction not accounting for object versioning with S3 (or other cloud storage) = 3.1.3 = * added: image watermarking, configure at https://ewww.io/manage-sites/ * fixed: prevent WP core from generating duplicate WebP images = 3.1.2 = * fixed: trailing space on image URL handled incorrectly * fixed: lazy load sometimes incorrectly scales images in AffiliateWP portal = 3.1.1 = * fixed: Lazy Load not using EWWWIO_CONTENT_DIR * fixed: Lazy Load Auto-scale adds query parameters to SVG images * fixed: Lazy Load prevents image loading in GiveWP iframe * fixed: Auto Scale crops too much for object-* images in Oxygen = 3.1.0 = * added: AVIF support via Easy IO, enable on site management at ewww.io * added: ability for Easy IO to get full-size path when using offloaded media * fixed: front-end HTML parsers running within Bricks editor * fixed: Easy IO not finding scaled full-size for dynamic size generation * fixed: cover images not cropped properly by Easy IO * fixed: Easy IO URLs leaking into post editor with WP 6.0 = 3.0.2 = * changed: Easy IO WebP quality can be defined separately from the JPG quality used for resizing operations * fixed: Lazy Load integration with WooCommerce Product Recommendations handling AJAX output incorrectly = 3.0.1 = * changed: image links constrained to 2560px, use EIO_PRESERVE_LINKED_IMAGES to override = 3.0.0 = * added: Lazy Load and CDN support for multiple background images and mixing with gradients * changed: all Easy IO settings available to all plan levels * fixed: LQIP and SVG placeholder options not auto-loaded correctly * fixed: invalid path in translation loader = 2.9.2 = * fixed: Easy IO was adding srcset markup for SVG images = 2.9.1 = * added: use decoding=async to prevent images from blocking text render * fixed: Auto-scale incorrectly handles Divi parallax background images * fixed: native lazy loading used on inline PNG placeholders = 2.9.0 = * changed: Lazy Load no longer excludes first image in a page due to potential CLS issues and auto-scaling suppression * fixed: AMP detection throws notices in some cases * fixed: Easy IO misses some image URLs on multi-site when using domain-mapping * fixed: Lazy Loader incorrectly parses fall-back iframe from Google Tag Manager, triggering 403 errors in some WAF systems * fixed: Easy IO URL rewriter changing links if they matched a custom upload folder * fixed: Easy IO incompatible with Toolset Blocks * fixed: Easy IO incorrectly sizing wide/full width cover blocks * fixed: SWIS CDN compat called too early in some cases = 2.8.2 = * fixed: error when disabling Easy IO * updated: instructions for disabling Jetpack site accelerator = 2.8.1 = * changed: first image in a page is assumed to be "above the fold" and will not be lazy loaded, override with EIO_LAZY_FOLD constant * fixed: mismatched quotes break HTML markup in some cases * fixed: Lazy Loader incorrectly parses fall-back iframe from Google Tag Manager, triggering 403 errors in some WAF systems * fixed: Easy IO could not properly resize PNG-8 images * fixed: default WebP quality was too high = 2.8.0 = * added: EIO_LAZY_FOLD override to configure number of images above-the-fold that will be skipped by Lazy Load * added: Easy IO URLs for custom (non-WP) srcset markup * added: Easy IO support for CSS background images with relative URLs * fixed: Easy IO scaling not working on full-size images without srcset/responsive markup * fixed: Lazy Load skips images dynamically created by Brizy builder * fixed: Easy IO conflict on Elementor preview pages * fixed: EXACTDN_CONTENT_WIDTH not effective at overriding $content_width during image_downsize filter = 2.7.4 = * added: Easy IO and Lazy Load support for AJAX responses from FacetWP * changed: Vimeo videos excluded from iframe lazy load * changed: use 'bg-image-crop' class on elements with CSS background images that need to be cropped by auto-scaling * fixed: sub-folder multi-site installs which use separate domains could not activate Easy IO * fixed: Lazy Load PNG placeholders cannot be cached if the WP_CONTENT_DIR location is read-only (notably on Pantheon servers) * fixed: is_amp() called too early * fixed: Fusion Builder (Avada) does not load when Lazy Load or Easy IO options are enabled = 2.7.3 = * fixed: local PNG placeholders enabled with Easy IO when placeholder folder is not writable * fixed: iframe lazy loading breaks Gravity Forms and FacetWP when parsing JSON * fixed: is_amp() called too early = 2.7.2 = * fixed: Lazy Load not automatically creating placeholder folder = 2.7.1 = * added: integration with JSON/AJAX respones from Spotlight Social Media Feeds plugin * fixed: img element search parsing JSON incorrectly = 2.7.0 = * changed: PNG placeholders are now inlined for less HTTP requests and better auto-scaling * fixed: LQIP query strings not allowing resize operations * fixed: Lazy Load throws error when ewww_webp_supported not defined in edge cases. * fixed: Lazy Load regression prevents above-the-fold CSS background images from loading * fixed: WebP source images ignored by URL rewriter * fixed: Lazy Load scripts loading for page builders when they shouldn't be * fixed: Easy IO does not rewrite image (href) links if image_downsize integration has rewritten the img tag = 2.6.1 = * added: disable "deep" integration with image_downsize filter via EIO_DISABLE_DEEP_INTEGRATION override * fixed: LQIP query strings not allowing resize operations * fixed: Lazy Load throws error when ewww_webp_supported not defined in edge cases. * fixed: Lazy Load regression prevents above-the-fold CSS background images from loading * fixed: WebP source images ignored by URL rewriter = 2.6.0 = * added: enable -sharp_yuv option for WebP conversion with the EIO_WEBP_SHARP_YUV override * added: Lazy Load for iframes, add 'iframe' in exclusions to disable * added: preserve metadata and apply lossless compression to linked versions of images via Easy IO with EIO_PRESERVE_LINKED_IMAGES constant * added: Easy IO rewrites URLs in existing picture elements * changed: native lazy loading is now enabled for right-sized PNG placeholders, override with EIO_DISABLE_NATIVE_LAZY constant * changed: move Easy IO check-in to wp_cron * fixed: Add Missing Dimensions overwrites smaller width/height attribute if only one is set * fixed: replacing an existing attribute (like width) with a numeric value is broken = 2.5.5 = * fixed: Easy IO's Include All Resources compat with Oxygen Builder and Beaver Builder * fixed: regex to detect SVG images in use elements caused excessive backtracking * fixed: WebP version of full-size image not removed when attachment deleted due to undefined variable * fixed: Easy IO adds invalid zoom parameter of 1920 to srcset URL = 2.5.4 = * fixed: Lazy Load fails to auto-scale with img-crop class for Easy IO * fixed: Lazy Load throws JS error in SCRIPT_DEBUG mode * fixed: warnings due to empty needle in strpos() function call = 2.5.3 = * added: use 'img-crop' id/class, or data-img-crop attribute to force cropping with Easy IO + Lazy Load. * changed: lazysizes script moved to footer of page * changed: use core wp_getimagesize() for proper error handling = 2.5.2 = * fixed: lazy load threshold missing from minified code = 2.5.1 = * change: added setting to enable adding of missing width/height dimensions, disabled by default * fixed: warning from plugins using core wp_lazy_load filter without second parameter/argument = 2.5.0 = * added: ability to use SVG placeholders for more efficient lazy load via EASYIO_USE_SIIP override * added: Easy IO and Lazy Load add missing width and height to image elements * added: Lazy Load - right-sized placeholders can be generated for full-sized images * added: configure Lazy Load pre-load threshold via EIO_LL_THRESHOLD constant * changed: Lazy Load for external (non-inline) CSS images must be configured for specific elements * changed: Easy IO's Include All Resources unlocked for all plans * changed: native lazy loading is now disabled when using Easy IO lazy load, override with EIO_ENABLE_NATIVE_LAZY constant * changed: Lazy Load pre-load threshold increased from 500px to 1000px * changed: Lazy Load picture elements use right-sized img placeholder instead of 1x1 inline GIF * fixed: native iframe lazy load disabled in WP 5.7+ * fixed: removing metadata clobbers APNG animations * fixed: some JSON elements still being altered by Lazy Load * fixed: Easy IO throws warnings when WP content is not in a sub-directory = 2.4.3 = * fixed: syntax error on PHP 7.2 or less = 2.4.2 = * changed: Easy IO supports img tags with SVG images * fixed: error when a class attribute with no value is encountered = 2.4.1 = * fixed: lazy load for external CSS breaking div elements in JS/JSON * removed: JS defer with Easy IO, use SWIS Performance instead: https://ewww.io/swis/ = 2.4.0 = * added: Lazy Load for external CSS and separate style blocks (div elements only for now) * added: Easy IO/CDN rewriting for Ultimate Member AJAX-powered activity wall * changed: better compatibility with Theia Smart Thumbnails * changed: Lazy Load auto-sizing will no longer decrease the image size, only increasing is allowed * changed: filter to include additional HTML element types via eio_allowed_background_image_elements filter for Lazy Load and Easy IO * fixed: compatibility between Easy IO and Autoptimize * fixed: Easy IO uses hard crop when constraining an image via a width/height found in the style attribute * fixed: Easy IO uses hard-coded wp-content/ and wp-includes/ paths in some cases * fixed: Easy IO doubles part of image URL when there are no thumbnails, but one is requested by a plugin or theme * fixed: Easy IO minifier breaks Beaver Builder * fixed: Lazy Load breaks Beaver Builder text editor = 2.3.1 = * changed: Easy IO verification performed via API for better reliability * fixed: Easy IO missing https availability for admin-ajax.php requests when home_url is using plain http * fixed: Easy IO silently fails to rewrite URLs when using CNAME with WP Offload Media * fixed: wp_lazy_loading_enabled filter should have 3 parameters * fixed: Easy IO shows alert for domain change when a non-default WPML language is active = 2.3.0 = * fixed: Easy IO missing https availability for admin-ajax.php requests when home_url is using plain http * fixed: wp_lazy_loading_enabled filter should have 3 parameters * fixed: Easy IO shows alert for domain change when a non-default WPML language is active = 2.2.9 = * added: display total savings on settings page * fixed: Lazy Load breaks JSON-encoded img elements * fixed: Easy IO adds excess markup for images with height and/or width set to 'auto' * fixed: memory_limit check should be case-insensitive: g vs. G * fixed: Easy IO skips images in AJAX Load More requests = 2.2.8 = * fixed: lazy loader not loading = 2.2.7 = * added: alert on domain change for Easy IO, like if you clone from a production environment to staging * changed: Easy IO domain and plan_id refresh automatically when visiting settings page * fixed: error with Lazy Load and AMP = 2.2.6 = * changed: The browser-native portion of the Lazy Load feature obeys the wp_lazy_loading_enabled filter * changed: prevent parsing of sitemap.xml * fixed: Lazy Load placeholders not rewritten for CDN usage by Autoptimize and WP Offload Media Assets Add-on * fixed: ensure video files do not have extra query parameters added = 2.2.5 = * fixed: errors with WP Offload Media 2.4 * fixed: Easy IO hard crops images when requested height/width is 9999 * fixed: Lazy Load parser running on customizer preview pane = 2.2.4 = * added: GIF to WebP conversion with API and Easy IO * added: disable Lazy Load auto-scale by defining EIO_LL_AUTOSCALE as false = 2.2.3 = * fixed: lazy load skips img elements with unquoted src attributes * fixed: sites using S3 fail verification after upgrade = 2.2.2 = * fixed: Lazy Load has nested fall-back img elements if an image is found multiple times in a page * fixed: Easy IO mangles srcset URLs when src URL is relative instead of absolute * fixed: Easy IO URLs leaking into block editor for new uploads = 2.2.1 = * added: EXACTDN_DEFER_JQUERY_SAFE override for when inline scripts depend on jQuery * changed: Easy IO uses better query-string fall-back for plugins * changed: Easy IO enforces https if available rather than protocol-relative URLs = 2.2.0 = * added: defer jQuery also with EXACTDN_DEFER_JQUERY override * added: Lazy Load supports VC grid layouts retrieved via AJAX * fixed: Lazy Load prevents loading of images in oEmbed endpoint * fixed: jQuery exclusion was preventing deferral of jQuery extensions also * fixed: Lazy Load parsing Owl Lazy images * fixed: Easy IO adds srcset/sizes to feeds = 2.1.1 = * added: defer JS with Easy IO via EXACTDN_DEFER_SCRIPTS override * fixed: AMP compatiblity for Lazy Load was broken * fixed: images not loading on WPURP/WPRM print recipe pages = 2.1.0 = * added: Easy IO replaces image URLs within style elements for page builders like Elementor and Divi * changed: potentially expensive db queries disabled by default * fixed: verification fails if server is blocking test.png with a 403 * fixed: Include All Resources rewrites wrong URLs when quotes are html-encoded * fixed: tags do not follow Lazy Load exclusions * fixed: tags broken when excluding images from Lazy Load = 2.0.3 = * fixed: debug_message() throws a warning with non-string values * fixed: notices when parsing JSON data from Envira * fixed: fatal error when a WP_Error is passed from Envira to Easy IO = 2.0.2 = * removed: data-pin-media attribute, as Pinterest is handling WebP images properly now = 2.0.1 = * fixed: data-pin-media attribute added to linked images incorrectly = 2.0.0 = * added: Easy IO sets pre-scaled image in data-pin-media for Pinterest * added: Envira Pro cache cleared when activating Easy IO * fixed: background image lazy-loading could be interrupted by other plugins copying elements * fixed: Easy IO misses some images with Envira Gallery Pro layouts * fixed: missing www in domain prevents rewrites for Easy IO * fixed: Lazy Load parsing X/Pro theme admin pages = 1.9.0 = * added: automatic plan upgrade detection * changed: plugin can be activated network-wide, though configuration is still per-site * updated: embedded help beacon code * updated: lazysizes.js to version 5.2 * fixed: custom domain for Easy IO prevents auto-scaling * fixed: full-width background images auto-scaled due to scroll bars = 1.8.0 = * changed: better compatibility with other implementations of "native lazy load" * fixed: Easy IO detects wrong domain when using separate domains for site and content = 1.7.0 = * added: exclude images from Easy IO in settings * added: exclude images from Lazy Load by string or class name * added: prevent auto-scaling with skip-autoscale * added: exclusions can be defined as overrides (single value as string, multiple values as an array) * fixed: errors due to duplicate ssl= arguments in URLs = 1.6.0 = * added: support background images on a/link elements * fixed: partial wp-content URLs being rewritten for some plugins * fixed: inconsistent settings page links * updated: new version of lazysizes JS = 1.5.0 = * added: disable native lazy-load attributes with EASYIO_DISABLE_NATIVE_LAZY * added: ability to choose LQIP or blank placeholders for lazy load * added: better compatibility with Divi filterable grid images and parallax backgrounds * changed: default to blank placeholders with Easy IO * fixed: Divi builder will not load with Easy IO and Include All Resources active * fixed: image cover block with fixed width scaled too much * fixed: low-quality placeholders sometimes had larger dimensions than necessary * fixed: Slider Revolution dummy.png not properly handled by Easy IO = 1.4.0 = * changed: turn off WebP conversion when premium optimization is disabled * fixed: incorrect debug function in ExactDN class * fixed: wrong translation slug for some strings = 1.3.0 = * added: GCS sub-folder rewriting with ExactDN for cleaner URLs = 1.2.0 = * changed: better URL detection with WP Offload Media activated * changed: lazy placeholders limited to 1920px wide = 1.1.0 = * added: use native loading="lazy" for even better performance * updated: lazysizes core library * fixed: ExactDN incorrectly scales Elementor background images rather than cropping * fixed: ExactDN cannot work with Divi/Elementor background images due to use of external CSS files * fixed: Lazy Load auto-scaling breaks if background image is enclosed in encoded quotes = 1.0.0 = * First release (ported from EWWW Image Optimizer)