W3 Total Cache - Version 0.14.3

Version Description

  • Fix: Take "Accepted Query Strings" into account when "Cache query strings" enabled
  • Fix: Fix typo in variable for lazy loading
  • Update: Add lazy load Google Maps reference to the general settings page
  • Update: Support background-image: together with background: for lazy loading
Download this release

Release Info

Developer joemoto
Plugin Icon 128x128 W3 Total Cache
Version 0.14.3
Comparing to
See all releases

Code changes from version 0.14.2 to 0.14.3

Cdn_StackPath2_Page_View.php CHANGED
@@ -17,7 +17,6 @@ if ( !defined( 'W3TC' ) )
17
  <p>
18
  Enhance your website Performance with StackPath's CDN services. StackPath works magically with W3 Total Cache to speed up your site around the world for as little as $10 a month.
19
  </p>
20
- <p>New customers are eligible for a free trial.</p>
21
  <p>
22
  <a href="<?php echo esc_url( W3TC_STACKPATH_SIGNUP_URL )?>" target="_blank" id="netdna-stackpath-create-account" class="button-primary"><?php w3tc_e( 'cdn.stackpath2.signUpAndSave', 'Sign Up Now and save!' ) ?></a>
23
  </p>
17
  <p>
18
  Enhance your website Performance with StackPath's CDN services. StackPath works magically with W3 Total Cache to speed up your site around the world for as little as $10 a month.
19
  </p>
 
20
  <p>
21
  <a href="<?php echo esc_url( W3TC_STACKPATH_SIGNUP_URL )?>" target="_blank" id="netdna-stackpath-create-account" class="button-primary"><?php w3tc_e( 'cdn.stackpath2.signUpAndSave', 'Sign Up Now and save!' ) ?></a>
22
  </p>
Cdn_StackPath2_Widget_View_Unauthorized.php CHANGED
@@ -17,7 +17,7 @@ if ( !defined( 'W3TC' ) )
17
  <?php w3tc_e( 'cdn.stackpath.widget.v2.header',
18
  "Enhance your website performance by adding StackPath's (<acronym title='Content Delivery Network'>CDN</acronym>) service to your site." ) ?>
19
  </p>
20
- <h4 class="w3tcstackpath_signup_h4"><?php _e( 'New customer? Sign up now for a free trial!', 'w3-total-cache' )?></h4>
21
 
22
  <p>
