Version Description
- Enhancement: Improve compatibility for the picture element
- Enhancement: Apply lazyload on background images set on section, span and li elements
- Enhancement: also pass $width and $height values to the rocket_lazyload_placeholder filter
- Bugfix: Use 0 instead of 1 for the default placeholder dimensions to improve compatibility
- Bugfix: Improve infinite scroll support
- Bugfix: Exclude Enfold avia-background-fixed background images and data-large_image from lazyload
Download this release
Release Info
Developer | wp_media |
Plugin | Lazy Load by WP Rocket |
Version | 2.2.3 |
Comparing to | |
See all releases |
Code changes from version 2.2.1 to 2.2.3
- composer.lock +48 -48
- readme.txt +13 -1
- rocket-lazy-load.php +2 -2
- src/Subscriber/LazyloadSubscriber.php +44 -24
- vendor/composer/installed.json +6 -6
- vendor/wp-media/rocket-lazyload-common/src/Assets.php +54 -24
- vendor/wp-media/rocket-lazyload-common/src/Image.php +67 -43
composer.lock
CHANGED
@@ -273,16 +273,16 @@
|
|
273 |
},
|
274 |
{
|
275 |
"name": "wp-media/rocket-lazyload-common",
|
276 |
-
"version": "v2.
|
277 |
"source": {
|
278 |
"type": "git",
|
279 |
"url": "https://github.com/wp-media/rocket-lazyload-common.git",
|
280 |
-
"reference": "
|
281 |
},
|
282 |
"dist": {
|
283 |
"type": "zip",
|
284 |
-
"url": "https://api.github.com/repos/wp-media/rocket-lazyload-common/zipball/
|
285 |
-
"reference": "
|
286 |
"shasum": ""
|
287 |
},
|
288 |
"require": {
|
@@ -317,7 +317,7 @@
|
|
317 |
}
|
318 |
],
|
319 |
"description": "Common Code between WP Rocket and Lazyload by WP Rocket",
|
320 |
-
"time": "2019-
|
321 |
}
|
322 |
],
|
323 |
"packages-dev": [
|
@@ -364,16 +364,16 @@
|
|
364 |
},
|
365 |
{
|
366 |
"name": "brain/monkey",
|
367 |
-
"version": "
|
368 |
"source": {
|
369 |
"type": "git",
|
370 |
"url": "https://github.com/Brain-WP/BrainMonkey.git",
|
371 |
-
"reference": "
|
372 |
},
|
373 |
"dist": {
|
374 |
"type": "zip",
|
375 |
-
"url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/
|
376 |
-
"reference": "
|
377 |
"shasum": ""
|
378 |
},
|
379 |
"require": {
|
@@ -406,9 +406,9 @@
|
|
406 |
"authors": [
|
407 |
{
|
408 |
"name": "Giuseppe Mazzapica",
|
|
|
409 |
"email": "giuseppe.mazzapica@gmail.com",
|
410 |
-
"homepage": "https://gmazzap.me"
|
411 |
-
"role": "Developer"
|
412 |
}
|
413 |
],
|
414 |
"description": "Mocking utility for PHP functions and WordPress plugin API",
|
@@ -424,7 +424,7 @@
|
|
424 |
"test",
|
425 |
"testing"
|
426 |
],
|
427 |
-
"time": "2019-
|
428 |
},
|
429 |
{
|
430 |
"name": "dealerdirect/phpcodesniffer-composer-installer",
|
@@ -711,16 +711,16 @@
|
|
711 |
},
|
712 |
{
|
713 |
"name": "phpcompatibility/php-compatibility",
|
714 |
-
"version": "9.
|
715 |
"source": {
|
716 |
"type": "git",
|
717 |
"url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
|
718 |
-
"reference": "
|
719 |
},
|
720 |
"dist": {
|
721 |
"type": "zip",
|
722 |
-
"url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/
|
723 |
-
"reference": "
|
724 |
"shasum": ""
|
725 |
},
|
726 |
"require": {
|
@@ -734,7 +734,7 @@
|
|
734 |
"phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
|
735 |
},
|
736 |
"suggest": {
|
737 |
-
"dealerdirect/phpcodesniffer-composer-installer": "^0.
|
738 |
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
|
739 |
},
|
740 |
"type": "phpcodesniffer-standard",
|
@@ -749,13 +749,13 @@
|
|
749 |
},
|
750 |
{
|
751 |
"name": "Wim Godden",
|
752 |
-
"
|
753 |
-
"
|
754 |
},
|
755 |
{
|
756 |
"name": "Juliette Reinders Folmer",
|
757 |
-
"
|
758 |
-
"
|
759 |
}
|
760 |
],
|
761 |
"description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
|
@@ -765,7 +765,7 @@
|
|
765 |
"phpcs",
|
766 |
"standards"
|
767 |
],
|
768 |
-
"time": "
|
769 |
},
|
770 |
{
|
771 |
"name": "phpcompatibility/phpcompatibility-paragonie",
|
@@ -923,16 +923,16 @@
|
|
923 |
},
|
924 |
{
|
925 |
"name": "phpdocumentor/reflection-docblock",
|
926 |
-
"version": "4.3.
|
927 |
"source": {
|
928 |
"type": "git",
|
929 |
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
930 |
-
"reference": "
|
931 |
},
|
932 |
"dist": {
|
933 |
"type": "zip",
|
934 |
-
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/
|
935 |
-
"reference": "
|
936 |
"shasum": ""
|
937 |
},
|
938 |
"require": {
|
@@ -970,7 +970,7 @@
|
|
970 |
}
|
971 |
],
|
972 |
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
973 |
-
"time": "
|
974 |
},
|
975 |
{
|
976 |
"name": "phpdocumentor/type-resolver",
|
@@ -1021,16 +1021,16 @@
|
|
1021 |
},
|
1022 |
{
|
1023 |
"name": "phpspec/prophecy",
|
1024 |
-
"version": "1.8.
|
1025 |
"source": {
|
1026 |
"type": "git",
|
1027 |
"url": "https://github.com/phpspec/prophecy.git",
|
1028 |
-
"reference": "
|
1029 |
},
|
1030 |
"dist": {
|
1031 |
"type": "zip",
|
1032 |
-
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/
|
1033 |
-
"reference": "
|
1034 |
"shasum": ""
|
1035 |
},
|
1036 |
"require": {
|
@@ -1051,8 +1051,8 @@
|
|
1051 |
}
|
1052 |
},
|
1053 |
"autoload": {
|
1054 |
-
"psr-
|
1055 |
-
"Prophecy\\": "src/"
|
1056 |
}
|
1057 |
},
|
1058 |
"notification-url": "https://packagist.org/downloads/",
|
@@ -1080,7 +1080,7 @@
|
|
1080 |
"spy",
|
1081 |
"stub"
|
1082 |
],
|
1083 |
-
"time": "
|
1084 |
},
|
1085 |
{
|
1086 |
"name": "phpunit/php-code-coverage",
|
@@ -1400,8 +1400,8 @@
|
|
1400 |
"authors": [
|
1401 |
{
|
1402 |
"name": "Sebastian Bergmann",
|
1403 |
-
"
|
1404 |
-
"
|
1405 |
}
|
1406 |
],
|
1407 |
"description": "The PHP Unit Testing framework.",
|
@@ -2097,16 +2097,16 @@
|
|
2097 |
},
|
2098 |
{
|
2099 |
"name": "symfony/yaml",
|
2100 |
-
"version": "v4.2
|
2101 |
"source": {
|
2102 |
"type": "git",
|
2103 |
"url": "https://github.com/symfony/yaml.git",
|
2104 |
-
"reference": "
|
2105 |
},
|
2106 |
"dist": {
|
2107 |
"type": "zip",
|
2108 |
-
"url": "https://api.github.com/repos/symfony/yaml/zipball/
|
2109 |
-
"reference": "
|
2110 |
"shasum": ""
|
2111 |
},
|
2112 |
"require": {
|
@@ -2125,7 +2125,7 @@
|
|
2125 |
"type": "library",
|
2126 |
"extra": {
|
2127 |
"branch-alias": {
|
2128 |
-
"dev-master": "4.
|
2129 |
}
|
2130 |
},
|
2131 |
"autoload": {
|
@@ -2152,7 +2152,7 @@
|
|
2152 |
],
|
2153 |
"description": "Symfony Yaml Component",
|
2154 |
"homepage": "https://symfony.com",
|
2155 |
-
"time": "2019-
|
2156 |
},
|
2157 |
{
|
2158 |
"name": "webmozart/assert",
|
@@ -2207,16 +2207,16 @@
|
|
2207 |
},
|
2208 |
{
|
2209 |
"name": "wp-coding-standards/wpcs",
|
2210 |
-
"version": "2.1.
|
2211 |
"source": {
|
2212 |
"type": "git",
|
2213 |
-
"url": "https://github.com/WordPress
|
2214 |
-
"reference": "
|
2215 |
},
|
2216 |
"dist": {
|
2217 |
"type": "zip",
|
2218 |
-
"url": "https://api.github.com/repos/WordPress
|
2219 |
-
"reference": "
|
2220 |
"shasum": ""
|
2221 |
},
|
2222 |
"require": {
|
@@ -2248,7 +2248,7 @@
|
|
2248 |
"standards",
|
2249 |
"wordpress"
|
2250 |
],
|
2251 |
-
"time": "2019-
|
2252 |
}
|
2253 |
],
|
2254 |
"aliases": [],
|
273 |
},
|
274 |
{
|
275 |
"name": "wp-media/rocket-lazyload-common",
|
276 |
+
"version": "v2.4",
|
277 |
"source": {
|
278 |
"type": "git",
|
279 |
"url": "https://github.com/wp-media/rocket-lazyload-common.git",
|
280 |
+
"reference": "fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf"
|
281 |
},
|
282 |
"dist": {
|
283 |
"type": "zip",
|
284 |
+
"url": "https://api.github.com/repos/wp-media/rocket-lazyload-common/zipball/fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf",
|
285 |
+
"reference": "fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf",
|
286 |
"shasum": ""
|
287 |
},
|
288 |
"require": {
|
317 |
}
|
318 |
],
|
319 |
"description": "Common Code between WP Rocket and Lazyload by WP Rocket",
|
320 |
+
"time": "2019-07-08T16:41:10+00:00"
|
321 |
}
|
322 |
],
|
323 |
"packages-dev": [
|
364 |
},
|
365 |
{
|
366 |
"name": "brain/monkey",
|
367 |
+
"version": "v2.3.0",
|
368 |
"source": {
|
369 |
"type": "git",
|
370 |
"url": "https://github.com/Brain-WP/BrainMonkey.git",
|
371 |
+
"reference": "e19ad8f13c31c51507dcad10f186552907384471"
|
372 |
},
|
373 |
"dist": {
|
374 |
"type": "zip",
|
375 |
+
"url": "https://api.github.com/repos/Brain-WP/BrainMonkey/zipball/e19ad8f13c31c51507dcad10f186552907384471",
|
376 |
+
"reference": "e19ad8f13c31c51507dcad10f186552907384471",
|
377 |
"shasum": ""
|
378 |
},
|
379 |
"require": {
|
406 |
"authors": [
|
407 |
{
|
408 |
"name": "Giuseppe Mazzapica",
|
409 |
+
"role": "Developer",
|
410 |
"email": "giuseppe.mazzapica@gmail.com",
|
411 |
+
"homepage": "https://gmazzap.me"
|
|
|
412 |
}
|
413 |
],
|
414 |
"description": "Mocking utility for PHP functions and WordPress plugin API",
|
424 |
"test",
|
425 |
"testing"
|
426 |
],
|
427 |
+
"time": "2019-07-22T16:10:56+00:00"
|
428 |
},
|
429 |
{
|
430 |
"name": "dealerdirect/phpcodesniffer-composer-installer",
|
711 |
},
|
712 |
{
|
713 |
"name": "phpcompatibility/php-compatibility",
|
714 |
+
"version": "9.2.0",
|
715 |
"source": {
|
716 |
"type": "git",
|
717 |
"url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
|
718 |
+
"reference": "3db1bf1e28123fd574a4ae2e9a84072826d51b5e"
|
719 |
},
|
720 |
"dist": {
|
721 |
"type": "zip",
|
722 |
+
"url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/3db1bf1e28123fd574a4ae2e9a84072826d51b5e",
|
723 |
+
"reference": "3db1bf1e28123fd574a4ae2e9a84072826d51b5e",
|
724 |
"shasum": ""
|
725 |
},
|
726 |
"require": {
|
734 |
"phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
|
735 |
},
|
736 |
"suggest": {
|
737 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
|
738 |
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
|
739 |
},
|
740 |
"type": "phpcodesniffer-standard",
|
749 |
},
|
750 |
{
|
751 |
"name": "Wim Godden",
|
752 |
+
"role": "lead",
|
753 |
+
"homepage": "https://github.com/wimg"
|
754 |
},
|
755 |
{
|
756 |
"name": "Juliette Reinders Folmer",
|
757 |
+
"role": "lead",
|
758 |
+
"homepage": "https://github.com/jrfnl"
|
759 |
}
|
760 |
],
|
761 |
"description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
|
765 |
"phpcs",
|
766 |
"standards"
|
767 |
],
|
768 |
+
"time": "2019-06-27T19:58:56+00:00"
|
769 |
},
|
770 |
{
|
771 |
"name": "phpcompatibility/phpcompatibility-paragonie",
|
923 |
},
|
924 |
{
|
925 |
"name": "phpdocumentor/reflection-docblock",
|
926 |
+
"version": "4.3.1",
|
927 |
"source": {
|
928 |
"type": "git",
|
929 |
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
930 |
+
"reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c"
|
931 |
},
|
932 |
"dist": {
|
933 |
"type": "zip",
|
934 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
|
935 |
+
"reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
|
936 |
"shasum": ""
|
937 |
},
|
938 |
"require": {
|
970 |
}
|
971 |
],
|
972 |
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
973 |
+
"time": "2019-04-30T17:48:53+00:00"
|
974 |
},
|
975 |
{
|
976 |
"name": "phpdocumentor/type-resolver",
|
1021 |
},
|
1022 |
{
|
1023 |
"name": "phpspec/prophecy",
|
1024 |
+
"version": "1.8.1",
|
1025 |
"source": {
|
1026 |
"type": "git",
|
1027 |
"url": "https://github.com/phpspec/prophecy.git",
|
1028 |
+
"reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76"
|
1029 |
},
|
1030 |
"dist": {
|
1031 |
"type": "zip",
|
1032 |
+
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
|
1033 |
+
"reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
|
1034 |
"shasum": ""
|
1035 |
},
|
1036 |
"require": {
|
1051 |
}
|
1052 |
},
|
1053 |
"autoload": {
|
1054 |
+
"psr-4": {
|
1055 |
+
"Prophecy\\": "src/Prophecy"
|
1056 |
}
|
1057 |
},
|
1058 |
"notification-url": "https://packagist.org/downloads/",
|
1080 |
"spy",
|
1081 |
"stub"
|
1082 |
],
|
1083 |
+
"time": "2019-06-13T12:50:23+00:00"
|
1084 |
},
|
1085 |
{
|
1086 |
"name": "phpunit/php-code-coverage",
|
1400 |
"authors": [
|
1401 |
{
|
1402 |
"name": "Sebastian Bergmann",
|
1403 |
+
"role": "lead",
|
1404 |
+
"email": "sebastian@phpunit.de"
|
1405 |
}
|
1406 |
],
|
1407 |
"description": "The PHP Unit Testing framework.",
|
2097 |
},
|
2098 |
{
|
2099 |
"name": "symfony/yaml",
|
2100 |
+
"version": "v4.3.2",
|
2101 |
"source": {
|
2102 |
"type": "git",
|
2103 |
"url": "https://github.com/symfony/yaml.git",
|
2104 |
+
"reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99"
|
2105 |
},
|
2106 |
"dist": {
|
2107 |
"type": "zip",
|
2108 |
+
"url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99",
|
2109 |
+
"reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99",
|
2110 |
"shasum": ""
|
2111 |
},
|
2112 |
"require": {
|
2125 |
"type": "library",
|
2126 |
"extra": {
|
2127 |
"branch-alias": {
|
2128 |
+
"dev-master": "4.3-dev"
|
2129 |
}
|
2130 |
},
|
2131 |
"autoload": {
|
2152 |
],
|
2153 |
"description": "Symfony Yaml Component",
|
2154 |
"homepage": "https://symfony.com",
|
2155 |
+
"time": "2019-04-06T14:04:46+00:00"
|
2156 |
},
|
2157 |
{
|
2158 |
"name": "webmozart/assert",
|
2207 |
},
|
2208 |
{
|
2209 |
"name": "wp-coding-standards/wpcs",
|
2210 |
+
"version": "2.1.1",
|
2211 |
"source": {
|
2212 |
"type": "git",
|
2213 |
+
"url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
|
2214 |
+
"reference": "bd9c33152115e6741e3510ff7189605b35167908"
|
2215 |
},
|
2216 |
"dist": {
|
2217 |
"type": "zip",
|
2218 |
+
"url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/bd9c33152115e6741e3510ff7189605b35167908",
|
2219 |
+
"reference": "bd9c33152115e6741e3510ff7189605b35167908",
|
2220 |
"shasum": ""
|
2221 |
},
|
2222 |
"require": {
|
2248 |
"standards",
|
2249 |
"wordpress"
|
2250 |
],
|
2251 |
+
"time": "2019-05-21T02:50:00+00:00"
|
2252 |
}
|
2253 |
],
|
2254 |
"aliases": [],
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Tags: lazyload, lazy load, images, iframes, thumbnail, thumbnails, smiley, smili
|
|
4 |
Requires at least: 4.7
|
5 |
Tested up to: 5.2
|
6 |
Requires PHP: 5.6
|
7 |
-
Stable tag: 2.2.
|
8 |
|
9 |
Lazy Load your images and iframes, replace Youtube videos by a preview thumbnail.
|
10 |
|
@@ -85,6 +85,18 @@ You can also apply it manually. The element you want to apply lazyload on must h
|
|
85 |
The element must have the class `rocket-lazyload`, and a `data-bg` attribute, which value is the CSS url for the image.
|
86 |
|
87 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
= 2.2.1 =
|
89 |
* Enhancement: add a way to customize the lazyload script options
|
90 |
* Bugfix: Prevent error on Internet Explorer 11
|
4 |
Requires at least: 4.7
|
5 |
Tested up to: 5.2
|
6 |
Requires PHP: 5.6
|
7 |
+
Stable tag: 2.2.3
|
8 |
|
9 |
Lazy Load your images and iframes, replace Youtube videos by a preview thumbnail.
|
10 |
|
85 |
The element must have the class `rocket-lazyload`, and a `data-bg` attribute, which value is the CSS url for the image.
|
86 |
|
87 |
== Changelog ==
|
88 |
+
= 2.2.3 =
|
89 |
+
* Enhancement: Improve compatibility for the picture element
|
90 |
+
* Enhancement: Apply lazyload on background images set on section, span and li elements
|
91 |
+
* Enhancement: also pass $width and $height values to the rocket_lazyload_placeholder filter
|
92 |
+
* Bugfix: Use 0 instead of 1 for the default placeholder dimensions to improve compatibility
|
93 |
+
* Bugfix: Improve infinite scroll support
|
94 |
+
* Bugfix: Exclude Enfold avia-background-fixed background images and data-large_image from lazyload
|
95 |
+
|
96 |
+
= 2.2.2 =
|
97 |
+
* Bugfix: Auto-exclude data-height-percentage attribute to prevent display issues
|
98 |
+
* Bugfix: Correctly handle responsive videos using fitVids again
|
99 |
+
|
100 |
= 2.2.1 =
|
101 |
* Enhancement: add a way to customize the lazyload script options
|
102 |
* Bugfix: Prevent error on Internet Explorer 11
|
rocket-lazy-load.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Lazy Load by WP Rocket
|
4 |
* Plugin URI: http://wordpress.org/plugins/rocket-lazy-load/
|
5 |
* Description: The tiny Lazy Load script for WordPress without jQuery or others libraries.
|
6 |
-
* Version: 2.2.
|
7 |
* Author: WP Rocket
|
8 |
* Author URI: https://wp-rocket.me
|
9 |
* Text Domain: rocket-lazy-load
|
@@ -29,7 +29,7 @@
|
|
29 |
|
30 |
defined('ABSPATH') || die('Cheatin\' uh?');
|
31 |
|
32 |
-
define('ROCKET_LL_VERSION', '2.2.
|
33 |
define('ROCKET_LL_WP_VERSION', '4.7');
|
34 |
define('ROCKET_LL_PHP_VERSION', '5.6');
|
35 |
define('ROCKET_LL_BASENAME', plugin_basename(__FILE__));
|
3 |
* Plugin Name: Lazy Load by WP Rocket
|
4 |
* Plugin URI: http://wordpress.org/plugins/rocket-lazy-load/
|
5 |
* Description: The tiny Lazy Load script for WordPress without jQuery or others libraries.
|
6 |
+
* Version: 2.2.3
|
7 |
* Author: WP Rocket
|
8 |
* Author URI: https://wp-rocket.me
|
9 |
* Text Domain: rocket-lazy-load
|
29 |
|
30 |
defined('ABSPATH') || die('Cheatin\' uh?');
|
31 |
|
32 |
+
define('ROCKET_LL_VERSION', '2.2.3');
|
33 |
define('ROCKET_LL_WP_VERSION', '4.7');
|
34 |
define('ROCKET_LL_PHP_VERSION', '5.6');
|
35 |
define('ROCKET_LL_BASENAME', plugin_basename(__FILE__));
|
src/Subscriber/LazyloadSubscriber.php
CHANGED
@@ -7,8 +7,6 @@
|
|
7 |
|
8 |
namespace RocketLazyLoadPlugin\Subscriber;
|
9 |
|
10 |
-
defined('ABSPATH') || die('Cheatin\' uh?');
|
11 |
-
|
12 |
use RocketLazyLoadPlugin\EventManagement\SubscriberInterface;
|
13 |
use RocketLazyLoadPlugin\Options\OptionArray;
|
14 |
use RocketLazyload\Assets;
|
@@ -138,20 +136,23 @@ class LazyloadSubscriber implements SubscriberInterface
|
|
138 |
*/
|
139 |
$polyfill = apply_filters('rocket_lazyload_polyfill', false);
|
140 |
|
141 |
-
$
|
142 |
-
'base_url'
|
|
|
|
|
|
|
|
|
|
|
143 |
'threshold' => $threshold,
|
144 |
-
'version' => '11.0.6',
|
145 |
-
'polyfill' => $polyfill,
|
146 |
];
|
147 |
|
148 |
if ($this->option_array->get('images')) {
|
149 |
-
$
|
150 |
-
$
|
151 |
}
|
152 |
|
153 |
if ($this->option_array->get('iframes')) {
|
154 |
-
$
|
155 |
}
|
156 |
|
157 |
/**
|
@@ -160,11 +161,12 @@ class LazyloadSubscriber implements SubscriberInterface
|
|
160 |
* @since 2.0
|
161 |
* @author Remy Perona
|
162 |
*
|
163 |
-
* @param array $
|
164 |
*/
|
165 |
-
$
|
166 |
|
167 |
-
$this->assets->
|
|
|
168 |
}
|
169 |
|
170 |
/**
|
@@ -240,7 +242,8 @@ class LazyloadSubscriber implements SubscriberInterface
|
|
240 |
|
241 |
$this->assets->insertYoutubeThumbnailCSS(
|
242 |
[
|
243 |
-
'base_url'
|
|
|
244 |
]
|
245 |
);
|
246 |
}
|
@@ -259,17 +262,8 @@ class LazyloadSubscriber implements SubscriberInterface
|
|
259 |
return false;
|
260 |
}
|
261 |
|
262 |
-
|
263 |
-
|
264 |
-
'fl_builder',
|
265 |
-
'et_fb',
|
266 |
-
'ct_builder',
|
267 |
-
];
|
268 |
-
|
269 |
-
foreach ($excluded_parameters as $excluded) {
|
270 |
-
if (isset($_GET[ $excluded ])) {
|
271 |
-
return false;
|
272 |
-
}
|
273 |
}
|
274 |
|
275 |
/**
|
@@ -287,6 +281,32 @@ class LazyloadSubscriber implements SubscriberInterface
|
|
287 |
return true;
|
288 |
}
|
289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
/**
|
291 |
* Gets the content to lazyload
|
292 |
*
|
7 |
|
8 |
namespace RocketLazyLoadPlugin\Subscriber;
|
9 |
|
|
|
|
|
10 |
use RocketLazyLoadPlugin\EventManagement\SubscriberInterface;
|
11 |
use RocketLazyLoadPlugin\Options\OptionArray;
|
12 |
use RocketLazyload\Assets;
|
136 |
*/
|
137 |
$polyfill = apply_filters('rocket_lazyload_polyfill', false);
|
138 |
|
139 |
+
$script_args = [
|
140 |
+
'base_url' => ROCKET_LL_FRONT_JS_URL,
|
141 |
+
'version' => '11.0.6',
|
142 |
+
'polyfill' => $polyfill,
|
143 |
+
];
|
144 |
+
|
145 |
+
$inline_args = [
|
146 |
'threshold' => $threshold,
|
|
|
|
|
147 |
];
|
148 |
|
149 |
if ($this->option_array->get('images')) {
|
150 |
+
$inline_args['elements']['image'] = 'img[data-lazy-src]';
|
151 |
+
$inline_args['elements']['background_image'] = '.rocket-lazyload';
|
152 |
}
|
153 |
|
154 |
if ($this->option_array->get('iframes')) {
|
155 |
+
$inline_args['elements']['iframe'] = 'iframe[data-lazy-src]';
|
156 |
}
|
157 |
|
158 |
/**
|
161 |
* @since 2.0
|
162 |
* @author Remy Perona
|
163 |
*
|
164 |
+
* @param array $inline_args Arguments used for the lazyload script options.
|
165 |
*/
|
166 |
+
$inline_args = apply_filters('rocket_lazyload_script_args', $inline_args);
|
167 |
|
168 |
+
echo '<script>' . $this->assets->getInlineLazyloadScript($inline_args) . '</script>';
|
169 |
+
$this->assets->insertLazyloadScript($script_args);
|
170 |
}
|
171 |
|
172 |
/**
|
242 |
|
243 |
$this->assets->insertYoutubeThumbnailCSS(
|
244 |
[
|
245 |
+
'base_url' => ROCKET_LL_ASSETS_URL,
|
246 |
+
'responsive_embeds' => current_theme_supports('responsive-embeds'),
|
247 |
]
|
248 |
);
|
249 |
}
|
262 |
return false;
|
263 |
}
|
264 |
|
265 |
+
if ($this->isPageBuilder()) {
|
266 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
}
|
268 |
|
269 |
/**
|
281 |
return true;
|
282 |
}
|
283 |
|
284 |
+
/**
|
285 |
+
* Checks if current page is a page builder editor.
|
286 |
+
*
|
287 |
+
* @since 2.2.2
|
288 |
+
* @author Remy Perona
|
289 |
+
*
|
290 |
+
* @return bool
|
291 |
+
*/
|
292 |
+
private function isPageBuilder()
|
293 |
+
{
|
294 |
+
// Exclude Page Builders editors.
|
295 |
+
$excluded_parameters = [
|
296 |
+
'fl_builder',
|
297 |
+
'et_fb',
|
298 |
+
'ct_builder',
|
299 |
+
];
|
300 |
+
|
301 |
+
foreach ($excluded_parameters as $excluded) {
|
302 |
+
if (isset($_GET[ $excluded ])) {
|
303 |
+
return true;
|
304 |
+
}
|
305 |
+
}
|
306 |
+
|
307 |
+
return false;
|
308 |
+
}
|
309 |
+
|
310 |
/**
|
311 |
* Gets the content to lazyload
|
312 |
*
|
vendor/composer/installed.json
CHANGED
@@ -274,17 +274,17 @@
|
|
274 |
},
|
275 |
{
|
276 |
"name": "wp-media/rocket-lazyload-common",
|
277 |
-
"version": "v2.
|
278 |
-
"version_normalized": "2.
|
279 |
"source": {
|
280 |
"type": "git",
|
281 |
"url": "https://github.com/wp-media/rocket-lazyload-common.git",
|
282 |
-
"reference": "
|
283 |
},
|
284 |
"dist": {
|
285 |
"type": "zip",
|
286 |
-
"url": "https://api.github.com/repos/wp-media/rocket-lazyload-common/zipball/
|
287 |
-
"reference": "
|
288 |
"shasum": ""
|
289 |
},
|
290 |
"require": {
|
@@ -302,7 +302,7 @@
|
|
302 |
"symfony/yaml": "2.8.*",
|
303 |
"wp-coding-standards/wpcs": "^2.0.0"
|
304 |
},
|
305 |
-
"time": "2019-
|
306 |
"type": "library",
|
307 |
"installation-source": "dist",
|
308 |
"autoload": {
|
274 |
},
|
275 |
{
|
276 |
"name": "wp-media/rocket-lazyload-common",
|
277 |
+
"version": "v2.4",
|
278 |
+
"version_normalized": "2.4.0.0",
|
279 |
"source": {
|
280 |
"type": "git",
|
281 |
"url": "https://github.com/wp-media/rocket-lazyload-common.git",
|
282 |
+
"reference": "fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf"
|
283 |
},
|
284 |
"dist": {
|
285 |
"type": "zip",
|
286 |
+
"url": "https://api.github.com/repos/wp-media/rocket-lazyload-common/zipball/fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf",
|
287 |
+
"reference": "fcebb3db1687ce4f88854c6fbc67a36e8ae9e2bf",
|
288 |
"shasum": ""
|
289 |
},
|
290 |
"require": {
|
302 |
"symfony/yaml": "2.8.*",
|
303 |
"wp-coding-standards/wpcs": "^2.0.0"
|
304 |
},
|
305 |
+
"time": "2019-07-08T16:41:10+00:00",
|
306 |
"type": "library",
|
307 |
"installation-source": "dist",
|
308 |
"autoload": {
|
vendor/wp-media/rocket-lazyload-common/src/Assets.php
CHANGED
@@ -15,7 +15,7 @@ class Assets
|
|
15 |
/**
|
16 |
* Inserts the lazyload script in the HTML
|
17 |
*
|
18 |
-
* @param array $args Array of arguments to populate the lazyload script
|
19 |
* @return void
|
20 |
*/
|
21 |
public function insertLazyloadScript($args = [])
|
@@ -24,22 +24,19 @@ class Assets
|
|
24 |
}
|
25 |
|
26 |
/**
|
27 |
-
*
|
28 |
*
|
29 |
* @param array $args Array of arguments to populate the lazyload script options.
|
30 |
-
* @return
|
31 |
*/
|
32 |
-
public function
|
33 |
{
|
34 |
$defaults = [
|
35 |
-
'base_url' => '',
|
36 |
'elements' => [
|
37 |
'img',
|
38 |
'iframe',
|
39 |
],
|
40 |
'threshold' => 300,
|
41 |
-
'version' => '',
|
42 |
-
'polyfill' => false,
|
43 |
'options' => [],
|
44 |
];
|
45 |
|
@@ -59,26 +56,19 @@ class Assets
|
|
59 |
];
|
60 |
|
61 |
$args = wp_parse_args($args, $defaults);
|
62 |
-
$min = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '' : '.min';
|
63 |
$script = '';
|
64 |
|
65 |
$args['options'] = array_intersect_key($args['options'], $allowed_options);
|
66 |
|
67 |
-
|
68 |
-
$script .= '<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?flags=gated&features=default%2CIntersectionObserver%2CIntersectionObserverEntry"></script>';
|
69 |
-
}
|
70 |
-
|
71 |
-
$script .= '<script>
|
72 |
-
window.lazyLoadOptions = {
|
73 |
elements_selector: "' . esc_attr(implode(',', $args['elements'])) . '",
|
74 |
data_src: "lazy-src",
|
75 |
data_srcset: "lazy-srcset",
|
76 |
data_sizes: "lazy-sizes",
|
77 |
-
skip_invisible: false,
|
78 |
class_loading: "lazyloading",
|
79 |
class_loaded: "lazyloaded",
|
80 |
threshold: ' . esc_attr($args['threshold']) . ',
|
81 |
-
|
82 |
if ( element.tagName === "IFRAME" && element.dataset.rocketLazyload == "fitvidscompatible" ) {
|
83 |
if (element.classList.contains("lazyloaded") ) {
|
84 |
if (typeof window.jQuery != "undefined") {
|
@@ -108,6 +98,10 @@ class Assets
|
|
108 |
|
109 |
if (window.MutationObserver) {
|
110 |
var observer = new MutationObserver(function(mutations) {
|
|
|
|
|
|
|
|
|
111 |
mutations.forEach(function(mutation) {
|
112 |
for (i = 0; i < mutation.addedNodes.length; i++) {
|
113 |
if (typeof mutation.addedNodes[i].getElementsByTagName !== \'function\') {
|
@@ -118,17 +112,29 @@ class Assets
|
|
118 |
return;
|
119 |
}
|
120 |
|
121 |
-
|
|
|
122 |
iframes = mutation.addedNodes[i].getElementsByTagName(\'iframe\');
|
|
|
123 |
rocket_lazy = mutation.addedNodes[i].getElementsByClassName(\'rocket-lazyload\');
|
124 |
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
-
|
|
|
|
|
130 |
}
|
131 |
} );
|
|
|
|
|
|
|
|
|
132 |
} );
|
133 |
|
134 |
var b = document.getElementsByTagName("body")[0];
|
@@ -136,8 +142,32 @@ class Assets
|
|
136 |
|
137 |
observer.observe(b, config);
|
138 |
}
|
139 |
-
}, false);
|
140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
|
142 |
/**
|
143 |
* Filters the script tag for the lazyload script
|
@@ -203,10 +233,10 @@ class Assets
|
|
203 |
|
204 |
$args = wp_parse_args($args, $defaults);
|
205 |
|
206 |
-
$image = '<img src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '">';
|
207 |
|
208 |
if (isset($args['lazy_image']) && $args['lazy_image']) {
|
209 |
-
$image = '<img data-lazy-src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '"><noscript><img src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '"></noscript>';
|
210 |
}
|
211 |
|
212 |
return "<script>function lazyLoadThumb(e){var t='{$image}',a='<div class=\"play\"></div>';return t.replace(\"ID\",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement(\"iframe\"),t=\"https://www.youtube.com/embed/ID?autoplay=1\";t+=0===this.dataset.query.length?'':'&'+this.dataset.query;e.setAttribute(\"src\",t.replace(\"ID\",this.dataset.id)),e.setAttribute(\"frameborder\",\"0\"),e.setAttribute(\"allowfullscreen\",\"1\"),this.parentNode.replaceChild(e,this)}document.addEventListener(\"DOMContentLoaded\",function(){var e,t,a=document.getElementsByClassName(\"rll-youtube-player\");for(t=0;t<a.length;t++)e=document.createElement(\"div\"),e.setAttribute(\"data-id\",a[t].dataset.id),e.setAttribute(\"data-query\", a[t].dataset.query),e.innerHTML=lazyLoadThumb(a[t].dataset.id),e.onclick=lazyLoadYoutubeIframe,a[t].appendChild(e)});</script>";
|
15 |
/**
|
16 |
* Inserts the lazyload script in the HTML
|
17 |
*
|
18 |
+
* @param array $args Array of arguments to populate the lazyload script tag.
|
19 |
* @return void
|
20 |
*/
|
21 |
public function insertLazyloadScript($args = [])
|
24 |
}
|
25 |
|
26 |
/**
|
27 |
+
* Gets the inline lazyload script configuration
|
28 |
*
|
29 |
* @param array $args Array of arguments to populate the lazyload script options.
|
30 |
+
* @return void
|
31 |
*/
|
32 |
+
public function getInlineLazyloadScript($args = [])
|
33 |
{
|
34 |
$defaults = [
|
|
|
35 |
'elements' => [
|
36 |
'img',
|
37 |
'iframe',
|
38 |
],
|
39 |
'threshold' => 300,
|
|
|
|
|
40 |
'options' => [],
|
41 |
];
|
42 |
|
56 |
];
|
57 |
|
58 |
$args = wp_parse_args($args, $defaults);
|
|
|
59 |
$script = '';
|
60 |
|
61 |
$args['options'] = array_intersect_key($args['options'], $allowed_options);
|
62 |
|
63 |
+
$script .= 'window.lazyLoadOptions = {
|
|
|
|
|
|
|
|
|
|
|
64 |
elements_selector: "' . esc_attr(implode(',', $args['elements'])) . '",
|
65 |
data_src: "lazy-src",
|
66 |
data_srcset: "lazy-srcset",
|
67 |
data_sizes: "lazy-sizes",
|
|
|
68 |
class_loading: "lazyloading",
|
69 |
class_loaded: "lazyloaded",
|
70 |
threshold: ' . esc_attr($args['threshold']) . ',
|
71 |
+
callback_loaded: function(element) {
|
72 |
if ( element.tagName === "IFRAME" && element.dataset.rocketLazyload == "fitvidscompatible" ) {
|
73 |
if (element.classList.contains("lazyloaded") ) {
|
74 |
if (typeof window.jQuery != "undefined") {
|
98 |
|
99 |
if (window.MutationObserver) {
|
100 |
var observer = new MutationObserver(function(mutations) {
|
101 |
+
var image_count = 0;
|
102 |
+
var iframe_count = 0;
|
103 |
+
var rocketlazy_count = 0;
|
104 |
+
|
105 |
mutations.forEach(function(mutation) {
|
106 |
for (i = 0; i < mutation.addedNodes.length; i++) {
|
107 |
if (typeof mutation.addedNodes[i].getElementsByTagName !== \'function\') {
|
112 |
return;
|
113 |
}
|
114 |
|
115 |
+
images = mutation.addedNodes[i].getElementsByTagName(\'img\');
|
116 |
+
is_image = mutation.addedNodes[i].tagName == "IMG";
|
117 |
iframes = mutation.addedNodes[i].getElementsByTagName(\'iframe\');
|
118 |
+
is_iframe = mutation.addedNodes[i].tagName == "IFRAME";
|
119 |
rocket_lazy = mutation.addedNodes[i].getElementsByClassName(\'rocket-lazyload\');
|
120 |
|
121 |
+
image_count += images.length;
|
122 |
+
iframe_count += iframes.length;
|
123 |
+
rocketlazy_count += rocket_lazy.length;
|
124 |
+
|
125 |
+
if(is_image){
|
126 |
+
image_count += 1;
|
127 |
}
|
128 |
|
129 |
+
if(is_iframe){
|
130 |
+
iframe_count += 1;
|
131 |
+
}
|
132 |
}
|
133 |
} );
|
134 |
+
|
135 |
+
if(image_count > 0 || iframe_count > 0 || rocketlazy_count > 0){
|
136 |
+
lazyLoadInstance.update();
|
137 |
+
}
|
138 |
} );
|
139 |
|
140 |
var b = document.getElementsByTagName("body")[0];
|
142 |
|
143 |
observer.observe(b, config);
|
144 |
}
|
145 |
+
}, false);';
|
146 |
+
|
147 |
+
return $script;
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Returns the lazyload inline script
|
152 |
+
*
|
153 |
+
* @param array $args Array of arguments to populate the lazyload script options.
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
public function getLazyloadScript($args = [])
|
157 |
+
{
|
158 |
+
$defaults = [
|
159 |
+
'base_url' => '',
|
160 |
+
'version' => '',
|
161 |
+
'polyfill' => false,
|
162 |
+
];
|
163 |
+
|
164 |
+
$args = wp_parse_args($args, $defaults);
|
165 |
+
$min = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '' : '.min';
|
166 |
+
$script = '';
|
167 |
+
|
168 |
+
if (isset($args['polyfill']) && $args['polyfill']) {
|
169 |
+
$script .= '<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?flags=gated&features=default%2CIntersectionObserver%2CIntersectionObserverEntry"></script>';
|
170 |
+
}
|
171 |
|
172 |
/**
|
173 |
* Filters the script tag for the lazyload script
|
233 |
|
234 |
$args = wp_parse_args($args, $defaults);
|
235 |
|
236 |
+
$image = '<img src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" alt="" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '">';
|
237 |
|
238 |
if (isset($args['lazy_image']) && $args['lazy_image']) {
|
239 |
+
$image = '<img data-lazy-src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" alt="" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '"><noscript><img src="https://i.ytimg.com/vi/ID/' . $args['resolution'] . '.jpg" alt="" width="' . $allowed_resolutions[ $args['resolution'] ]['width'] . '" height="' . $allowed_resolutions[ $args['resolution'] ]['height'] . '"></noscript>';
|
240 |
}
|
241 |
|
242 |
return "<script>function lazyLoadThumb(e){var t='{$image}',a='<div class=\"play\"></div>';return t.replace(\"ID\",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement(\"iframe\"),t=\"https://www.youtube.com/embed/ID?autoplay=1\";t+=0===this.dataset.query.length?'':'&'+this.dataset.query;e.setAttribute(\"src\",t.replace(\"ID\",this.dataset.id)),e.setAttribute(\"frameborder\",\"0\"),e.setAttribute(\"allowfullscreen\",\"1\"),this.parentNode.replaceChild(e,this)}document.addEventListener(\"DOMContentLoaded\",function(){var e,t,a=document.getElementsByClassName(\"rll-youtube-player\");for(t=0;t<a.length;t++)e=document.createElement(\"div\"),e.setAttribute(\"data-id\",a[t].dataset.id),e.setAttribute(\"data-query\", a[t].dataset.query),e.innerHTML=lazyLoadThumb(a[t].dataset.id),e.onclick=lazyLoadYoutubeIframe,a[t].appendChild(e)});</script>";
|
vendor/wp-media/rocket-lazyload-common/src/Image.php
CHANGED
@@ -28,32 +28,12 @@ class Image
|
|
28 |
$images = array_unique($images, SORT_REGULAR);
|
29 |
|
30 |
foreach ($images as $image) {
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
// Given the previous regex pattern, $image['atts'] starts with a whitespace character.
|
36 |
-
if (! preg_match('@\ssrc\s*=\s*(\'|")(?<src>.*)\1@iUs', $image['atts'], $atts)) {
|
37 |
-
continue;
|
38 |
-
}
|
39 |
-
|
40 |
-
$image['src'] = trim($atts['src']);
|
41 |
-
|
42 |
-
if ('' === $image['src']) {
|
43 |
-
continue;
|
44 |
-
}
|
45 |
-
|
46 |
-
if ($this->isExcluded($image['src'], $this->getExcludedSrc())) {
|
47 |
continue;
|
48 |
}
|
49 |
|
50 |
-
// Don't apply LazyLoad on images from WP Retina x2.
|
51 |
-
if (function_exists('wr2x_picture_rewrite')) {
|
52 |
-
if (wr2x_get_retina(trailingslashit(ABSPATH) . wr2x_get_pathinfo_from_image_src(trim($image['src'], '"')))) {
|
53 |
-
continue;
|
54 |
-
}
|
55 |
-
}
|
56 |
-
|
57 |
$image_lazyload = $this->replaceImage($image);
|
58 |
$html = str_replace($image[0], $image_lazyload, $html);
|
59 |
|
@@ -72,7 +52,7 @@ class Image
|
|
72 |
*/
|
73 |
public function lazyloadBackgroundImages($html, $buffer)
|
74 |
{
|
75 |
-
if (! preg_match_all('#<div\s+(?<before>[^>]+[\'"\s])?style\s*=\s*([\'"])(?<styles>.*?)\
|
76 |
return $html;
|
77 |
}
|
78 |
|
@@ -93,7 +73,7 @@ class Image
|
|
93 |
|
94 |
$lazy_bg = $this->addLazyCLass($element[0]);
|
95 |
$lazy_bg = str_replace($url[0], '', $lazy_bg);
|
96 |
-
$lazy_bg = str_replace('<
|
97 |
|
98 |
$html = str_replace($element[0], $lazy_bg, $html);
|
99 |
unset($lazy_bg);
|
@@ -117,7 +97,7 @@ class Image
|
|
117 |
return $element;
|
118 |
}
|
119 |
|
120 |
-
return preg_replace('#<(img|div)([^>]*)>#is', '<\1 class="rocket-lazyload"\2>', $element);
|
121 |
}
|
122 |
|
123 |
/**
|
@@ -137,16 +117,16 @@ class Image
|
|
137 |
$excluded = array_merge($this->getExcludedAttributes(), $this->getExcludedSrc());
|
138 |
|
139 |
foreach ($pictures as $picture) {
|
|
|
|
|
|
|
|
|
140 |
if (preg_match_all('#<source(?<atts>\s.+)>#iUs', $picture['sources'], $sources, PREG_SET_ORDER)) {
|
141 |
$sources = array_unique($sources, SORT_REGULAR);
|
142 |
|
143 |
$lazy_sources = 0;
|
144 |
|
145 |
foreach ($sources as $source) {
|
146 |
-
if ($this->isExcluded($source['atts'], $excluded)) {
|
147 |
-
continue;
|
148 |
-
}
|
149 |
-
|
150 |
$lazyload_srcset = preg_replace('/([\s"\'])srcset/i', '\1data-lazy-srcset', $source[0]);
|
151 |
$html = str_replace($source[0], $lazyload_srcset, $html);
|
152 |
|
@@ -159,12 +139,17 @@ class Image
|
|
159 |
continue;
|
160 |
}
|
161 |
|
162 |
-
if (! preg_match('#<img(
|
163 |
continue;
|
164 |
}
|
165 |
|
166 |
-
|
|
|
|
|
|
|
|
|
167 |
$img_lazy = $this->addLazyClass($img_lazy);
|
|
|
168 |
$html = str_replace($img[0], $img_lazy, $html);
|
169 |
|
170 |
unset($img_lazy);
|
@@ -173,6 +158,43 @@ class Image
|
|
173 |
return $html;
|
174 |
}
|
175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
/**
|
177 |
* Checks if the provided string matches with the provided excluded patterns
|
178 |
*
|
@@ -235,6 +257,9 @@ class Image
|
|
235 |
'loading="lazy"',
|
236 |
'loading="eager"',
|
237 |
'swatch-img',
|
|
|
|
|
|
|
238 |
]
|
239 |
);
|
240 |
}
|
@@ -272,8 +297,8 @@ class Image
|
|
272 |
*/
|
273 |
private function replaceImage($image)
|
274 |
{
|
275 |
-
$width =
|
276 |
-
$height =
|
277 |
|
278 |
if (preg_match('@[\s"\']width\s*=\s*(\'|")(?<width>.*)\1@iUs', $image['atts'], $atts)) {
|
279 |
$width = absint($atts['width']);
|
@@ -417,17 +442,14 @@ class Image
|
|
417 |
* @since 1.2
|
418 |
* @author Remy Perona
|
419 |
*
|
420 |
-
* @param int $width Width of the placeholder image. Default
|
421 |
-
* @param int $height Height of the placeholder image. Default
|
422 |
* @return string
|
423 |
*/
|
424 |
-
public function getPlaceholder($width =
|
425 |
{
|
426 |
-
$width = absint($width);
|
427 |
-
$height = absint($height);
|
428 |
-
|
429 |
-
$width = 0 === $width ? 1 : $width;
|
430 |
-
$height = 0 === $height ? 1 : $height;
|
431 |
|
432 |
$placeholder = str_replace(' ', '%20', "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 $width $height'%3E%3C/svg%3E");
|
433 |
/**
|
@@ -436,7 +458,9 @@ class Image
|
|
436 |
* @since 1.1
|
437 |
*
|
438 |
* @param string $placeholder Placeholder that will be printed.
|
|
|
|
|
439 |
*/
|
440 |
-
return apply_filters('rocket_lazyload_placeholder', $placeholder);
|
441 |
}
|
442 |
}
|
28 |
$images = array_unique($images, SORT_REGULAR);
|
29 |
|
30 |
foreach ($images as $image) {
|
31 |
+
$image = $this->canLazyload($image);
|
32 |
+
|
33 |
+
if (! $image) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
continue;
|
35 |
}
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
$image_lazyload = $this->replaceImage($image);
|
38 |
$html = str_replace($image[0], $image_lazyload, $html);
|
39 |
|
52 |
*/
|
53 |
public function lazyloadBackgroundImages($html, $buffer)
|
54 |
{
|
55 |
+
if (! preg_match_all('#<(?<tag>div|section|span|li)\s+(?<before>[^>]+[\'"\s])?style\s*=\s*([\'"])(?<styles>.*?)\3(?<after>[^>]*)>#is', $buffer, $elements, PREG_SET_ORDER)) {
|
56 |
return $html;
|
57 |
}
|
58 |
|
73 |
|
74 |
$lazy_bg = $this->addLazyCLass($element[0]);
|
75 |
$lazy_bg = str_replace($url[0], '', $lazy_bg);
|
76 |
+
$lazy_bg = str_replace('<' . $element['tag'], '<' . $element['tag'] . ' data-bg="url(' . esc_attr($url['url']) . ')"', $lazy_bg);
|
77 |
|
78 |
$html = str_replace($element[0], $lazy_bg, $html);
|
79 |
unset($lazy_bg);
|
97 |
return $element;
|
98 |
}
|
99 |
|
100 |
+
return preg_replace('#<(img|div|section|li|span)([^>]*)>#is', '<\1 class="rocket-lazyload"\2>', $element);
|
101 |
}
|
102 |
|
103 |
/**
|
117 |
$excluded = array_merge($this->getExcludedAttributes(), $this->getExcludedSrc());
|
118 |
|
119 |
foreach ($pictures as $picture) {
|
120 |
+
if ($this->isExcluded($picture[0], $excluded)) {
|
121 |
+
continue;
|
122 |
+
}
|
123 |
+
|
124 |
if (preg_match_all('#<source(?<atts>\s.+)>#iUs', $picture['sources'], $sources, PREG_SET_ORDER)) {
|
125 |
$sources = array_unique($sources, SORT_REGULAR);
|
126 |
|
127 |
$lazy_sources = 0;
|
128 |
|
129 |
foreach ($sources as $source) {
|
|
|
|
|
|
|
|
|
130 |
$lazyload_srcset = preg_replace('/([\s"\'])srcset/i', '\1data-lazy-srcset', $source[0]);
|
131 |
$html = str_replace($source[0], $lazyload_srcset, $html);
|
132 |
|
139 |
continue;
|
140 |
}
|
141 |
|
142 |
+
if (! preg_match('#<img(?<atts>\s.+)\s?/?>#is', $picture[0], $img)) {
|
143 |
continue;
|
144 |
}
|
145 |
|
146 |
+
if (! $this->canLazyload($img)) {
|
147 |
+
continue;
|
148 |
+
}
|
149 |
+
|
150 |
+
$img_lazy = preg_replace('/([\s"\'])src/i', '\1data-lazy-src', $img[0]);
|
151 |
$img_lazy = $this->addLazyClass($img_lazy);
|
152 |
+
$img_lazy = apply_filters('rocket_lazyload_html', $img_lazy);
|
153 |
$html = str_replace($img[0], $img_lazy, $html);
|
154 |
|
155 |
unset($img_lazy);
|
158 |
return $html;
|
159 |
}
|
160 |
|
161 |
+
/**
|
162 |
+
* Checks if the image can be lazyloaded
|
163 |
+
*
|
164 |
+
* @param Array $image Array of image data coming from Regex.
|
165 |
+
* @return bool|Array
|
166 |
+
*/
|
167 |
+
private function canLazyload($image)
|
168 |
+
{
|
169 |
+
if ($this->isExcluded($image['atts'], $this->getExcludedAttributes())) {
|
170 |
+
return false;
|
171 |
+
}
|
172 |
+
|
173 |
+
// Given the previous regex pattern, $image['atts'] starts with a whitespace character.
|
174 |
+
if (! preg_match('@\ssrc\s*=\s*(\'|")(?<src>.*)\1@iUs', $image['atts'], $atts)) {
|
175 |
+
return false;
|
176 |
+
}
|
177 |
+
|
178 |
+
$image['src'] = trim($atts['src']);
|
179 |
+
|
180 |
+
if ('' === $image['src']) {
|
181 |
+
return false;
|
182 |
+
}
|
183 |
+
|
184 |
+
if ($this->isExcluded($image['src'], $this->getExcludedSrc())) {
|
185 |
+
return false;
|
186 |
+
}
|
187 |
+
|
188 |
+
// Don't apply LazyLoad on images from WP Retina x2.
|
189 |
+
if (function_exists('wr2x_picture_rewrite')) {
|
190 |
+
if (wr2x_get_retina(trailingslashit(ABSPATH) . wr2x_get_pathinfo_from_image_src(trim($image['src'], '"')))) {
|
191 |
+
return false;
|
192 |
+
}
|
193 |
+
}
|
194 |
+
|
195 |
+
return $image;
|
196 |
+
}
|
197 |
+
|
198 |
/**
|
199 |
* Checks if the provided string matches with the provided excluded patterns
|
200 |
*
|
257 |
'loading="lazy"',
|
258 |
'loading="eager"',
|
259 |
'swatch-img',
|
260 |
+
'data-height-percentage',
|
261 |
+
'data-large_image',
|
262 |
+
'avia-bg-style-fixed',
|
263 |
]
|
264 |
);
|
265 |
}
|
297 |
*/
|
298 |
private function replaceImage($image)
|
299 |
{
|
300 |
+
$width = 0;
|
301 |
+
$height = 0;
|
302 |
|
303 |
if (preg_match('@[\s"\']width\s*=\s*(\'|")(?<width>.*)\1@iUs', $image['atts'], $atts)) {
|
304 |
$width = absint($atts['width']);
|
442 |
* @since 1.2
|
443 |
* @author Remy Perona
|
444 |
*
|
445 |
+
* @param int $width Width of the placeholder image. Default 0.
|
446 |
+
* @param int $height Height of the placeholder image. Default 0.
|
447 |
* @return string
|
448 |
*/
|
449 |
+
public function getPlaceholder($width = 0, $height = 0)
|
450 |
{
|
451 |
+
$width = 0 === $width ? 0 : absint($width);
|
452 |
+
$height = 0 === $height ? 0 : absint($height);
|
|
|
|
|
|
|
453 |
|
454 |
$placeholder = str_replace(' ', '%20', "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 $width $height'%3E%3C/svg%3E");
|
455 |
/**
|
458 |
* @since 1.1
|
459 |
*
|
460 |
* @param string $placeholder Placeholder that will be printed.
|
461 |
+
* @param int $width Placeholder width.
|
462 |
+
* @param int $height Placeholder height.
|
463 |
*/
|
464 |
+
return apply_filters('rocket_lazyload_placeholder', $placeholder, $width, $height);
|
465 |
}
|
466 |
}
|