[ Index ] |
PHP Cross Reference of BackPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BackPress Scripts enqueue. 4 * 5 * These classes were refactored from the WordPress WP_Scripts and WordPress 6 * script enqueue API. 7 * 8 * @package BackPress 9 * @since r74 10 */ 11 12 /** 13 * BackPress enqueued dependiences class. 14 * 15 * @package BackPress 16 * @uses _WP_Dependency 17 * @since r74 18 */ 19 class WP_Dependencies { 20 var $registered = array(); 21 var $queue = array(); 22 var $to_do = array(); 23 var $done = array(); 24 var $args = array(); 25 var $groups = array(); 26 var $group = 0; 27 28 function __construct() {} 29 30 function WP_Dependencies() { 31 $args = func_get_args(); 32 call_user_func_array( array(&$this, '__construct'), $args ); 33 } 34 35 /** 36 * Do the dependencies 37 * 38 * Process the items passed to it or the queue. Processes all dependencies. 39 * 40 * @param mixed handles (optional) items to be processed. (void) processes queue, (string) process that item, (array of strings) process those items 41 * @return array Items that have been processed 42 */ 43 function do_items( $handles = false, $group = false ) { 44 // Print the queue if nothing is passed. If a string is passed, print that script. If an array is passed, print those scripts. 45 $handles = false === $handles ? $this->queue : (array) $handles; 46 $this->all_deps( $handles ); 47 48 foreach( $this->to_do as $key => $handle ) { 49 if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) { 50 51 if ( ! $this->registered[$handle]->src ) { // Defines a group. 52 $this->done[] = $handle; 53 continue; 54 } 55 56 if ( $this->do_item( $handle, $group ) ) 57 $this->done[] = $handle; 58 59 unset( $this->to_do[$key] ); 60 } 61 } 62 63 return $this->done; 64 } 65 66 function do_item( $handle ) { 67 return isset($this->registered[$handle]); 68 } 69 70 /** 71 * Determines dependencies 72 * 73 * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops. 74 * 75 76 * @param mixed handles Accepts (string) dep name or (array of strings) dep names 77 * @param bool recursion Used internally when function calls itself 78 */ 79 function all_deps( $handles, $recursion = false, $group = false ) { 80 if ( !$handles = (array) $handles ) 81 return false; 82 83 foreach ( $handles as $handle ) { 84 $handle_parts = explode('?', $handle); 85 $handle = $handle_parts[0]; 86 $queued = in_array($handle, $this->to_do, true); 87 88 if ( in_array($handle, $this->done, true) ) // Already done 89 continue; 90 91 $moved = $this->set_group( $handle, $recursion, $group ); 92 93 if ( $queued && !$moved ) // already queued and in the right group 94 continue; 95 96 $keep_going = true; 97 if ( !isset($this->registered[$handle]) ) 98 $keep_going = false; // Script doesn't exist 99 elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) ) 100 $keep_going = false; // Script requires deps which don't exist (not a necessary check. efficiency?) 101 elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true, $group ) ) 102 $keep_going = false; // Script requires deps which don't exist 103 104 if ( !$keep_going ) { // Either script or its deps don't exist. 105 if ( $recursion ) 106 return false; // Abort this branch. 107 else 108 continue; // We're at the top level. Move on to the next one. 109 } 110 111 if ( $queued ) // Already grobbed it and its deps 112 continue; 113 114 if ( isset($handle_parts[1]) ) 115 $this->args[$handle] = $handle_parts[1]; 116 117 $this->to_do[] = $handle; 118 } 119 120 return true; 121 } 122 123 /** 124 * Adds item 125 * 126 * Adds the item only if no item of that name already exists 127 * 128 * @param string handle Script name 129 * @param string src Script url 130 * @param array deps (optional) Array of script names on which this script depends 131 * @param string ver (optional) Script version (used for cache busting) 132 * @return array Hierarchical array of dependencies 133 */ 134 function add( $handle, $src, $deps = array(), $ver = false, $args = null ) { 135 if ( isset($this->registered[$handle]) ) 136 return false; 137 $this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args ); 138 return true; 139 } 140 141 /** 142 * Adds extra data 143 * 144 * Adds data only if script has already been added 145 * 146 * @param string handle Script name 147 * @param string data_name Name of object in which to store extra data 148 * @param array data Array of extra data 149 * @return bool success 150 */ 151 function add_data( $handle, $data_name, $data ) { 152 if ( !isset($this->registered[$handle]) ) 153 return false; 154 return $this->registered[$handle]->add_data( $data_name, $data ); 155 } 156 157 function remove( $handles ) { 158 foreach ( (array) $handles as $handle ) 159 unset($this->registered[$handle]); 160 } 161 162 function enqueue( $handles ) { 163 foreach ( (array) $handles as $handle ) { 164 $handle = explode('?', $handle); 165 if ( !in_array($handle[0], $this->queue) && isset($this->registered[$handle[0]]) ) { 166 $this->queue[] = $handle[0]; 167 if ( isset($handle[1]) ) 168 $this->args[$handle[0]] = $handle[1]; 169 } 170 } 171 } 172 173 function dequeue( $handles ) { 174 foreach ( (array) $handles as $handle ) { 175 $handle = explode('?', $handle); 176 $key = array_search($handle[0], $this->queue); 177 if ( false !== $key ) { 178 unset($this->queue[$key]); 179 unset($this->args[$handle[0]]); 180 } 181 } 182 } 183 184 function query( $handle, $list = 'registered' ) { // registered, queue, done, to_do 185 switch ( $list ) : 186 case 'registered': 187 case 'scripts': // back compat 188 if ( isset($this->registered[$handle]) ) 189 return $this->registered[$handle]; 190 break; 191 case 'to_print': // back compat 192 case 'printed': // back compat 193 if ( 'to_print' == $list ) 194 $list = 'to_do'; 195 else 196 $list = 'printed'; 197 default: 198 if ( in_array($handle, $this->$list) ) 199 return true; 200 break; 201 endswitch; 202 return false; 203 } 204 205 function set_group( $handle, $recursion, $group ) { 206 $group = (int) $group; 207 208 if ( $recursion ) 209 $group = min($this->group, $group); 210 else 211 $this->group = $group; 212 213 if ( isset($this->groups[$handle]) && $this->groups[$handle] <= $group ) 214 return false; 215 216 $this->groups[$handle] = $group; 217 return true; 218 } 219 220 } 221 222 class _WP_Dependency { 223 var $handle; 224 var $src; 225 var $deps = array(); 226 var $ver = false; 227 var $args = null; 228 229 var $extra = array(); 230 231 function __construct() { 232 @list($this->handle, $this->src, $this->deps, $this->ver, $this->args) = func_get_args(); 233 if ( !is_array($this->deps) ) 234 $this->deps = array(); 235 } 236 237 function _WP_Dependency() { 238 self::__construct(); 239 } 240 241 function add_data( $name, $data ) { 242 if ( !is_scalar($name) ) 243 return false; 244 $this->extra[$name] = $data; 245 return true; 246 } 247 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sat Nov 23 01:00:54 2024 | Cross-referenced by PHPXref 0.7.1 |