23
  <?php w3tc_e( 'cdn.stackpath2.widget.v2.works_magically',
17
  <?php w3tc_e( 'cdn.stackpath.widget.v2.header',
18
  "Enhance your website performance by adding StackPath's (<acronym title='Content Delivery Network'>CDN</acronym>) service to your site." ) ?>
19
  </p>
20
+ <h4 class="w3tcstackpath_signup_h4"><?php _e( 'New customer? Sign up now to speed up your site!', 'w3-total-cache' )?></h4>
21
 
22
  <p>
23
  <?php w3tc_e( 'cdn.stackpath2.widget.v2.works_magically',
Cdnfsd_GeneralPage_View.php CHANGED
@@ -10,7 +10,8 @@ if ( !defined( 'W3TC' ) )
10
  <?php printf( __( ' If you do not have a <acronym title="Content Delivery Network">CDN</acronym> provider try StackPath. <a href="%s" target="_blank">Sign up now to enjoy a special offer!</a>.', 'w3-total-cache' ), wp_nonce_url( Util_Ui::admin_url( 'admin.php?page=w3tc_dashboard&w3tc_cdn_maxcdn_signup' ), 'w3tc' ) ); ?>
11
  <?php endif ?>
12
  </p>
13
- <table class="form-table">
 
14
  <?php
15
  Util_Ui::config_item_pro( array(
16
  'key' => 'cdnfsd.enabled',
@@ -20,14 +21,19 @@ if ( !defined( 'W3TC' ) )
20
  'disabled' => ( $is_pro ? null : true ),
21
  'excerpt' => __( 'Deliver visitors the lowest possible response and load times for all site content including HTML, media (e.g. images or fonts), CSS, and JavaScript.', 'w3-total-cache' ),
22
  'description' => array(
23
- __( 'Without Full Site Delivery, the HTML of your website is not delivered with the lowest latency possible. A small change to DNS settings means that every component of your website is delivered to visitors using a worldwide network of servers. The net result is more resources for content creation or for authenticated users to post comments or browser personalized experiences like e-commerce and membership sites etc.', 'w3-total-cache' ),
24
- __( 'For even better performance, combine FSD with other powerful features like Browser Cache, Minify, Fragment caching, or Lazy Load!', 'w3-total-cache' ),
25
- __( 'Contact support for any help maximizing your performance scores or troubleshooting.', 'w3-total-cache' )
 
 
 
 
 
 
 
26
  )
27
- ) )
28
- ?>
29
 
30
- <?php
31
  Util_Ui::config_item( array(
32
  'key' => 'cdnfsd.engine',
33
  'label' => __( '<acronym title="Full Site Delivery">FSD</acronym> <acronym title="Content Delivery Network">CDN</acronym> Type:', 'w3-total-cache' ),
@@ -36,7 +42,8 @@ if ( !defined( 'W3TC' ) )
36
  'value' => $cdnfsd_engine,
37
  'disabled' => ( $is_pro ? null : true ),
38
  'description' => __( 'Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.',
39
- 'w3-total-cache' ) . $cdnfsd_engine_extra_description
40
- ) )
 
41
  ?>
42
  </table>
10
  <?php printf( __( ' If you do not have a <acronym title="Content Delivery Network">CDN</acronym> provider try StackPath. <a href="%s" target="_blank">Sign up now to enjoy a special offer!</a>.', 'w3-total-cache' ), wp_nonce_url( Util_Ui::admin_url( 'admin.php?page=w3tc_dashboard&w3tc_cdn_maxcdn_signup' ), 'w3tc' ) ); ?>
11
  <?php endif ?>
12
  </p>
13
+
14
+ <table class="<?php echo esc_attr( Util_Ui::table_class() ); ?>">
15
  <?php
16
  Util_Ui::config_item_pro( array(
17
  'key' => 'cdnfsd.enabled',
21
  'disabled' => ( $is_pro ? null : true ),
22
  'excerpt' => __( 'Deliver visitors the lowest possible response and load times for all site content including HTML, media (e.g. images or fonts), CSS, and JavaScript.', 'w3-total-cache' ),
23
  'description' => array(
24
+ __( 'Want even faster speeds? The full site delivery Content Delivery Network will speed up your website by over 60% to increase conversions, revenue and reach your website visitors globally. With a Full Site Content Delivery Network (CDN), your website and all its assets will be available instantly to your visitors all over the world at blazing fast speeds.', 'w3-total-cache' ),
25
+ wp_kses(
26
+ sprintf(
27
+ // translators: 1 The opening anchor tag linking to our support page, 2 its closing tag.
28
+ __( 'For even better performance, combine FSD with other powerful features like Browser Cache, Minify, Fragment caching, or Lazy Load! Did you know that we offer premium support, customization and audit services? %1$sClick here for more information%2$s.', 'w3-total-cache' ),
29
+ '<a href="' . esc_url( admin_url( 'admin.php?page=w3tc_support' ) ) . '">',
30
+ '</a>'
31
+ ),
32
+ array( 'a' => array( 'href' => array() ) )
33
+ ),
34
  )
35
+ ) );
 
36
 
 
37
  Util_Ui::config_item( array(
38
  'key' => 'cdnfsd.engine',
39
  'label' => __( '<acronym title="Full Site Delivery">FSD</acronym> <acronym title="Content Delivery Network">CDN</acronym> Type:', 'w3-total-cache' ),
42
  'value' => $cdnfsd_engine,
43
  'disabled' => ( $is_pro ? null : true ),
44
  'description' => __( 'Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.',
45
+ 'w3-total-cache' ) . $cdnfsd_engine_extra_description,
46
+ 'show_in_free' => false,
47
+ ) );
48
  ?>
49
  </table>
Extension_Amp_Plugin.php CHANGED
@@ -192,36 +192,42 @@ class Extension_Amp_Plugin {
192
 
193
 
194
 
195
- static public function pagecache_extract_accept_qs( $query_strings ) {
196
  $c = Dispatcher::config();
197
 
198
  if ( $c->get_string( array( 'amp', 'url_type' ) ) == 'querystring' ) {
199
- $query_strings[] = $c->get_string( array( 'amp', 'url_postfix' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  }
201
 
202
- return $query_strings;
203
  }
204
 
205
 
206
 
207
- static public function pagecache_page_key( $page_key, $url, $page_key_extension ) {
208
  $c = Dispatcher::config();
209
 
210
- if ( $c->get_string( array( 'amp', 'url_type' ) ) == 'querystring' ) {
211
- $url_postfix = $c->get_string( array( 'amp', 'url_postfix' ) );
212
 
213
- if ( strpos( $url_postfix, '=' ) === false ) {
214
- if ( preg_match( "~(\\?|&)$url_postfix(=[^&]*)?(&|$)~", $url ) ) {
215
- $page_key[1] .= '_amp';
216
- }
217
- } else {
218
- if ( preg_match( "~(\\?|&)$url_postfix(&|$)~", $url ) ) {
219
- $page_key[1] .= '_amp';
220
- }
221
- }
222
  }
223
 
224
- return $page_key;
225
  }
226
 
227
 
@@ -290,8 +296,8 @@ class Extension_Amp_Plugin {
290
 
291
 
292
 
293
- w3tc_add_action( 'pagecache_extract_accept_qs',
294
- array( '\W3TC\Extension_Amp_Plugin', 'pagecache_extract_accept_qs' ) );
295
  w3tc_add_action( 'pagecache_page_key',
296
  array( '\W3TC\Extension_Amp_Plugin', 'pagecache_page_key' ) );
297
  w3tc_add_action( 'wp_loaded',
192
 
193
 
194
 
195
+ static public function pagecache_normalize_url_fragments( $url_fragments ) {
196
  $c = Dispatcher::config();
197
 
198
  if ( $c->get_string( array( 'amp', 'url_type' ) ) == 'querystring' ) {
199
+ if ( !empty( $url_fragments['querystring'] ) ) {
200
+ $qs = $c->get_string( array( 'amp', 'url_postfix' ) );
201
+
202
+ $url_qs = substr( $url_fragments['querystring'], 1 ); // cut off "?"
203
+
204
+ $regexp = Util_Environment::preg_quote( str_replace( '+', ' ', $qs ) );
205
+ if ( @preg_match( "~^(.*?&|)$regexp(=[^&]*)?(&.*|)$~i", $url_qs, $m ) ) {
206
+ $url_qs = $m[1] . $m[3];
207
+ $url_qs = preg_replace( '~[&]+~', '&', $url_qs );
208
+ $url_qs = trim( $url_qs, '&' );
209
+ $url_qs = empty( $url_qs ) ? '' : '?' . $url_qs;
210
+
211
+ $url_fragments['querystring'] = $url_qs;
212
+ $url_fragments['amp_extension'] = 1;
213
+ }
214
+ }
215
  }
216
 
217
+ return $url_fragments;
218
  }
219
 
220
 
221
 
222
+ static public function pagecache_page_key( $o ) {
223
  $c = Dispatcher::config();
224
 
225
+ if ( isset( $o['url_fragments']['amp_extension'] ) ) {
226
+ $o['key'][1] .= '_amp';
227
 
 
 
 
 
 
 
 
 
 
228
  }
229
 
230
+ return $o;
231
  }
232
 
233
 
296
 
297
 
298
 
299
+ w3tc_add_action( 'pagecache_normalize_url_fragments',
300
+ array( '\W3TC\Extension_Amp_Plugin', 'pagecache_normalize_url_fragments' ) );
301
  w3tc_add_action( 'pagecache_page_key',
302
  array( '\W3TC\Extension_Amp_Plugin', 'pagecache_page_key' ) );
303
  w3tc_add_action( 'wp_loaded',
Extension_FragmentCache_Plugin_Admin.php CHANGED
@@ -23,9 +23,8 @@ class Extension_FragmentCache_Plugin_Admin {
23
  'pro_feature' => true,
24
  'pro_excerpt' => __( 'Increase the performance of dynamic sites that cannot benefit from the caching of entire pages.', 'w3-total-cache' ),
25
  'pro_description' => array(
26
- __( 'Fragment caching extends the core functionality of WordPress by enabling caching policies to be set on groups of objects that are cached. The benefit of this approach is not only that capabilities in themes and plugins can be optimized to use caching to save resources and reduce response times, but caching methods like Memcached or Redis (for example) can also be used to scale. Instructions for use are available in the FAQ available under the help menu or contact support for premium services to improve website performance.', 'w3-total-cache' ),
27
-
28
- __( 'This feature gives you control over the caching policies by the group as well as visibility into the configuration by extending the WordPress Object API with additional functionality.', 'w3-total-cache' )
29
  ),
30
  'settings_exists' => true,
31
  'version' => '1.0',
23
  'pro_feature' => true,
24
  'pro_excerpt' => __( 'Increase the performance of dynamic sites that cannot benefit from the caching of entire pages.', 'w3-total-cache' ),
25
  'pro_description' => array(
26
+ __( 'Fragment caching extends the core functionality of WordPress by enabling caching policies to be set on groups of objects that are cached. This allows you to optimize various elements in themes and plugins to use caching to save resources and reduce response times. You can also use caching methods like Memcached or Redis (for example) to scale. Instructions for use are available in the FAQ available under the help menu. This feature also gives you control over the caching policies by the group as well as visibility into the configuration by extending the WordPress Object API with additional functionality.', 'w3-total-cache' ),
27
+ __( 'Fragment caching is a powerful, but advanced feature. If you need help, take a look at our premium support, customization and audit services.', 'w3-total-cache' ),
 
28
  ),
29
  'settings_exists' => true,
30
  'version' => '1.0',
Generic_Plugin_Admin.php CHANGED
@@ -41,6 +41,9 @@ class Generic_Plugin_Admin {
41
  add_action( 'admin_init_w3tc_dashboard', array(
42
  '\W3TC\Generic_WidgetServices',
43
  'admin_init_w3tc_dashboard' ) );
 
 
 
44
  add_action( 'admin_init_w3tc_dashboard', array(
45
  '\W3TC\Generic_WidgetBoldGrid',
46
  'admin_init_w3tc_dashboard' ) );
41
  add_action( 'admin_init_w3tc_dashboard', array(
42
  '\W3TC\Generic_WidgetServices',
43
  'admin_init_w3tc_dashboard' ) );
44
+ add_action( 'admin_init_w3tc_dashboard', array(
45
+ '\W3TC\Generic_WidgetCommunity',
46
+ 'admin_init_w3tc_dashboard' ) );
47
  add_action( 'admin_init_w3tc_dashboard', array(
48
  '\W3TC\Generic_WidgetBoldGrid',
49
  'admin_init_w3tc_dashboard' ) );
Generic_WidgetBoldGrid_Logo.svg CHANGED
@@ -1 +1 @@
1
- <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1027.74 143.07"><defs><style>.cls-1{fill:#000;}.cls-2{fill:#1a1a1a;}</style></defs><title>boldgrid-logo-horizontal-black</title><rect class="cls-1" x="28.5" y="78.46" width="68.07" height="38.4" rx="5.33" ry="5.33"/><rect class="cls-1" x="28.5" y="26.21" width="44.74" height="38.4" rx="4.64" ry="4.64"/><path class="cls-1" d="M123.55,143.07h-104A19.54,19.54,0,0,1,0,123.55v-104A19.54,19.54,0,0,1,19.51,0h104a19.54,19.54,0,0,1,19.51,19.51v4.39a5.25,5.25,0,1,1-10.51,0V19.51a9,9,0,0,0-9-9h-104a9,9,0,0,0-9,9v104a9,9,0,0,0,9,9h104a9,9,0,0,0,9-9V73a9,9,0,0,0-9-9H102.09a5.25,5.25,0,1,1,0-10.51h21.46A19.54,19.54,0,0,1,143.07,73v50.5A19.54,19.54,0,0,1,123.55,143.07Z"/><path class="cls-2" d="M237.06,123.24V19.83h27a55.25,55.25,0,0,1,13.22,1.48,28.51,28.51,0,0,1,10.19,4.58,21.12,21.12,0,0,1,6.57,8.05,27,27,0,0,1,2.36,11.75,29.66,29.66,0,0,1-4.36,16.1q-4.36,6.94-13.22,9.46a31.22,31.22,0,0,1,8.05,3,24,24,0,0,1,6.8,5.32A26.6,26.6,0,0,1,298.37,87a24.91,24.91,0,0,1,1.77,9.6,23.13,23.13,0,0,1-2.81,11.6,25.54,25.54,0,0,1-7.46,8.27,34.06,34.06,0,0,1-10.71,5,45.71,45.71,0,0,1-12.41,1.7ZM249.32,31.5V65.33h16q8.72,0,13.81-4.88t5.1-12.85q0-8.72-5.32-12.41T265,31.5Zm0,45.5v34.57h16.4a34,34,0,0,0,8.57-1,21.25,21.25,0,0,0,7-3.18,16.25,16.25,0,0,0,4.8-5.24,14.64,14.64,0,0,0,1.77-7.39,15.06,15.06,0,0,0-2.07-8,17.08,17.08,0,0,0-5.39-5.54A24.48,24.48,0,0,0,272.67,78a39.6,39.6,0,0,0-9-1Z"/><path class="cls-2" d="M332.94,71.68a51.5,51.5,0,0,1,4.14-20.46,53.43,53.43,0,0,1,28.07-28.37,52,52,0,0,1,41,0,54,54,0,0,1,28.37,28.37,52,52,0,0,1,0,41,53.44,53.44,0,0,1-28.37,28.07,52.86,52.86,0,0,1-41,0,52.9,52.9,0,0,1-28.07-28.07A51.33,51.33,0,0,1,332.94,71.68Zm12.26,0a40.76,40.76,0,0,0,11.89,29A42,42,0,0,0,370,109.5a40.07,40.07,0,0,0,31.62,0,42,42,0,0,0,12.93-8.79,41.59,41.59,0,0,0,8.72-45.06,41.36,41.36,0,0,0-21.64-21.94,40.07,40.07,0,0,0-31.62,0,41.36,41.36,0,0,0-21.64,21.94A40.47,40.47,0,0,0,345.2,71.68Z"/><path class="cls-2" d="M466.94,123.24V19.83H479.2v91.74h53.48v11.67Z"/><path class="cls-2" d="M565,19.83h24.08a55.74,55.74,0,0,1,20.09,3.62,49,49,0,0,1,16.55,10.42A49.78,49.78,0,0,1,637,50.19a53.47,53.47,0,0,1,4.14,21.5,56.8,56.8,0,0,1-3,17.88,45.9,45.9,0,0,1-9.83,16.62,51.76,51.76,0,0,1-17.65,12.26q-10.86,4.8-26.52,4.8H565ZM577.29,31.5v79.92h10.34a46.17,46.17,0,0,0,16.25-2.81A37.44,37.44,0,0,0,625.68,88a41,41,0,0,0,3.18-16.47A41.5,41.5,0,0,0,625.68,55,37.66,37.66,0,0,0,617,42.36a38.18,38.18,0,0,0-13.07-8.05,46.23,46.23,0,0,0-16.25-2.81Z"/><path class="cls-2" d="M725.62,84.83V78.92h19.5q4.43,0,6.21,1.63t1.77,5.91V117a58.78,58.78,0,0,1-12.63,5.39,49.9,49.9,0,0,1-14.26,2,51.32,51.32,0,0,1-20.54-4.14,52.89,52.89,0,0,1-28.07-28.07,51.34,51.34,0,0,1-4.14-20.54,51.88,51.88,0,0,1,4.14-20.61,53,53,0,0,1,11.3-16.84,54.28,54.28,0,0,1,16.77-11.38,50.55,50.55,0,0,1,20.54-4.21,51.71,51.71,0,0,1,14.26,1.92A55.35,55.35,0,0,1,753.25,26q-.89,1.19-1.7,2.51t-1.7,2.51a46.05,46.05,0,0,0-11.15-4.8,45.56,45.56,0,0,0-12.48-1.7,44.13,44.13,0,0,0-18.1,3.77,48,48,0,0,0-14.85,10.19,47.26,47.26,0,0,0-10,15,46.55,46.55,0,0,0-3.62,18.32,45.64,45.64,0,0,0,3.62,18.1,46.56,46.56,0,0,0,10,14.85,48.09,48.09,0,0,0,14.7,10,43.84,43.84,0,0,0,18,3.69,45.14,45.14,0,0,0,21-5V88.67a4.75,4.75,0,0,0-.74-2.81q-.74-1-3.25-1Z"/><path class="cls-2" d="M795.2,123.24V19.83h22.16a38.81,38.81,0,0,1,10,1.48A34.16,34.16,0,0,1,837.68,26a28.06,28.06,0,0,1,8.05,8.42A22.86,22.86,0,0,1,849,46.86q0,10.64-5.69,17.65t-16.47,9.23q5.91,12.56,11.75,24.82t11.6,24.67h-6.65Q837.75,110.83,832,98.72T820.47,74.34c-.89.1-1.75.17-2.58.22s-1.7.07-2.59.07h-14v48.61Zm6.06-54.66h15.37a34.18,34.18,0,0,0,12.78-2.07,22.43,22.43,0,0,0,8.13-5.32,18.37,18.37,0,0,0,4.21-7,24.4,24.4,0,0,0,1.18-7.31,17.11,17.11,0,0,0-2-8,22.06,22.06,0,0,0-5.54-6.8A27,27,0,0,0,827,27.43a30.58,30.58,0,0,0-10.27-1.7H801.26Z"/><path class="cls-2" d="M897.88,19.83h6.06V123.24h-6.06Z"/><path class="cls-2" d="M954,19.83h21.72a55.74,55.74,0,0,1,20.09,3.62,49.55,49.55,0,0,1,16.55,10.34,48.78,48.78,0,0,1,11.23,16.32,53.64,53.64,0,0,1,4.14,21.42,56.8,56.8,0,0,1-3,17.88,46.6,46.6,0,0,1-9.82,16.69,51.25,51.25,0,0,1-17.66,12.34q-10.86,4.8-26.52,4.8H954Zm6.06,5.91v91.45h12.85a54.16,54.16,0,0,0,21.42-3.92A45.26,45.26,0,0,0,1009.56,103a41.93,41.93,0,0,0,9.08-14.55,48.47,48.47,0,0,0,3-16.92,48,48,0,0,0-3.62-19,42.57,42.57,0,0,0-24.52-23.64,49.67,49.67,0,0,0-17.8-3.18Z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 1027.74 143.07"><defs><style>.cls-1{fill:#000}.cls-2{fill:#1a1a1a}</style></defs><title>boldgrid-logo-horizontal-black</title><rect width="68.07" height="38.4" x="28.5" y="78.46" class="cls-1" rx="5.33" ry="5.33"/><rect width="44.74" height="38.4" x="28.5" y="26.21" class="cls-1" rx="4.64" ry="4.64"/><path d="M123.55,143.07h-104A19.54,19.54,0,0,1,0,123.55v-104A19.54,19.54,0,0,1,19.51,0h104a19.54,19.54,0,0,1,19.51,19.51v4.39a5.25,5.25,0,1,1-10.51,0V19.51a9,9,0,0,0-9-9h-104a9,9,0,0,0-9,9v104a9,9,0,0,0,9,9h104a9,9,0,0,0,9-9V73a9,9,0,0,0-9-9H102.09a5.25,5.25,0,1,1,0-10.51h21.46A19.54,19.54,0,0,1,143.07,73v50.5A19.54,19.54,0,0,1,123.55,143.07Z" class="cls-1"/><path d="M237.06,123.24V19.83h27a55.25,55.25,0,0,1,13.22,1.48,28.51,28.51,0,0,1,10.19,4.58,21.12,21.12,0,0,1,6.57,8.05,27,27,0,0,1,2.36,11.75,29.66,29.66,0,0,1-4.36,16.1q-4.36,6.94-13.22,9.46a31.22,31.22,0,0,1,8.05,3,24,24,0,0,1,6.8,5.32A26.6,26.6,0,0,1,298.37,87a24.91,24.91,0,0,1,1.77,9.6,23.13,23.13,0,0,1-2.81,11.6,25.54,25.54,0,0,1-7.46,8.27,34.06,34.06,0,0,1-10.71,5,45.71,45.71,0,0,1-12.41,1.7ZM249.32,31.5V65.33h16q8.72,0,13.81-4.88t5.1-12.85q0-8.72-5.32-12.41T265,31.5Zm0,45.5v34.57h16.4a34,34,0,0,0,8.57-1,21.25,21.25,0,0,0,7-3.18,16.25,16.25,0,0,0,4.8-5.24,14.64,14.64,0,0,0,1.77-7.39,15.06,15.06,0,0,0-2.07-8,17.08,17.08,0,0,0-5.39-5.54A24.48,24.48,0,0,0,272.67,78a39.6,39.6,0,0,0-9-1Z" class="cls-2"/><path d="M332.94,71.68a51.5,51.5,0,0,1,4.14-20.46,53.43,53.43,0,0,1,28.07-28.37,52,52,0,0,1,41,0,54,54,0,0,1,28.37,28.37,52,52,0,0,1,0,41,53.44,53.44,0,0,1-28.37,28.07,52.86,52.86,0,0,1-41,0,52.9,52.9,0,0,1-28.07-28.07A51.33,51.33,0,0,1,332.94,71.68Zm12.26,0a40.76,40.76,0,0,0,11.89,29A42,42,0,0,0,370,109.5a40.07,40.07,0,0,0,31.62,0,42,42,0,0,0,12.93-8.79,41.59,41.59,0,0,0,8.72-45.06,41.36,41.36,0,0,0-21.64-21.94,40.07,40.07,0,0,0-31.62,0,41.36,41.36,0,0,0-21.64,21.94A40.47,40.47,0,0,0,345.2,71.68Z" class="cls-2"/><path d="M466.94,123.24V19.83H479.2v91.74h53.48v11.67Z" class="cls-2"/><path d="M565,19.83h24.08a55.74,55.74,0,0,1,20.09,3.62,49,49,0,0,1,16.55,10.42A49.78,49.78,0,0,1,637,50.19a53.47,53.47,0,0,1,4.14,21.5,56.8,56.8,0,0,1-3,17.88,45.9,45.9,0,0,1-9.83,16.62,51.76,51.76,0,0,1-17.65,12.26q-10.86,4.8-26.52,4.8H565ZM577.29,31.5v79.92h10.34a46.17,46.17,0,0,0,16.25-2.81A37.44,37.44,0,0,0,625.68,88a41,41,0,0,0,3.18-16.47A41.5,41.5,0,0,0,625.68,55,37.66,37.66,0,0,0,617,42.36a38.18,38.18,0,0,0-13.07-8.05,46.23,46.23,0,0,0-16.25-2.81Z" class="cls-2"/><path d="M725.62,84.83V78.92h19.5q4.43,0,6.21,1.63t1.77,5.91V117a58.78,58.78,0,0,1-12.63,5.39,49.9,49.9,0,0,1-14.26,2,51.32,51.32,0,0,1-20.54-4.14,52.89,52.89,0,0,1-28.07-28.07,51.34,51.34,0,0,1-4.14-20.54,51.88,51.88,0,0,1,4.14-20.61,53,53,0,0,1,11.3-16.84,54.28,54.28,0,0,1,16.77-11.38,50.55,50.55,0,0,1,20.54-4.21,51.71,51.71,0,0,1,14.26,1.92A55.35,55.35,0,0,1,753.25,26q-.89,1.19-1.7,2.51t-1.7,2.51a46.05,46.05,0,0,0-11.15-4.8,45.56,45.56,0,0,0-12.48-1.7,44.13,44.13,0,0,0-18.1,3.77,48,48,0,0,0-14.85,10.19,47.26,47.26,0,0,0-10,15,46.55,46.55,0,0,0-3.62,18.32,45.64,45.64,0,0,0,3.62,18.1,46.56,46.56,0,0,0,10,14.85,48.09,48.09,0,0,0,14.7,10,43.84,43.84,0,0,0,18,3.69,45.14,45.14,0,0,0,21-5V88.67a4.75,4.75,0,0,0-.74-2.81q-.74-1-3.25-1Z" class="cls-2"/><path d="M795.2,123.24V19.83h22.16a38.81,38.81,0,0,1,10,1.48A34.16,34.16,0,0,1,837.68,26a28.06,28.06,0,0,1,8.05,8.42A22.86,22.86,0,0,1,849,46.86q0,10.64-5.69,17.65t-16.47,9.23q5.91,12.56,11.75,24.82t11.6,24.67h-6.65Q837.75,110.83,832,98.72T820.47,74.34c-.89.1-1.75.17-2.58.22s-1.7.07-2.59.07h-14v48.61Zm6.06-54.66h15.37a34.18,34.18,0,0,0,12.78-2.07,22.43,22.43,0,0,0,8.13-5.32,18.37,18.37,0,0,0,4.21-7,24.4,24.4,0,0,0,1.18-7.31,17.11,17.11,0,0,0-2-8,22.06,22.06,0,0,0-5.54-6.8A27,27,0,0,0,827,27.43a30.58,30.58,0,0,0-10.27-1.7H801.26Z" class="cls-2"/><path d="M897.88,19.83h6.06V123.24h-6.06Z" class="cls-2"/><path d="M954,19.83h21.72a55.74,55.74,0,0,1,20.09,3.62,49.55,49.55,0,0,1,16.55,10.34,48.78,48.78,0,0,1,11.23,16.32,53.64,53.64,0,0,1,4.14,21.42,56.8,56.8,0,0,1-3,17.88,46.6,46.6,0,0,1-9.82,16.69,51.25,51.25,0,0,1-17.66,12.34q-10.86,4.8-26.52,4.8H954Zm6.06,5.91v91.45h12.85a54.16,54.16,0,0,0,21.42-3.92A45.26,45.26,0,0,0,1009.56,103a41.93,41.93,0,0,0,9.08-14.55,48.47,48.47,0,0,0,3-16.92,48,48,0,0,0-3.62-19,42.57,42.57,0,0,0-24.52-23.64,49.67,49.67,0,0,0-17.8-3.18Z" class="cls-2"/></svg>
Generic_WidgetCommunity.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace W3TC;
3
+
4
+ /**
5
+ * Class Generic_Plugin_WidgetCommunity.
6
+ *
7
+ * @since 0.14.3
8
+ */
9
+ class Generic_WidgetCommunity {
10
+ /**
11
+ * Dashboard setup action.
12
+ *
13
+ * @since 0.14.3
14
+ */
15
+ static public function admin_init_w3tc_dashboard() {
16
+ // If we're on pro, abort.
17
+ if ( Util_Environment::is_w3tc_pro( Dispatcher::config() ) ) {
18
+ return;
19
+ }
20
+
21
+ $o = new Generic_WidgetCommunity();
22
+
23
+ add_action( 'w3tc_widget_setup', array( $o, 'wp_dashboard_setup' ), 1000 );
24
+ add_action( 'w3tc_network_dashboard_setup', array( $o, 'wp_dashboard_setup' ), 1000 );
25
+ }
26
+
27
+ /**
28
+ * Add our community widget to the dashboard.
29
+ *
30
+ * @since 0.14.3
31
+ */
32
+ function wp_dashboard_setup() {
33
+ Util_Widget::add(
34
+ 'w3tc_community',
35
+ '<div class="w3tc-widget-w3tc-logo"></div>' .
36
+ '<div class="w3tc-widget-text">' .
37
+ __( 'W3TC Community Edition', 'w3-total-cache' ) .
38
+ '</div>',
39
+ array( $this, 'widget_form' ),
40
+ null,
41
+ 'normal'
42
+ );
43
+ }
44
+
45
+ /**
46
+ * Render the content of our widget.
47
+ *
48
+ * @since 0.14.3
49
+ */
50
+ public function widget_form() {
51
+ include W3TC_DIR . '/Generic_WidgetCommunity_View.php';
52
+ }
53
+ }
Generic_WidgetCommunity_View.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace W3TC;
3
+
4
+ if ( !defined( 'W3TC' ) )
5
+ die();
6
+ ?>
7
+
8
+ <p>
9
+ <?php echo wp_kses(
10
+ sprintf(
11
+ __( 'You\'re using the Community Edition of W3 Total Cache. Maximize your website\'s speed even more by upgrading to %1$sW3 Total Cache Pro%2$s to unlock:', 'w3-total-cache' ),
12
+ '<strong>',
13
+ '</strong>'
14
+ ),
15
+ array( 'strong' => array() )
16
+ ); ?>
17
+ </p>
18
+
19
+ <ul class="w3tc-visible-ul">
20
+ <li><?php esc_html_e( 'Advanced Analytics', 'w3-total-cache' ); ?></li>
21
+ <li><?php esc_html_e( 'Fragment Caching', 'w3-total-cache' ); ?></li>
22
+ <li><?php esc_html_e( 'Full Site Delivery', 'w3-total-cache' ); ?></li>
23
+ <li><?php esc_html_e( 'Extension Support', 'w3-total-cache' ); ?></li>
24
+ </ul>
25
+
26
+ <p>
27
+ <?php echo wp_kses(
28
+ sprintf(
29
+ __( 'Plus, there\'s even more that allow you to completely fine tune your website\'s performance.', 'w3-total-cache' ),
30
+ '<strong>',
31
+ '</strong>'
32
+ ),
33
+ array( 'strong' => array() )
34
+ ); ?>
35
+ </p>
36
+
37
+ <p>
38
+ <input
39
+ type="button"
40
+ class="button-primary button-buy-plugin"
41
+ data-src="community_widget" value="<?php esc_attr_e( 'Learn more about Pro', 'w3-total-cache' ) ?>" />
42
+ </p>
PgCache_ContentGrabber.php CHANGED
@@ -53,19 +53,16 @@ class PgCache_ContentGrabber {
53
  */
54
  var $_debug = false;
55
 
56
- /**
57
- * Request host
58
- *
59
- * @var string
60
- */
61
- var $_request_host = '';
62
-
63
  /**
64
  * Request URI
65
  *
66
  * @var string
67
  */
68
- var $_request_uri = '';
 
 
 
 
69
 
70
  /**
71
  * Page key
@@ -124,8 +121,9 @@ class PgCache_ContentGrabber {
124
  $this->_config = Dispatcher::config();
125
  $this->_debug = $this->_config->get_boolean( 'pgcache.debug' );
126
 
127
- $request_host = Util_Environment::host_port();
128
- $this->_request_host = $request_host;
 
129
 
130
  $this->_request_uri = $_SERVER['REQUEST_URI'];
131
  $this->_lifetime = $this->_config->get_integer( 'pgcache.lifetime' );
@@ -302,7 +300,7 @@ class PgCache_ContentGrabber {
302
  if ( !$data ) {
303
  if ( $this->_debug ) {
304
  self::log( 'no cache entry for ' .
305
- $this->_request_host . $this->_request_uri . ' ' .
306
  $this->_page_key );
307
  }
308
 
@@ -323,7 +321,7 @@ class PgCache_ContentGrabber {
323
  // return empty value if caching should not happen
324
  $this->_page_group = apply_filters( 'w3tc_page_extract_group',
325
  $page_key_extension['group'],
326
- $this->_request_host . $this->_request_uri,
327
  $page_key_extension );
328
  $page_key_extension['group'] = $this->_page_group;
329
  }
@@ -340,7 +338,7 @@ class PgCache_ContentGrabber {
340
  $page_key_extension['encryption'],
341
  $page_key_extension['compression'],
342
  $page_key_extension['content_type'],
343
- $this->_request_host . $this->_request_uri,
344
  $page_key_extension );
345
  }
346
 
@@ -556,7 +554,9 @@ class PgCache_ContentGrabber {
556
  /**
557
  * Skip if there is query in the request uri
558
  */
559
- if ( !$this->_is_ignored_query_string( $this->_request_uri ) ) {
 
 
560
  $should_reject_qs =
561
  ( !$this->_config->get_boolean( 'pgcache.cache.query' ) ||
562
  $this->_config->get_string( 'pgcache.engine' ) == 'file_generic' );
@@ -567,7 +567,7 @@ class PgCache_ContentGrabber {
567
  $should_reject_qs = false;
568
  }
569
 
570
- if ( $should_reject_qs && strstr( $this->_request_uri, '?' ) !== false ) {
571
  $this->cache_reject_reason = 'Requested URI contains query';
572
  $this->process_status = 'miss_query_string';
573
 
@@ -1214,7 +1214,7 @@ class PgCache_ContentGrabber {
1214
  // fill group
1215
  $extension['group'] = $this->get_cache_group_by_uri( $this->_request_uri );
1216
  $extension = w3tc_apply_filters( 'pagecache_key_extension', $extension,
1217
- $this->_request_host, $this->_request_uri );
1218
 
1219
  return $extension;
1220
  }
@@ -1443,24 +1443,33 @@ class PgCache_ContentGrabber {
1443
  */
1444
  function _get_page_key( $page_key_extension, $request_url = '' ) {
1445
  // key url part
1446
- if ( $request_url ) {
 
 
 
 
1447
  $parts = parse_url( $request_url );
1448
 
1449
  if ( isset( $parts['host'] ) ) {
1450
- $key_urlpart = $parts['host'] .
1451
  ( isset( $parts['port'] ) ? ':' . $parts['port'] : '' );
1452
  } else {
1453
- $key_urlpart = $this->_request_host;
1454
  }
1455
 
1456
- $key_urlpart .=
1457
- ( isset( $parts['path'] ) ? $parts['path'] : '' ) .
 
1458
  ( isset( $parts['query'] ) ? '?' . $parts['query'] : '' );
1459
- } else {
1460
- $request_url = $this->_request_host . $this->_request_uri;
1461
- $key_urlpart = $request_url;
1462
  }
1463
 
 
 
 
 
 
1464
  $key_urlpart = $this->_get_page_key_urlpart( $key_urlpart, $page_key_extension );
1465
 
1466
  // key extension
@@ -1484,8 +1493,8 @@ class PgCache_ContentGrabber {
1484
  $page_key_extension['content_type'] : '';
1485
 
1486
  if ( @preg_match( "~(text/xml|text/xsl|application/rdf\+xml|application/rss\+xml|application/atom\+xml)~i", $content_type ) ||
1487
- preg_match( W3TC_FEED_REGEXP, $request_url ) ||
1488
- strpos( $request_url, ".xsl" ) !== false ) {
1489
  $key_postfix = '.xml';
1490
  }
1491
  }
@@ -1493,18 +1502,22 @@ class PgCache_ContentGrabber {
1493
 
1494
  // key compression
1495
  $key_compression = '';
1496
- if ( $page_key_extension['compression'] )
1497
  $key_compression = '_' . $page_key_extension['compression'];
 
1498
 
1499
- $key = w3tc_apply_filters( 'pagecache_page_key',
1500
- array(
1501
- $key_urlpart,
1502
- $key_extension,
1503
- $key_postfix,
1504
- $key_compression
1505
- ), $request_url, $page_key_extension );
 
 
 
1506
 
1507
- return implode( '', $key );
1508
  }
1509
 
1510
  private function _get_page_key_urlpart( $key, $page_key_extension ) {
@@ -1539,11 +1552,6 @@ class PgCache_ContentGrabber {
1539
  }
1540
  }
1541
 
1542
- if ( $this->_is_ignored_query_string( $key ) ) {
1543
- // remove query string
1544
- $key = preg_replace( '~\?.*$~', '', $key );
1545
- }
1546
-
1547
  return md5( $key );
1548
  }
1549
 
@@ -1959,38 +1967,65 @@ class PgCache_ContentGrabber {
1959
  return in_array( $content_type, $cache_headers );
1960
  }
1961
 
1962
- private function _is_ignored_query_string( $uri ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1963
  $ignore_qs = $this->_config->get_array( 'pgcache.accept.qs' );
1964
  $ignore_qs = w3tc_apply_filters( 'pagecache_extract_accept_qs', $ignore_qs );
1965
  Util_Rule::array_trim( $ignore_qs );
1966
 
1967
- if ( empty( $ignore_qs ) ) {
1968
- return false;
1969
  }
1970
 
1971
- $p = strpos( $uri, '?' );
1972
- if ( $p === false ) {
1973
- return false;
1974
- }
1975
- $uri = substr( $uri, $p + 1 );
1976
 
1977
  foreach ( $ignore_qs as $qs ) {
1978
  $m = null;
1979
  if ( strpos( $qs, '=' ) === false ) {
1980
  $regexp = Util_Environment::preg_quote( str_replace( '+', ' ', $qs ) );
1981
- if ( @preg_match( "~^(.*?&|)$regexp(=[^&]*)?(&.*|)$~i", $uri, $m ) ) {
1982
- $uri = $m[1] . $m[3];
1983
  }
1984
  } else {
1985
  $regexp = Util_Environment::preg_quote( str_replace( '+', ' ', $qs ) );
1986
 
1987
- if ( @preg_match( "~^(.*?&|)$regexp(&.*|)$~i", $uri, $m ) ) {
1988
- $uri = $m[1] . $m[2];
1989
  }
1990
  }
1991
  }
1992
 
1993
- return preg_match( "~^[&]*$~", $uri );
 
 
 
1994
  }
1995
 
1996
  /**
53
  */
54
  var $_debug = false;
55
 
 
 
 
 
 
 
 
56
  /**
57
  * Request URI
58
  *
59
  * @var string
60
  */
61
+ private $_request_uri;
62
+
63
+ // filled by _preprocess_request_uri
64
+ // - ['host' => 'path' => , 'querystring' => ]
65
+ private $_request_url_fragments;
66
 
67
  /**
68
  * Page key
121
  $this->_config = Dispatcher::config();
122
  $this->_debug = $this->_config->get_boolean( 'pgcache.debug' );
123
 
124
+ $this->_request_url_fragments = array(
125
+ 'host' => Util_Environment::host_port()
126
+ );
127
 
128
  $this->_request_uri = $_SERVER['REQUEST_URI'];
129
  $this->_lifetime = $this->_config->get_integer( 'pgcache.lifetime' );
300
  if ( !$data ) {
301
  if ( $this->_debug ) {
302
  self::log( 'no cache entry for ' .
303
+ $this->_request_url_fragments['host'] . $this->_request_uri . ' ' .
304
  $this->_page_key );
305
  }
306
 
321
  // return empty value if caching should not happen
322
  $this->_page_group = apply_filters( 'w3tc_page_extract_group',
323
  $page_key_extension['group'],
324
+ $this->_request_url_fragments['host'] . $this->_request_uri,
325
  $page_key_extension );
326
  $page_key_extension['group'] = $this->_page_group;
327
  }
338
  $page_key_extension['encryption'],
339
  $page_key_extension['compression'],
340
  $page_key_extension['content_type'],
341
+ $this->_request_url_fragments['host'] . $this->_request_uri,
342
  $page_key_extension );
343
  }
344
 
554
  /**
555
  * Skip if there is query in the request uri
556
  */
557
+ $this->_preprocess_request_uri();
558
+
559
+ if ( !empty( $this->_request_url_fragments['querystring'] ) ) {
560
  $should_reject_qs =
561
  ( !$this->_config->get_boolean( 'pgcache.cache.query' ) ||
562
  $this->_config->get_string( 'pgcache.engine' ) == 'file_generic' );
567
  $should_reject_qs = false;
568
  }
569
 
570
+ if ( $should_reject_qs ) {
571
  $this->cache_reject_reason = 'Requested URI contains query';
572
  $this->process_status = 'miss_query_string';
573
 
1214
  // fill group
1215
  $extension['group'] = $this->get_cache_group_by_uri( $this->_request_uri );
1216
  $extension = w3tc_apply_filters( 'pagecache_key_extension', $extension,
1217
+ $this->_request_url_fragments['host'], $this->_request_uri );
1218
 
1219
  return $extension;
1220
  }
1443
  */
1444
  function _get_page_key( $page_key_extension, $request_url = '' ) {
1445
  // key url part
1446
+ if ( empty( $request_url ) ) {
1447
+ $request_url_fragments = $this->_request_url_fragments;
1448
+ } else {
1449
+ $request_url_fragments = array();
1450
+
1451
  $parts = parse_url( $request_url );
1452
 
1453
  if ( isset( $parts['host'] ) ) {
1454
+ $request_url_fragments['host'] = $parts['host'] .
1455
  ( isset( $parts['port'] ) ? ':' . $parts['port'] : '' );
1456
  } else {
1457
+ $request_url_fragments['host'] = $this->_request_url_fragments['host'];
1458
  }
1459
 
1460
+ $request_url_fragments['path'] =
1461
+ ( isset( $parts['path'] ) ? $parts['path'] : '' );
1462
+ $request_url_fragments['querystring'] =
1463
  ( isset( $parts['query'] ) ? '?' . $parts['query'] : '' );
1464
+ $request_url_fragments = $this->_normalize_url_fragments(
1465
+ $request_url_fragments );
 
1466
  }
1467
 
1468
+ $key_urlpart =
1469
+ $request_url_fragments['host'] .
1470
+ $request_url_fragments['path'] .
1471
+ $request_url_fragments['querystring'];
1472
+
1473
  $key_urlpart = $this->_get_page_key_urlpart( $key_urlpart, $page_key_extension );
1474
 
1475
  // key extension
1493
  $page_key_extension['content_type'] : '';
1494
 
1495
  if ( @preg_match( "~(text/xml|text/xsl|application/rdf\+xml|application/rss\+xml|application/atom\+xml)~i", $content_type ) ||
1496
+ preg_match( W3TC_FEED_REGEXP, $request_url_fragments['path'] ) ||
1497
+ strpos( $request_url_fragments['path'], ".xsl" ) !== false ) {
1498
  $key_postfix = '.xml';
1499
  }
1500
  }
1502
 
1503
  // key compression
1504
  $key_compression = '';
1505
+ if ( $page_key_extension['compression'] ) {
1506
  $key_compression = '_' . $page_key_extension['compression'];
1507
+ }
1508
 
1509
+ $key = w3tc_apply_filters( 'pagecache_page_key', array(
1510
+ 'key' => array(
1511
+ $key_urlpart,
1512
+ $key_extension,
1513
+ $key_postfix,
1514
+ $key_compression
1515
+ ),
1516
+ 'page_key_extension' => $page_key_extension,
1517
+ 'url_fragments' => $this->_request_url_fragments
1518
+ ) );
1519
 
1520
+ return implode( '', $key['key'] );
1521
  }
1522
 
1523
  private function _get_page_key_urlpart( $key, $page_key_extension ) {
1552
  }
1553
  }
1554
 
 
 
 
 
 
1555
  return md5( $key );
1556
  }
1557
 
1967
  return in_array( $content_type, $cache_headers );
1968
  }
1969
 
1970
+ /**
1971
+ * Fills $_request_url_fragments['path'], $_request_url_fragments['querystring']
1972
+ * with cache-related normalized values
1973
+ */
1974
+ private function _preprocess_request_uri() {
1975
+ $p = explode( '?', $this->_request_uri, 2 );
1976
+
1977
+ $this->_request_url_fragments['path'] = $p[0];
1978
+ $this->_request_url_fragments['querystring'] =
1979
+ ( empty( $p[1] ) ? '' : '?' . $p[1] );
1980
+
1981
+ $this->_request_url_fragments = $this->_normalize_url_fragments(
1982
+ $this->_request_url_fragments );
1983
+ }
1984
+
1985
+
1986
+
1987
+ private function _normalize_url_fragments( $fragments ) {
1988
+ $fragments = w3tc_apply_filters( 'pagecache_normalize_url_fragments',
1989
+ $fragments );
1990
+ $fragments['querystring'] = $this->_normalize_querystring(
1991
+ $fragments['querystring'] );
1992
+
1993
+ return $fragments;
1994
+ }
1995
+
1996
+
1997
+
1998
+ private function _normalize_querystring( $querystring ) {
1999
  $ignore_qs = $this->_config->get_array( 'pgcache.accept.qs' );
2000
  $ignore_qs = w3tc_apply_filters( 'pagecache_extract_accept_qs', $ignore_qs );
2001
  Util_Rule::array_trim( $ignore_qs );
2002
 
2003
+ if ( empty( $ignore_qs ) || empty( $querystring ) ) {
2004
+ return $querystring;
2005
  }
2006
 
2007
+ $querystring_naked = substr( $querystring, 1 );
 
 
 
 
2008
 
2009
  foreach ( $ignore_qs as $qs ) {
2010
  $m = null;
2011
  if ( strpos( $qs, '=' ) === false ) {
2012
  $regexp = Util_Environment::preg_quote( str_replace( '+', ' ', $qs ) );
2013
+ if ( @preg_match( "~^(.*?&|)$regexp(=[^&]*)?(&.*|)$~i", $querystring_naked, $m ) ) {
2014
+ $querystring_naked = $m[1] . $m[3];
2015
  }
2016
  } else {
2017
  $regexp = Util_Environment::preg_quote( str_replace( '+', ' ', $qs ) );
2018
 
2019
+ if ( @preg_match( "~^(.*?&|)$regexp(&.*|)$~i", $querystring_naked, $m ) ) {
2020
+ $querystring_naked = $m[1] . $m[2];
2021
  }
2022
  }
2023
  }
2024
 
2025
+ $querystring_naked = preg_replace( '~[&]+~', '&', $querystring_naked );
2026
+ $querystring_naked = trim( $querystring_naked, '&' );
2027
+
2028
+ return empty( $querystring_naked ) ? '' : '?' . $querystring_naked;
2029
  }
2030
 
2031
  /**
UsageStatistics_GeneralPage_View.php CHANGED
@@ -10,25 +10,30 @@ $c = Dispatcher::config();
10
  $is_pro = Util_Environment::is_w3tc_pro( $c );
11
 
12
  ?>
13
- <p>Cache usage statistics.</p>
14
 
15
- <table class="form-table">
16
  <?php
17
  Util_Ui::config_item_pro( array(
18
  'key' => 'stats.enabled',
 
19
  'control' => 'checkbox',
20
  'checkbox_label' => __( 'Enable', 'w3-total-cache' ),
21
  'disabled' => ( $is_pro ? null : true ),
22
  'excerpt' => __( 'Enable statistics collection. Note that this consumes additional resources and is not recommended to be run continuously.',
23
  'w3-total-cache' ),
24
  'description' => array(
25
- __( 'Statistics provide transparency into the behavior of your caching performance. Without statistics, it’s challenging to identify opportunities for improvement or ensure operations are working as expected consistently. Metrics like cache sizes, object lifetimes, hit vs miss ratio, etc across every caching method configured in your settings.', 'w3-total-cache' ),
26
-
27
  __( 'Some statistics are available directly on your Performance Dashboard, however, the comprehensive suite of statistics are available on the Statistics screen. Web server logs created by Nginx or Apache can be analyzed if accessible.', 'w3-total-cache' ),
28
-
29
- __( 'Use the caching statistics to compare the performance of different configurations like caching methods, object lifetimes and so on. Contact support for any help optimizing performance metrics or troubleshooting.',
30
- 'w3-total-cache' )
31
- )
 
 
 
 
 
 
32
  ) );
33
  Util_Ui::config_item( array(
34
  'key' => 'stats.slot_seconds',
@@ -36,7 +41,8 @@ Util_Ui::config_item( array(
36
  'control' => 'textbox',
37
  'textbox_type' => 'number',
38
  'description' =>
39
- 'The duration of time in seconds to collect statistics per interval.'
 
40
  ) );
41
  Util_Ui::config_item( array(
42
  'key' => 'stats.slots_count',
@@ -44,21 +50,24 @@ Util_Ui::config_item( array(
44
  'control' => 'textbox',
45
  'textbox_type' => 'number',
46
  'description' =>
47
- 'The number of intervals that are represented in the graph.'
 
48
  ) );
49
 
50
  Util_Ui::config_item( array(
51
  'key' => 'stats.cpu.enabled',
52
  'control' => 'checkbox',
53
  'checkbox_label' => __( 'Use the system reported averages of CPU resource usage.', 'w3-total-cache' ),
54
- 'description' => __( 'Collect CPU usage', 'w3-total-cache' )
 
55
  ) );
56
  Util_Ui::config_item( array(
57
  'key' => 'stats.access_log.enabled',
58
  'control' => 'checkbox',
59
  'checkbox_label' => __( 'Parse server access log', 'w3-total-cache' ),
60
  'disabled' => ( $is_pro ? null : true ),
61
- 'description' => __( 'Enable collecting statistics from an Access Log. This provides much more precise statistics.', 'w3-total-cache' )
 
62
  ) );
63
  Util_Ui::config_item( array(
64
  'key' => 'stats.access_log.webserver',
@@ -68,7 +77,8 @@ Util_Ui::config_item( array(
68
  'apache' => 'Apache',
69
  'nginx' => 'Nginx'
70
  ),
71
- 'description' => 'Webserver type generating access logs.'
 
72
  ) );
73
  Util_Ui::config_item( array(
74
  'key' => 'stats.access_log.filename',
@@ -77,7 +87,8 @@ Util_Ui::config_item( array(
77
  'textbox_size' => 60,
78
  'description' => 'Where your access log is located.',
79
  'control_after' =>
80
- '<input type="button" class="button" id="ustats_access_log_test" value="Test" /><span id="ustats_access_log_test_result" style="padding-left: 20px"></span>'
 
81
  ) );
82
  Util_Ui::config_item( array(
83
  'key' => 'stats.access_log.format',
@@ -87,7 +98,8 @@ Util_Ui::config_item( array(
87
  'description' =>
88
  'Format of your access log from webserver configuration.',
89
  'control_after' =>
90
- '<input type="button" class="button" id="ustats_access_log_format_reset" value="Reset to Default" />'
 
91
  ) );
92
  ?>
93
  </table>
10
  $is_pro = Util_Environment::is_w3tc_pro( $c );
11
 
12
  ?>
 
13
 
14
+ <table class="<?php echo esc_attr( Util_Ui::table_class() ); ?>">
15
  <?php
16
  Util_Ui::config_item_pro( array(
17
  'key' => 'stats.enabled',
18
+ 'label' => esc_html__( 'Cache usage statistics' ),
19
  'control' => 'checkbox',
20
  'checkbox_label' => __( 'Enable', 'w3-total-cache' ),
21
  'disabled' => ( $is_pro ? null : true ),
22
  'excerpt' => __( 'Enable statistics collection. Note that this consumes additional resources and is not recommended to be run continuously.',
23
  'w3-total-cache' ),
24
  'description' => array(
25
+ __( 'Statistics provides near-complete transparency into the behavior of your caching performance, allowing you to identify opportunities to further improve your website speed and ensure operations are working as expected. Includes metrics like cache sizes, object lifetimes, hit vs miss ratio, etc across every caching method configured in your settings.', 'w3-total-cache' ),
 
26
  __( 'Some statistics are available directly on your Performance Dashboard, however, the comprehensive suite of statistics are available on the Statistics screen. Web server logs created by Nginx or Apache can be analyzed if accessible.', 'w3-total-cache' ),
27
+ wp_kses(
28
+ sprintf(
29
+ // translators: 1 The opening anchor tag linking to our support page, 2 its closing tag.
30
+ __( 'Use the caching statistics to compare the performance of different configurations like caching methods, object lifetimes and so on. Did you know that we offer premium support, customization and audit services? %1$sClick here for more information%2$s.', 'w3-total-cache' ),
31
+ '<a href="' . esc_url( admin_url( 'admin.php?page=w3tc_support' ) ) . '">',
32
+ '</a>'
33
+ ),
34
+ array( 'a' => array( 'href' => array() ) )
35
+ ),
36
+ ),
37
  ) );
38
  Util_Ui::config_item( array(
39
  'key' => 'stats.slot_seconds',
41
  'control' => 'textbox',
42
  'textbox_type' => 'number',
43
  'description' =>
44
+ 'The duration of time in seconds to collect statistics per interval.',
45
+ 'show_in_free' => false,
46
  ) );
47
  Util_Ui::config_item( array(
48
  'key' => 'stats.slots_count',
50
  'control' => 'textbox',
51
  'textbox_type' => 'number',
52
  'description' =>
53
+ 'The number of intervals that are represented in the graph.',
54
+ 'show_in_free' => false,
55
  ) );
56
 
57
  Util_Ui::config_item( array(
58
  'key' => 'stats.cpu.enabled',
59
  'control' => 'checkbox',
60
  'checkbox_label' => __( 'Use the system reported averages of CPU resource usage.', 'w3-total-cache' ),
61
+ 'description' => __( 'Collect CPU usage', 'w3-total-cache' ),
62
+ 'show_in_free' => false,
63
  ) );
64
  Util_Ui::config_item( array(
65
  'key' => 'stats.access_log.enabled',
66
  'control' => 'checkbox',
67
  'checkbox_label' => __( 'Parse server access log', 'w3-total-cache' ),
68
  'disabled' => ( $is_pro ? null : true ),
69
+ 'description' => __( 'Enable collecting statistics from an Access Log. This provides much more precise statistics.', 'w3-total-cache' ),
70
+ 'show_in_free' => false,
71
  ) );
72
  Util_Ui::config_item( array(
73
  'key' => 'stats.access_log.webserver',
77
  'apache' => 'Apache',
78
  'nginx' => 'Nginx'
79
  ),
80
+ 'description' => 'Webserver type generating access logs.',
81
+ 'show_in_free' => false,
82
  ) );
83
  Util_Ui::config_item( array(
84
  'key' => 'stats.access_log.filename',
87
  'textbox_size' => 60,
88
  'description' => 'Where your access log is located.',
89
  'control_after' =>
90
+ '<input type="button" class="button" id="ustats_access_log_test" value="Test" /><span id="ustats_access_log_test_result" style="padding-left: 20px"></span>',
91
+ 'show_in_free' => false,
92
  ) );
93
  Util_Ui::config_item( array(
94
  'key' => 'stats.access_log.format',
98
  'description' =>
99
  'Format of your access log from webserver configuration.',
100
  'control_after' =>
101
+ '<input type="button" class="button" id="ustats_access_log_format_reset" value="Reset to Default" />',
102
+ 'show_in_free' => false,
103
  ) );
104
  ?>
105
  </table>
UserExperience_GeneralPage_View.php CHANGED
@@ -17,12 +17,34 @@ Util_Ui::config_overloading_button( array(
17
  Util_Ui::config_item( array(
18
  'key' => 'lazyload.enabled',
19
  'control' => 'checkbox',
20
- 'checkbox_label' => __( 'Lazy Loading', 'w3-total-cache' ),
21
  'description' => __( 'Defer loading offscreen images.',
22
  'w3-total-cache' )
23
  ) );
24
- ?>
25
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  Util_Ui::config_item_extension_enabled( array(
27
  'extension_id' => 'user-experience-emoji',
28
  'checkbox_label' => __( 'Disable Emoji', 'w3-total-cache' ),
17
  Util_Ui::config_item( array(
18
  'key' => 'lazyload.enabled',
19
  'control' => 'checkbox',
20
+ 'checkbox_label' => __( 'Lazy Load Images', 'w3-total-cache' ),
21
  'description' => __( 'Defer loading offscreen images.',
22
  'w3-total-cache' )
23
  ) );
24
+
25
+ Util_Ui::config_item_pro( array(
26
+ 'key' => 'lazyload_googlemaps_general_settings',
27
+ 'control' => 'none',
28
+ 'none_label' => __( 'Lazy Load Google Maps', 'w3-total-cache' ),
29
+ 'excerpt' => wp_kses(
30
+ sprintf(
31
+ // Translators: 1 an opening anchor to the user experience page, 2 its closing anchor tag, 3 an opening strong tag, 4 its closing tag.
32
+ __( 'In addition to lazy loading images, with %3$sW3 Total Cache Pro%4$s you can lazy load %3$sGoogle Maps%4$s! More information and settings can be found on the %1$sUser Experience page%2$s.', 'w3-total-cache' ),
33
+ '<a href="' . admin_url( 'admin.php?page=w3tc_userexperience' ) . '">',
34
+ '</a>',
35
+ '<strong>',
36
+ '</strong>'
37
+ ),
38
+ array(
39
+ 'a' => array(
40
+ 'href' => array(),
41
+ ),
42
+ 'strong' => array(),
43
+ )
44
+ ),
45
+ 'description' => array(),
46
+ ) );
47
+
48
  Util_Ui::config_item_extension_enabled( array(
49
  'extension_id' => 'user-experience-emoji',
50
  'checkbox_label' => __( 'Disable Emoji', 'w3-total-cache' ),
UserExperience_LazyLoad_Mutator.php CHANGED
@@ -43,7 +43,7 @@ class UserExperience_LazyLoad_Mutator {
43
 
44
  if ( $this->config->get_boolean( 'lazyload.process_background' ) ) {
45
  $buffer = preg_replace_callback(
46
- '~<[^>]+background:\s*url[^>]+>~is',
47
  array( $this, 'tag_with_background' ), $buffer
48
  );
49
  }
@@ -132,7 +132,7 @@ class UserExperience_LazyLoad_Mutator {
132
  return $dim;
133
  }
134
 
135
- $url = ( !empty( $m[4] ) ? $m[4] : ( ( !empty( $m[3] ) ? $m[3] : $m2 ) ) );
136
 
137
  // full url found
138
  if ( isset( $this->posts_by_url[$url] ) ) {
@@ -196,10 +196,10 @@ class UserExperience_LazyLoad_Mutator {
196
  public function style_offload_background( $matches ) {
197
  list( $match, $v1, $v2, $v, $quote ) = $matches;
198
  $url_match = null;
199
- preg_match( '~background:\s*(url\([^>]+\))~is', $v, $url_match );
200
- $v = preg_replace( '~background:\s*url\([^>]+\)[;]?\s*~is', '', $v );
201
 
202
- return $v1 . $v2 . $v . $quote . ' data-bg=' . $quote . $url_match[1] . $quote;
203
  }
204
 
205
 
43
 
44
  if ( $this->config->get_boolean( 'lazyload.process_background' ) ) {
45
  $buffer = preg_replace_callback(
46
+ '~<[^>]+background(-image)?:\s*url[^>]+>~is',
47
  array( $this, 'tag_with_background' ), $buffer
48
  );
49
  }
132
  return $dim;
133
  }
134
 
135
+ $url = ( !empty( $m[4] ) ? $m[4] : ( ( !empty( $m[3] ) ? $m[3] : $m[2] ) ) );
136
 
137
  // full url found
138
  if ( isset( $this->posts_by_url[$url] ) ) {
196
  public function style_offload_background( $matches ) {
197
  list( $match, $v1, $v2, $v, $quote ) = $matches;
198
  $url_match = null;
199
+ preg_match( '~background(-image)?:\s*(url\([^>]+\))~is', $v, $url_match );
200
+ $v = preg_replace( '~background(-image)?:\s*url\([^>]+\)[;]?\s*~is', '', $v );
201
 
202
+ return $v1 . $v2 . $v . $quote . ' data-bg=' . $quote . $url_match[2] . $quote;
203
  }
204
 
205
 
UserExperience_LazyLoad_Page_View.php CHANGED
@@ -54,6 +54,8 @@ $is_google_maps_easy = ( in_array( 'google-maps-easy/gmp.php', $plugins ) );
54
  );
55
 
56
  ?>
 
 
57
  <tr>
58
  <th>Google Maps</th>
59
  <td>
54
  );
55
 
56
  ?>
57
+ </table>
58
+ <table class="<?php echo esc_attr( Util_Ui::table_class() ); ?>">
59
  <tr>
60
  <th>Google Maps</th>
61
  <td>
Util_Ui.php CHANGED
@@ -640,10 +640,30 @@ class Util_Ui {
640
  'value' => $a['value'],
641
  'disabled' => $a['disabled']
642
  ) );
 
 
643
  }
644
  }
645
 
 
 
 
 
 
 
 
 
 
 
 
 
646
 
 
 
 
 
 
 
647
 
648
  /**
649
  * Renders <tr> element with controls
@@ -721,6 +741,17 @@ class Util_Ui {
721
  * description => description shown to the user below
722
  */
723
  static public function config_item( $a ) {
 
 
 
 
 
 
 
 
 
 
 
724
  $a = Util_Ui::config_item_preprocess( $a );
725
 
726
  if ( $a['label_class'] == 'w3tc_single_column' ) {
@@ -938,7 +969,6 @@ class Util_Ui {
938
  ?>
939
  </div>
940
  <div class="w3tc-gopro-action">
941
- <i>Pro Feature!</i>
942
  <button class="button w3tc-gopro-button button-buy-plugin" data-src="<?php echo esc_attr( $button_data_src ) ?>">
943
  Learn more about Pro
944
  </button>
640
  'value' => $a['value'],
641
  'disabled' => $a['disabled']
642
  ) );
643
+ } elseif ( 'none' === $a['control'] ) {
644
+ esc_html_e( $a['none_label'] );
645
  }
646
  }
647
 
648
+ /**
649
+ * Get table classes for tables including pro features.
650
+ *
651
+ * When on the free version, tables with pro features have additional classes added to help highlight
652
+ * the premium feature. If the user is on pro, this class is omitted.
653
+ *
654
+ * @since 0.14.3
655
+ *
656
+ * @return string
657
+ */
658
+ public static function table_class() {
659
+ $table_class[] = 'form-table';
660
 
661
+ if ( ! Util_Environment::is_w3tc_pro( Dispatcher::config() ) ) {
662
+ $table_class[] = 'w3tc-pro-feature';
663
+ }
664
+
665
+ return implode( ' ', $table_class );
666
+ }
667
 
668
  /**
669
  * Renders <tr> element with controls
741
  * description => description shown to the user below
742
  */
743
  static public function config_item( $a ) {
744
+ /*
745
+ * Some items we do not want shown in the free edition.
746
+ *
747
+ * By default, they will show in free, unless 'show_in_free' is specifically passed in as false.
748
+ */
749
+ $is_w3tc_free = ! Util_Environment::is_w3tc_pro( Dispatcher::config() );
750
+ $show_in_free = ! isset( $a['show_in_free'] ) || (bool) $a['show_in_free'];
751
+ if ( ! $show_in_free && $is_w3tc_free ) {
752
+ return;
753
+ }
754
+
755
  $a = Util_Ui::config_item_preprocess( $a );
756
 
757
  if ( $a['label_class'] == 'w3tc_single_column' ) {
969
  ?>
970
  </div>
971
  <div class="w3tc-gopro-action">
 
972
  <button class="button w3tc-gopro-button button-buy-plugin" data-src="<?php echo esc_attr( $button_data_src ) ?>">
973
  Learn more about Pro
974
  </button>
inc/lightbox/upgrade.php CHANGED
@@ -3,28 +3,37 @@ namespace W3TC;
3
 
4
  if ( !defined( 'W3TC' ) )
5
  die();
6
-
7
-
8
  ?>
9
  <div id="w3tc-upgrade">
10
- <div class="w3tc-overlay-logo"></div>
11
- <div class="w3tc_overlay_upgrade_header">
12
- <iframe src="https://www.w3-edge.com/checkout-ad/?data_src=<?php echo esc_attr( $data_src ) ?>&client_id=<?php echo esc_attr( $client_id ) ?>" width="100%" height="420px"></iframe>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  </div>
14
- <div class="w3tc_overlay_content"></div>
15
- <div class="w3tc_overlay_footer">
16
- <?php if ( \W3TC\Util_Environment::is_https() ): ?>
17
- <input id="w3tc-purchase" type="button"
18
- class="btn w3tc-size image btn-default palette-turquoise secure"
19
- value="<?php _e( 'Subscribe to Go Faster Now', 'w3-total-cache' ) ?> " />
20
- <?php else: ?>
21
- <a id="w3tc-purchase-link"
22
- href="<?php echo \W3TC\Licensing_Core::purchase_url( $data_src, $renew_key, $client_id ) ?>"
23
- target="_blank"
24
- class="btn w3tc-size image btn-default palette-turquoise secure">
25
- <?php _e( 'Subscribe to Go Faster Now', 'w3-total-cache' ) ?>
26
- </a>
27
- <?php endif ?>
28
  </div>
29
- <div style="clear: both"></div>
30
  </div>
3
 
4
  if ( !defined( 'W3TC' ) )
5
  die();
 
 
6
  ?>
7
  <div id="w3tc-upgrade">
8
+
9
+ <div id="w3tc_upgrade_header">
10
+
11
+ <div>
12
+ <div>
13
+ <strong>W3 TOTAL CACHE</strong><br />
14
+ <span style="font-size:16px;"><?php esc_html_e( 'Unlock more performance options', 'w3-total-cache' ); ?></span>
15
+ </div>
16
+ </div>
17
+
18
+ <div>
19
+ <?php if ( \W3TC\Util_Environment::is_https() ): ?>
20
+ <input id="w3tc-purchase" type="button"
21
+ class="btn w3tc-size w3tc-palette-tp w3tc-gauge-tp"
22
+ value="<?php _e( 'Go Faster With Pro', 'w3-total-cache' ) ?> " />
23
+ <?php else: ?>
24
+ <a id="w3tc-purchase-link"
25
+ href="<?php echo \W3TC\Licensing_Core::purchase_url( $data_src, $renew_key, $client_id ) ?>"
26
+ target="_blank"
27
+ class="btn w3tc-size w3tc-palette-tp w3tc-gauge-tp">
28
+ <?php _e( 'Go Faster With Pro', 'w3-total-cache' ) ?>
29
+ </a>
30
+ <?php endif ?>
31
+ </div>
32
+
33
  </div>
34
+
35
+ <div class="w3tc_overlay_upgrade_header">
36
+ <iframe src="https://www.w3-edge.com/checkout-ad/?data_src=<?php echo esc_attr( $data_src ) ?>&client_id=<?php echo esc_attr( $client_id ) ?>" width="100%" height="410px"></iframe>
 
 
 
 
 
 
 
 
 
 
 
37
  </div>
38
+
39
  </div>
inc/options/dashboard.php CHANGED
@@ -4,16 +4,31 @@ namespace W3TC;
4
  if ( !defined( 'W3TC' ) )
5
  die();
6
 
7
- ?>
8
- <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
- <p>
11
- <?php echo sprintf( __( 'The plugin is currently <span class="w3tc-%s">%s</span> in <strong>%s</strong> mode.', 'w3-total-cache' )
12
- , $enabled ? "enabled" : "disabled"
13
- , $enabled ? __( 'enabled', 'w3-total-cache' ) : __( 'disabled', 'w3-total-cache' )
14
- , Util_Environment::w3tc_edition( $this->_config ) );
15
  ?>
16
- </p>
17
  <form id="w3tc_dashboard" action="admin.php?page=<?php echo $this->_page; ?>" method="post">
18
  <p>
19
  Perform a
4
  if ( !defined( 'W3TC' ) )
5
  die();
6
 
7
+ /*
8
+ * Display the header for our dashboard.
9
+ *
10
+ * If we're on the pro version, we'll show the standard W3TC logo and a message stating the user is
11
+ * on pro. As of 0.14.3, the free version will instead show a really, really nice banner. Really terrific.
12
+ * Just fantasic. Other banners, not so good. Everyone agrees, believe me.
13
+ */
14
+ if ( Util_Environment::is_w3tc_pro( Dispatcher::config() ) ) {
15
+ include W3TC_INC_DIR . '/options/common/header.php';
16
+
17
+ echo '<p>' .
18
+ sprintf( __( 'The plugin is currently <span class="w3tc-%s">%s</span> in <strong>%s</strong> mode.', 'w3-total-cache' )
19
+ , $enabled ? "enabled" : "disabled"
20
+ , $enabled ? __( 'enabled', 'w3-total-cache' ) : __( 'disabled', 'w3-total-cache' )
21
+ , Util_Environment::w3tc_edition( $this->_config ) ) .
22
+ '</p>';
23
+ } else {
24
+ // When header.php is not included (above), we need to do our head action and open the wrap.
25
+ do_action( 'w3tc-dashboard-head' );
26
+ echo '<div class="wrap" id="w3tc">';
27
 
28
+ include W3TC_INC_DIR . '/options/parts/dashboard_banner.php';
29
+ }
 
 
 
30
  ?>
31
+
32
  <form id="w3tc_dashboard" action="admin.php?page=<?php echo $this->_page; ?>" method="post">
33
  <p>
34
  Perform a
inc/options/general.php CHANGED
@@ -517,6 +517,8 @@ Util_Ui::config_item( array(
517
  <p class="description"><?php _e( 'If selected, detailed caching information will appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page\'s source code to review.', 'w3-total-cache' ); ?></p>
518
  </td>
519
  </tr>
 
 
520
  <tr>
521
  <th><?php _e( 'Purge Logs:', 'w3-total-cache' ); ?></th>
522
  <td>
@@ -547,7 +549,7 @@ Util_Ui::config_item( array(
547
  \W3TC\Util_Ui::pro_wrap_description(
548
  __( 'Purge Logs provide information on when your cache has been purged and what triggered it.', 'w3-total-cache' ),
549
  array(
550
- __( 'If you are troubleshooting a complex issue in which you are not sure why your cache is being cleared, Purge Logs can tell you why', 'w3-total-cache' )
551
  ),
552
  'general-purge-log'
553
  );
517
  <p class="description"><?php _e( 'If selected, detailed caching information will appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page\'s source code to review.', 'w3-total-cache' ); ?></p>
518
  </td>
519
  </tr>
520
+ </table>
521
+ <table class="<?php echo esc_attr( Util_Ui::table_class() ); ?>">
522
  <tr>
523
  <th><?php _e( 'Purge Logs:', 'w3-total-cache' ); ?></th>
524
  <td>
549
  \W3TC\Util_Ui::pro_wrap_description(
550
  __( 'Purge Logs provide information on when your cache has been purged and what triggered it.', 'w3-total-cache' ),
551
  array(
552
+ __( 'Sometimes, you\'ll encounter a complex issue involving your cache being purged for an unknown reason. The Purge Logs functionality can help you easily resolve those issues.', 'w3-total-cache' )
553
  ),
554
  'general-purge-log'
555
  );
inc/options/minify/css.php CHANGED
@@ -19,10 +19,17 @@ Util_Ui::config_item_pro( array(
19
  'label_class' => 'w3tc_no_trtd',
20
  'excerpt' => __( 'Website visitors cannot navigate your website until a given page is ready - reduce the wait time with this feature.', 'w3-total-cache' ),
21
  'description' => array(
22
- __( 'Opportunities to improve user experience exist in nearly every aspect of your website. Once the components are delivered to the web browser there’s an opportunity to improve the performance of how a given page is painted in the browser. Enable, this feature to reduce wait times and ensure that users can interact with your website as quickly as possible.', 'w3-total-cache' ),
23
-
24
- __( 'Faster paint time is a key last step in lowering bounce rates even for repeat page views.', 'w3-total-cache' )
25
- )
 
 
 
 
 
 
 
26
  ) );
27
  ?>
28
 
19
  'label_class' => 'w3tc_no_trtd',
20
  'excerpt' => __( 'Website visitors cannot navigate your website until a given page is ready - reduce the wait time with this feature.', 'w3-total-cache' ),
21
  'description' => array(
22
+ __( 'Faster paint time is a key last step in lowering bounce rates even for repeat page views. Enable this feature to significantly enhance your website’s user experience by reducing wait times and ensuring that users can interact with your website as quickly as possible.', 'w3-total-cache' ),
23
+ wp_kses(
24
+ sprintf(
25
+ // translators: 1 The opening anchor tag linking to our support page, 2 its closing tag.
26
+ __( 'Need help? Take a look at our %1$spremium support, customization and audit services%2$s.', 'w3-total-cache' ),
27
+ '<a href="' . esc_url( admin_url( 'admin.php?page=w3tc_support' ) ) . '">',
28
+ '</a>'
29
+ ),
30
+ array( 'a' => array( 'href' => array() ) )
31
+ ),
32
+ ),
33
  ) );
34
  ?>
35
 
inc/options/parts/dashboard_banner.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace W3TC;
3
+
4
+ if ( !defined( 'W3TC' ) )
5
+ die();
6
+ ?>
7
+
8
+ <div id="w3tc_dashboard_banner" class="metabox-holder">
9
+ <div class="postbox">
10
+ <div class="w3tc-postbox-ad">
11
+ <?php
12
+ echo wp_kses(
13
+ sprintf(
14
+ // Translators: 1 the opening anchor tag to the w3tc_support page, 2 its closing tag, 3 a line break.
15
+ __( 'Did you know that we offer premium support services?%3$s Our experts will configure W3 Total Cache for you! %1$sClick here for info%2$s.', 'w3-total-cache' ),
16
+ '<a href="' . admin_url( 'admin.php?page=w3tc_support' ) . '">',
17
+ '</a>',
18
+ '<br />'
19
+ ),
20
+ array(
21
+ 'a' => array(
22
+ 'href' => array()
23
+ ),
24
+ 'br' => array(),
25
+ )
26
+ );
27
+ ?>
28
+ </div>
29
+ <h3 class="hndle">
30
+ <img style="height:32px;" src="<?php echo plugins_url( 'w3-total-cache/pub/img/W3TC_dashboard_logo_title.png' ); ?>" />
31
+ </h3>
32
+ <div class="inside">
33
+ <p>
34
+ <?php
35
+ echo wp_kses(
36
+ sprintf(
37
+ // Translators: 1 an opening strong tag, 2 its closing tag.
38
+ __( 'You\'re using the Community Edition of W3 Total Cache. Maximize your website\'s speed even more by upgrading to %1$sW3 Total Cache Pro%2$s to unlock advanced anaytics, fragment caching, full site delivery, extension support and other tools that will allow you to completely fine tune your website\'s performance.', 'w3-total-cache' ),
39
+ '<strong>',
40
+ '</strong>'
41
+ ),
42
+ array( 'strong' => array() )
43
+ );
44
+ ?>
45
+ </p>
46
+ <p>
47
+ <input
48
+ type="button"
49
+ class="button w3tc-gopro-button button-buy-plugin"
50
+ data-src="dashboard_banner" value="<?php esc_attr_e( 'Learn more about Pro', 'w3-total-cache' ) ?>" />
51
+ </p>
52
+ </div>
53
+ </div>
54
+ </div>
inc/options/pgcache.php CHANGED
@@ -263,9 +263,7 @@ Util_Ui::postbox_header( __( 'Purge Policy: ', 'w3-total-cache' ) . implode( ',
263
  'pro_feature' => true,
264
  'pro_excerpt' => __( 'If you’re using the WordPress API make sure to use caching to scale performance.', 'w3-total-cache'),
265
  'pro_description' => array(
266
- __( 'If you use WordPress as a backend for integrations, API caching may be for you. Similar to page caching, repeat requests will benefit by having significantly lower response times and consume fewer resources to deliver.', 'w3-total-cache'),
267
-
268
- __( 'Note: If WordPress is not used as a backend, for additional security, the API can be disabled completely.', 'w3-total-cache')
269
  )
270
  ),
271
  'disable' => 'Disable <acronym title="REpresentational State Transfer">REST</acronym> <acronym title="Application Programming Interface">API</acronym>',
263
  'pro_feature' => true,
264
  'pro_excerpt' => __( 'If you’re using the WordPress API make sure to use caching to scale performance.', 'w3-total-cache'),
265
  'pro_description' => array(
266
+ __( 'If you use WordPress as a backend for integrations, API caching may be for you. Similar to page caching, repeat requests will benefit by having significantly lower response times and consume fewer resources to deliver. If WordPress is not used as a backend, for additional security, the API can be disabled completely.', 'w3-total-cache'),
 
 
267
  )
268
  ),
269
  'disable' => 'Disable <acronym title="REpresentational State Transfer">REST</acronym> <acronym title="Application Programming Interface">API</acronym>',
pub/css/lightbox.css CHANGED
@@ -340,18 +340,6 @@ fieldset[disabled] .btn {
340
  background-image: url(../img/overlay/ceo.png);
341
  }
342
 
343
- .w3tc-overlay #w3tc-upgrade ul {
344
- width: 480px;
345
- float: right;
346
- margin-right: 20px;
347
- }
348
- .w3tc-overlay #w3tc-upgrade li {
349
- background: url(../img/overlay/list-check.png) no-repeat 0px 3px;
350
- color: #444;
351
- list-style-type: none;
352
- padding: 0 0 1px 20px;
353
- }
354
-
355
  .w3tc-overlay #w3tc-support-us header h2, header h3 {
356
  margin:0;padding:0;
357
  }
@@ -432,14 +420,10 @@ padding: 10px 20px 20px 20px;
432
  padding: 10px 10px 10px 10px;
433
  }
434
  .w3tc_overlay_upgrade_header {
435
- padding: 10px 10px 10px 10px;
436
  background-color: #f3f3f3;
437
  color: #cacaca;
438
- border-bottom: dashed 1px #c0c0c0;
439
- border-top-left-radius: 6px;
440
- border-top-right-radius: 6px;
441
- -webkit-border-top-left-radius: 6px;
442
- -webkit-border-top-right-radius: 6px;
443
  }
444
 
445
  .w3tc_overlay_upgrade_content_l {
@@ -491,9 +475,82 @@ padding: 10px 20px 20px 20px;
491
  padding: none;
492
  float: none;
493
  }
 
494
 
495
- .w3tc-overlay #w3tc-upgrade ul {
496
- width: inherit;
497
- float: none;
498
- }
 
 
 
 
 
 
499
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
340
  background-image: url(../img/overlay/ceo.png);
341
  }
342
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  .w3tc-overlay #w3tc-support-us header h2, header h3 {
344
  margin:0;padding:0;
345
  }
420
  padding: 10px 10px 10px 10px;
421
  }
422
  .w3tc_overlay_upgrade_header {
 
423
  background-color: #f3f3f3;
424
  color: #cacaca;
425
+ height: calc(100% - 80px);
426
+ box-sizing: border-box;
 
 
 
427
  }
428
 
429
  .w3tc_overlay_upgrade_content_l {
475
  padding: none;
476
  float: none;
477
  }
478
+ }
479
 
480
+
481
+ /**
482
+ * Colors.
483
+ */
484
+
485
+ /* "tp" is Turquoise Pearl, courtesty of https://hexcolor.co/hex/30bec4. */
486
+ input.w3tc-palette-tp,
487
+ a.w3tc-palette-tp {
488
+ background-color: #30bec4;
489
+ color: #fff;
490
  }
491
+
492
+ /* A button with an icon gauge to the right. */
493
+ #w3tc_upgrade_header .w3tc-gauge-tp {
494
+ background-image: url(../img/overlay/gauge-bg-tp.png);
495
+ background-position: calc(100% - 15px) center;
496
+ background-repeat: no-repeat;
497
+ text-decoration: none;
498
+ padding: 7px 60px 7px 12px;
499
+ }
500
+
501
+
502
+ /**
503
+ * Upgrade modal.
504
+ */
505
+
506
+ #w3tc-upgrade {
507
+ padding: 10px;
508
+ box-sizing: border-box;
509
+ }
510
+
511
+ /* The close button will be different for the upgrade modal. */
512
+ .w3tc-overlay-upgrade .lightbox-close {
513
+ border-radius: 50%;
514
+ padding: 0;
515
+ background-position: 8px;
516
+ margin: 0;
517
+ top: -12px;
518
+ right: -12px;
519
+ width: 25px;
520
+ height: 25px;
521
+ }
522
+
523
+ #w3tc_upgrade_header {
524
+ display: flex;
525
+ background: #000;
526
+ border-bottom: 5px solid #30bec4;
527
+ color: #fff;
528
+ height: 75px;
529
+ position: relative;
530
+ }
531
+
532
+ #w3tc_upgrade_header > div {
533
+ flex: 1;
534
+ }
535
+
536
+ #w3tc_upgrade_header > div:first-child div {
537
+ position: absolute;
538
+ top: 17px;
539
+ left: 90px;
540
+ font-size: 20px;
541
+ line-height: 20px;
542
+ }
543
+
544
+ /* Go faster now button. It could be an anchor or an input. */
545
+ #w3tc_upgrade_header > div:nth-child(2) > *:first-child {
546
+ position: absolute;
547
+ top: 20px;
548
+ right: 90px;
549
+ }
550
+
551
+ /* Ensure a consistent background with the iframe and the modal elements. */
552
+ .w3tc-overlay-upgrade,
553
+ .w3tc_overlay_upgrade_header,
554
+ .w3tc-overlay-upgrade .lightbox-close {
555
+ background-color: #f1f1f1;
556
+ }
pub/css/options.css CHANGED
@@ -470,46 +470,17 @@ th.w3tc_extensions_manage_column_check {
470
  white-space: nowrap;
471
  }
