HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/delta/wp-content/plugins/w3-total-cache/UserExperience_LazyLoad_Mutator_Picture.php
<?php
/**
 * File: UserExperience_LazyLoad_Mutator_Picture.php
 *
 * @package W3TC
 */

namespace W3TC;

/**
 * Class UserExperience_LazyLoad_Mutator_Picture
 */
class UserExperience_LazyLoad_Mutator_Picture {
	/**
	 * Constructor for the UserExperience_LazyLoad_Mutator_Picture class.
	 *
	 * An instance of a common utility class used to process image and source tags.
	 *
	 * @var object
	 */
	private $common;

	/**
	 * Initializes the class with a common utility instance.
	 *
	 * @param object $common An instance of a utility class for handling image and source tag processing.
	 *
	 * @return void
	 */
	public function __construct( $common ) {
		$this->common = $common;
	}

	/**
	 * Processes the provided content to modify `<img>` and `<source>` tags.
	 *
	 * This method replaces the `srcset` and `sizes` attributes in `<source>` tags with `data-srcset` and `data-sizes`,
	 * and applies custom modifications to `<img>` tags using utility methods.
	 *
	 * @param string $content The content containing `<img>` and `<source>` tags to be processed.
	 *
	 * @return string The modified content with lazy-loading attributes applied.
	 */
	public function run( $content ) {
		$content = preg_replace_callback(
			'~(<img\s[^>]+>)~i',
			array( $this, 'tag_img' ),
			$content
		);

		$content = preg_replace_callback(
			'~(<source\s[^>]+>)~i',
			array( $this, 'tag_source' ),
			$content
		);

		return $content;
	}

	/**
	 * Processes a matched `<img>` tag.
	 *
	 * This method retrieves the dimensions of the image and replaces its attributes with lazy-loading compatible attributes.
	 *
	 * @param array $matches The matches from the regular expression containing the `<img>` tag.
	 *
	 * @return string The modified `<img>` tag with lazy-loading attributes applied.
	 */
	public function tag_img( $matches ) {
		$content = $matches[0];

		// get image dimensions.
		$dim = $this->common->tag_get_dimensions( $content );
		return $this->common->tag_img_content_replace( $content, $dim );
	}

	/**
	 * Processes a matched `<source>` tag.
	 *
	 * This method replaces the `srcset` and `sizes` attributes with `data-srcset` and `data-sizes`
	 * to delay loading the sources until needed.
	 *
	 * @param array $matches The matches from the regular expression containing the `<source>` tag.
	 *
	 * @return string The modified `<source>` tag with lazy-loading attributes applied.
	 */
	private function tag_source( $matches ) {
		$content = $matches[0];

		$content = preg_replace(
			'~(\s)(srcset|sizes)=~i',
			'$1data-$2=',
			$content
		);

		return $content;
	}
}