wp/wp-includes/class.wp-styles.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * BackPress Styles enqueue.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * These classes were refactored from the WordPress WP_Scripts and WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * script enqueue API.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * @package BackPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * @since r74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * BackPress Styles enqueue class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @package BackPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @uses WP_Dependencies
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * @since r74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
class WP_Styles extends WP_Dependencies {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
	var $base_url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	var $content_url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
	var $default_version;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
	var $text_direction = 'ltr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	var $concat = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
	var $concat_version = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	var $do_concat = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	var $print_html = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	var $print_code = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
	var $default_dirs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
	function __construct() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		do_action_ref_array( 'wp_default_styles', array(&$this) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	function do_item( $handle ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		if ( !parent::do_item($handle) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		$obj = $this->registered[$handle];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		if ( null === $obj->ver )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			$ver = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			$ver = $obj->ver ? $obj->ver : $this->default_version;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		if ( isset($this->args[$handle]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			$ver = $ver ? $ver . '&amp;' . $this->args[$handle] : $this->args[$handle];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		if ( $this->do_concat ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
			if ( $this->in_default_dir($obj->src) && !isset($obj->extra['conditional']) && !isset($obj->extra['alt']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
				$this->concat .= "$handle,";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
				$this->concat_version .= "$handle$ver";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
				$this->print_code .= $this->print_inline_style( $handle, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		if ( isset($obj->args) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			$media = esc_attr( $obj->args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			$media = 'all';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		$href = $this->_css_href( $obj->src, $ver, $handle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		$rel = isset($obj->extra['alt']) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		$title = isset($obj->extra['title']) ? "title='" . esc_attr( $obj->extra['title'] ) . "'" : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		$end_cond = $tag = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		if ( isset($obj->extra['conditional']) && $obj->extra['conditional'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			$tag .= "<!--[if {$obj->extra['conditional']}]>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			$end_cond = "<![endif]-->\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		$tag .= apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle-css' $title href='$href' type='text/css' media='$media' />\n", $handle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		if ( 'rtl' === $this->text_direction && isset($obj->extra['rtl']) && $obj->extra['rtl'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
			if ( is_bool( $obj->extra['rtl'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				$suffix = isset( $obj->extra['suffix'] ) ? $obj->extra['suffix'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
				$rtl_href = str_replace( "{$suffix}.css", "-rtl{$suffix}.css", $this->_css_href( $obj->src , $ver, "$handle-rtl" ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				$rtl_href = $this->_css_href( $obj->extra['rtl'], $ver, "$handle-rtl" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			$tag .= apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle-rtl-css' $title href='$rtl_href' type='text/css' media='$media' />\n", $handle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		$tag .= $end_cond;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
		if ( $this->do_concat ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			$this->print_html .= $tag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			if ( $inline_style = $this->print_inline_style( $handle, false ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				$this->print_html .= sprintf( "<style type='text/css'>\n%s\n</style>\n", $inline_style );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			echo $tag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
			$this->print_inline_style( $handle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
	function add_inline_style( $handle, $code ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		if ( !$code )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		$after = $this->get_data( $handle, 'after' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		if ( !$after )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
			$after = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		$after[] = $code;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		return $this->add_data( $handle, 'after', $after );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
	function print_inline_style( $handle, $echo = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		$output = $this->get_data( $handle, 'after' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		if ( empty( $output ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		$output = implode( "\n", $output );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		if ( !$echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			return $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		echo "<style type='text/css'>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		echo "$output\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		echo "</style>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	function all_deps( $handles, $recursion = false, $group = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		$r = parent::all_deps( $handles, $recursion );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		if ( !$recursion )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			$this->to_do = apply_filters( 'print_styles_array', $this->to_do );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		return $r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	function _css_href( $src, $ver, $handle ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		if ( !is_bool($src) && !preg_match('|^(https?:)?//|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			$src = $this->base_url . $src;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		if ( !empty($ver) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			$src = add_query_arg('ver', $ver, $src);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		$src = apply_filters( 'style_loader_src', $src, $handle );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
		return esc_url( $src );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	function in_default_dir($src) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		if ( ! $this->default_dirs )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		foreach ( (array) $this->default_dirs as $test ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
			if ( 0 === strpos($src, $test) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
	function do_footer_items() { // HTML 5 allows styles in the body, grab late enqueued items and output them in the footer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		$this->do_items(false, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		return $this->done;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	function reset() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
		$this->do_concat = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
		$this->concat = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		$this->concat_version = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
		$this->print_html = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
}