472
 
473
- .w3tc-gopro {
474
- background: #fbfbfb;
475
- border-left: 4px solid #46b450;
476
- box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
477
- padding: 5px;
478
- grid-template-columns: 1fr auto;
479
- display: grid;
480
- grid-gap: 30px;
481
- align-items: flex-start;
482
- }
483
-
484
- .w3tc-gopro-action strong,
485
- .w3tc-gopro-action i {
486
- display: block;
487
- text-align: center;
488
- }
489
-
490
- .w3tc-gopro-action i {
491
- margin-top: 2px;
492
- margin-bottom: 10px;
493
- }
494
 
495
- .w3tc-gopro-more {
496
- display: block;
497
- }
498
-
499
- .w3tc-gopro-more:focus {
500
- box-shadow: none;
501
- outline: none;
502
- }
503
 
504
  .w3tc-gopro-more .dashicons {
505
- display: inline;
506
- font-size: inherit;
507
- line-height: inherit;
508
  }
509
 
510
- .w3tc-gopro-excerpt {
511
- display: block;
512
- }
513
  .w3tc-gopro-description {
514
  display: block;
515
  max-height: 0px;
@@ -517,9 +488,8 @@ th.w3tc_extensions_manage_column_check {
517
  overflow: hidden;
518
  }
519
 
520
- /* For pro features in a table, ensure the checkboxes / etc remained aligned. */
521
- .form-table .w3tc-gopro {
522
- margin-left: -9px;
523
  }
524
 
525
  .button.w3tc-gopro-button {
@@ -535,3 +505,155 @@ th.w3tc_extensions_manage_column_check {
535
  background: #009900;
536
  color: #fff;
537
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
470
  white-space: nowrap;
471
  }
472
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
 
474
+ /**
475
+ * Go pro features.
476
+ */
 
 
 
 
 
477
 
478
  .w3tc-gopro-more .dashicons {
479
+ font-size: 1em;
480
+ margin-left: -3px;
481
+ vertical-align: baseline;
482
  }
483
 
 
 
 
484
  .w3tc-gopro-description {
485
  display: block;
486
  max-height: 0px;
488
  overflow: hidden;
489
  }
490
 
491
+ .w3tc-gopro-action {
492
+ margin-top: 15px;
 
493
  }
494
 
495
  .button.w3tc-gopro-button {
505
  background: #009900;
506
  color: #fff;
507
  }
508
+
509
+ table:not(.w3tc-pro-feature) .w3tc-gopro {
510
+ border-left: 3px solid green;
511
+ margin: 5px -20px 5px -13px;
512
+ box-shadow: 0 5px 5px -3px #888;
513
+ background: #efefef;
514
+ padding: 10px;
515
+ background-image: linear-gradient( to right, #f1f1f1, #f1f1f1, #f1f1f1, #f1f1f1, #e7f3f3, #56bec1, #16252c );
516
+ position: relative;
517
+ padding-right: 280px;
518
+ }
519
+
520
+ /* Pro features on the Extensions page. */
521
+ #the-list .w3tc-gopro {
522
+ margin-right: -10px;
523
+ padding-right: 196px;
524
+ }
525
+
526
+
527
+ /**
528
+ * A Table for a pro feature.
529
+ */
530
+
531
+ table.w3tc-pro-feature {
532
+ box-shadow: 0 5px 5px -3px #888;
533
+ margin-left: -10px;
534
+ margin-bottom: 45px;
535
+ width: calc(100% + 20px);
536
+ background: #fff;
537
+ position: relative;
538
+ }
539
+
540
+ table.w3tc-pro-feature:after,
541
+ table:not(.w3tc-pro-feature) .w3tc-gopro:after {
542
+ background-image: url("../img/transparent-comet.png");
543
+ background-repeat: no-repeat;
544
+ background-position: top right;
545
+ background-size: 100% 100%;
546
+ content:"";
547
+ width: 321px;
548
+ height: 174px;
549
+ position: absolute;
550
+ top: 0;
551
+ right: 0;
552
+ }
553
+
554
+ table.w3tc-pro-feature th,
555
+ table.w3tc-pro-feature td {
556
+ display: block;
557
+ box-sizing: border-box;
558
+ clear: both;
559
+ padding: 12px;
560
+ margin: 0;
561
+ }
562
+
563
+ table.w3tc-pro-feature th {
564
+ background: #294149;
565
+ color: #fff;
566
+ border-bottom: 5px solid #65bbbd;
567
+ width: 100%;
568
+ }
569
+
570
+ table.w3tc-pro-feature td {
571
+ background-image: linear-gradient( to right, #f1f1f1, #f1f1f1, #f1f1f1, #e7f3f3, #56bec1, #16252c );
572
+ padding-right: 401.25px;
573
+ }
574
+
575
+ /* Size of comet background for pro features not in a pro table. */
576
+ table:not(.w3tc-pro-feature) .w3tc-gopro:after {
577
+ width: 280px;
578
+ height: 152px;
579
+ }
580
+
581
+ /* Size of comet background for pro features on Extensions page. */
582
+ #the-list .plugin-description .w3tc-gopro:after {
583
+ width: 196px;
584
+ height: 106px;
585
+ }
586
+
587
+ @media ( max-width: 782px ) {
588
+ table.w3tc-pro-feature:after {
589
+ background-image: none;
590
+ }
591
+
592
+ table.w3tc-pro-feature td {
593
+ background-image: none;
594
+ }
595
+
596
+ table.w3tc-pro-feature td {
597
+ padding: 12px;
598
+ }
599
+
600
+ /* Pro features that aren't a <table>. A <tr> for example - User Experience > Lazy Load Google Maps. */
601
+ table:not(.w3tc-pro-feature) .w3tc-gopro {
602
+ padding-right: initial;
603
+ background: #efefef;
604
+ }
605
+
606
+ table:not(.w3tc-pro-feature) .w3tc-gopro:after {
607
+ background: none;
608
+ }
609
+ }
610
+
611
+ /**
612
+ * Banner ad on dashboard.
613
+ */
614
+
615
+ #w3tc_dashboard_banner {
616
+ margin-right: 200px;
617
+ }
618
+
619
+ #w3tc #w3tc_dashboard_banner .inside {
620
+ background-image: url("../img/transparent-comet-moon.png"), linear-gradient( to right, #fff 60%, #56bec1 100% );
621
+ background-repeat: no-repeat;
622
+ background-position: top right;
623
+ background-size: contain;
624
+ margin: 0;
625
+ padding: 0 250px 12px 12px;
626
+ }
627
+
628
+ #w3tc_dashboard_banner .inside > p:first-of-type {
629
+ margin-top: 0;
630
+ padding-top: 1em;
631
+ }
632
+
633
+ #w3tc_dashboard_banner .hndle {
634
+ background: #eee;
635
+ border-bottom: 3px solid #65bbbd;
636
+ }
637
+
638
+ #w3tc_dashboard_banner .w3tc-postbox-ad {
639
+ position: absolute;
640
+ top: 13px;
641
+ right: 10px;
642
+ font-size: 12px;
643
+ max-width: calc( 100% - 200px );
644
+ }
645
+
646
+ @media screen and (max-width: 960px) {
647
+ #w3tc #w3tc_dashboard_banner {
648
+ margin: 45px auto auto auto;
649
+ }
650
+
651
+ #w3tc #w3tc_dashboard_banner .inside {
652
+ background: none;
653
+ padding: 12px;
654
+ }
655
+
656
+ #w3tc #w3tc_dashboard_banner .inside > p:first-of-type {
657
+ padding-top: initial;
658
+ }
659
+ }
pub/css/widget.css CHANGED
@@ -15,6 +15,11 @@
15
  margin-bottom: 15px;
