Speed Booster Pack - Version 1.3

Version Description

  • Fixed strict standards error: redefining already defined constructor for class.
Download this release

Release Info

Developer tiguan
Plugin Icon 128x128 Speed Booster Pack
Version 1.3
Comparing to
See all releases

Code changes from version 1.2 to 1.3

Files changed (3) hide show
  1. inc/use-google-libraries.php +188 -137
  2. readme.txt +20 -4
  3. speed-booster-pack.php +2 -2
inc/use-google-libraries.php CHANGED
@@ -4,15 +4,18 @@
4
  /* Author & copyright (c) 2008-2013 : Jason Penney (email : jpenney@jczorkmid.net ). General Public License v.2.0 */
5
 
6
 
7
- if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
8
 
9
  class JCP_UseGoogleLibraries {
10
 
11
- private static $instance;
12
- private static $version = '1.5.2';
 
 
 
13
  public static function get_instance() {
14
- if ( !isset( self::$instance ) ) {
15
- self::$instance = new JCP_UseGoogleLibraries();
16
  }
17
  return self::$instance;
18
  }
@@ -60,7 +63,8 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
60
 
61
  /**
62
  * True if using a version of WordPress that allows
63
- * `wp_register_script` to take protocol-relative URLs, otherwise False
 
64
  *
65
  * @since 1.5.2
66
  *
@@ -83,117 +87,138 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
83
  protected static $cache_len = 90000; // 25 hours
84
 
85
  /**
86
- * Message displayed and logged when a WP_Scripts has been created before it's time
 
87
  *
88
- * @var unknown_type
89
  */
90
  protected static $script_before_init_notice =
91
  'Another plugin has registered or enqued a script before the "init" action. Attempting to work around it.';
92
 
93
  /**
94
- * PHP 4 Compatible Constructor
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  */
96
- function JCP_UseGoogleLibraries() {$this->__construct();}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  /**
99
  * PHP 5 Constructor
100
  */
101
  function __construct() {
102
- $this->jquery_tag = 'jquery';
103
- $this->google_scripts =
104
- array(
105
- // any extra scripts listed here not provided by WordPress
106
- // or another plugin will not be registered. This list
107
- // is just used to chancge where things load from.
108
-
109
- // 'script-handle' => ( 'google-lib-path', 'google-file-name', 'google-combined-into')
110
- /* jQuery */
111
- 'jquery' => array( 'jquery', 'jquery.min', '' ),
112
-
113
- /* jQuery UI */
114
- 'jquery-ui-core' => array( 'jqueryui', 'jquery-ui.min', '' ),
115
- 'jquery-ui-accordion' => array( '', '', 'jquery-ui-core' ),
116
- 'jquery-ui-autocomplete' => array( '', '', 'jquery-ui-core' ), /* jQueri UI 1.8 */
117
- 'jquery-ui-button' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
118
- 'jquery-ui-datepicker' => array( '', '', 'jquery-ui-core' ),
119
- 'jquery-ui-dialog' => array( '', '', 'jquery-ui-core' ),
120
- 'jquery-ui-draggable' => array( '', '', 'jquery-ui-core' ),
121
- 'jquery-ui-droppable' => array( '', '', 'jquery-ui-core' ),
122
- 'jquery-ui-menu' => array( '', '', 'jquery-ui-core' ),
123
- 'jquery-ui-mouse' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
124
- 'jquery-ui-position' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
125
- 'jquery-ui-progressbar' => array( '', '', 'jquery-ui-core' ),
126
- 'jquery-ui-resizable' => array( '', '', 'jquery-ui-core' ),
127
- 'jquery-ui-selectable' => array( '', '', 'jquery-ui-core' ),
128
- 'jquery-ui-slider' => array( '', '', 'jquery-ui-core' ),
129
- 'jquery-ui-sortable' => array( '', '', 'jquery-ui-core' ),
130
- 'jquery-ui-tabs' => array( '', '', 'jquery-ui-core' ),
131
- 'jquery-ui-widget' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
132
-
133
- /* jQuery Effects */
134
- 'jquery-effects-core' => array( '', '', 'jquery-ui-core' ),
135
- 'jquery-effects-blind' => array( '', '', 'jquery-ui-core' ),
136
- 'jquery-effects-bounce' => array( '', '', 'jquery-ui-core' ),
137
- 'jquery-effects-clip' => array( '', '', 'jquery-ui-core' ),
138
- 'jquery-effects-drop' => array( '', '', 'jquery-ui-core' ),
139
- 'jquery-effects-explode' => array( '', '', 'jquery-ui-core' ),
140
- 'jquery-effects-fade' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
141
- 'jquery-effects-fold' => array( '', '', 'jquery-ui-core' ),
142
- 'jquery-effects-highlight' => array( '', '', 'jquery-ui-core' ),
143
- 'jquery-effects-pulsate' => array( '', '', 'jquery-ui-core' ),
144
- 'jquery-effects-scale' => array( '', '', 'jquery-ui-core' ),
145
- 'jquery-effects-shake' => array( '', '', 'jquery-ui-core' ),
146
- 'jquery-effects-slide' => array( '', '', 'jquery-ui-core' ),
147
- 'jquery-effects-transfer' => array( '', '', 'jquery-ui-core' ),
148
-
149
- /* prototype */
150
- 'prototype' => array( 'prototype', 'prototype', '' ),
151
-
152
- /* scriptaculous */
153
- 'scriptaculous-root' => array( 'scriptaculous', 'scriptaculous', '' ),
154
- 'scriptaculous-builder' => array( '', '', 'scriptaculous-root' ),
155
- 'scriptaculous-effects' => array( '', '', 'scriptaculous-root' ),
156
- 'scriptaculous-dragdrop' => array( '', '', 'scriptaculous-root' ),
157
- 'scriptaculous-controls' => array( '', '', 'scriptaculous-root' ),
158
- 'scriptaculous-slider' => array( '', '', 'scriptaculous-root' ),
159
- 'scriptaculous-sound' => array( '', '', 'scriptaculous-root' ),
160
-
161
- /* moo tools */
162
- 'mootools' => array( 'mootools', 'mootools-yui-compressed', '' ),
163
-
164
- /* Dojo */
165
- 'dojo' => array( 'dojo', 'dojo.xd', '' ),
166
-
167
- /* swfobject */
168
- 'swfobject' => array( 'swfobject', 'swfobject', '' ),
169
-
170
- /* YUI */
171
- 'yui' => array( 'yui', 'build/yuiloader/yuiloader-min', '' ),
172
-
173
- /* Ext Core */
174
- 'ext-core' => array( 'ext-core', 'ext-core', '' )
175
 
176
- );
177
  $this->noconflict_next = FALSE;
178
  // protocol-relative URLS accepted by `wp_register_scripts`
179
  // starting with version 3.5
180
- $this->protocol_relative_supported = version_compare( get_bloginfo( 'version' ), '3.5', '>=' );
 
 
181
  }
182
 
183
  static function configure_plugin() {
184
- add_action( 'wp_default_scripts',
185
- array( 'JCP_UseGoogleLibraries',
186
- 'replace_default_scripts_action' ),
187
- 1000 );
188
- add_filter( 'script_loader_src',
189
- array( "JCP_UseGoogleLibraries", "remove_ver_query_filter" ),
190
- 1000 );
191
- add_filter( 'init', array( "JCP_UseGoogleLibraries", "setup_filter" ) );
192
-
193
- // There's a chance some plugin has called wp_enqueue_script outside
194
- // of any hooks, which means that this plugin's 'wp_default_scripts'
195
- // hook will never get a chance to fire. This tries to work around
196
- // that.
 
 
 
 
 
 
 
 
 
197
  global $wp_scripts;
198
  if ( is_a( $wp_scripts, 'WP_Scripts' ) ) {
199
  self::debug( self::$script_before_init_notice );
@@ -203,11 +228,14 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
203
  }
204
 
205
  /**
206
- * Get markup to show error message in admin when $WP_Script created befor it's time
 
 
207
  * @returns string markup for notice display
208
  */
209
  static function script_before_init_admin_notice() {
210
- echo '<div class="error fade"><p>Use Google Libraries: ' . self::$script_before_init_notice . '</p></div>';
 
211
  }
212
 
213
  static function setup_filter() {
@@ -225,9 +253,9 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
225
  static function debug( $message ) {
226
  if ( WP_DEBUG !== false ) {
227
  if ( is_array( $message ) || is_object( $message ) ) {
228
- $message = print_r( $message, true );
229
  }
230
- error_log( "Use Google Libraries: " . $message );
231
  }
232
  }
233
 
@@ -241,12 +269,54 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
241
 
242
  }
243
 
244
-
245
  static function replace_default_scripts_action( &$scripts ) {
246
  $ugl = self::get_instance();
247
  $ugl->replace_default_scripts( $scripts );
248
  }
249
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  /**
251
  * Collects replacement script registration data.
252
  *
@@ -265,13 +335,7 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
265
  $newscripts = array();
266
  $combine_ok = array();
267
 
268
- // jquery may really be loaded under jquery-core
269
- // if so, we'll adjust google_scripts here
270
- if ( $scripts->query( 'jquery-core' ) && array_key_exists( 'jquery', $this->google_scripts ) ) {
271
- $this->google_scripts['jquery-core'] = $this->google_scripts['jquery'];
272
- unset($this->google_scripts['jquery']);
273
- $this->jquery_tag = 'jquery-core';
274
- }
275
 
276
  foreach ( $this->google_scripts as $name => $values ) {
277
  if ( $script = $scripts->query( $name ) ) {
@@ -304,23 +368,10 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
304
  }
305
  }
306
 
307
- // if $lib is empty, then this script does not need to be
308
- // exlicitly loaded when using googleapis.com, but we need to keep
309
- // it around for dependencies
310
- if ( $lib != '' ) {
311
- // build new URL
312
- $url = "//ajax.googleapis.com/ajax/libs/$lib/$ver/$js.js";
313
- if ( wp_remote_retrieve_response_code( wp_remote_head( "http:$url" ) ) !== 200 ) {
314
- self::debug( "Google servers do not seem to be hosting requested version of $name (version $ver). Using version provided by WordPress." );
315
- continue;
316
- }
317
- if ( ! $this->protocol_relative_supported ) {
318
- $url = "http:$url";
319
- }
320
- $script->src = $url;
321
- } else {
322
- $script->src = "";
323
- }
324
  $newscripts[] = $script;
325
  $combine_ok[] = $name;
326
  }
@@ -381,7 +432,7 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
381
  function replace_default_scripts( &$scripts ) {
382
  $newscripts = $this->get_newscripts( $scripts );
383
  foreach ( $newscripts as $script ) {
384
- $olddata = $this->WP_Dependency_get_data( $scripts, $script->handle );
385
  $scripts->remove( $script->handle );
386
  // re-register with original ver
387
  $scripts->add( $script->handle, $script->src, $script->deps, $script->ver );
@@ -394,18 +445,18 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
394
  }
395
 
396
 
397
- function WP_Dependency_get_data( $dep_obj, $handle, $data_name = false ) {
398
 
399
- if ( !method_exists( $dep_obj, 'add_data' ) )
400
  return false;
401
 
402
- if ( !isset( $dep_obj->registered[$handle] ) )
403
  return false;
404
 
405
- if ( !$data_name )
406
  return $dep_obj->registered[$handle]->extra;
407
 
408
- if ( !method_exists( $dep_obj, 'get_data' ) )
409
  return $dep_obj->registered[$handle]->extra[$data_name];
410
 
411
  return $dep_obj->get_data( $handle, $data_name );
@@ -422,11 +473,11 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
422
  function remove_ver_query( $src ) {
423
  if ( $this->noconflict_next ) {
424
  $this->noconflict_next = FALSE;
425
- echo "<script type='text/javascript'>try{jQuery.noConflict();}catch(e){};</script>\n";
426
  }
427
  if ( preg_match( '/ajax\.googleapis\.com\//', $src ) ) {
428
  $src = remove_query_arg( 'ver', $src );
429
- if ( strpos( $src, $this->google_scripts[$this->jquery_tag][1] . ".js" ) ) {
430
  $this->noconflict_next = TRUE;
431
  }
432
  }
@@ -434,8 +485,8 @@ if ( !class_exists( 'JCP_UseGoogleLibraries' ) ) {
434
  }
435
 
436
  static function remove_ver_query_filter( $src ) {
437
- $ugl = self::get_instance();
438
  return $ugl->remove_ver_query( $src );
439
  }
440
  }
441
- }
4
  /* Author & copyright (c) 2008-2013 : Jason Penney (email : jpenney@jczorkmid.net ). General Public License v.2.0 */
5
 
6
 
7
+ if ( ! class_exists( 'JCP_UseGoogleLibraries' ) ) {
8
 
9
  class JCP_UseGoogleLibraries {
10
 
11
+ protected static $instance;
12
+ protected static $plugin_file = __FILE__;
13
+ protected static $version = '1.6dev';
14
+ protected static $noconflict_inject = "<script type='text/javascript'>try{jQuery.noConflict();}catch(e){};</script>\n";
15
+
16
  public static function get_instance() {
17
+ if ( ! isset( self::$instance ) ) {
18
+ self::$instance = new JCP_UseGoogleLibraries();
19
  }
20
  return self::$instance;
21
  }
63
 
64
  /**
65
  * True if using a version of WordPress that allows
66
+ * `wp_register_script` to take protocol-relative URLs,
67
+ * otherwise False
68
  *
69
  * @since 1.5.2
70
  *
87
  protected static $cache_len = 90000; // 25 hours
88
 
89
  /**
90
+ * Message displayed and logged when a WP_Scripts has been created
91
+ * before it's time
92
  *
93
+ * @var str
94
  */
95
  protected static $script_before_init_notice =
96
  'Another plugin has registered or enqued a script before the "init" action. Attempting to work around it.';
97
 
98
  /**
99
+ * Registry of scripts available from Google Libraries. Any extra
100
+ * scripts listed here not provided by WordPress or another plugin
101
+ * will not be registered. This list is just used to chancge where
102
+ * things load from.
103
+ *
104
+ * Entries are in the format:
105
+ * <code>
106
+ * 'script-handle' => array(
107
+ * 'google-lib-path',
108
+ * 'google-file-name',
109
+ * 'google-combined-into'
110
+ * )
111
+ * </code>
112
+ *
113
+ * @var array
114
  */
115
+ protected static $default_google_scripts = array(
116
+ /* jQuery */
117
+ 'jquery' => array( 'jquery', 'jquery.min', '' ),
118
+
119
+ /* jQuery UI */
120
+ 'jquery-ui-core' => array( 'jqueryui', 'jquery-ui.min', '' ),
121
+ 'jquery-ui-accordion' => array( '', '', 'jquery-ui-core' ),
122
+ 'jquery-ui-autocomplete' => array( '', '', 'jquery-ui-core' ), /* jQueri UI 1.8 */
123
+ 'jquery-ui-button' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
124
+ 'jquery-ui-datepicker' => array( '', '', 'jquery-ui-core' ),
125
+ 'jquery-ui-dialog' => array( '', '', 'jquery-ui-core' ),
126
+ 'jquery-ui-draggable' => array( '', '', 'jquery-ui-core' ),
127
+ 'jquery-ui-droppable' => array( '', '', 'jquery-ui-core' ),
128
+ 'jquery-ui-menu' => array( '', '', 'jquery-ui-core' ),
129
+ 'jquery-ui-mouse' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
130
+ 'jquery-ui-position' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
131
+ 'jquery-ui-progressbar' => array( '', '', 'jquery-ui-core' ),
132
+ 'jquery-ui-resizable' => array( '', '', 'jquery-ui-core' ),
133
+ 'jquery-ui-selectable' => array( '', '', 'jquery-ui-core' ),
134
+ 'jquery-ui-slider' => array( '', '', 'jquery-ui-core' ),
135
+ 'jquery-ui-sortable' => array( '', '', 'jquery-ui-core' ),
136
+ 'jquery-ui-tabs' => array( '', '', 'jquery-ui-core' ),
137
+ 'jquery-ui-widget' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
138
+
139
+ /* jQuery Effects */
140
+ 'jquery-effects-core' => array( '', '', 'jquery-ui-core' ),
141
+ 'jquery-effects-blind' => array( '', '', 'jquery-ui-core' ),
142
+ 'jquery-effects-bounce' => array( '', '', 'jquery-ui-core' ),
143
+ 'jquery-effects-clip' => array( '', '', 'jquery-ui-core' ),
144
+ 'jquery-effects-drop' => array( '', '', 'jquery-ui-core' ),
145
+ 'jquery-effects-explode' => array( '', '', 'jquery-ui-core' ),
146
+ 'jquery-effects-fade' => array( '', '', 'jquery-ui-core' ), /* jQuery UI 1.8 */
147
+ 'jquery-effects-fold' => array( '', '', 'jquery-ui-core' ),
148
+ 'jquery-effects-highlight' => array( '', '', 'jquery-ui-core' ),
149
+ 'jquery-effects-pulsate' => array( '', '', 'jquery-ui-core' ),
150
+ 'jquery-effects-scale' => array( '', '', 'jquery-ui-core' ),
151
+ 'jquery-effects-shake' => array( '', '', 'jquery-ui-core' ),
152
+ 'jquery-effects-slide' => array( '', '', 'jquery-ui-core' ),
153
+ 'jquery-effects-transfer' => array( '', '', 'jquery-ui-core' ),
154
+
155
+ /* prototype */
156
+ 'prototype' => array( 'prototype', 'prototype', '' ),
157
+
158
+ /* scriptaculous */
159
+ 'scriptaculous-root' => array( 'scriptaculous', 'scriptaculous', '' ),
160
+ 'scriptaculous-builder' => array( '', '', 'scriptaculous-root' ),
161
+ 'scriptaculous-effects' => array( '', '', 'scriptaculous-root' ),
162
+ 'scriptaculous-dragdrop' => array( '', '', 'scriptaculous-root' ),
163
+ 'scriptaculous-controls' => array( '', '', 'scriptaculous-root' ),
164
+ 'scriptaculous-slider' => array( '', '', 'scriptaculous-root' ),
165
+ 'scriptaculous-sound' => array( '', '', 'scriptaculous-root' ),
166
+
167
+ /* moo tools */
168
+ 'mootools' => array( 'mootools', 'mootools-yui-compressed', '' ),
169
+
170
+ /* Dojo */
171
+ 'dojo' => array( 'dojo', 'dojo.xd', '' ),
172
+
173
+ /* swfobject */
174
+ 'swfobject' => array( 'swfobject', 'swfobject', '' ),
175
+
176
+ /* YUI */
177
+ 'yui' => array( 'yui', 'build/yuiloader/yuiloader-min', '' ),
178
+
179
+ /* Ext Core */
180
+ 'ext-core' => array( 'ext-core', 'ext-core', '' )
181
+
182
+ );
183
 
184
  /**
185
  * PHP 5 Constructor
186
  */
187
  function __construct() {
188
+ $this->jquery_tag = 'jquery';
189
+ $this->google_scripts = self::$default_google_scripts;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
 
191
  $this->noconflict_next = FALSE;
192
  // protocol-relative URLS accepted by `wp_register_scripts`
193
  // starting with version 3.5
194
+ $this->protocol_relative_supported = version_compare(
195
+ get_bloginfo( 'version' ), '3.5', '>='
196
+ );
197
  }
198
 
199
  static function configure_plugin() {
200
+ add_action(
201
+ 'wp_default_scripts',
202
+ array(
203
+ 'JCP_UseGoogleLibraries',
204
+ 'replace_default_scripts_action',
205
+ ),
206
+ 1000
207
+ );
208
+ add_filter(
209
+ 'script_loader_src',
210
+ array( 'JCP_UseGoogleLibraries', 'remove_ver_query_filter' ),
211
+ 1000
212
+ );
213
+ add_filter(
214
+ 'init',
215
+ array( 'JCP_UseGoogleLibraries', 'setup_filter' )
216
+ );
217
+
218
+ // There's a chance some plugin has called wp_enqueue_script
219
+ // outside of any hooks, which means that this plugin's
220
+ // 'wp_default_scripts' hook will never get a chance to fire.
221
+ // This tries to work around that.
222
  global $wp_scripts;
223
  if ( is_a( $wp_scripts, 'WP_Scripts' ) ) {
224
  self::debug( self::$script_before_init_notice );
228
  }
229
 
230
  /**
231
+ * Get markup to show error message in admin when $WP_Script
232
+ * created before it's time
233
+ *
234
  * @returns string markup for notice display
235
  */
236
  static function script_before_init_admin_notice() {
237
+ echo '<div class="error fade"><p>Use Google Libraries: ' .
238
+ self::$script_before_init_notice . '</p></div>';
239
  }
240
 
241
  static function setup_filter() {
253
  static function debug( $message ) {
254
  if ( WP_DEBUG !== false ) {
255
  if ( is_array( $message ) || is_object( $message ) ) {
256
+ $message = var_export( $message, true );
257
  }
258
+ error_log( 'Use Google Libraries: ' . $message );
259
  }
260
  }
261
 
269
 
270
  }
271
 
 
272
  static function replace_default_scripts_action( &$scripts ) {
273
  $ugl = self::get_instance();
274
  $ugl->replace_default_scripts( $scripts );
275
  }
276
 
277
+ /**
278
+ * Sometimes WordPress registes `jquery.js` as `'jquery-core'`, while
279
+ * '`jquery`' is some other script with a dependency on
280
+ * `'jquery-core'`. If '`jquery-core`' in present in `$scripts`
281
+ * this is assumed to be the case and update the registration for
282
+ * '`jquery-core`' instead.
283
+ *
284
+ * @since 1.6
285
+ *
286
+ * @param object $scripts
287
+ */
288
+ protected function newscripts_fix_jquery_core( &$scripts ) {
289
+ // jquery may really be loaded under jquery-core
290
+ // if so, we'll adjust google_scripts here
291
+ if ( $scripts->query( 'jquery-core' ) && array_key_exists( 'jquery', $this->google_scripts ) ) {
292
+ $this->google_scripts['jquery-core'] = $this->google_scripts['jquery'];
293
+ unset( $this->google_scripts['jquery'] );
294
+ $this->jquery_tag = 'jquery-core';
295
+ }
296
+ }
297
+
298
+ protected function newscripts_build_url( $name, $lib, $ver, $js, $orig_url ) {
299
+
300
+ // if $lib is empty, then this script does not need to be
301
+ // exlicitly loaded when using googleapis.com, but we need to keep
302
+ // it around for dependencies
303
+ if ( $lib != '' ) {
304
+ // build new URL
305
+ $url = "//ajax.googleapis.com/ajax/libs/$lib/$ver/$js.js";
306
+ $head = wp_remote_head( "http:$url" );
307
+ if ( wp_remote_retrieve_response_code( $head ) !== 200 ) {
308
+ self::debug( "Google servers do not seem to be hosting requested version of $name (version $ver). Using version provided by WordPress." );
309
+ return $orig_url;
310
+ }
311
+ if ( ! $this->protocol_relative_supported ) {
312
+ return "http:$url";
313
+ }
314
+ return $url;
315
+ } else {
316
+ return '';
317
+ }
318
+ }
319
+
320
  /**
321
  * Collects replacement script registration data.
322
  *
335
  $newscripts = array();
336
  $combine_ok = array();
337
 
338
+ $this->newscripts_fix_jquery_core( $scripts );
 
 
 
 
 
 
339
 
340
  foreach ( $this->google_scripts as $name => $values ) {
341
  if ( $script = $scripts->query( $name ) ) {
368
  }
369
  }
370
 
371
+ $script->src = $this->newscripts_build_url(
372
+ $name, $lib, $ver, $js, $script->src
373
+ );
374
+
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  $newscripts[] = $script;
376
  $combine_ok[] = $name;
377
  }
432
  function replace_default_scripts( &$scripts ) {
433
  $newscripts = $this->get_newscripts( $scripts );
434
  foreach ( $newscripts as $script ) {
435
+ $olddata = $this->wp_dependency_get_data( $scripts, $script->handle );
436
  $scripts->remove( $script->handle );
437
  // re-register with original ver
438
  $scripts->add( $script->handle, $script->src, $script->deps, $script->ver );
445
  }
446
 
447
 
448
+ function wp_dependency_get_data( $dep_obj, $handle, $data_name = false ) {
449
 
450
+ if ( ! method_exists( $dep_obj, 'add_data' ) )
451
  return false;
452
 
453
+ if ( ! isset( $dep_obj->registered[$handle] ) )
454
  return false;
455
 
456
+ if ( ! $data_name )
457
  return $dep_obj->registered[$handle]->extra;
458
 
459
+ if ( ! method_exists( $dep_obj, 'get_data' ) )
460
  return $dep_obj->registered[$handle]->extra[$data_name];
461
 
462
  return $dep_obj->get_data( $handle, $data_name );
473
  function remove_ver_query( $src ) {
474
  if ( $this->noconflict_next ) {
475
  $this->noconflict_next = FALSE;
476
+ echo self::$noconflict_inject; // xss ok
477
  }
478
  if ( preg_match( '/ajax\.googleapis\.com\//', $src ) ) {
479
  $src = remove_query_arg( 'ver', $src );
480
+ if ( strpos( $src, $this->google_scripts[$this->jquery_tag][1] . '.js' ) ) {
481
  $this->noconflict_next = TRUE;
482
  }
483
  }
485
  }
486
 
487
  static function remove_ver_query_filter( $src ) {
488
+ $ugl = self::get_instance();
489
  return $ugl->remove_ver_query( $src );
490
  }
491
  }
492
+ }
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: speed, optimization, performance, speed booster, scripts to the footer, Google Libraries, CDN, defer parsing of javascript, remove query strings, GTmetrix, Google PageSpeed, YSlow
5
  Requires at least: 3.6
6
  Tested up to: 3.9.1
7
- Stable tag: 1.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -12,16 +12,29 @@ Features options to improve your website performance and get a higher score on t
12
 
13
  == Description ==
14
 
15
- Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major speed testing services such as [GTmetrix](http://gtmetrix.com/), [Google PageSpeed](http://developers.google.com/speed/pagespeed/insights/), *YSlow* or other speed testing tools.
16
 
17
- = Features =
 
 
 
 
 
 
 
 
 
 
18
 
19
  * **Moves scripts to the footer** to improve page loading speed.
20
  * **Loads javascript files from Google Libraries** rather than serving them from your WordPress install directly, to reduce latency, increase parallelism and improve caching.
21
  * **Defers parsing of javascript files** to reduce the initial load time of your page.
22
  * **Removes query strings from static resources** to improve your speed scores.
23
  * **Removes junk header tags** to clean up your WordPress Header.
24
- * **Page Load Stats** - is a brief statistic displayed in the plugin options page. It displays your homepage loading speed (in seconds) and number of processed queries.
 
 
 
25
 
26
  **Page loading time** – the progress bar color will be:
27
 
@@ -50,6 +63,9 @@ For complete usage instructions visit [Plugin Documentation](http://tiguandesign
50
 
51
  == Changelog ==
52
 
 
 
 
53
  = 1.2 =
54
  * Modified the plugin version number variable in plugin options page.
55
 
4
  Tags: speed, optimization, performance, speed booster, scripts to the footer, Google Libraries, CDN, defer parsing of javascript, remove query strings, GTmetrix, Google PageSpeed, YSlow
5
  Requires at least: 3.6
6
  Tested up to: 3.9.1
7
+ Stable tag: 1.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
12
 
13
  == Description ==
14
 
15
+ Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major speed testing services such as [GTmetrix](http://gtmetrix.com/), [Google PageSpeed](http://developers.google.com/speed/pagespeed/insights/), [YSlow](https://developer.yahoo.com/yslow/), [Pingdom](http://tools.pingdom.com/fpt/), [Webpagetest](http://www.webpagetest.org/) or other speed testing tools.
16
 
17
+ = Why Site Speed Is Important =
18
+
19
+ When visitors lands on your site for the first time, you only have a 3 seconds to capture their attention and convince them to stick around. That's not convinced you? Read on:
20
+
21
+
22
+ >* Google incorporating site speed in search rankings
23
+ * 47% of online consumers expect a web page to load in 2 seconds or less
24
+ * 40% of people will abandon a site that takes more than 3 seconds to load
25
+ * 80% of online consumers are less likely to return to a slow website
26
+
27
+ = Main Plugin Features =
28
 
29
  * **Moves scripts to the footer** to improve page loading speed.
30
  * **Loads javascript files from Google Libraries** rather than serving them from your WordPress install directly, to reduce latency, increase parallelism and improve caching.
31
  * **Defers parsing of javascript files** to reduce the initial load time of your page.
32
  * **Removes query strings from static resources** to improve your speed scores.
33
  * **Removes junk header tags** to clean up your WordPress Header.
34
+
35
+ = Page Load Stats =
36
+
37
+ Page Load Stats is a brief statistic displayed in the plugin options page. It displays your homepage loading speed (in seconds) and number of processed queries.
38
 
39
  **Page loading time** – the progress bar color will be:
40
 
63
 
64
  == Changelog ==
65
 
66
+ = 1.3 =
67
+ * Fixed strict standards error: redefining already defined constructor for class.
68
+
69
  = 1.2 =
70
  * Modified the plugin version number variable in plugin options page.
71
 
speed-booster-pack.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Speed Booster Pack
4
  * Plugin URI: http://tiguandesign.com
5
  * Description: Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major speed testing services such as <a href="http://gtmetrix.com/">GTmetrix</a>, <a href="http://developers.google.com/speed/pagespeed/insights/">Google PageSpeed</a> or other speed testing tools.
6
- * Version: 1.2
7
  * Author: Tiguan
8
  * Author URI: http://themeforest.net/user/Tiguan
9
  * License: GPLv2
@@ -38,7 +38,7 @@ $sbp_options = get_option( 'sbp_settings', 'checked' ); // retrieve the plugin s
38
 
39
  define( 'SPEED_BOOSTER_PACK_RELEASE_DATE', date_i18n( 'F j, Y', '1400569200' ) ); // Defining plugin release date
40
  define( 'SPEED_BOOSTER_PACK_PATH', plugin_dir_path( __FILE__ ) ); // Defining plugin dir path
41
- define( 'SPEED_BOOSTER_PACK_VERSION', 'v1.2'); // Defining plugin version
42
 
43
 
44
  /*----------------------------------------------
3
  * Plugin Name: Speed Booster Pack
4
  * Plugin URI: http://tiguandesign.com
5
  * Description: Speed Booster Pack allows you to improve your page loading speed and get a higher score on the major speed testing services such as <a href="http://gtmetrix.com/">GTmetrix</a>, <a href="http://developers.google.com/speed/pagespeed/insights/">Google PageSpeed</a> or other speed testing tools.
6
+ * Version: 1.3
7
  * Author: Tiguan
8
  * Author URI: http://themeforest.net/user/Tiguan
9
  * License: GPLv2
38
 
39
  define( 'SPEED_BOOSTER_PACK_RELEASE_DATE', date_i18n( 'F j, Y', '1400569200' ) ); // Defining plugin release date
40
  define( 'SPEED_BOOSTER_PACK_PATH', plugin_dir_path( __FILE__ ) ); // Defining plugin dir path
41
+ define( 'SPEED_BOOSTER_PACK_VERSION', 'v1.3'); // Defining plugin version
42
 
43
 
44
  /*----------------------------------------------