-
Notifications
You must be signed in to change notification settings - Fork 26
/
changelog.txt
2233 lines (1977 loc) · 135 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
= 8.0.0 =
*Release Date - December 11, 2024*
* added: WebP Optimization via API, existing customers may enable it on the Local tab in Ludicrous Mode
* added: improved WebP Conversion quality by using full-size/original source for thumbs
* added: Above the Fold setting for Lazy Load (previously EIO_LAZY_FOLD override)
* added: High-DPI option for Easy IO
* changed: gravatar images excluded from Above the Fold/EIO_LAZY_FOLD counts
* fixed: Picture WebP ignores images with skip-lazy when it should not
* fixed: image records not reset after image restore
* fixed: several PHP warnings from bulk processes
* fixed: paths for thumbs were broken on Windows
* fixed: Easy IO adding images to srcset combined with broken WooCommerce gallery thumbnails causes oversized image sizes to be loaded
* fixed: Easy IO srcset filler using incorrect width for calculations
* fixed: PHP warning during bulk scan
= 7.9.1 =
*Release Date - October 31*
* changed: bulk optimizer links point to async bulk tool, if available
* fixed: Lazy Load for iframes results in empty src attribute
* fixed: debug actions on bulk optimizer missing nonces
* fixed: bulk optimize scanner queries are too long for some hosts
* fixed: Lazy Load breaks --background CSS variable
= 7.9.0 =
*Release Date - September 12, 2024*
* added: conversion of BMP images to JPG format
* changed: allow folders outside of WordPress install to be optimized via Folders to Optimize
* changed: improve performance of ewwwio_is_file(), props @rmpel
* changed: improve exceeded credit messages for sub-keys
* changed: warn when db connection is not using UTF-8
* changed: ensure all db statements are properly prepared/sanitized
* fixed: bulk async shows start optimizing instead of resume when queues are paused
* fixed: bulk async status refresh does not handle errors properly
* fixed: some strings with i18n had incorrect text domain
= 7.8.0 =
*Release Date - July 25, 2024*
* added: agency mode available by defining EWWWIO_WHITELABEL or using the ewwwio_whitelabel filter
* changed: skip lazy load for LCP images based on fetchpriority when auto-scaling is disabled
* fixed: JS WebP alters img srcset when src is non-WebP but srcset is already WebP
* fixed: Lazy Load and Easy IO fail to decode URLs with HTML-encoded characters, which causes esc_url to break the URL
* fixed: Easy IO fails to update CDN domain if site is re-registered while still active
= 7.7.0 =
*Release Date - June 6, 2024*
* added: improved resizing of paletted PNG images in WP_Image_Editor using pngquant or API
* added: warning when hiding query strings with Hide My WP
* changed: apply async loading to lazyload JS using WP core functionality
* fixed: missing srcset when using JS WebP rewriting
* fixed: multisite deactivate for Easy IO fails nonce verification
* fixed: some strings were missing i18n (props @DAnn2012)
= 7.6.0 =
*Release Date - April 24, 2024*
* added: Easy IO delivery for JS/CSS assets from additional domains
* added: Lazy Load can use dominant color placeholders via Easy IO
* added: ability to filter/parse admin-ajax.php requests via eio_filter_admin_ajax_response filter
* added: Easy IO support for Divi Pixel image masks
* changed: improved smoothing of LQIP for Lazy Load when using Easy IO
* changed: after editing an image in WordPress, optimization results for backup sizes will be hidden from Media Library list mode
* changed: Lazy Load checks for auto-scale exclusions on ancestors of lazyloaded element
* fixed: async bulk interface does not show Start Optimizing when image queue is already visible
* fixed: bulk process appears to have completed after clearing queue
* fixed: storing resize/webp results for new images fails with MySQL strict mode
* fixed: database records not cleaned after thumbs are removed by Force Regenerate Thumbnails
* fixed: JPG to PNG conversion on 8-bit PNGs sometimes uses incorrect black background
* fixed: Help links broken in Firefox's Strict mode
* fixed: async queue status not properly checked on multi-site
= 7.5.0 =
*Release Date - March 26, 2024*
* added: Easy IO support for upcoming Slider Revolution 7 rendering engine
* added: Easy IO updates existing image preload URLs
* added: Lazy Load automatically excludes preloaded images
* changed: async process locking uses unique key on disk to avoid duplicate processes
* fixed: Easy IO skipping Slider Revolution 6 URLs
* fixed: Lazy Load incorrectly auto-scales fixed group background images
* fixed: uncaught errors when attempting svgcleaner install on FreeBSD
* fixed: optimized images list links to WebP thumbnail for all sizes
* fixed: optimized images list shows wrong thumbnail for non-media library images
* fixed: quirks with new bulk interface and optimized images list
* updated: cwebp to version 1.3.2
* updated: gifsicle to version 1.95
* updated: optipng to version 0.7.8
= 7.4.0 =
*Release Date - March 6, 2024*
* added: async bulk optimizer on settings page
* added: store WebP results/errors for display in Media Library, and in optimization table/results
* added: ability to view pending/queued images, remove images from queue, and sort queue by original image size
* fixed: restoring images from optimization table
* fixed: attempting to install x64 binaries on arm64 servers
= 7.3.0 =
*Release Date - February 20, 2024*
* added: API processing for large images done asynchronously to avoid timeouts
* added: Store resize results to prevent repeated attempts to scale images that yield larger filesizes
* added: warning to remove outdated AGR plugin
* changed: improved timeout handling/avoidance for scheduled optimization
* fixed: JS WebP can't check for local images when using S3 on multisite in sub-folder mode
* fixed: corrupted images (with an unrecognized file header) being repeatedly scanned by the bulk/scheduled optimizer
* fixed: GIF images not offloaded by WP Offload Media when operating in free cloud-based mode due to no thumbnail generation
* fixed: Easy IO applying resize parameters to existing (re)sizes
* security: improve authentication for some plugin actions
= 7.2.3 =
*Release Date - January 4, 2024*
* fixed: Easy IO incorrectly modifies JS/CSS URLs when using S3 on multisite
* fixed: regression with WP Offload Media compatibility and incorrect ContentType for WebP images
* fixed: local backup folder not protected from optimization
= 7.2.2 =
*Release Date - December 12, 2023*
* fixed: Lazy Load compatibility with X/Pro themes and Cornerstone builder
* fixed: JPG quality level ignored during PNG to JPG conversion
* fixed: too much scaling for Visual Composer background images with zoom effect
* fixed: Perfect Images compatibility function broken during image upload
* fixed: Easy IO strips extra sub-folders in non-image URLs
* fixed: compatibility with NextGEN Gallery 3.50+
* fixed: optimization of dynamic thumbs for NextGEN Gallery
= 7.2.1 =
*Release Date - September 7, 2023*
* changed: Scheduled Optimizer skips image errors faster
* changed: use updated coding standards, and restructure code for async/background functions
* removed: legacy image editor extensions for unmaintained plugins
* security: randomize filename of debug log
= 7.2.0 =
*Release Date - July 20, 2023*
* added: Easy IO rewrites poster/thumbnail image URLs for video elements
* changed: Easy IO + Auto Scale checks images on load and resize events to reduce browser upscaling
* changed: prevent Easy IO font substitution when OMGF is active
* fixed: Auto Scale downscales too much for landscape images displayed in portrait containers
* fixed: Easy IO compatibility with Brizy thumbnail generation endpoint
= 7.1.0 =
*Release Date - June 29, 2023*
* added: deliver Google Fonts via Easy IO or Bunny Fonts for improved user privacy
* fixed: PHP error trying to save EXIF data to JPG after resizing
* fixed: could not disable auto-scaling
* fixed: prevent errors when using legacy Animated GIF Resizing plugin
* fixed: prevent WP Offload Media from prematurely re-offloading when using bulk optimizer
= 7.0.2 =
* fixed: background optimization incorrectly displays as disabled on fresh installs with object caching
* fixed: Easy IO registration state not detected on multi-site
* fixed: duplicate queries in wp-admin when used with WP Offload Media
* fixed: deprecation notices when validating quality settings
* fixed: error when checking a corrupted PNG for transparency
= 7.0.1 =
* fixed: Easy IO instructions display incorrect URL when images are on cloud storage (S3, GCS, etc.)
* fixed: fatal error calling undefined method supports_webp
= 7.0.0 =
* breaking: namespaced and reorganized several classes, third party integrations should check for compatibility
* added: allow video files to go through Easy IO CDN (pass through)
* added: support for WP_Image_Editor_Imagick::set_imagick_time_limit() method added in WP 6.2
* added: ewwwio_inline_webp_script_attrs filter to add custom data-* attributes to the JS WebP inline scripts
* added: Easy IO support for BuddyBoss images, video, and documents
* added: Bulk Optimizer and Scheduled Optimizer include BuddyBoss profile and cover image folders automatically
* added: backup images post-resize but pre-compression with the ewww_image_optimizer_backup_post_resize filter
* added: improved support for Hide My WP Ghost in Lazy Load, and WebP rewriting engine
* added: update attachment metadata for WPML replicas after image conversion
* changed: improved Auto Scaling when using full-width layout in Elementor
* changed: use fread to check mimetype of files for better performance
* changed: style tag search/regex cleaned up to prevent excess markup
* fixed: WebP images are added to WP Offload Media queue multiple times
* fixed: PHP 8.1 deprecation notices from usage of add_submenu_page and add_query_arg
* fixed: debug notice cannot be dismissed on sub-sites for network-activated installs
* fixed: PHP notice when cleaning attachment metadata
* fixed: error when certain options have been stored as strings rather than serialized arrays
* fixed: tool path and content dir functions don't resolve symlinks
* fixed: Easy IO image URLs leaking into image gallery block via post editor
* fixed: JS WebP issues when body tag has script attributes
* fixed: clearing debug log does not redirect back to settings page in rare cases
= 6.9.3 =
* changed: improved Brizy Builder compatibility
* changed: async optimization defers processing by WP Offload Media until after optimization is complete, fixes issues with WP Offload Media 3.1+
* fixed: converting an image with the same base name as a previous upload (image.png vs. image.jpg) could cause naming conflict when using WP Offload Media with Remove Local Media option
* fixed: Bulk Optimize encounters unrecoverable error when a GIF or PDF file takes too long to optimize
* fixed: Easy IO fails to apply crop for custom size in some cases
* fixed: Picture WebP rewriter uses mixed single/double quotes
* fixed: PHP warnings when bulk optimizing images on cloud storage with no local copies
* improved: ensure originals are removed from local storage after conversion when using WP Offload Media with Remove Local Media option
* improved: ensure originals are queued for removal from remote storage after conversion and subsequent deletion when using WP Offload Media
= 6.9.2 =
* changed: improved Easy IO detection for site URL changes
* changed: load backup class earlier to prevent issues with custom image uploaders
* fixed: and improved the ewwwio_translated_media_ids filter, props @ocean90
* 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
= 6.9.1 =
* changed: default syntax for MySQL 8.x to use faster upgrade query
* fixed: bulk action parameter was not validated properly when selecting attachments for optimization
* fixed: undefined function ewww_image_optimizer_get_primary_wpml_id
* fixed: PHP notices when Easy IO filters srcset URLs
= 6.9.0 =
* added: allow translation plugins to filter attachment IDs for retrieving Media Library results via ewwwio_primary_translated_media_id/ewwwio_translated_media_ids
* changed: include upstream lazysizes unveilhooks for use by developers, props @saas786
* fixed: Easy IO compatibility with S3 Uploads 3.x
* fixed: better compatibility with S3 Uploads when using autoload
* fixed: PHP notices when removing images and backups are disabled
* fixed: trailing comma after parameters in WP-CLI remove_originals function
* fixed: Easy IO srcset URL construction not accounting for object versioning with S3 (or other cloud storage)
= 6.8.0 =
* added: ability to store image backups on local storage
* added: tool to bulk restore images under Tools menu and WP-CLI
* added: WebP cleanup tool can be resumed and run via WP-CLI
* added: Delete Originals can be run via WP-CLI
* added: remove originals after conversion (like PNG to JPG) via WP-CLI
* added: exclude by page for Easy IO, Lazy Load, and WebP delivery methods
* changed: ensure full-size image is optimized after resizing with Imsanity
* fixed: incorrect cfasync attribute used for JS WebP scripts
= 6.7.0 =
* added: API keys can be used to auto-register sites for Easy IO, including sub-keys
* changed: expose legacy resize dimensions with removal option
* fixed: Lazy Load not using EWWWIO_CONTENT_DIR
* fixed: Easy IO Premium/WebP compression disabled incorrectly when in Easy Mode
* fixed: JS WebP body script throws error if wp_head script missing
* fixed: Lazy Load Auto-scale adds query parameters to SVG images
* fixed: JS WebP and Lazy Load prevent image loading in GiveWP iframe
* fixed: Auto Scale crops too much for object-* images in Oxygen
* fixed: trailing space on image URL handled incorrectly
* updated: Gifsicle to version 1.93 and Pngquant to 2.17
* removed: free binaries for SunOS, may use free cloud-based JPG compression instead
= 6.6.0 =
* added: AVIF support via Easy IO, enable on site management at ewww.io
* added: sharpening setting to improve WP resizing via ImageMagick and WebP conversion
* added: AVIF quality setting on Advanced tab
* added: ability for Easy IO to get full-size path when using offloaded media
* changed: JPG quality and WebP quality moved to Advanced tab
* changed: allow .htaccess rules on Cloudways with notice about WebP Redirection toggle
* 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
= 6.5.2 =
* added: automatic optimization for Crop Thumbnails plugin
* added: filters to adjust sharpening parameters for core WP (ImageMagick) image resizing
* changed: Easy IO WebP quality can be defined separately from the JPG quality used for resizing operations
* fixed: Picture WebP rewriting disabled on embeds
* fixed: Lazy Load integration with WooCommerce Product Recommendations handling AJAX output incorrectly
* fixed: PHP notice when checking for presence of mod_rewrite/mod_headers
= 6.5.1 =
* fixed: LQIP option not available on sub-domain multisite install unless Easy IO is active on site 1
* fixed: API quota function doesn't handle expired status correctly
= 6.5.0 =
* added: Lazy Load and Easy IO support for multiple background images and mixing with gradients
* changed: all Easy IO settings available to all plan levels
* changed: Easy IO CDN image links constrained to 2560px, use EIO_PRESERVE_LINKED_IMAGES to override
* fixed: database upgrade fails on MySQL 5.6
* fixed: LQIP and SVG placeholder options not auto-loaded correctly
* fixed: regression in legacy translation loader
= 6.4.2 =
* added: JS/Picture WebP rewriters support FacetWP AJAX responses
* fixed: errors from posix_getpwuid() and posix_getgrgid() not handled correctly
* fixed: PNGOUT download URLs were moved, causing auto-install to fail
* fixed: Easy IO was adding srcset markup for SVG images
= 6.4.1 =
* added: use decoding=async to prevent images from blocking text render
* fixed: database upgrade fails on MySQL 8.0.x
* fixed: Auto-scale incorrectly handles Divi parallax background images
* fixed: native lazy loading used on inline PNG placeholders
* fixed: WebP rewriters not recognizing WP Offload Media Path (object prefix) setting
= 6.4.0 =
* added: free API-based WebP generation for servers that cannot generate WebP images locally
* added: detection for Jetpack Boost lazy load function
* added: JS WebP handling for WooCommerce product variations
* changed: SVG placeholder setting removed from UI as PNG placeholders can now provide the same benefits (and better).
* changed: Lazy Load no longer excludes first image in a page due to potential CLS issues and auto-scaling suppression
* fixed: PNG thumbnails skipped from WebP conversion when using exec-free mode
* fixed: SVG placeholders broken when existing img src is single-quoted
* fixed: Lazy Loader incorrectly parses fall-back iframe from Google Tag Manager, triggering 403 errors in some WAF systems
* fixed: error when disabling Easy IO
* fixed: Easy IO misses some image URLs on multi-site when using domain-mapping
* fixed: SVG level cannot be set when using API if svgcleaner was not installed previously
* 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
* updated: PHP EXIF library dependency updated to 0.9.9
* removed: PHP 7.1 is no longer supported
= 6.3.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
* changed: Lazy Load excludes first image in a page as above-the-fold
* fixed: Easy IO scaling not working on full-size images without srcset/responsive markup
* fixed: WebP and Lazy Load function skip 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
= 6.2.5 =
* 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, define EXACTDN_SUB_FOLDER to override
* 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, WebP, or Easy IO options are enabled
* fixed: png_alpha() check uses more memory than is available, causing some uploads to fail
= 6.2.4 =
* added: Multi-site domain-based installs can activate/register sites en masse, and directly upon site creation
* changed: improved db upgrade routine for updated column
* changed: JS WebP script moved back to page head
* fixed: local PNG placeholders enabled with Easy IO when placeholder folder is not writable
* fixed: WebP Rewriters not detecting upload URL correctly for CDN support
* fixed: iframe lazy loading breaks Gravity Forms and FacetWP when parsing JSON
* fixed: is_amp() called too early
* fixed: SQL error when running "wp-cli ewwwio optimize media" - props @komsitr
* fixed: local savings query sometimes returns no results
* fixed: PHP warnings when local tools are disabled
= 6.2.3 =
* fixed: db error when MariaDB 10.1 does not permit ALTER for setting default column value
* fixed: Lazy Load missing placeholder folder when Easy IO is enabled
= 6.2.2 =
* added: disable Easy IO's "deep" integration with image_downsize filter via EIO_DISABLE_DEEP_INTEGRATION override
* added: integration with JSON/AJAX respones from Spotlight Social Media Feeds plugin
* changed: PNG placeholders are now inlined for less HTTP requests and better auto-scaling
* changed: Bulk Optimizer processes images from oldest to newest for the Media Library
* changed: Resize Detection uses minified JS and console logging suppressed unless using SCRIPT_DEBUG
* fixed: Easy IO does not rewrite image (href) links if image_downsize integration has rewritten the img tag
* fixed: Lazy Load throws error when ewww_webp_supported not defined in edge cases
* fixed: front-end scripts loading for page builders when they shouldn't be
* fixed: when using WP/LR Sync, EWWWIO_WPLR_AUTO does not trigger optimization for new images
* fixed: img element search parsing JSON incorrectly
* fixed: WebP uploads not resized to max dimensions
= 6.2.1 =
* fixed: Lazy Load regression prevents above-the-fold CSS background images from loading
* fixed: WebP Conversion for CMYK images leaves empty color profile attached
= 6.2.0 =
* added: PHP-based WebP Conversion via GD/Imagick in free mode when exec() is disabled
* added: enable -sharp_yuv option for WebP conversion with the EIO_WEBP_SHARP_YUV override
* added: WebP Conversion for CMYK images
* added: webp-supported conditional class added to body tag when JS WebP is active
* added: WP-CLI command can be run with --webp-only option
* added: Lazy Load for iframes, add 'iframe' in exclusions to disable
* added: compatibility with S3 Uploads 3.x
* 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: JS WebP scripts moved to beginning of page footer
* changed: native lazy loading is now enabled for right-sized PNG placeholders, override with EIO_DISABLE_NATIVE_LAZY constant
* changed: add resume ability to Delete Originals tool
* changed: move Easy IO check-in to wp_cron
* fixed: empty .webp images sometimes produced when cwebp encounters an error
* fixed: Bulk Optimizer for NextGEN loading incorrect script
* fixed: Bulk Optimizer for NextGEN fails to verify nonce for selective optimization
* fixed: Last Optimized times for Optimized Images table were incorrect
* 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
= 6.1.9 =
* 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
= 6.1.8 =
* fixed: Lazy Load fails to auto-scale with img-crop class for Easy IO
* fixed: WebP files sometimes fail to be re-generated after Photo Engine (WP/LR) sync
* fixed: Lazy Load throws JS error in SCRIPT_DEBUG mode
= 6.1.7 =
* fixed: syntax error due to trailing comma after last parameter in function call(s).
= 6.1.6 =
* added: support for BuddyPress uploads via Vikinger theme.
* added: compatibility with Weglot.
* added: use 'img-crop' id/class, or data-img-crop attribute to force cropping with Easy IO + Lazy Load.
* changed: Resize Existing enabled by default for new installs.
* changed: Lazy Load JS moved to footer
* fixed: prevent Resize Detection from flagging SVG files.
= 6.1.5 =
* changed: use core wp_getimagesize() for proper error handling
* fixed: prevent erasing title attributes for admin users when Lazy Load and Resize Detection are enabled
* fixed: creates empty file when image is too large for WebP conversion
= 6.1.4 =
* changed: better handling for API quotas
* fixed: picture elements not parsed when using JS WebP with Lazy Load
* fixed: bundled tools don't work if the binary/tool directory is mounted on a filesystem separate from wp-content/
* fixed: bulk optimizer not finding images from cloud storage (like S3) when local versions are removed
= 6.1.3 =
* changed: bulk optimizer no longer skips image types set to "no compression" in WebP-only mode
* fixed: CNAME setting from WP Offload Media triggers "unknown" error in Easy IO
* fixed: missing EIO_LL_THRESHOLD variable for minified JS
= 6.1.2 =
* fixed: bug from bypass/exclusion code for bulk scanner in 6.1.1
* fixed: running is_file on system binaries may trigger open_basedir warnings, use EWWWIO_OPEN_BASEDIR to override PHP's open_basedir restriction
= 6.1.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
= 6.1.0 =
* added: ability to use SVG placeholders for more efficient lazy load
* 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 EWWW 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
* changed: system-installed binary detection improved
* fixed: native iframe lazy load disabled in WP 5.7+
* fixed: detection for Shield Security plugin lock to location
* fixed: relative path migration showing errors in site tools
* fixed: WebP rewriters not handling relative image urls
* fixed: existing <picture> elements ignored by <picture> WebP Rewriting
* fixed: <img> elements inside <picture> elements incorrectly handled by JS WebP Rewriting
* 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
* updated: jpegtran to version 9d
* updated: cwebp to version 1.2.0
* updated: pngquant to version 2.13.1
= 6.0.3 =
* fixed: syntax error on PHP 7.2 or less
= 6.0.2 =
* security: new version of PNGOUT available on settings page (if enabled)
* added: compatibility with Phoenix Media Rename plugin
* changed: Easy IO supports img tags with SVG images
* fixed: bulk optimizer gives incorrect message about not enough credits for unlimited plans
* fixed: db install workaround for MariaDB 10.4 bug
* fixed: errors with custom db setups when DB_* constants are not defined
* fixed: error with JS WebP when a class attribute with no value is encountered
= 6.0.1 =
* changed: more reliable Cloudflare detection for WebP delivery methods
* fixed: lazy load for external CSS breaking div elements in JS/JSON
* fixed: call to undefined function from Imsanity
* fixed: database upgrade check triggers error on MySQL 8.0.17+
* fixed: delete originals tool is slow
* fixed: wpdb error when attempting to run migration routine for fresh installs
= 6.0.0 =
* added: tool to delete originals from WP 5.3+ auto-scaling behavior (Tools menu)
* added: JS WebP recognizes video elements added via JS (e.g. infinite scroll)
* added: automatically convert GIF to PNG during new uploads, unless animated
* added: JS WebP and picture WebP auto-detect configuration for S3 Uploads and WP Stateless
* 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: settings UI revamped with wizard for first-time installs
* changed: automatic PNG to JPG threshold lowered to 250kb
* changed: extensions for WP_Image_Editor now disabled by default, use EWWW_IMAGE_OPTIMIZER_ENABLE_EDITOR constant to enable them
* changed: JS WebP can be used with picture WebP + Lazy Load to support CSS background images
* 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 not activating properly when plugin is activated network-wide for multi-site installs
* fixed: database upgrade throws errors on MariaDB 10.4.x
* fixed: WebP .htaccess error in Vary header rule
* 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
* removed: JS defer with Easy IO, use SWIS Performance instead: https://ewww.io/swis/
= 5.8.2 =
* security: improper nonce verification for Nextgen bulk optimizer initialization (minor severity)
* 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
* fixed: JS WebP does not auto-detect WP Offload Media CNAME
= 5.8.1 =
* fixed: Easy IO parser has typo in $webp_quality variable
= 5.8.0 =
* added: SVG optimization, huge thanks to @samsk for making this happen!
* added: WebP quality setting, changed default to 75
* fixed: Lazy Load and other front-end parsers 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: PHP error during detection of Cache Enabler's WebP option
* fixed: table upgrade routine error when primary key already exists
* fixed: deleting files by always using realpath, props @ocean90
* fixed: Easy IO skips images in AJAX Load More requests
= 5.7.1 =
* 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
* changed: better JS WebP and WPBakery Page Builder compatibility
* changed: restore savings gauge for network settings page
* fixed: resize detection visible for editors, should be admin-only
* fixed: (force) re-optimize not working with parallel mode
* fixed: upload error when WP cannot load image editor
= 5.7.0 =
* added: cleanup tool if you no longer need local WebP copies of images
* added: resizing results displayed in bulk & single optimization report
* changed: The browser-native portion of the Lazy Load feature obeys the wp_lazy_loading_enabled filter
* fixed: plugin tables do not have PRIMARY indexes
* fixed: Third-party plugins sometimes set erroneous WebP quality values
* fixed: Show Re-optimized Images lists images in reverse order
* fixed: cannot skip to last page of re-optimized images
* fixed: Scheduled Optimizer skips files that need scaling/resizing if they have already been compressed
* fixed: Lazy Load placeholders not rewritten for CDN usage by Autoptimize and WP Offload Media Assets Add-on
= 5.6.2 =
* fixed: fatal error for undefined add_query_var
= 5.6.1 =
* changed: prevent unintentional image re-optimization from plugins with a threshold of 5x, indicate intential regen with ewww_image_optimizer_allowed_reopt filter
* changed: include lazy load and WebP in optimization score
* fixed: query paramaters added to videos via image_downsize filter
* fixed: WP-CLI command triggers async queueing
* fixed: WPML check skips too many images during bulk scanner
* fixed: WP-CLI command options for FlAGallery and NextGEN using outdated code
* fixed: re-optimization tracker not tracking
= 5.6.0 =
* added: if exec() is disabled, free cloud-based JPG compression will be enabled
* added: tool to remove originals for converted images
* changed: improved handling of WPML replicas in media library list mode and bulk optimizer
* fixed: JS WebP, picture WebP, and Easy IO errors with WP Offload Media 2.4
* fixed: JS WebP cannot find local paths when WP_CONTENT_DIR is outside ABSPATH
* fixed: Easy IO hard crops images when requested height/width is 9999
* fixed: Lazy Load and WebP parsers running on customizer preview pane
= 5.5.0 =
* added: GIF to WebP conversion with API and Easy IO
* changed: plugin removed from disallowed list on WP Engine!
* changed: disable Lazy Load auto-scale by defining EIO_LL_AUTOSCALE as false
* fixed: async functions use of wp_die causes empty errors when wp_cron is run from WP-CLI
* fixed: big image size filter throws error when other plugins run the filter with fewer than 3 parameters
* fixed: styling broken for optimization info on Nextgen gallery pages
* fixed: broken link for network admin settings from single-site plugins page
= 5.4.1 =
* fixed: Bulk Optimizer sticks on stage 2 when there are no images to optimize
* fixed: transparency in PNG images with color type 0 or 2 not detected
* fixed: transparency false positives for PNG images with color types 4 and 6
* fixed: lazy load skips img elements with unquoted src attributes
* fixed: images converted by PNG to JPG (and friends) do not have restore links in library
= 5.4.0 =
* added: EXACTDN_DEFER_JQUERY_SAFE override for when inline scripts depend on jQuery
* changed: code rewrite to validate output escaping, input sanitization, and markup on settings page
* changed: use data-cfasync=false to prevent deferring inline JS WebP script
* changed: Easy IO uses better query-string fall-back for plugins
* changed: Easy IO enforces https if available rather than protocol-relative URLs
* changed: resize detection ignores images smaller than 25px
* changed: settings streamlined when using Easy IO
* fixed: parallel optimization on multisite fails due to missing db prefix
* fixed: error when saving JS WebP on network/multsite admin
* fixed: images not resized when Media File Renamer is active
* fixed: PHP warning while using <picture> WebP
* fixed: Lazy Load, JS WebP and <picture> WebP have 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
* fixed: WebP rewriting with WP Offload Media skips sub-domains of blog domain
* deprecated: support for Image Store plugin (abandoned)
= 5.3.2 =
* added: defer jQuery also with EXACTDN_DEFER_JQUERY override
* added: Lazy Load supports VC grid layouts retrieved via AJAX
* fixed: Lazy Load and JS WebP prevent 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
* fixed: filename in attachment metadata not updated for duplicate thumbnails after conversion success
* fixed: notices for undefined variables during bulk optimize
= 5.3.1 =
* added: defer JS with Easy IO via EXACTDN_DEFER_SCRIPTS override
* fixed: warning related to user-defined exclusions in JS and picture WebP
* fixed: AMP compatibility for Lazy Load and WebP rewriters was broken
* fixed: images not loading on WPURP/WPRM print recipe pages
= 5.3.0 =
* added: Easy IO replaces image URLs within style elements for page builders like Elementor and Divi
* added: option to use <picture> tags for WebP rewriting
* added: ability to define exclusions for JS WebP and <picture> WebP
* added: include .webp images when using WP Offload Media to copy images from bucket to server
* added: cleanup/migration tool for folks using EWWW IO 3+ years to remove old metadata entries
* added: fetch original_image for optimization when local images are removed (WP Offload Media and Microsoft Azure Storage for WordPress)
* changed: scheduled optimizer uses async/background mode to prevent timeouts
* changed: images that exceed the max resize dimensions will be queued by the bulk scanner even if previously compressed
* changed: for security, EWWW IO will only optimize images within the WP root folder, content folder, or uploads folder
* changed: WebP Only mode will bypass the check for TinyPNG compression
* changed: background/async mode uses better queueing system for speed and reliability
* changed: image queue information moved to Tools page
* changed: image re-opt troubleshooting moved to Tools page
* fixed: noresize in filename has no effect when using Media File Renamer
* fixed: debug_message() throws a warning with non-string values
* fixed: notices when uploading animated GIFs using GD
* fixed: notices when parsing JSON data from Envira
* fixed: fatal error when a WP_Error is passed from Envira to Easy IO
* fixed: executables could not be installed on Windows due to behavior of is_executable() on directories
* fixed: Include All Resources rewrites wrong URLs when quotes are html-encoded
* fixed: <picture> tags do not follow Lazy Load exclusions
* fixed: <picture> tags broken when exluding images from Lazy Load
* fixed: Azure storage plugin doesn't re-upload optimized images
= 5.2.5 =
* removed: data-pin-media attribute, as Pinterest is handling WebP images properly now
= 5.2.4 =
* fixed: data-pin-media attribute added to linked images incorrectly
* fixed: images are not resized to max dimensions when using S3 Uploads plugin
= 5.2.3 =
* added: Easy IO sets pre-scaled image in data-pin-media for Pinterest
* added: Envira Pro cache cleared when activating Easy IO
* changed: improved compatibility layer with S3 Uploads plugin
* fixed: background image lazy-loading could be interrupted by other plugins copying elements
* fixed: JS WebP provides .webp images to Pinterest
* fixed: JS WebP strips Pinterest data/meta attributes
* fixed: Easy IO misses some images with Envira Gallery Pro layouts
* fixed: missing www in domain prevents rewrites for Easy IO
* fixed: JS WebP and Lazy Load parsing X/Pro theme admin pages
= 5.2.2 =
* added: automatic plan upgrade detection
* changed: better compatibility with other implementations of "native lazy load"
* 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
* fixed: overrides for array-style exclusions not being applied
= 5.2.1 =
* changed: WebP rewrite rules hidden for Cloudflare-protected sites
* fixed: Smart Re-optimize not working for PDF files
* fixed: Easy IO detects wrong domain when using separate domains for site and content
= 5.2.0 =
* added: Lazy Load, JS WebP, and Easy IO support background images on link elements
* added: JS WebP supports background images on section, span, and li elements
* 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: Folders to Optimize, Folders to Ignore, Lazy Load Exclusions, Easy IO Exclusions, and WebP URLs can be defined as overrides (single value as string, multiple values as an array)
* added: API key, JPG Background (for conversion only), and Disabled Resizes can be defined as overrides, see https://docs.ewww.io/article/40-override-options
* added: PNG placeholders for Lazy Load retrieved direct from API for drastically reduced memory usage (API users only)
* added: Smart Re-optimize option available on Bulk Optimizer if you want to re-optimize images that were compressed on a different setting
* added: auto-restore for Smart Re-optimize when going from lossy to lossless mode
* added: Restore & Re-optimize from Media Library to change individual images from lossy to lossless
* added: search function for Optimized Images table (Tools menu)
* added: table cleanup for database table (Tools menu)
* fixed: errors due to duplicate ssl= arguments in URLs
* fixed: JS WebP has incorrect selector for video elements (props @CharlieHawker)
* updated: embedded help code for better debug prefill
= 5.1.4 =
* fixed: warnings on FlaGallery's manage gallery page
* fixed: cwebp version test results in false-positives
* fixed: EWWW IO resize limits are ignored when higher than WP default
* fixed: PNGOUT warning during one-click conversion
* fixed: WebP images not removed from remote storage when an attachment is deleted (WP Offload Media)
* fixed: after running regen for single thumbs with Image Regenerate & Select Crop plugin, regenerated images were not automatically optimized
= 5.1.3 =
* added: better compatibility with Divi filterable grid images and parallax backgrounds
* added: cleanup .webp and database records when using Enable Media Replace
* 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: PNG placeholders could use more memory than available
* removed: Lazy Load CSS gradient for blank placeholders
= 5.1.2 =
* added: disable native lazy-load attributes with EWWWIO_DISABLE_NATIVE_LAZY
* added: ability to choose LQIP or blank placeholders for lazy load
* changed: renaming ExactDN as Easy IO
* changed: default to blank placeholders with Easy IO
* changed: regenerated images are automatically re-optimized after running Image Regenerate & Select Crop plugin
* fixed: low-quality placeholders sometimes had larger dimensions than necessary
* fixed: database records and .webp images are not removed when Image Regenerate & Select Crop plugin deletes a thumbnail
* fixed: path traversal protection preventing normal files from optimizing
* fixed: Slider Revolution dummy.png not properly handled by Easy IO
= 5.1.1 =
* fixed: no optimization when escapeshellarg() is disabled
* fixed: warning thrown by implode() when JS WebP is enabled with no WebP URLs
= 5.1.0 =
* added: WebP-only mode for Bulk Optimizer
* added: JS WebP Rewriting for pull-mode CDNs via WebP URLS without Force WebP
* added: JS WebP Rewriting zero-conf for WP Offload Media
* added: force lossy PNG to WebP conversion with EWWW_IMAGE_OPTIMIZER_LOSSY_PNG2WEBP override (set to true)
* changed: bulk optimizer runs wp_update_attachment_metadata() in separate request to avoid timeouts
* fixed: WebP warning regarding missing modules displayed even if green WebP test image is working
* fixed: Nextgen bulk actions not working
* fixed: unable to regenerate existing thumbnails with Image Regenerate & Select Crop plugin
* updated: WebP (cwebp) binary to version 1.0.3
* updated: Pngquant binary to version 2.12.5
* updated: cwebp requires Mac OS X 10.14
* updated: FreeBSD 10 is EOL, version 11 is the supported/tested version
= 5.0.0 =
* added: use native lazy load attributes to supplement lazy loader and make placeholders more efficient
* added: GCS sub-folder rewriting with ExactDN for cleaner URLs
* added: option to optimize original versions of scaled images for WP 5.3
* added: ability to erase optimization history from Tools page
* changed: define EWWWIO_WPLR_AUTO (any value) to enable auto-optimize on images from WP/LR Sync
* changed: thumbnails could be converted even if original was not
* changed: Show Optimized Images table moved to Tools menu
* fixed: full-size image optimization not deferred if scaled by WP 5.3
* fixed: data-width and data-height attributes missing when JS WebP active
* security: rewrote escapeshellarg() wrapper to be more secure
= 4.9.3 =
* 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: JS WebP rewriting picture tags that already have WebP markup in Force WebP mode
* fixed: JS WebP incorrectly parses GIF/SVG images in Force WebP mode
* fixed: JS WebP does not support lazy load + infinite scroll
* fixed: Lazy Load auto-scaling breaks if background image is enclosed in encoded quotes
* fixed: GRAND FlaGallery integration broken by hook suffix change
= 4.9.2 =
* fixed: generating lazy load PNG placeholders with large heights causes 500 errors
* fixed: error when importing media via WordPress Importer plugin
* fixed: error with WP/LR Sync
= 4.9.1 =
* fixed: error on settings screen when JS WebP is enabled
= 4.9.0 =
* added: Lazy Load background image support for section elements
* added: ExactDN background image support for li,span, and section elements
* added: lazysizes print plugin, enable via EWWW_IMAGE_OPTIMIZER_LAZY_PRINT constant
* added: compatibility with upcoming Easy Image Optimizer
* changed: automatic compression disabled during WP/LR Sync with admin notice
* changed: Lazy Load PNG placeholders capped at 1920px wide to prevent errors
* changed: use ExactDN, when active, for Lazy Load PNG placeholders
* changed: EWWW_MEMORY_LIMIT renamed to EIO_MEMORY_LIMIT for setting plugin memory limit
* fixed: WebP test image not refreshing after inserting .htaccess rules
* fixed: errors when manually adding lazysizes script
= 4.8.1 =
* added: Lazy Load background image support added for span elements
* changed: constrain by height for background images that are taller than they are wide
* changed: debug.log moved to more suitable location
* fix: Lazy Load breaks when an image has an empty class attribute
* fix: regression that caused jpegtran and pngout tests to fail on Windows
* fix: writing to debug.log causes errors
= 4.8.0 =
* added: ability to resize images outside media library via scheduled or bulk optimization
* added: compatibility with WP Stateless for GSC
* added: use ewww_image_optimizer_autoconvert_threshold filter to modify conversion threshold (default of 300kb)
* changed: Lazy Load without ExactDN uses blank PNG placeholders for better srcset auto-sizing
* changed: API backups taken prior to resizing/scaling rather than just before compression
* changed: ExactDN + Lazy Load uses scaling rather than cropping by default
* changed: prevent NextGEN backup images from being optimized
* fixed: bulk optimizer not resuming when non-media library images remain in queue
* fixed: notices when a user-selected admin theme is unavailable
* fixed: privacy policy function triggers notices in WP-CLI
* fixed: background-image attributes with single-quotes now supported by ExactDN, Lazy Load, and JS WebP
* fixed: background-image attributes getting extra arguments with lazy load
* fixed: On multi-site installs, site admins could add folders to optimize outside of the uploads folder
* fixed: LQIP with SVG files results in duplicate requests
* fixed: image optimization results in media library report file missing when using WP Stateless
* fixed: plugin checking for 'nice' on Windows servers
= 4.7.4 =
* fixed: ExactDN modifies Autoptimize CDN setting even when Include All Resources is disabled
* fixed: noscript elements with newlines being parsed incorrectly by Lazy Load and JS WebP
* fixed: Lazy Load parsing breaking img elements in script blocks
* fixed: Lazy Load and JS WebP bail when SVGs are wrapped in XML tags
* fixed: ExactDN mixes x and w srcset descriptors
* fixed: page parsers (ExactDN, Lazy, JS WebP) still fail to process some img elements that have unquoted src attributes
= 4.7.3 =
* added: disable WebP script block on certain pages by defining EWWW_IMAGE_OPTIMIZER_NO_JS as true
* changed: use SVG inline image placeholder if width and height are known when LQIP is disabled or ExactDN is not available
* changed: Lazy Load ignores images using browser-native loading attribute
* fixed: page parsers (ExactDN, Lazy, JS WebP) do not properly handle attributes that start on a new line
* fixed: page parsers do not recognize img elements with unquoted attributes
* fixed: uninstaller cannot clear queue table due to undefined table name
* fixed: implode throws notice when image sizes array is multi-dimensional
* fixed: srcset url replaced incorrectly when using pixel density descriptors
* fixed: srcset url added with 0 width when width attribute is empty
= 4.7.2 =
* changed: JS WebP no longer necessary with ExactDN
* fixed: fatal error from NextGEN get_image_sizes() method
* fixed: debugging mode gets stuck
* fixed: ExactDN has unexpected results when content_width global equals zero
* fixed: img elements with unquoted src attributes ignored by ExactDN, Lazy Load, and JS WebP
= 4.7.1 =
* added: CSS background image support for <li> elements
* added: ExactDN + Lazy Load will auto-calculate dimensions for img elements without srcset/responsive markup
* added: ExactDN parses thumbnail url for personalization.com + WooCommerce integration
* added: ExactDN can use data-actual-width attribute for srcset generation
* added: ExactDN + Lazy Load uses devicePixelRatio to provide clearer background images
* fixed: Lazy Load for CSS background images misfires when display height is greater than width
* fixed: visitors without JS see Lazy Load placeholder + fallback image
= 4.7.0 =
* added: lazy load (on ExactDN tab for now)
* added: JS WebP supports background images via lazy load (div elements only for now)
* added: ExactDN supports compression of background images (div elements only for now)
* added: compat with Google Cloud Storage via WP Offload Media
* added: automatic PNG to JPG conversion for ExactDN
* added: ExactDN parsing for legacy WooCommerce API (current API works as-is)
* changed: responsive image 'sizes' attribute can be auto-calculated by lazy load
* changed: JS WebP no longer requires jQuery
* changed: ExactDN srcset multipliers include fullscreen value of 1920px
* changed: force resize function to ignore filesize with ewww_image_optimizer_resize_filesize_ignore filter
* changed: prevent .php script/style generators from going through ExactDN
* changed: ExactDN sites can dismiss exec notice to disable local compression
* changed: automatic compression disabled during WooCommerce regen with admin notice
* changed: use wp_resource_hints filter to include ExactDN dns-prefetch earlier in the page header
* changed: gather debugging information on settings page even when debugging is not enabled yet
* fixed: Bulk Optimize scanner does not update queue in some cases
* fixed: ExactDN does not handle themes that support wide and full-screen images in block editor
* fixed: ExactDN constrains images to 640px in Twenty Nineteen theme
* fixed: ExactDN mangles Flatsome lazy load placeholder image URL
* fixed: empty attributes not recognized properly by HTML parser, resulting in broken markup
* fixed: table nav button styling broken in WP 5.1
* fixed: ExactDN applies resizing args during image_downsize() even when full/original image is too small
* fixed: animated GIF resizing breaks the use of image_resize_dimensions filter in WP_Image_Editor_GD
* fixed: NextGen bulk optimizer unable to decode meta_data
= 4.6.3 =
* changed: folders to ignore setting applies to resizing also
* fixed: lazy load placeholders have inconsistent URLs with ExactDN
* fixed: bulk resume indicator gets stuck
* fixed: bulk scanning queue gets out of sync and skips images
* fixed: async processing does not handle memory limit specified in G (gigabytes)
= 4.6.2 =
* changed: API key may be defined as EWWW_IMAGE_OPTIMIZER_CLOUD_KEY
* fixed: if img tag is missing dimensions, ExactDN sometimes loads original rather than existing thumbnail
* fixed: TinyPNG/TinyJPG images skipped when Force Re-optimize is checked
= 4.6.1 =
* added: automatic configuration for ExactDN + WP Offload Media
* fixed: bulk action from media library skipping last attachment in selection
* fixed: uninstall function throws fatal error preventing deletion
= 4.6.0 =
* added: preserve animations in GIF images during resize operations for sites using Imagick extension
* changed: EXACTDN_EXCLUDE applies to all resources, including images, CSS, JS, fonts, etc.
* changed: API/ExactDN preserves color profiles, even when removing image metadata
* changed: new queue table for bulk optimizer to avoid exceeding max packet size for MySQL
* changed: unit tests run on PHP 7.3 also
* fixed: too many settings updates when trying to prevent slow queries
* fixed: ExactDN rewrites urls to static HTML files
* fixed: ExactDN skips 1x url in some cases, causing browser upscaling
* fixed: PHP notice when EXACTDN_EXCLUDE is defined
* fixed: race condition in Alt WebP prevents Webp derivatives from replacing the originals
= 4.5.3 =
* fixed: ExactDN duplicates srcset instead of replacing it
* security: remote code execution, low exposure
= 4.5.2 =
* added: automatic migration to move image paths from absolute to relative
* changed: default quality for PNG to JPG did not match WordPress default
* fixed: legacy absolute paths not matched during bulk scanner when relative matching is enabled
* fixed: PNG to JPG auto-convert produces larger JPG images in some cases
= 4.5.1 =
* changed: optimization results are tracked by relative urls instead of absolute ones for better portability, migration tool coming soon
* changed: ExactDN defaults to crop when explicit dimensions are given to image_downsize(), revert to scaling with EXACTDN_IMAGE_DOWNSIZE_SCALE
* fixed: WooCommerce thumbnail regeneration triggers excessive admin-ajax requests within EWWW IO
* fixed: ExactDN filtering REST API media endpoint for Gutenberg editor requests
* fixed: ExactDN adding unneeded resize parameters to full-size image urls
* fixed: Alt WebP skipping images with query strings
* fixed: Alt WebP not working with Jetpack Lazy Load for images missing srcset
* fixed: Show Optimized Images table does not display images saved to ewwwio_images table with relative path matching
* fixed: Show Optimized Images table has broken thumbs when WP_CONTENT_DIR is outside of ABSPATH
= 4.5.0 =
* added: Alt WebP supports BJ Lazy Load, a3 Lazy Load, WP Rocket Lazy Load, Jetpack Lazy Load, and WP Retina Lazy Load
* added: ExactDN rewrites relative image urls that start with a single slash
* changed: ExactDN srcset markup for smaller images improved
* fixed: errors during upload/download with WP Offload Media
* fixed: Alt WebP refuses to process page when FB tracking pixel is present
* fixed: SVG files within <use> tags throw errors with ExactDN
* fixed: thumbnail generation fails with S3 Uploads plugin
* fixed: unable to modify WebP conversion option when ExactDN is enabled
* fixed: ExactDN inserts full-size image without arguments
* removed: PHP 5.5 no longer supported
= 4.4.2 =
* added: notice for Pantheon users that an API key is required
* added: ExactDN fully supports protocol-relative urls for non-image resources
* changed: better lazy load support in ExactDN
* fixed: optimization failure produces rename() errors
* fixed: folder scanner ignores files with no extension
* fixed: Alt WebP blocks on Facebook tracking pixel
* fixed: ExactDN srcset functions cause duplicate image requests with zoom=1
* fixed: ExactDN srcset fill adds double arguments to urls
* fixed: srcset fill generates notices with non-numeric widths
* fixed: bulk scanner stuck in resume mode with nothing to do
= 4.4.1 =
* fixed: ExactDN srcset fill replaces images with first image on page
= 4.4.0 =
* added: preserve animations in GIF images during resize operations
* added: ExactDN will fill in srcset/sizes attributes for all images based on detected width for better mobile support
* added: configuration options in the settings page for several "hidden" ExactDN options
* changed: Alt WebP still depends on jQuery, but jQuery can be loaded in async or defer mode
* changed: Remove Metadata option has been renamed, if you previously had it configured as an override (JPEGTRAN_COPY), please use the new name: EWWW_IMAGE_OPTIMIZER_METADATA_REMOVE
* changed: ExactDN uses premium compression by default
* fixed: regression with ExactDN and max-width style attributes
* fixed: WP esc_url mangles ExactDN urls
* fixed: WebP images missing from S3 when using WP Offload S3
* fixed: PDF uploads with S3 Uploads plugin
* deprecated: PHP 5.5 support will be removed in the next major release (version 4.5)
* removed: PHP 5.4 no longer supported
= 4.3.2 =
* changed: prevent dynamic JS/CSS urls within wp-admin/ from being rewritten by ExactDN
* fixed: auto-convert PNG to JPG was running on images with transparency
* fixed: Alt WebP broken on sites that have jquery-migrate disabled
= 4.3.1 =
* fixed: fatal error on older WP versions due to missing privacy policy function
= 4.3.0 =
* added: Alt WebP enables instant conversion with ExactDN, no need for bulk optimize
* added: links within settings and other notices for contextual help
* added: auto-convert large PNG images to JPG during upload, define EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOCONVERT to skip
* added: use file modification time to add query strings on JS/CSS files for cache invalidation on ExactDN
* added: use EXACTDN_EXCLUDE in wp-config.php to bypass ExactDN for JS, CSS, etc.
* added: NextGEN image urls properly rewritten for ExactDN
* added: NextGEN dynamic thumbs included during manual/bulk optimization
* added: auto-installer for Cloud plugin when running EWWW IO on a "banned" webhost
* added: suggested privacy policy text for users of the API and ExactDN
* added: detect wordpress.com sites and disable exec function and binaries
* changed: resizing uses the primary media dimensions unless the "other" dimensions are configured
* changed: Resize Other Images removed from GUI, configure via Overrides tab
* changed: filter NextGEN quality to prevent oversized thumbs
* changed: allow crop via filter even when one dimension is the same as the original
* changed: auto-rotate function disabled with EWWW_IMAGE_OPTIMIZER_DISABLE_AUTOROTATE
* changed: one-click copy for debug info, and debug collapsed by default in media library and bulk results
* changed: bulk operations for batches of NextGEN images now use the bulk optimizer page instead of loading inline
* fixed: thumbs not generated during WP/LR Sync
* fixed: uploading images in the Gutenberg editor uses the wrong resize dimensions
* fixed: unique filename function producing names with a hyphen and no digits
* fixed: encoded ampersands within the path portion of a url prevent ExactDN parsing
* fixed: entering a decimal for bulk delay does nothing
* fixed: if urls on a localized WPML domain are using the default domain, ExactDN ignores them
* fixed: toggle for plugin status and bulk status generate admin-ajax.php 403 errors
* fixed: PNGOUT installer confirmation notice was missing
* deprecated: PHP 5.4 support will be removed in the next major release (version 4.4)
= 4.2.3 =
* added: skip resizing for images with noresize in the filename
* added: notice about plugins that remove query strings when ExactDN is active
* changed: cache busting for ExactDN uses theme directory modified time with fallback to EWWW IO version
* fixed: exactdn test verification attempts to access WP_Error as an array
= 4.2.2 =
* added: view pages with ExactDN or the entire plugin disabled via GET paramaters: ewwwio_disable and exactdn_disable
* changed: moved to v2 quota endpoint for API
* changed: S3 uploads no longer deferred until after optimization by default, define EWWW_IMAGE_OPTIMIZER_DEFER_S3 as true to override
* changed: image editor extensions can be disabled separately from media library optimization via EWWW_IMAGE_OPTIMIZER_DISABLE_EDITOR
* changed: use exactdn url instead of standard API url for verification simulation and fallback