16
  }
17
 
 
 
 
 
 
18
  #w3tc-dashboard-widgets #normal-sortables #w3tc_spreadtheword label{
19
  display: block;
20
  width: 70px;
15
  margin-bottom: 15px;
16
  }
17
 
18
+ #w3tc-dashboard-widgets ul.w3tc-visible-ul li {
19
+ list-style-type: disc;
20
+ margin-bottom: 0;
21
+ }
22
+
23
  #w3tc-dashboard-widgets #normal-sortables #w3tc_spreadtheword label{
24
  display: block;
25
  width: 70px;
pub/fonts/source-a.svg CHANGED
@@ -1,3 +1 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16" width="16" height="16"><defs><path d="M10.39 6.69C10.79 6.9 11.26 6.9 11.67 6.7C12.35 6.36 13.75 5.68 14.43 5.34C14.71 5.2 14.71 4.8 14.43 4.65C13.12 3.96 9.87 2.25 8.56 1.57C8.11 1.33 7.57 1.3 7.09 1.49C6.33 1.8 4.85 2.4 4.11 2.7C3.78 2.84 3.76 3.29 4.07 3.46C5.46 4.17 8.97 5.96 10.39 6.69Z" id="bEaEbzNdf"></path><path d="M9.02 14.58C8.7 14.76 8.33 14.45 8.46 14.11C8.97 12.77 10.26 9.32 10.81 7.87C10.92 7.57 11.13 7.33 11.41 7.19C12.17 6.8 13.89 5.92 14.62 5.54C14.83 5.44 15.06 5.64 14.99 5.86C14.55 7.17 13.45 10.49 13.02 11.79C12.89 12.19 12.62 12.53 12.25 12.73C11.42 13.21 9.78 14.15 9.02 14.58Z" id="aSR8reqKk"></path><path d="M3.95 3.7L10.24 6.91L10.39 7.01L10.5 7.13L10.58 7.28L10.62 7.45L10.62 7.62L10.58 7.79L8.23 14.02L8.14 14.18L8.02 14.3L7.87 14.37L7.7 14.41L7.53 14.39L7.36 14.33L1.64 10.97L1.39 10.78L1.2 10.55L1.07 10.28L1 9.99L1 9.68L1.07 9.38L3.04 4.06L3.13 3.89L3.26 3.76L3.42 3.67L3.59 3.63L3.77 3.64L3.95 3.7ZM3.76 9.39L4.66 8.34L4.66 9.93L5.06 10.11L6.23 8.91L7.38 9.51L6.79 9.86L6.91 10.05L6.98 10.2L7.02 10.33L7.01 10.42L6.95 10.49L6.84 10.53L6.74 10.51L6.62 10.43L6.48 10.29L6.3 10.11L6.15 10.11L6.01 10.1L5.89 10.1L5.79 10.11L5.7 10.11L6.1 10.65L6.47 11.04L6.82 11.27L7.15 11.35L7.45 11.28L7.76 11.03L7.88 10.74L7.86 10.47L7.75 10.24L7.61 10.11L7.7 10.04L7.82 9.94L7.97 9.82L8.17 9.68L8.39 9.51L6.18 8.19L5.22 9.16L5.13 7.66L4.73 7.44L3.9 8.42L3.9 6.9L3.28 6.58L3.28 9.09L3.76 9.39Z" id="b5dPBHXJfL"></path></defs><g><g><g><use xlink:href="#bEaEbzNdf" opacity="1" fill="#000000" fill-opacity="1"></use></g><g><use xlink:href="#aSR8reqKk" opacity="1" fill="#000000" fill-opacity="1"></use></g><g><use xlink:href="#b5dPBHXJfL" opacity="1" fill="#000000" fill-opacity="1"></use></g></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 16 16"><defs><path id="bEaEbzNdf" d="M10.39 6.69C10.79 6.9 11.26 6.9 11.67 6.7C12.35 6.36 13.75 5.68 14.43 5.34C14.71 5.2 14.71 4.8 14.43 4.65C13.12 3.96 9.87 2.25 8.56 1.57C8.11 1.33 7.57 1.3 7.09 1.49C6.33 1.8 4.85 2.4 4.11 2.7C3.78 2.84 3.76 3.29 4.07 3.46C5.46 4.17 8.97 5.96 10.39 6.69Z"/><path id="aSR8reqKk" d="M9.02 14.58C8.7 14.76 8.33 14.45 8.46 14.11C8.97 12.77 10.26 9.32 10.81 7.87C10.92 7.57 11.13 7.33 11.41 7.19C12.17 6.8 13.89 5.92 14.62 5.54C14.83 5.44 15.06 5.64 14.99 5.86C14.55 7.17 13.45 10.49 13.02 11.79C12.89 12.19 12.62 12.53 12.25 12.73C11.42 13.21 9.78 14.15 9.02 14.58Z"/><path id="b5dPBHXJfL" d="M3.95 3.7L10.24 6.91L10.39 7.01L10.5 7.13L10.58 7.28L10.62 7.45L10.62 7.62L10.58 7.79L8.23 14.02L8.14 14.18L8.02 14.3L7.87 14.37L7.7 14.41L7.53 14.39L7.36 14.33L1.64 10.97L1.39 10.78L1.2 10.55L1.07 10.28L1 9.99L1 9.68L1.07 9.38L3.04 4.06L3.13 3.89L3.26 3.76L3.42 3.67L3.59 3.63L3.77 3.64L3.95 3.7ZM3.76 9.39L4.66 8.34L4.66 9.93L5.06 10.11L6.23 8.91L7.38 9.51L6.79 9.86L6.91 10.05L6.98 10.2L7.02 10.33L7.01 10.42L6.95 10.49L6.84 10.53L6.74 10.51L6.62 10.43L6.48 10.29L6.3 10.11L6.15 10.11L6.01 10.1L5.89 10.1L5.79 10.11L5.7 10.11L6.1 10.65L6.47 11.04L6.82 11.27L7.15 11.35L7.45 11.28L7.76 11.03L7.88 10.74L7.86 10.47L7.75 10.24L7.61 10.11L7.7 10.04L7.82 9.94L7.97 9.82L8.17 9.68L8.39 9.51L6.18 8.19L5.22 9.16L5.13 7.66L4.73 7.44L3.9 8.42L3.9 6.9L3.28 6.58L3.28 9.09L3.76 9.39Z"/></defs><g><g><g><use fill="#000" fill-opacity="1" opacity="1" xlink:href="#bEaEbzNdf"/></g><g><use fill="#000" fill-opacity="1" opacity="1" xlink:href="#aSR8reqKk"/></g><g><use fill="#000" fill-opacity="1" opacity="1" xlink:href="#b5dPBHXJfL"/></g></g></g></svg>
 
 
pub/fonts/w3tc.svg CHANGED
@@ -1,11 +1 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Generated by IcoMoon</metadata>
5
- <defs>
6
- <font id="w3tc" horiz-adv-x="1024">
7
- <font-face units-per-em="1024" ascent="960" descent="-64" />
8
- <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
- <glyph unicode="&#x41;" glyph-name="menu-icon" d="M664.96 531.84c25.6-13.44 55.68-13.44 81.92-0.64 43.52 21.76 133.12 65.28 176.64 87.040 17.92 8.96 17.92 34.56 0 44.16-83.84 44.16-291.84 153.6-375.68 197.12-28.8 15.36-63.36 17.28-94.080 5.12-48.64-19.84-143.36-58.24-190.72-77.44-21.12-8.96-22.4-37.76-2.56-48.64 88.96-45.44 313.6-160 404.48-206.72zM577.28 26.88c-20.48-11.52-44.16 8.32-35.84 30.080 32.64 85.76 115.2 306.56 150.4 399.36 7.040 19.2 20.48 34.56 38.4 43.52 48.64 24.96 158.72 81.28 205.44 105.6 13.44 6.4 28.16-6.4 23.68-20.48-28.16-83.84-98.56-296.32-126.080-379.52-8.32-25.6-25.6-47.36-49.28-60.16-53.12-30.72-158.080-90.88-206.72-118.4zM252.8 723.2l402.56-205.44 9.6-6.4 7.040-7.68 5.12-9.6 2.56-10.88v-10.88l-2.56-10.88-150.4-398.72-5.76-10.24-7.68-7.68-9.6-4.48-10.88-2.56-10.88 1.28-10.88 3.84-366.080 215.040-16 12.16-12.16 14.72-8.32 17.28-4.48 18.56v19.84l4.48 19.2 126.080 340.48 5.76 10.88 8.32 8.32 10.24 5.76 10.88 2.56 11.52-0.64 11.52-3.84zM240.64 359.040l57.6 67.2v-101.76l25.6-11.52 74.88 76.8 73.6-38.4-37.76-22.4 7.68-12.16 4.48-9.6 2.56-8.32-0.64-5.76-3.84-4.48-7.040-2.56-6.4 1.28-7.68 5.12-20.48 20.48h-9.6l-8.96 0.64h-7.68l-6.4-0.64h-5.76l25.6-34.56 23.68-24.96 22.4-14.72 21.12-5.12 19.2 4.48 19.84 16 7.68 18.56-1.28 17.28-7.040 14.72-8.96 8.32 5.76 4.48 7.68 6.4 9.6 7.68 12.8 8.96 14.080 10.88-141.44 84.48-61.44-62.080-5.76 96-25.6 14.080-53.12-62.72v97.28l-39.68 20.48v-160.64l30.72-19.2z" />
11
- </font></defs></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg"><metadata>Generated by IcoMoon</metadata><defs><font id="w3tc" horiz-adv-x="1024"><font-face ascent="960" descent="-64" units-per-em="1024"/><glyph horiz-adv-x="512"/><glyph d="M664.96 531.84c25.6-13.44 55.68-13.44 81.92-0.64 43.52 21.76 133.12 65.28 176.64 87.040 17.92 8.96 17.92 34.56 0 44.16-83.84 44.16-291.84 153.6-375.68 197.12-28.8 15.36-63.36 17.28-94.080 5.12-48.64-19.84-143.36-58.24-190.72-77.44-21.12-8.96-22.4-37.76-2.56-48.64 88.96-45.44 313.6-160 404.48-206.72zM577.28 26.88c-20.48-11.52-44.16 8.32-35.84 30.080 32.64 85.76 115.2 306.56 150.4 399.36 7.040 19.2 20.48 34.56 38.4 43.52 48.64 24.96 158.72 81.28 205.44 105.6 13.44 6.4 28.16-6.4 23.68-20.48-28.16-83.84-98.56-296.32-126.080-379.52-8.32-25.6-25.6-47.36-49.28-60.16-53.12-30.72-158.080-90.88-206.72-118.4zM252.8 723.2l402.56-205.44 9.6-6.4 7.040-7.68 5.12-9.6 2.56-10.88v-10.88l-2.56-10.88-150.4-398.72-5.76-10.24-7.68-7.68-9.6-4.48-10.88-2.56-10.88 1.28-10.88 3.84-366.080 215.040-16 12.16-12.16 14.72-8.32 17.28-4.48 18.56v19.84l4.48 19.2 126.080 340.48 5.76 10.88 8.32 8.32 10.24 5.76 10.88 2.56 11.52-0.64 11.52-3.84zM240.64 359.040l57.6 67.2v-101.76l25.6-11.52 74.88 76.8 73.6-38.4-37.76-22.4 7.68-12.16 4.48-9.6 2.56-8.32-0.64-5.76-3.84-4.48-7.040-2.56-6.4 1.28-7.68 5.12-20.48 20.48h-9.6l-8.96 0.64h-7.68l-6.4-0.64h-5.76l25.6-34.56 23.68-24.96 22.4-14.72 21.12-5.12 19.2 4.48 19.84 16 7.68 18.56-1.28 17.28-7.040 14.72-8.96 8.32 5.76 4.48 7.68 6.4 9.6 7.68 12.8 8.96 14.080 10.88-141.44 84.48-61.44-62.080-5.76 96-25.6 14.080-53.12-62.72v97.28l-39.68 20.48v-160.64l30.72-19.2z" glyph-name="menu-icon" unicode="A"/></font></defs></svg>
 
 
 
 
 
 
 
 
 
 
pub/img/overlay/gauge-bg-tp.png ADDED
Binary file
pub/img/overlay/list-check.png DELETED
Binary file
pub/img/stats-bg.png CHANGED
Binary file
pub/img/transparent-comet-moon.png ADDED
Binary file
pub/img/transparent-comet.png ADDED
Binary file
pub/img/usage-statistics-widget.png CHANGED
Binary file
pub/img/w3tc_stackpath_logo.svg CHANGED
@@ -1,40 +1 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Logo" x="0px" y="0px" viewBox="0 0 174 24" style="enable-background:new 0 0 174 24;" xml:space="preserve">
4
- <style type="text/css">
5
- .st0{fill:#000000;}
6
- .st1{fill:url(#SVGID_1_);}
7
- .st2{fill:url(#SVGID_2_);}
8
- </style>
9
- <g>
10
- <g>
11
- <g>
12
- <path class="st0" d="M73.379,15.362l0.03,0.092c-0.102,2.639-0.876,4.651-2.322,6.043c-1.446,1.39-3.544,2.085-6.292,2.085 c-2.759,0-5.004-0.855-6.73-2.565c-1.728-1.709-2.59-3.93-2.59-6.658V9.663c0-2.721,0.829-4.936,2.489-6.653 c1.661-1.714,3.82-2.572,6.478-2.572c2.82,0,4.977,0.717,6.468,2.148c1.493,1.431,2.336,3.467,2.53,6.103l-0.031,0.093h-5.043 c-0.071-1.462-0.396-2.55-0.973-3.26c-0.579-0.711-1.562-1.066-2.951-1.066c-1.176,0-2.101,0.476-2.775,1.429 c-0.674,0.954-1.011,2.202-1.011,3.746v4.729c0,1.555,0.368,2.812,1.104,3.769c0.736,0.958,1.748,1.437,3.036,1.437 c1.246,0,2.13-0.334,2.651-1.005c0.522-0.669,0.819-1.734,0.891-3.198H73.379z"></path>
13
- <path class="st0" d="M13.187,17.275c0-0.793-0.261-1.406-0.781-1.839c-0.521-0.432-1.457-0.89-2.806-1.375 c-2.82-0.896-4.91-1.855-6.269-2.882c-1.359-1.024-2.039-2.505-2.039-4.441c0-1.885,0.809-3.41,2.43-4.573 C5.342,1,7.397,0.418,9.892,0.418c2.473,0,4.499,0.641,6.078,1.923c1.578,1.282,2.342,2.934,2.291,4.952L18.23,7.386h-5.027 c0-0.895-0.302-1.626-0.906-2.186c-0.603-0.561-1.435-0.842-2.499-0.842c-1.042,0-1.86,0.232-2.453,0.696 C6.754,5.517,6.458,6.088,6.458,6.768c0,0.66,0.298,1.188,0.896,1.585c0.599,0.396,1.719,0.893,3.364,1.491 c2.535,0.762,4.444,1.699,5.726,2.811c1.282,1.112,1.923,2.643,1.923,4.589c0,1.977-0.763,3.525-2.291,4.643 c-1.527,1.117-3.554,1.676-6.078,1.676c-2.535,0-4.726-0.641-6.575-1.923c-1.85-1.283-2.75-3.13-2.698-5.539l0.031-0.093h5.043 c0,1.297,0.347,2.225,1.042,2.78c0.695,0.557,1.748,0.834,3.158,0.834c1.074,0,1.872-0.216,2.4-0.648 C12.924,18.541,13.187,17.974,13.187,17.275"></path>
14
- <polygon class="st0" points="19.577,0.567 19.577,5.016 25.685,5.016 25.685,23.37 30.323,23.37 30.323,5.016 36.393,5.016 36.393,0.567 "></polygon>
15
- <polygon class="st0" points="130.629,0.567 130.629,5.016 136.737,5.016 136.737,23.37 141.375,23.37 141.375,5.016 147.445,5.016 147.445,0.567 "></polygon>
16
- <polygon class="st0" points="162.791,0.567 162.791,9.728 155.248,9.728 155.248,0.567 150.649,0.567 150.649,23.37 155.248,23.37 155.248,14.173 162.791,14.173 162.791,23.37 167.39,23.37 167.39,0.567 "></polygon>
17
- <path class="st0" d="M101.775,15.549v7.815h-5.268V0.561h8.477c2.683,0,4.812,0.692,6.387,2.076 c1.574,1.384,2.362,3.192,2.362,5.427c0,2.244-0.789,4.054-2.362,5.426c-1.575,1.374-3.704,2.06-6.387,2.06H101.775z M101.775,11.478h3.209c1.14,0,2.007-0.315,2.603-0.947c0.596-0.631,0.894-1.443,0.894-2.434c0-1.014-0.298-1.843-0.894-2.492 c-0.595-0.646-1.462-0.97-2.603-0.97h-3.209V11.478z"></path>
18
- <path class="st0" d="M93.306,22.301c-2.66-3.08-6.816-7.855-8.989-10.408l8.989-10.445V0.567h-1.418h-3.799 c-2.413,2.851-4.79,5.589-7.203,8.436V0.567h-4.6V23.37h4.6v-8.437l7.24,8.437h3.763h1.418V22.301z"></path>
19
- <polygon class="st0" points="119.906,0.566 112.062,23.369 116.964,23.369 124.997,0.566 "></polygon>
20
- <polygon class="st0" points="42.247,0.566 34.402,23.369 39.304,23.369 47.337,0.566 "></polygon>
21
- <g>
22
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="58.0636" y1="15.3441" x2="43.8426" y2="10.168">
23
- <stop offset="0.0555" style="stop-color:#000000"></stop>
24
- <stop offset="1" style="stop-color:#000000;stop-opacity:0.2"></stop>
25
- </linearGradient>
26
- <polygon class="st1" points="47.337,0.567 44.883,7.533 47.337,14.554 42.41,14.554 40.844,18.998 48.732,18.998 50.24,23.369 55.143,23.369 "></polygon>
27
- </g>
28
- <g>
29
- <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="135.723" y1="15.3441" x2="121.5019" y2="10.168">
30
- <stop offset="0.0555" style="stop-color:#000000"></stop>
31
- <stop offset="1" style="stop-color:#000000;stop-opacity:0.2"></stop>
32
- </linearGradient>
33
- <polygon class="st2" points="124.996,0.567 122.542,7.533 124.996,14.554 120.069,14.554 118.504,18.998 126.392,18.998 127.899,23.369 132.802,23.369 "></polygon>
34
- </g>
35
- </g>
36
- </g>
37
- </g>
38
- <path class="st0" d="M170.618,0.945h-0.696v1.895h-0.469V0.945h-0.688V0.565h1.853V0.945z"></path>
39
- <path class="st0" d="M171.497,0.565l0.584,1.649l0.581-1.649h0.615v2.274h-0.47V2.218l0.047-1.073l-0.614,1.695h-0.321l-0.612-1.693 l0.047,1.072v0.622h-0.469V0.565H171.497z"></path>
40
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Logo" x="0" y="0" viewBox="0 0 174 24" xml:space="preserve" style="enable-background:new 0 0 174 24"><style type="text/css">.st0{fill:#000}.st1{fill:url(#SVGID_1_)}.st2{fill:url(#SVGID_2_)}</style><g><g><g><path d="M73.379,15.362l0.03,0.092c-0.102,2.639-0.876,4.651-2.322,6.043c-1.446,1.39-3.544,2.085-6.292,2.085 c-2.759,0-5.004-0.855-6.73-2.565c-1.728-1.709-2.59-3.93-2.59-6.658V9.663c0-2.721,0.829-4.936,2.489-6.653 c1.661-1.714,3.82-2.572,6.478-2.572c2.82,0,4.977,0.717,6.468,2.148c1.493,1.431,2.336,3.467,2.53,6.103l-0.031,0.093h-5.043 c-0.071-1.462-0.396-2.55-0.973-3.26c-0.579-0.711-1.562-1.066-2.951-1.066c-1.176,0-2.101,0.476-2.775,1.429 c-0.674,0.954-1.011,2.202-1.011,3.746v4.729c0,1.555,0.368,2.812,1.104,3.769c0.736,0.958,1.748,1.437,3.036,1.437 c1.246,0,2.13-0.334,2.651-1.005c0.522-0.669,0.819-1.734,0.891-3.198H73.379z" class="st0"/><path d="M13.187,17.275c0-0.793-0.261-1.406-0.781-1.839c-0.521-0.432-1.457-0.89-2.806-1.375 c-2.82-0.896-4.91-1.855-6.269-2.882c-1.359-1.024-2.039-2.505-2.039-4.441c0-1.885,0.809-3.41,2.43-4.573 C5.342,1,7.397,0.418,9.892,0.418c2.473,0,4.499,0.641,6.078,1.923c1.578,1.282,2.342,2.934,2.291,4.952L18.23,7.386h-5.027 c0-0.895-0.302-1.626-0.906-2.186c-0.603-0.561-1.435-0.842-2.499-0.842c-1.042,0-1.86,0.232-2.453,0.696 C6.754,5.517,6.458,6.088,6.458,6.768c0,0.66,0.298,1.188,0.896,1.585c0.599,0.396,1.719,0.893,3.364,1.491 c2.535,0.762,4.444,1.699,5.726,2.811c1.282,1.112,1.923,2.643,1.923,4.589c0,1.977-0.763,3.525-2.291,4.643 c-1.527,1.117-3.554,1.676-6.078,1.676c-2.535,0-4.726-0.641-6.575-1.923c-1.85-1.283-2.75-3.13-2.698-5.539l0.031-0.093h5.043 c0,1.297,0.347,2.225,1.042,2.78c0.695,0.557,1.748,0.834,3.158,0.834c1.074,0,1.872-0.216,2.4-0.648 C12.924,18.541,13.187,17.974,13.187,17.275" class="st0"/><polygon points="19.577 .567 19.577 5.016 25.685 5.016 25.685 23.37 30.323 23.37 30.323 5.016 36.393 5.016 36.393 .567" class="st0"/><polygon points="130.629 .567 130.629 5.016 136.737 5.016 136.737 23.37 141.375 23.37 141.375 5.016 147.445 5.016 147.445 .567" class="st0"/><polygon points="162.791 .567 162.791 9.728 155.248 9.728 155.248 .567 150.649 .567 150.649 23.37 155.248 23.37 155.248 14.173 162.791 14.173 162.791 23.37 167.39 23.37 167.39 .567" class="st0"/><path d="M101.775,15.549v7.815h-5.268V0.561h8.477c2.683,0,4.812,0.692,6.387,2.076 c1.574,1.384,2.362,3.192,2.362,5.427c0,2.244-0.789,4.054-2.362,5.426c-1.575,1.374-3.704,2.06-6.387,2.06H101.775z M101.775,11.478h3.209c1.14,0,2.007-0.315,2.603-0.947c0.596-0.631,0.894-1.443,0.894-2.434c0-1.014-0.298-1.843-0.894-2.492 c-0.595-0.646-1.462-0.97-2.603-0.97h-3.209V11.478z" class="st0"/><path d="M93.306,22.301c-2.66-3.08-6.816-7.855-8.989-10.408l8.989-10.445V0.567h-1.418h-3.799 c-2.413,2.851-4.79,5.589-7.203,8.436V0.567h-4.6V23.37h4.6v-8.437l7.24,8.437h3.763h1.418V22.301z" class="st0"/><polygon points="119.906 .566 112.062 23.369 116.964 23.369 124.997 .566" class="st0"/><polygon points="42.247 .566 34.402 23.369 39.304 23.369 47.337 .566" class="st0"/><g><linearGradient id="SVGID_1_" x1="58.064" x2="43.843" y1="15.344" y2="10.168" gradientUnits="userSpaceOnUse"><stop offset=".056" style="stop-color:#000"/><stop offset="1" style="stop-color:#000;stop-opacity:.2"/></linearGradient><polygon points="47.337 .567 44.883 7.533 47.337 14.554 42.41 14.554 40.844 18.998 48.732 18.998 50.24 23.369 55.143 23.369" class="st1"/></g><g><linearGradient id="SVGID_2_" x1="135.723" x2="121.502" y1="15.344" y2="10.168" gradientUnits="userSpaceOnUse"><stop offset=".056" style="stop-color:#000"/><stop offset="1" style="stop-color:#000;stop-opacity:.2"/></linearGradient><polygon points="124.996 .567 122.542 7.533 124.996 14.554 120.069 14.554 118.504 18.998 126.392 18.998 127.899 23.369 132.802 23.369" class="st2"/></g></g></g></g><path d="M170.618,0.945h-0.696v1.895h-0.469V0.945h-0.688V0.565h1.853V0.945z" class="st0"/><path d="M171.497,0.565l0.584,1.649l0.581-1.649h0.615v2.274h-0.47V2.218l0.047-1.073l-0.614,1.695h-0.321l-0.612-1.693 l0.047,1.072v0.622h-0.469V0.565H171.497z" class="st0"/></svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
pub/img/wpspin_light.gif CHANGED
Binary file
pub/js/lightbox.js CHANGED
@@ -400,7 +400,8 @@ function w3tc_lightbox_upgrade(nonce, data_src, renew_key) {
400
  (renew_key ? '&renew_key=' + encodeURIComponent(renew_key) : '') +
401
  (client_id ? '&client_id=' + encodeURIComponent(client_id) : ''),
402
  callback: function(lightbox) {
403
- lightbox.options.height = jQuery('#w3tc-upgrade').height() - 57;
 
404
  jQuery('.button-primary', lightbox.container).click(function() {
405
  lightbox.close();
406
  });
@@ -415,6 +416,10 @@ function w3tc_lightbox_upgrade(nonce, data_src, renew_key) {
415
  scrollTop: jQuery("#licensing").offset().top
416
  }, 2000);
417
  });
 
 
 
 
418
  lightbox.resize();
419
  }
420
  });
400
  (renew_key ? '&renew_key=' + encodeURIComponent(renew_key) : '') +
401
  (client_id ? '&client_id=' + encodeURIComponent(client_id) : ''),
402
  callback: function(lightbox) {
403
+ lightbox.options.height = jQuery('#w3tc-upgrade').outerHeight();
404
+
405
  jQuery('.button-primary', lightbox.container).click(function() {
406
  lightbox.close();
407
  });
416
  scrollTop: jQuery("#licensing").offset().top
417
  }, 2000);
