X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/76aea3697c6043c1613370f172395b4f65ee71f0..f8ce8fee333796f41d394479265f31b87bd6e436:/wp-includes/class.wp-scripts.php diff --git a/wp-includes/class.wp-scripts.php b/wp-includes/class.wp-scripts.php index 7652aece..45d2e54c 100644 --- a/wp-includes/class.wp-scripts.php +++ b/wp-includes/class.wp-scripts.php @@ -1,8 +1,34 @@ do_items( $handles ); + function print_scripts( $handles = false, $group = false ) { + return $this->do_items( $handles, $group ); } - function print_scripts_l10n( $handle ) { + function print_scripts_l10n( $handle, $echo = true ) { if ( empty($this->registered[$handle]->extra['l10n']) || empty($this->registered[$handle]->extra['l10n'][0]) || !is_array($this->registered[$handle]->extra['l10n'][1]) ) return false; $object_name = $this->registered[$handle]->extra['l10n'][0]; - echo "\n"; - - return true; + $data .= "\n};\n"; + $data .= isset($after) ? "$after\n" : ''; + + if ( $echo ) { + echo "\n"; + return true; + } else { + return $data; + } } - function do_item( $handle ) { + function do_item( $handle, $group = false ) { if ( !parent::do_item($handle) ) return false; - $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version; + 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 ); + + if ( null === $this->registered[$handle]->ver ) + $ver = ''; + else + $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version; + if ( isset($this->args[$handle]) ) - $ver .= '&' . $this->args[$handle]; + $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle]; $src = $this->registered[$handle]->src; - if ( !preg_match('|^https?://|', $src) && !preg_match('|^' . preg_quote(WP_CONTENT_URL) . '|', $src) ) { - $src = $this->base_url . $src; - } - $src = add_query_arg('ver', $ver, $src); - $src = clean_url(apply_filters( 'script_loader_src', $src, $handle )); + if ( $this->do_concat ) { + $srce = apply_filters( 'script_loader_src', $src, $handle ); + if ( $this->in_default_dir($srce) ) { + $this->print_code .= $this->print_scripts_l10n( $handle, false ); + $this->concat .= "$handle,"; + $this->concat_version .= "$handle$ver"; + return true; + } else { + $this->ext_handles .= "$handle,"; + $this->ext_version .= "$handle$ver"; + } + } $this->print_scripts_l10n( $handle ); + if ( !preg_match('|^https?://|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) { + $src = $this->base_url . $src; + } + + if ( !empty($ver) ) + $src = add_query_arg('ver', $ver, $src); + $src = esc_url(apply_filters( 'script_loader_src', $src, $handle )); - echo "\n"; + if ( $this->do_concat ) + $this->print_html .= "\n"; + else + echo "\n"; return true; } @@ -80,10 +146,57 @@ class WP_Scripts extends WP_Dependencies { return $this->add_data( $handle, 'l10n', array( $object_name, $l10n ) ); } - function all_deps( $handles, $recursion = false ) { + function set_group( $handle, $recursion, $group = false ) { + $grp = isset($this->registered[$handle]->extra['group']) ? (int) $this->registered[$handle]->extra['group'] : 0; + if ( false !== $group && $grp > $group ) + $grp = $group; + + return parent::set_group( $handle, $recursion, $grp ); + } + + function all_deps( $handles, $recursion = false, $group = false ) { $r = parent::all_deps( $handles, $recursion ); if ( !$recursion ) $this->to_do = apply_filters( 'print_scripts_array', $this->to_do ); return $r; } + + function do_head_items() { + $this->do_items(false, 0); + return $this->done; + } + + function do_footer_items() { + if ( !empty($this->in_footer) ) { + foreach( $this->in_footer as $key => $handle ) { + if ( !in_array($handle, $this->done, true) && isset($this->registered[$handle]) ) { + $this->do_item($handle); + $this->done[] = $handle; + unset( $this->in_footer[$key] ); + } + } + } + return $this->done; + } + + function in_default_dir($src) { + if ( ! $this->default_dirs ) + return true; + + foreach ( (array) $this->default_dirs as $test ) { + if ( 0 === strpos($src, $test) ) + return true; + } + return false; + } + + function reset() { + $this->do_concat = false; + $this->print_code = ''; + $this->concat = ''; + $this->concat_version = ''; + $this->print_html = ''; + $this->ext_version = ''; + $this->ext_handles = ''; + } }