418
  });
419
+
420
+ // Allow for customizations of the "upgrade" overlay specifically.
421
+ jQuery( '.w3tc-overlay' ).addClass( 'w3tc-overlay-upgrade' );
422
+
423
  lightbox.resize();
424
  }
425
  });
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: boldgrid, fredericktownes, maxicusc, gidomanders, bwmarkle, harryj
3
  Tags: seo, cache, optimize, pagespeed, performance, caching, compression, maxcdn, nginx, varnish, redis, new relic, aws, amazon web services, s3, cloudfront, rackspace, cloudflare, azure, apache
4
  Requires at least: 3.2
5
  Tested up to: 5.4
6
- Stable tag: 0.14.2
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -275,8 +275,14 @@ Please reach out to all of these people and support their projects if you're so
275
 
276
  == Changelog ==
277
 
 
 
 
 
 
 
278
  = 0.14.2 =
279
- * Fixed WP-CLI redirect issue in multisite
280
  * Fix: Avoid PREG_JIT_STACKLIMIT_ERROR in minify
281
  * Fix: Prevent empty needle PHP warning
282
  * Update: Allow to specify URIs with a query string in Additional Pages
3
  Tags: seo, cache, optimize, pagespeed, performance, caching, compression, maxcdn, nginx, varnish, redis, new relic, aws, amazon web services, s3, cloudfront, rackspace, cloudflare, azure, apache
4
  Requires at least: 3.2
5
  Tested up to: 5.4
6
+ Stable tag: 0.14.3
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
275
 
276
  == Changelog ==
277
 
278
+ = 0.14.3 =
279
+ * Fix: Take "Accepted Query Strings" into account when "Cache query strings" enabled
280
+ * Fix: Fix typo in variable for lazy loading
281
+ * Update: Add lazy load Google Maps reference to the general settings page
282
+ * Update: Support background-image: together with background: for lazy loading
283
+
284
  = 0.14.2 =
285
+ * Fixed WP-CLI rediect issue in multisite
286
  * Fix: Avoid PREG_JIT_STACKLIMIT_ERROR in minify
287
  * Fix: Prevent empty needle PHP warning
288
  * Update: Allow to specify URIs with a query string in Additional Pages
w3-total-cache-api.php CHANGED
@@ -5,7 +5,7 @@ if ( !defined( 'ABSPATH' ) ) {
5
  }
6
 
7
  define( 'W3TC', true );
8
- define( 'W3TC_VERSION', '0.14.2' );
9
  define( 'W3TC_POWERED_BY', 'W3 Total Cache' );
10
  define( 'W3TC_EMAIL', 'w3tc@w3-edge.com' );
11
  define( 'W3TC_TEXT_DOMAIN', 'w3-total-cache' );
5
  }
6
 
7
  define( 'W3TC', true );
8
+ define( 'W3TC_VERSION', '0.14.3' );
9
  define( 'W3TC_POWERED_BY', 'W3 Total Cache' );
10
  define( 'W3TC_EMAIL', 'w3tc@w3-edge.com' );
11
  define( 'W3TC_TEXT_DOMAIN', 'w3-total-cache' );
w3-total-cache.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: W3 Total Cache
4
  Description: The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.
5
- Version: 0.14.2
6
  Plugin URI: https://www.boldgrid.com/totalcache/
7
  Author: BoldGrid
8
  Author URI: https://www.boldgrid.com/
2
  /*
3
  Plugin Name: W3 Total Cache
4
  Description: The highest rated and most complete WordPress performance plugin. Dramatically improve the speed and user experience of your site. Add browser, page, object and database caching as well as minify and content delivery network (CDN) to WordPress.
5
+ Version: 0.14.3
6
  Plugin URI: https://www.boldgrid.com/totalcache/
7
  Author: BoldGrid
8
  Author URI: https://www.boldgrid.com/