LiteSpeed Cache - Version 4.1

Version Description

  • Jun 25 2021 =
  • UCSS/CCSS/LQIP Moved queue storage to file system from database wp-options table to lessen the IO load. (#633504)
  • 3rd Added an option to disable ESI for the WooCommerce Cart. (#358 @Anna Feng @Astrid Wang)
  • ESI Fixed an ESI nonce issue introduced in v4.0. (@Andrew Choi)
  • Object Used new .litespeed_conf.dat instead of .object-cache.ini for object cache configuration storage.
  • Conf Now updating related files after plugin upgrade and not just after activation.
  • Guest Added a Guest Mode JS Excludes option. (@Ankit @Mamac @Rcverma)
  • Guest Guest Mode now uses a lightweight script to update guest vary for reduced server load.
  • Guest Guest Mode now adds missing image dimensions.
  • Guest Guest vary will no longer update if there's already a vary in place to address the infinite loop caused by CloudFlare's incorrect cache control setting for PHP.
  • Guest Guest vary update request will no longer be sent if lscache_vary is already set.
  • Guest Added a Configurable Guest Mode UA/IP under the Tuning tab in the General menu.
  • Guest Guest Mode now allows cron to be hooked, even when UCSS/CCSS options are off. (#338437 @Stars)
  • Guest Simplified the vary generation process under Guest Mode.
  • Guest Added a Guest Mode HTML comment for easier debugging. (@Ruikai)
  • Guest Guest vary update ajax now bypasses potential POST cache.
  • CCSS Added back the options Separate CCSS Cache Post Types and Separate CCSS Cache URIs. (@Joshua @Ankit)
  • CCSS CCSS/UCSS queue is now limited to a maximum of 500 entries.
  • Control The cache control constant LSCACHE_NO_CACHE will now have a higher priority than the Forced Public Cache setting.
  • Crawler The Crawler can now crawl Guest Mode pages.
  • Crawler Fixed a potential XSS vulnerability in the Crawler settings. (#927355)
  • Crawler The Crawler now supports a cookie value of _null. (@Tobolo)
  • Media Updated the default value for the Responsive Placeholder SVG to be transparent.
  • Media WebP images in the background may now be served in Guest Mode.
  • Media WebP images in CSS may now be bypassed if the requesting Guest Mode client doesnt support WebP.
  • Media Fixed empty default image placeholder under Guest Mode.
  • Image Optimize Changed the missing $_POST to $post_data so the database status is properly updated. (#345 @Lucas)
  • Import Export file is now readable to allow importing of partial configurations. (@Ryan D @Joshua)
  • Page Optimize Fixed W3 validator errors in Guest Mode. (#61393817)
  • 3rd A fatal WooCommerce error is no longer triggered by a custom theme reusing a previous LSCWP cache detection tag.
  • 3rd AMP may now bypass Guest Mode automatically.
  • Localize Dropped the Localize Resources option as Guest Mode is a sufficient replacement. (Note: Due to user feedback during the development period, we have decided to reinstate this option in a future version.)
  • Cloud Changed the WP API url.
  • Lang Corrected a missing language folder.
  • GUI Added a CCSS/UCSS loading page visualization. (#360 @Astrid Wang @Anna Feng)
  • GUI Added a warning to indicate when Guest Mode CCSS/UCSS quota is in use. (#361 @Astrid Wang @Anna Feng)
  • GUI Added a litespeed-info text color. (@Astrid Wang)
  • GUI Implemented various UI/UX improvements. (@Joshua @Lisa)
  • GUI Duplicate cloud service messages with the same content will only display once now. (@Marc Dahl)
  • GUI Added a WebP replacement warning for Guest Mode Optimization if WebP replacement is off.
  • Misc Dropped wp_assets from distribution to reduce the package size. (@lowwebtech)
  • Misc Increased the new version and score detection intervals.
  • Misc Optimized WP Assets images. (#352 @lowwebtech)
  • Debug Dropped the redudant error_log debug info.
Download this release

Release Info

Developer LiteSpeedTech
Plugin Icon 128x128 LiteSpeed Cache
Version 4.1
Comparing to
See all releases

Code changes from version 4.0 to 4.1

Files changed (81) hide show
  1. assets/css/litespeed.css +8 -0
  2. assets/img/lscwp-logo_90x90.png +0 -0
  3. assets/img/slack-logo.png +0 -0
  4. assets/js/guest.js +14 -10
  5. assets/js/guest.min.js +1 -1
  6. assets/js/js_delay.js +9 -9
  7. assets/js/js_delay.min.js +1 -1
  8. data/const.default.ini +89 -16
  9. guest.vary.php +12 -0
  10. litespeed-cache.pot → lang/litespeed-cache.pot +678 -618
  11. lib/guest.cls.php +186 -0
  12. lib/object-cache.php +1 -1
  13. litespeed-cache.php +2 -2
  14. readme.txt +50 -5
  15. src/activation.cls.php +84 -0
  16. src/admin-display.cls.php +2 -2
  17. src/admin.cls.php +1 -1
  18. src/base.cls.php +11 -5
  19. src/cloud.cls.php +16 -5
  20. src/conf.cls.php +5 -1
  21. src/control.cls.php +14 -7
  22. src/core.cls.php +15 -0
  23. src/crawler.cls.php +19 -2
  24. src/css.cls.php +159 -72
  25. src/data.cls.php +6 -0
  26. src/data.upgrade.func.php +12 -2
  27. src/doc.cls.php +4 -3
  28. src/esi.cls.php +16 -6
  29. src/gui.cls.php +7 -24
  30. src/htaccess.cls.php +2 -1
  31. src/img-optm.cls.php +1 -1
  32. src/import.cls.php +75 -58
  33. src/lang.cls.php +9 -6
  34. src/localization.cls.php +0 -135
  35. src/media.cls.php +10 -9
  36. src/object-cache.cls.php +31 -48
  37. src/optimize.cls.php +22 -18
  38. src/optimizer.cls.php +4 -1
  39. src/placeholder.cls.php +75 -41
  40. src/purge.cls.php +0 -23
  41. src/root.cls.php +1 -0
  42. src/router.cls.php +0 -4
  43. src/tag.cls.php +4 -1
  44. src/task.cls.php +24 -13
  45. src/vary.cls.php +21 -101
  46. thirdparty/amp.cls.php +1 -0
  47. thirdparty/woocommerce.cls.php +8 -4
  48. thirdparty/woocommerce.content.tpl.php +14 -0
  49. tpl/cache/settings_inc.object.tpl.php +1 -1
  50. tpl/cdn/settings.tpl.php +16 -10
  51. tpl/crawler/settings-simulation.tpl.php +1 -1
  52. tpl/crawler/summary.tpl.php +2 -2
  53. tpl/dash/dashboard.tpl.php +11 -6
  54. tpl/general/entry.tpl.php +5 -0
  55. tpl/general/settings.tpl.php +7 -6
  56. tpl/general/settings_inc.guest.tpl.php +19 -2
  57. tpl/general/settings_tuning.tpl.php +39 -0
  58. tpl/page_optm/settings_css.tpl.php +37 -30
  59. tpl/page_optm/settings_html.tpl.php +4 -4
  60. tpl/page_optm/settings_js.tpl.php +3 -1
  61. tpl/page_optm/settings_localization.tpl.php +0 -45
  62. tpl/page_optm/settings_media.tpl.php +20 -10
  63. tpl/page_optm/settings_tuning.tpl.php +52 -2
  64. tpl/toolbox/beta_test.tpl.php +1 -0
  65. tpl/toolbox/purge.tpl.php +0 -9
  66. tpl/toolbox/settings-debug.tpl.php +1 -1
  67. wp_assets/banner-1544x500.png +0 -0
  68. wp_assets/banner-772x250.png +0 -0
  69. wp_assets/icon-128x128.png +0 -0
  70. wp_assets/icon-256x256.png +0 -0
  71. wp_assets/screenshot-1.png +0 -0
  72. wp_assets/screenshot-10.png +0 -0
  73. wp_assets/screenshot-11.png +0 -0
  74. wp_assets/screenshot-2.png +0 -0
  75. wp_assets/screenshot-3.png +0 -0
  76. wp_assets/screenshot-4.png +0 -0
  77. wp_assets/screenshot-5.png +0 -0
  78. wp_assets/screenshot-6.png +0 -0
  79. wp_assets/screenshot-7.png +0 -0
  80. wp_assets/screenshot-8.png +0 -0
  81. wp_assets/screenshot-9.png +0 -0
assets/css/litespeed.css CHANGED
@@ -282,6 +282,10 @@
282
  color: #3366CC !important;
283
  }
284
 
 
 
 
 
285
  .litespeed-success {
286
  color: #73b38d !important;
287
  }
@@ -320,6 +324,10 @@ button.litespeed-form-action:hover {
320
  background-color: #3366CC !important;
321
  }
322
 
 
 
 
 
323
  .litespeed-bg-success {
324
  background-color: #73b38d !important;
325
  }
282
  color: #3366CC !important;
283
  }
284
 
285
+ .litespeed-info {
286
+ color: #3FBFBF !important;
287
+ }
288
+
289
  .litespeed-success {
290
  color: #73b38d !important;
291
  }
324
  background-color: #3366CC !important;
325
  }
326
 
327
+ .litespeed-bg-info {
328
+ background-color: #d1ecf1 !important;
329
+ }
330
+
331
  .litespeed-bg-success {
332
  background-color: #73b38d !important;
333
  }
assets/img/lscwp-logo_90x90.png CHANGED
Binary file
assets/img/slack-logo.png CHANGED
Binary file
assets/js/guest.js CHANGED
@@ -1,10 +1,14 @@
1
- fetch( 'litespeed_url', {
2
- method: 'POST',
3
- cache: 'no-cache',
4
- redirect: 'follow',
5
- } ).then( response => response.json() ).then( data => {
6
- console.log(data);
7
- if ( data.hasOwnProperty( 'reload' ) && data.reload == 'yes' ) {
8
- window.location.reload( true );
9
- }
10
- } );
 
 
 
 
1
+ var litespeed_vary = document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/, "$1");
2
+ if ( ! litespeed_vary ) {
3
+ // Note: as the vary may be changed in Login Cookie option, even the visitor doesn't have this cookie, it doesn't mean the visitor doesn't have the vary, so still need PHP side to decide if need to set vary or not.
4
+ fetch( 'litespeed_url', {
5
+ method: 'POST',
6
+ cache: 'no-cache',
7
+ redirect: 'follow',
8
+ } ).then( response => response.json() ).then( data => {
9
+ console.log(data);
10
+ if ( data.hasOwnProperty( 'reload' ) && data.reload == 'yes' ) {
11
+ window.location.reload( true );
12
+ }
13
+ } );
14
+ }
assets/js/guest.min.js CHANGED
@@ -1 +1 @@
1
- fetch("litespeed_url",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&window.location.reload(!0)});
1
+ var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"$1");litespeed_vary||fetch("litespeed_url",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&window.location.reload(!0)});
assets/js/js_delay.js CHANGED
@@ -9,7 +9,7 @@ const litespeed_ui_events = [
9
  var litespeed_delay_i=0;
10
  var urlCreator = window.URL || window.webkitURL;
11
 
12
- // const litespeed_js_delay_timer = setTimeout( litespeed_load_delayed_js, 4000 );
13
 
14
  litespeed_ui_events.forEach( function( e ) {
15
  window.addEventListener( e, litespeed_load_delayed_js_forced, { passive: true } );
@@ -23,8 +23,8 @@ function litespeed_load_delayed_js_forced() {
23
  } );
24
  litespeed_load_delayed_js( true );
25
 
26
- document.querySelectorAll( 'iframe[litespeed-src]' ).forEach( function( e ) {
27
- e.setAttribute( 'src', e.getAttribute( 'litespeed-src' ) );
28
  } );
29
  }
30
 
@@ -50,18 +50,18 @@ function litespeed_inline2src( data ) {
50
 
51
  function litespeed_load_one() {
52
  litespeed_delay_i ++;
53
- var e = document.querySelector( 'script[type="litespeed/javascript"][litespeed_i="'+litespeed_delay_i+'"]' );
54
  if ( ! e ) {
55
- console.log( 'all loaded' );
56
  return;
57
  }
58
 
59
- console.log( 'load i=' + e.getAttribute( 'litespeed_i' ), '-----',e );
60
 
61
  var e2 = document.createElement( 'script' );
62
 
63
  e2.addEventListener( 'load', function(){
64
- console.log('loaded --- ' + e2.getAttribute('litespeed_i'));
65
  litespeed_load_one();
66
  }, { passive: true } );
67
 
@@ -69,10 +69,10 @@ function litespeed_load_one() {
69
 
70
  attrs.forEach( function( aname ) {
71
  if ( aname == 'type') return;
72
- e2.setAttribute( aname, e.getAttribute( aname ) );
73
  } );
74
  e2.type = 'text/javascript';
75
- if ( ! e.src && e.textContent ) {
76
  e2.src = litespeed_inline2src( e.textContent );
77
  // e2.textContent = e.textContent;
78
  }
9
  var litespeed_delay_i=0;
10
  var urlCreator = window.URL || window.webkitURL;
11
 
12
+ // const litespeed_js_delay_timer = setTimeout( litespeed_load_delayed_js, 70 );
13
 
14
  litespeed_ui_events.forEach( function( e ) {
15
  window.addEventListener( e, litespeed_load_delayed_js_forced, { passive: true } );
23
  } );
24
  litespeed_load_delayed_js( true );
25
 
26
+ document.querySelectorAll( 'iframe[data-litespeed-src]' ).forEach( function( e ) {
27
+ e.setAttribute( 'src', e.getAttribute( 'data-litespeed-src' ) );
28
  } );
29
  }
30
 
50
 
51
  function litespeed_load_one() {
52
  litespeed_delay_i ++;
53
+ var e = document.querySelector( 'script[type="litespeed/javascript"][data-i="'+litespeed_delay_i+'"]' );
54
  if ( ! e ) {
55
+ console.log( 'all loaded!' );
56
  return;
57
  }
58
 
59
+ console.log( 'load i=' + e.getAttribute( 'data-i' ), '-----',e );
60
 
61
  var e2 = document.createElement( 'script' );
62
 
63
  e2.addEventListener( 'load', function(){
64
+ console.log('loaded --- ' + e2.getAttribute('data-i'));
65
  litespeed_load_one();
66
  }, { passive: true } );
67
 
69
 
70
  attrs.forEach( function( aname ) {
71
  if ( aname == 'type') return;
72
+ e2.setAttribute( aname == 'data-src' ? 'src' : aname, e.getAttribute( aname ) );
73
  } );
74
  e2.type = 'text/javascript';
75
+ if ( ! e2.src && e.textContent ) {
76
  e2.src = litespeed_inline2src( e.textContent );
77
  // e2.textContent = e.textContent;
78
  }
assets/js/js_delay.min.js CHANGED
@@ -1 +1 @@
1
- const litespeed_ui_events=["mouseover","click","keydown","wheel","touchmove","touchstart"];var litespeed_delay_i=0,urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_forced(){console.log("start delay load js"),litespeed_ui_events.forEach(function(e){window.removeEventListener(e,litespeed_load_delayed_js_forced,{passive:!0})}),litespeed_load_delayed_js(!0),document.querySelectorAll("iframe[litespeed-src]").forEach(function(e){e.setAttribute("src",e.getAttribute("litespeed-src"))})}function litespeed_load_delayed_js(e){e&&console.log("Force runing delay JS"),litespeed_load_one()}function litespeed_inline2src(t){try{var i=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){i="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return i}function litespeed_load_one(){litespeed_delay_i++;var t,i=document.querySelector('script[type="litespeed/javascript"][litespeed_i="'+litespeed_delay_i+'"]');i?(console.log("load i="+i.getAttribute("litespeed_i"),"-----",i),(t=document.createElement("script")).addEventListener("load",function(){console.log("loaded --- "+t.getAttribute("litespeed_i")),litespeed_load_one()},{passive:!0}),i.getAttributeNames().forEach(function(e){"type"!=e&&t.setAttribute(e,i.getAttribute(e))}),t.type="text/javascript",!i.src&&i.textContent&&(t.src=litespeed_inline2src(i.textContent)),i.after(t),i.remove()):console.log("all loaded")}litespeed_ui_events.forEach(function(e){window.addEventListener(e,litespeed_load_delayed_js_forced,{passive:!0})});
1
+ const litespeed_ui_events=["mouseover","click","keydown","wheel","touchmove","touchstart"];var litespeed_delay_i=0,urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_forced(){console.log("start delay load js"),litespeed_ui_events.forEach(function(e){window.removeEventListener(e,litespeed_load_delayed_js_forced,{passive:!0})}),litespeed_load_delayed_js(!0),document.querySelectorAll("iframe[data-litespeed-src]").forEach(function(e){e.setAttribute("src",e.getAttribute("data-litespeed-src"))})}function litespeed_load_delayed_js(e){e&&console.log("Force runing delay JS"),litespeed_load_one()}function litespeed_inline2src(t){try{var a=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){a="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return a}function litespeed_load_one(){litespeed_delay_i++;var t,a=document.querySelector('script[type="litespeed/javascript"][data-i="'+litespeed_delay_i+'"]');a?(console.log("load i="+a.getAttribute("data-i"),"-----",a),(t=document.createElement("script")).addEventListener("load",function(){console.log("loaded --- "+t.getAttribute("data-i")),litespeed_load_one()},{passive:!0}),a.getAttributeNames().forEach(function(e){"type"!=e&&t.setAttribute("data-src"==e?"src":e,a.getAttribute(e))}),t.type="text/javascript",!t.src&&a.textContent&&(t.src=litespeed_inline2src(a.textContent)),a.after(t),a.remove()):console.log("all loaded!")}litespeed_ui_events.forEach(function(e){window.addEventListener(e,litespeed_load_delayed_js_forced,{passive:!0})});
data/const.default.ini CHANGED
@@ -28,6 +28,81 @@ guest_optm = true
28
  ; O_NEWS
29
  news = true
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  ;; -------------------------------------------------- ;;
33
  ;; -------------- Cache ----------------- ;;
@@ -289,12 +364,21 @@ optm-exc_roles = ''
289
 
290
  optm-ccss_con = ''
291
 
 
 
 
 
 
 
292
  ; Analytics JS also measure the load-time as it is being loaded on the website itself and Google sends a report each month to the user. If these files are deferred, The Analytics JS shows a longer page-load time, even if the website isn't actually slow. by Shivam
293
  optm-js_defer_exc = 'jquery.js
294
  jquery.min.js
295
  gtm.js
296
  analytics.js'
297
 
 
 
 
298
  ; O_OPTM_DNS_PREFETCH
299
  optm-dns_prefetch = ''
300
 
@@ -365,19 +449,6 @@ discuss-avatar_cron = false
365
  ; O_DISCUSS_AVATAR_CACHE_TTL
366
  discuss-avatar_cache_ttl = 604800
367
 
368
- ; O_OPTM_LOCALIZE
369
- optm-localize = false
370
-
371
- ; O_OPTM_LOCALIZE_DOMAINS
372
- optm-localize_domains = '### Popular scripts ###
373
- https://platform.twitter.com/widgets.js
374
- https://www.google.com/recaptcha/api.js
375
- https://www.google-analytics.com/analytics.js
376
- https://www.googletagmanager.com/gtm.js
377
- https://www.googletagservices.com/tag/js/gpt.js
378
- https://connect.facebook.net/en_US/fbevents.js'
379
-
380
-
381
 
382
 
383
  ;; -------------------------------------------------- ;;
@@ -397,7 +468,7 @@ media-placeholder_resp = false
397
  media-placeholder_resp_color = '#cfd4db'
398
 
399
  ; O_MEDIA_PLACEHOLDER_RESP_SVG
400
- media-placeholder_resp_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}"><rect width="100%" height="100%" fill="{color}"/></svg>'
401
 
402
  ; O_MEDIA_LQIP
403
  media-lqip = false
@@ -619,8 +690,8 @@ filetype[0] = '.aac
619
  .eot
620
  .gif
621
  .jpeg
622
- .js
623
  .jpg
 
624
  .less
625
  .mp3
626
  .mp4
@@ -630,7 +701,9 @@ filetype[0] = '.aac
630
  .png
631
  .svg
632
  .ttf
633
- .woff'
 
 
634
 
635
  ;;url[1] = 'https://2nd_CDN_url.com/'
636
 
28
  ; O_NEWS
29
  news = true
30
 
31
+ ; O_GUEST_UAS
32
+ guest_uas = 'Lighthouse
33
+ GTmetrix
34
+ Google
35
+ Pingdom
36
+ bot
37
+ PTST
38
+ HeadlessChrome'
39
+
40
+ ; O_GUEST_IPS
41
+ guest_ips = '208.70.247.157
42
+ 172.255.48.130
43
+ 172.255.48.131
44
+ 172.255.48.132
45
+ 172.255.48.133
46
+ 172.255.48.134
47
+ 172.255.48.135
48
+ 172.255.48.136
49
+ 172.255.48.137
50
+ 172.255.48.138
51
+ 172.255.48.139
52
+ 172.255.48.140
53
+ 172.255.48.141
54
+ 172.255.48.142
55
+ 172.255.48.143
56
+ 172.255.48.144
57
+ 172.255.48.145
58
+ 172.255.48.146
59
+ 172.255.48.147
60
+ 52.229.122.240
61
+ 104.214.72.101
62
+ 13.66.7.11
63
+ 13.85.24.83
64
+ 13.85.24.90
65
+ 13.85.82.26
66
+ 40.74.242.253
67
+ 40.74.243.13
68
+ 40.74.243.176
69
+ 104.214.48.247
70
+ 157.55.189.189
71
+ 104.214.110.135
72
+ 70.37.83.240
73
+ 65.52.36.250
74
+ 13.78.216.56
75
+ 52.162.212.163
76
+ 23.96.34.105
77
+ 65.52.113.236
78
+ 172.255.61.34
79
+ 172.255.61.35
80
+ 172.255.61.36
81
+ 172.255.61.37
82
+ 172.255.61.38
83
+ 172.255.61.39
84
+ 172.255.61.40
85
+ 104.41.2.19
86
+ 191.235.98.164
87
+ 191.235.99.221
88
+ 191.232.194.51
89
+ 52.237.235.185
90
+ 52.237.250.73
91
+ 52.237.236.145
92
+ 104.211.143.8
93
+ 104.211.165.53
94
+ 52.172.14.87
95
+ 40.83.89.214
96
+ 52.175.57.81
97
+ 20.188.63.151
98
+ 20.52.36.49
99
+ 52.246.165.153
100
+ 51.144.102.233
101
+ 13.76.97.224
102
+ 102.133.169.66
103
+ 52.231.199.170
104
+ 13.53.162.7
105
+ 40.123.218.94'
106
 
107
  ;; -------------------------------------------------- ;;
108
  ;; -------------- Cache ----------------- ;;
364
 
365
  optm-ccss_con = ''
366
 
367
+ ; O_OPTM_CCSS_SEP_POSTTYPE
368
+ optm-ccss_sep_posttype = 'page'
369
+
370
+ ; O_OPTM_CCSS_SEP_URI
371
+ optm-ccss_sep_uri = ''
372
+
373
  ; Analytics JS also measure the load-time as it is being loaded on the website itself and Google sends a report each month to the user. If these files are deferred, The Analytics JS shows a longer page-load time, even if the website isn't actually slow. by Shivam
374
  optm-js_defer_exc = 'jquery.js
375
  jquery.min.js
376
  gtm.js
377
  analytics.js'
378
 
379
+ ; O_OPTM_GM_JS_EXC
380
+ optm-gm_js_exc = ''
381
+
382
  ; O_OPTM_DNS_PREFETCH
383
  optm-dns_prefetch = ''
384
 
449
  ; O_DISCUSS_AVATAR_CACHE_TTL
450
  discuss-avatar_cache_ttl = 604800
451
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452
 
453
 
454
  ;; -------------------------------------------------- ;;
468
  media-placeholder_resp_color = '#cfd4db'
469
 
470
  ; O_MEDIA_PLACEHOLDER_RESP_SVG
471
+ media-placeholder_resp_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="{width}" height="{height}" viewBox="0 0 {width} {height}"><rect width="100%" height="100%" style="fill:{color};fill-opacity: 0.1;"/></svg>'
472
 
473
  ; O_MEDIA_LQIP
474
  media-lqip = false
690
  .eot
691
  .gif
692
  .jpeg
 
693
  .jpg
694
+ .js
695
  .less
696
  .mp3
697
  .mp4
701
  .png
702
  .svg
703
  .ttf
704
+ .webp
705
+ .woff
706
+ .woff2'
707
 
708
  ;;url[1] = 'https://2nd_CDN_url.com/'
709
 
guest.vary.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Lightweight script to update guest mode vary
4
+ *
5
+ * @since 4.1
6
+ */
7
+
8
+ require 'lib/guest.cls.php';
9
+
10
+ $guest = new \LiteSpeed\Lib\Guest();
11
+
12
+ $guest->update_guest_vary();
litespeed-cache.pot → lang/litespeed-cache.pot RENAMED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the LiteSpeed Cache package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: LiteSpeed Cache 4.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
7
- "POT-Creation-Date: 2021-05-03 12:48:37+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -28,11 +28,11 @@ msgstr ""
28
  msgid "Purged!"
29
  msgstr ""
30
 
31
- #: src/activation.cls.php:407 src/activation.cls.php:412
32
  msgid "Failed to upgrade."
33
  msgstr ""
34
 
35
- #: src/activation.cls.php:416
36
  msgid "Upgraded successfully."
37
  msgstr ""
38
 
@@ -49,12 +49,12 @@ msgstr ""
49
  msgid "Cache"
50
  msgstr ""
51
 
52
- #: src/admin-display.cls.php:121 tpl/cdn/settings.tpl.php:188
53
  msgid "CDN"
54
  msgstr ""
55
 
56
- #: src/admin-display.cls.php:123 src/gui.cls.php:592
57
- #: tpl/dash/dashboard.tpl.php:52 tpl/dash/network_dash.tpl.php:27
58
  msgid "Image Optimization"
59
  msgstr ""
60
 
@@ -66,7 +66,7 @@ msgstr ""
66
  msgid "Database"
67
  msgstr ""
68
 
69
- #: src/admin-display.cls.php:129 src/lang.cls.php:208
70
  msgid "Crawler"
71
  msgstr ""
72
 
@@ -105,10 +105,10 @@ msgstr ""
105
  #: src/admin-display.cls.php:232 src/admin-display.cls.php:793
106
  #: src/admin-display.cls.php:828 src/admin-display.cls.php:879
107
  #: tpl/cache/settings-cache.tpl.php:19
108
- #: tpl/cache/settings_inc.cache_mobile.tpl.php:70 tpl/cdn/settings.tpl.php:48
109
- #: tpl/page_optm/settings_css.tpl.php:152
110
- #: tpl/page_optm/settings_media.tpl.php:157
111
- #: tpl/page_optm/settings_media.tpl.php:219
112
  #: tpl/toolbox/settings-debug.tpl.php:34
113
  msgid "ON"
114
  msgstr ""
@@ -116,14 +116,14 @@ msgstr ""
116
  #: src/admin-display.cls.php:233 src/admin-display.cls.php:794
117
  #: src/admin-display.cls.php:827 src/admin-display.cls.php:879
118
  #: tpl/cache/settings-cache.tpl.php:19
119
- #: tpl/cache/settings_inc.object.tpl.php:210 tpl/cdn/settings.tpl.php:48
120
  #: tpl/page_optm/settings_js.tpl.php:76
121
- #: tpl/page_optm/settings_media.tpl.php:160
122
  #: tpl/toolbox/settings-debug.tpl.php:34
123
  msgid "OFF"
124
  msgstr ""
125
 
126
- #: src/admin-display.cls.php:275 src/gui.cls.php:583
127
  msgid "Settings"
128
  msgstr ""
129
 
@@ -199,12 +199,13 @@ msgid "Invalid IP"
199
  msgstr ""
200
 
201
  #: src/admin-display.cls.php:1079 tpl/cache/settings-esi.tpl.php:95
202
- #: tpl/page_optm/settings_css.tpl.php:157
203
  #: tpl/page_optm/settings_html.tpl.php:85
204
  #: tpl/page_optm/settings_media_exc.tpl.php:25
205
  #: tpl/page_optm/settings_tuning.tpl.php:35
206
  #: tpl/page_optm/settings_tuning.tpl.php:56
207
- #: tpl/page_optm/settings_tuning.tpl.php:106
 
208
  msgid "API"
209
  msgstr ""
210
 
@@ -228,7 +229,7 @@ msgstr ""
228
  msgid "To do an exact match, add %s to the end of the URL."
229
  msgstr ""
230
 
231
- #: src/admin-display.cls.php:1097 src/doc.cls.php:61
232
  msgid "One per line."
233
  msgstr ""
234
 
@@ -276,84 +277,84 @@ msgstr ""
276
  msgid "Failed to communicate with Cloudflare"
277
  msgstr ""
278
 
279
- #: src/cloud.cls.php:320 src/cloud.cls.php:337 src/cloud.cls.php:368
280
- #: src/cloud.cls.php:481 src/cloud.cls.php:815
281
  msgid "Cloud Error"
282
  msgstr ""
283
 
284
- #: src/cloud.cls.php:368
285
  msgid "No available Cloud Node."
286
  msgstr ""
287
 
288
- #: src/cloud.cls.php:481
289
  msgid "Please try after %1$s for service %2$s."
290
  msgstr ""
291
 
292
- #: src/cloud.cls.php:564 src/cloud.cls.php:576
293
  msgid "Failed to request via WordPress"
294
  msgstr ""
295
 
296
- #: src/cloud.cls.php:586
297
  msgid ""
298
  "We are working hard to improve your online service experience. The service "
299
  "will be unavailable while we work. We apologize for any inconvenience."
300
  msgstr ""
301
 
302
- #: src/cloud.cls.php:595 src/cloud.cls.php:603 src/cloud.cls.php:851
303
  msgid "Message from QUIC.cloud server"
304
  msgstr ""
305
 
306
- #: src/cloud.cls.php:611
307
  msgid "Good news from QUIC.cloud server"
308
  msgstr ""
309
 
310
- #: src/cloud.cls.php:620
311
  msgid "%1$s plugin version %2$s required for this action."
312
  msgstr ""
313
 
314
- #: src/cloud.cls.php:662 src/cloud.cls.php:840
315
  msgid "Failed to communicate with QUIC.cloud server"
316
  msgstr ""
317
 
318
- #: src/cloud.cls.php:670
319
  msgid ""
320
  "Site not recognized. Domain Key has been automatically removed. Please "
321
  "request a new one."
322
  msgstr ""
323
 
324
- #: src/cloud.cls.php:671 src/error.cls.php:48
325
  msgid "Click here to set."
326
  msgstr ""
327
 
328
- #: src/cloud.cls.php:859
329
  msgid ""
330
  "Applied for Domain Key successfully. Please wait for result. Domain Key will "
331
  "be automatically sent to your WordPress."
332
  msgstr ""
333
 
334
- #: src/cloud.cls.php:910
335
  msgid ""
336
  "Congratulations, your Domain Key has been approved! The setting has been "
337
  "updated accordingly."
338
  msgstr ""
339
 
340
- #: src/cloud.cls.php:981
341
  msgid "Domain Key hash mismatch"
342
  msgstr ""
343
 
344
- #: src/cloud.cls.php:1064
345
  msgid "Sync credit allowance with Cloud Server successfully."
346
  msgstr ""
347
 
348
- #: src/conf.cls.php:689
349
  msgid "Changed setting successfully."
350
  msgstr ""
351
 
352
- #: src/core.cls.php:259
353
  msgid "Notified LiteSpeed Web Server to purge everything."
354
  msgstr ""
355
 
356
- #: src/core.cls.php:264
357
  msgid "Notified LiteSpeed Web Server to purge the list."
358
  msgstr ""
359
 
@@ -369,29 +370,33 @@ msgstr ""
369
  msgid "Sitemap created successfully: %d items"
370
  msgstr ""
371
 
372
- #: src/crawler.cls.php:764
373
  msgid "Guest"
374
  msgstr ""
375
 
376
- #: src/crawler.cls.php:903
377
  msgid "Manually added to blacklist"
378
  msgstr ""
379
 
380
- #: src/crawler.cls.php:906
381
  msgid "Previously existed in blacklist"
382
  msgstr ""
383
 
384
- #: src/css.cls.php:624 src/placeholder.cls.php:539
385
  msgid "Queue cleared successfully."
386
  msgstr ""
387
 
388
- #: src/data.cls.php:204
 
 
 
 
389
  msgid ""
390
  "The database has been upgrading in the background since %s. This message "
391
  "will disappear once upgrade is complete."
392
  msgstr ""
393
 
394
- #: src/data.upgrade.func.php:63
395
  msgid ""
396
  "LiteSpeed Cache upgraded successfully. NOTE: Due to changes in this version, "
397
  "the settings %1$s and %2$s have been turned OFF. Please turn them back on "
@@ -399,15 +404,15 @@ msgid ""
399
  "errors."
400
  msgstr ""
401
 
402
- #: src/data.upgrade.func.php:63 src/lang.cls.php:112
403
  msgid "JS Combine"
404
  msgstr ""
405
 
406
- #: src/data.upgrade.func.php:63
407
  msgid "JS Defer"
408
  msgstr ""
409
 
410
- #: src/data.upgrade.func.php:64
411
  msgid "Click here to settings"
412
  msgstr ""
413
 
@@ -463,39 +468,43 @@ msgid ""
463
  "are never accessed by any third party, except as necessary to obtain "
464
  "technical support from the cache plugin vendor. Cache files expire on a "
465
  "schedule set by the site administrator, but may easily be purged by the "
466
- "admin before their natural expiration, if necessary."
 
 
 
 
 
467
  msgstr ""
468
 
469
- #: src/doc.cls.php:40 src/doc.cls.php:92 tpl/cdn/manage.tpl.php:66
470
- #: tpl/dash/dashboard.tpl.php:46 tpl/img_optm/summary.tpl.php:62
471
  #: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
472
  msgid "Learn More"
473
  msgstr ""
474
 
475
- #: src/doc.cls.php:76
476
  msgid "Both full and partial strings can be used."
477
  msgstr ""
478
 
479
- #: src/doc.cls.php:79
480
  msgid "Both full URLs and partial strings can be used."
481
  msgstr ""
482
 
483
- #: src/doc.cls.php:91
484
  msgid "This setting will edit the .htaccess file."
485
  msgstr ""
486
 
487
- #: src/doc.cls.php:104
488
  msgid ""
489
- "For online services to work correctly, you must whitelist all online server "
490
- "IPs."
491
  msgstr ""
492
 
493
- #: src/doc.cls.php:105
494
  msgid ""
495
  "Before generating key, please verify all IPs on this list are whitelisted"
496
  msgstr ""
497
 
498
- #: src/doc.cls.php:106 tpl/general/settings.tpl.php:87
499
  msgid "Current Online Server IPs"
500
  msgstr ""
501
 
@@ -643,150 +652,145 @@ msgstr ""
643
  msgid "Failed to write to %s."
644
  msgstr ""
645
 
646
- #: src/gui.cls.php:79
647
  msgid "Public Caches"
648
  msgstr ""
649
 
650
- #: src/gui.cls.php:80
651
  msgid "Public Cache Hits"
652
  msgstr ""
653
 
654
- #: src/gui.cls.php:81
655
  msgid "Private Caches"
656
  msgstr ""
657
 
658
- #: src/gui.cls.php:82
659
  msgid "Private Cache Hits"
660
  msgstr ""
661
 
662
- #: src/gui.cls.php:392
663
  msgid "Purge this page"
664
  msgstr ""
665
 
666
- #: src/gui.cls.php:400
667
  msgid "Mark this page as "
668
  msgstr ""
669
 
670
- #: src/gui.cls.php:412
671
  msgid "Forced cacheable"
672
  msgstr ""
673
 
674
- #: src/gui.cls.php:423
675
  msgid "Non cacheable"
676
  msgstr ""
677
 
678
- #: src/gui.cls.php:434
679
  msgid "Private cache"
680
  msgstr ""
681
 
682
- #: src/gui.cls.php:445
683
  msgid "No optimization"
684
  msgstr ""
685
 
686
- #: src/gui.cls.php:453
687
  msgid "More settings"
688
  msgstr ""
689
 
690
- #: src/gui.cls.php:460 src/gui.cls.php:468 src/gui.cls.php:476
691
- #: src/gui.cls.php:485 src/gui.cls.php:495 src/gui.cls.php:505
692
- #: src/gui.cls.php:515 src/gui.cls.php:525 src/gui.cls.php:535
693
- #: src/gui.cls.php:601 src/gui.cls.php:609 src/gui.cls.php:617
694
- #: src/gui.cls.php:626 src/gui.cls.php:636 src/gui.cls.php:646
695
- #: src/gui.cls.php:656 src/gui.cls.php:666 src/gui.cls.php:676
696
- #: src/gui.cls.php:686 tpl/page_optm/settings_media.tpl.php:123
697
- #: tpl/toolbox/purge.tpl.php:37 tpl/toolbox/purge.tpl.php:43
698
- #: tpl/toolbox/purge.tpl.php:52 tpl/toolbox/purge.tpl.php:61
699
- #: tpl/toolbox/purge.tpl.php:70 tpl/toolbox/purge.tpl.php:79
700
- #: tpl/toolbox/purge.tpl.php:88 tpl/toolbox/purge.tpl.php:97
701
- #: tpl/toolbox/purge.tpl.php:106
702
  msgid "Purge All"
703
  msgstr ""
704
 
705
- #: src/gui.cls.php:468 src/gui.cls.php:559 src/gui.cls.php:609
706
  msgid "LSCache"
707
  msgstr ""
708
 
709
- #: src/gui.cls.php:476 src/gui.cls.php:617 tpl/toolbox/purge.tpl.php:43
710
  msgid "CSS/JS Cache"
711
  msgstr ""
712
 
713
- #: src/gui.cls.php:485 src/gui.cls.php:636 src/lang.cls.php:80
714
- #: tpl/dash/dashboard.tpl.php:361 tpl/toolbox/purge.tpl.php:52
715
  msgid "Object Cache"
716
  msgstr ""
717
 
718
- #: src/gui.cls.php:495 src/gui.cls.php:646 tpl/toolbox/purge.tpl.php:61
719
  msgid "Opcode Cache"
720
  msgstr ""
721
 
722
- #: src/gui.cls.php:515 src/gui.cls.php:666 tpl/toolbox/purge.tpl.php:79
723
- msgid "Localized Resources"
724
- msgstr ""
725
-
726
- #: src/gui.cls.php:525 src/gui.cls.php:676
727
- #: tpl/page_optm/settings_media.tpl.php:123 tpl/toolbox/purge.tpl.php:88
728
  msgid "LQIP Cache"
729
  msgstr ""
730
 
731
- #: src/gui.cls.php:535 src/gui.cls.php:686 src/lang.cls.php:139
732
- #: tpl/toolbox/purge.tpl.php:97
733
  msgid "Gravatar Cache"
734
  msgstr ""
735
 
736
- #: src/gui.cls.php:559
737
  msgid "LiteSpeed Cache Purge All"
738
  msgstr ""
739
 
740
- #: src/gui.cls.php:575 tpl/cdn/entry.tpl.php:7 tpl/cdn/settings.tpl.php:188
741
  #: tpl/db_optm/entry.tpl.php:6
742
  msgid "Manage"
743
  msgstr ""
744
 
745
- #: src/gui.cls.php:626 tpl/cdn/manage.tpl.php:17
746
  msgid "Cloudflare"
747
  msgstr ""
748
 
749
- #: src/gui.cls.php:705 tpl/img_optm/summary.tpl.php:175
750
  msgid "Remove all previous unfinished image optimization requests."
751
  msgstr ""
752
 
753
- #: src/gui.cls.php:706 tpl/img_optm/summary.tpl.php:177
754
  msgid "Clean Up Unfinished Data"
755
  msgstr ""
756
 
757
- #: src/gui.cls.php:724
758
  msgid "Install %s"
759
  msgstr ""
760
 
761
- #: src/gui.cls.php:725
762
  msgid "Install Now"
763
  msgstr ""
764
 
765
- #: src/gui.cls.php:744
766
  msgid ""
767
  "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s "
768
  "target=\"_blank\">update now</a>."
769
  msgstr ""
770
 
771
- #: src/gui.cls.php:747
772
  msgid "View %1$s version %2$s details"
773
  msgstr ""
774
 
775
- #: src/gui.cls.php:752
776
  msgid "Update %s now"
777
  msgstr ""
778
 
779
- #: src/htaccess.cls.php:351
780
  msgid "Mobile Agent Rules"
781
  msgstr ""
782
 
783
- #: src/htaccess.cls.php:810
784
  msgid ""
785
  "<p>Please add/replace the following codes into the beginning of %1$s:</p> "
786
  "%2$s"
787
  msgstr ""
788
 
789
- #: src/htaccess.cls.php:877
790
  msgid "File Saved."
791
  msgstr ""
792
 
@@ -894,11 +898,11 @@ msgstr ""
894
  msgid "Import failed due to file error."
895
  msgstr ""
896
 
897
- #: src/import.cls.php:113
898
  msgid "Imported setting file %s successfully."
899
  msgstr ""
900
 
901
- #: src/import.cls.php:138
902
  msgid "Reset successfully."
903
  msgstr ""
904
 
@@ -906,11 +910,11 @@ msgstr ""
906
  msgid "Images not requested"
907
  msgstr ""
908
 
909
- #: src/lang.cls.php:24 tpl/dash/dashboard.tpl.php:302
910
  msgid "Images requested"
911
  msgstr ""
912
 
913
- #: src/lang.cls.php:25 tpl/dash/dashboard.tpl.php:312
914
  msgid "Images notified to pull"
915
  msgstr ""
916
 
@@ -954,260 +958,260 @@ msgstr ""
954
  msgid "Domain Key"
955
  msgstr ""
956
 
 
 
 
 
957
  #: src/lang.cls.php:56
 
 
 
 
958
  msgid "Enable Cache"
959
  msgstr ""
960
 
961
- #: src/lang.cls.php:57 tpl/dash/dashboard.tpl.php:362
962
  msgid "Browser Cache"
963
  msgstr ""
964
 
965
- #: src/lang.cls.php:58
966
  msgid "Default Public Cache TTL"
967
  msgstr ""
968
 
969
- #: src/lang.cls.php:59
970
  msgid "Default Private Cache TTL"
971
  msgstr ""
972
 
973
- #: src/lang.cls.php:60
974
  msgid "Default Front Page TTL"
975
  msgstr ""
976
 
977
- #: src/lang.cls.php:61
978
  msgid "Default Feed TTL"
979
  msgstr ""
980
 
981
- #: src/lang.cls.php:62
982
  msgid "Default REST TTL"
983
  msgstr ""
984
 
985
- #: src/lang.cls.php:63
986
  msgid "Default HTTP Status Code Page TTL"
987
  msgstr ""
988
 
989
- #: src/lang.cls.php:64
990
  msgid "Browser Cache TTL"
991
  msgstr ""
992
 
993
- #: src/lang.cls.php:65
994
  msgid "Automatically Upgrade"
995
  msgstr ""
996
 
997
- #: src/lang.cls.php:66
998
  msgid "Guest Mode"
999
  msgstr ""
1000
 
1001
- #: src/lang.cls.php:67
1002
  msgid "Guest Optimization"
1003
  msgstr ""
1004
 
1005
- #: src/lang.cls.php:68
1006
  msgid "Notifications"
1007
  msgstr ""
1008
 
1009
- #: src/lang.cls.php:69
1010
  msgid "Cache Logged-in Users"
1011
  msgstr ""
1012
 
1013
- #: src/lang.cls.php:70
1014
  msgid "Cache Commenters"
1015
  msgstr ""
1016
 
1017
- #: src/lang.cls.php:71
1018
  msgid "Cache REST API"
1019
  msgstr ""
1020
 
1021
- #: src/lang.cls.php:72
1022
  msgid "Cache Login Page"
1023
  msgstr ""
1024
 
1025
- #: src/lang.cls.php:73
1026
  msgid "Cache favicon.ico"
1027
  msgstr ""
1028
 
1029
- #: src/lang.cls.php:74
1030
  msgid "Cache PHP Resources"
1031
  msgstr ""
1032
 
1033
- #: src/lang.cls.php:75 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1034
  msgid "Cache Mobile"
1035
  msgstr ""
1036
 
1037
- #: src/lang.cls.php:76 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1038
  msgid "List of Mobile User Agents"
1039
  msgstr ""
1040
 
1041
- #: src/lang.cls.php:77
1042
  msgid "Private Cached URIs"
1043
  msgstr ""
1044
 
1045
- #: src/lang.cls.php:78
1046
  msgid "Drop Query String"
1047
  msgstr ""
1048
 
1049
- #: src/lang.cls.php:81
1050
  msgid "Method"
1051
  msgstr ""
1052
 
1053
- #: src/lang.cls.php:82
1054
  msgid "Host"
1055
  msgstr ""
1056
 
1057
- #: src/lang.cls.php:83
1058
  msgid "Port"
1059
  msgstr ""
1060
 
1061
- #: src/lang.cls.php:84
1062
  msgid "Default Object Lifetime"
1063
  msgstr ""
1064
 
1065
- #: src/lang.cls.php:85
1066
  msgid "Username"
1067
  msgstr ""
1068
 
1069
- #: src/lang.cls.php:86
1070
  msgid "Password"
1071
  msgstr ""
1072
 
1073
- #: src/lang.cls.php:87
1074
  msgid "Redis Database ID"
1075
  msgstr ""
1076
 
1077
- #: src/lang.cls.php:88
1078
  msgid "Global Groups"
1079
  msgstr ""
1080
 
1081
- #: src/lang.cls.php:89
1082
  msgid "Do Not Cache Groups"
1083
  msgstr ""
1084
 
1085
- #: src/lang.cls.php:90
1086
  msgid "Persistent Connection"
1087
  msgstr ""
1088
 
1089
- #: src/lang.cls.php:91
1090
- msgid "Cache Wp-Admin"
1091
  msgstr ""
1092
 
1093
- #: src/lang.cls.php:92
1094
  msgid "Store Transients"
1095
  msgstr ""
1096
 
1097
- #: src/lang.cls.php:94
1098
  msgid "Purge All On Upgrade"
1099
  msgstr ""
1100
 
1101
- #: src/lang.cls.php:95
1102
  msgid "Serve Stale"
1103
  msgstr ""
1104
 
1105
- #: src/lang.cls.php:96 tpl/cache/settings-purge.tpl.php:130
1106
  msgid "Scheduled Purge URLs"
1107
  msgstr ""
1108
 
1109
- #: src/lang.cls.php:97 tpl/cache/settings-purge.tpl.php:105
1110
  msgid "Scheduled Purge Time"
1111
  msgstr ""
1112
 
1113
- #: src/lang.cls.php:98
1114
  msgid "Force Cache URIs"
1115
  msgstr ""
1116
 
1117
- #: src/lang.cls.php:99
1118
  msgid "Force Public Cache URIs"
1119
  msgstr ""
1120
 
1121
- #: src/lang.cls.php:100
1122
  msgid "Do Not Cache URIs"
1123
  msgstr ""
1124
 
1125
- #: src/lang.cls.php:101
1126
  msgid "Do Not Cache Query Strings"
1127
  msgstr ""
1128
 
1129
- #: src/lang.cls.php:102
1130
  msgid "Do Not Cache Categories"
1131
  msgstr ""
1132
 
1133
- #: src/lang.cls.php:103
1134
  msgid "Do Not Cache Tags"
1135
  msgstr ""
1136
 
1137
- #: src/lang.cls.php:104
1138
  msgid "Do Not Cache Roles"
1139
  msgstr ""
1140
 
1141
- #: src/lang.cls.php:105
1142
  msgid "CSS Minify"
1143
  msgstr ""
1144
 
1145
- #: src/lang.cls.php:106
1146
  msgid "CSS Combine"
1147
  msgstr ""
1148
 
1149
- #: src/lang.cls.php:107
1150
  msgid "CSS Combine External and Inline"
1151
  msgstr ""
1152
 
1153
- #: src/lang.cls.php:108
1154
  msgid "Generate UCSS"
1155
  msgstr ""
1156
 
1157
- #: src/lang.cls.php:109
1158
  msgid "UCSS Whitelist"
1159
  msgstr ""
1160
 
1161
- #: src/lang.cls.php:110
1162
  msgid "CSS HTTP/2 Push"
1163
  msgstr ""
1164
 
1165
- #: src/lang.cls.php:111
1166
  msgid "JS Minify"
1167
  msgstr ""
1168
 
1169
- #: src/lang.cls.php:113
1170
  msgid "JS Combine External and Inline"
1171
  msgstr ""
1172
 
1173
- #: src/lang.cls.php:114
1174
  msgid "JS HTTP/2 Push"
1175
  msgstr ""
1176
 
1177
- #: src/lang.cls.php:115
1178
  msgid "HTML Minify"
1179
  msgstr ""
1180
 
1181
- #: src/lang.cls.php:116
1182
- msgid "HTML Lazyload Selectors"
1183
- msgstr ""
1184
-
1185
- #: src/lang.cls.php:117 tpl/page_optm/settings_tuning.tpl.php:89
1186
- msgid "Load CSS Asynchronously"
1187
- msgstr ""
1188
-
1189
  #: src/lang.cls.php:118
1190
- msgid "CCSS Per URL"
1191
  msgstr ""
1192
 
1193
- #: src/lang.cls.php:119
1194
- msgid "Inline CSS Async Lib"
1195
  msgstr ""
1196
 
1197
  #: src/lang.cls.php:120
1198
- msgid "Font Display Optimization"
1199
  msgstr ""
1200
 
1201
  #: src/lang.cls.php:121
1202
- msgid "Load JS Deferred"
1203
  msgstr ""
1204
 
1205
  #: src/lang.cls.php:122
1206
- msgid "Localize Resources"
1207
  msgstr ""
1208
 
1209
  #: src/lang.cls.php:123
1210
- msgid "Localization Files"
1211
  msgstr ""
1212
 
1213
  #: src/lang.cls.php:124
@@ -1243,371 +1247,383 @@ msgid "Critical CSS Rules"
1243
  msgstr ""
1244
 
1245
  #: src/lang.cls.php:132
1246
- msgid "JS Deferred Excludes"
1247
  msgstr ""
1248
 
1249
  #: src/lang.cls.php:133
1250
- msgid "Remove WordPress Emoji"
1251
  msgstr ""
1252
 
1253
  #: src/lang.cls.php:134
1254
- msgid "Remove Noscript Tag"
1255
  msgstr ""
1256
 
1257
  #: src/lang.cls.php:135
1258
- msgid "URI Excludes"
1259
  msgstr ""
1260
 
1261
  #: src/lang.cls.php:136
1262
- msgid "Optimize for Guest Only"
1263
  msgstr ""
1264
 
1265
  #: src/lang.cls.php:137
1266
- msgid "Role Excludes"
 
 
 
 
 
 
 
 
1267
  msgstr ""
1268
 
1269
  #: src/lang.cls.php:140
 
 
 
 
1270
  msgid "Gravatar Cache Cron"
1271
  msgstr ""
1272
 
1273
- #: src/lang.cls.php:141
1274
  msgid "Gravatar Cache TTL"
1275
  msgstr ""
1276
 
1277
- #: src/lang.cls.php:143
1278
  msgid "Lazy Load Images"
1279
  msgstr ""
1280
 
1281
- #: src/lang.cls.php:144
1282
  msgid "Lazy Load Image Excludes"
1283
  msgstr ""
1284
 
1285
- #: src/lang.cls.php:145
1286
  msgid "Lazy Load Image Class Name Excludes"
1287
  msgstr ""
1288
 
1289
- #: src/lang.cls.php:146
1290
  msgid "Lazy Load Image Parent Class Name Excludes"
1291
  msgstr ""
1292
 
1293
- #: src/lang.cls.php:147
1294
  msgid "Lazy Load Iframe Class Name Excludes"
1295
  msgstr ""
1296
 
1297
- #: src/lang.cls.php:148
1298
  msgid "Lazy Load Iframe Parent Class Name Excludes"
1299
  msgstr ""
1300
 
1301
- #: src/lang.cls.php:149
1302
  msgid "Lazy Load URI Excludes"
1303
  msgstr ""
1304
 
1305
- #: src/lang.cls.php:150
1306
  msgid "LQIP Excludes"
1307
  msgstr ""
1308
 
1309
- #: src/lang.cls.php:151
1310
  msgid "Basic Image Placeholder"
1311
  msgstr ""
1312
 
1313
- #: src/lang.cls.php:152
1314
  msgid "Responsive Placeholder"
1315
  msgstr ""
1316
 
1317
- #: src/lang.cls.php:153
1318
  msgid "Responsive Placeholder Color"
1319
  msgstr ""
1320
 
1321
- #: src/lang.cls.php:154
1322
  msgid "Responsive Placeholder SVG"
1323
  msgstr ""
1324
 
1325
- #: src/lang.cls.php:155
1326
  msgid "LQIP Cloud Generator"
1327
  msgstr ""
1328
 
1329
- #: src/lang.cls.php:156
1330
  msgid "LQIP Quality"
1331
  msgstr ""
1332
 
1333
- #: src/lang.cls.php:157
1334
  msgid "LQIP Minimum Dimensions"
1335
  msgstr ""
1336
 
1337
- #: src/lang.cls.php:159
1338
  msgid "Generate LQIP In Background"
1339
  msgstr ""
1340
 
1341
- #: src/lang.cls.php:160
1342
  msgid "Lazy Load Iframes"
1343
  msgstr ""
1344
 
1345
- #: src/lang.cls.php:161
1346
  msgid "Add Missing Sizes"
1347
  msgstr ""
1348
 
1349
- #: src/lang.cls.php:162
1350
  msgid "Inline Lazy Load Images Library"
1351
  msgstr ""
1352
 
1353
- #: src/lang.cls.php:163
1354
  msgid "Auto Request Cron"
1355
  msgstr ""
1356
 
1357
- #: src/lang.cls.php:164
1358
  msgid "Auto Pull Cron"
1359
  msgstr ""
1360
 
1361
- #: src/lang.cls.php:165
1362
  msgid "Optimize Original Images"
1363
  msgstr ""
1364
 
1365
- #: src/lang.cls.php:166
1366
  msgid "Remove Original Backups"
1367
  msgstr ""
1368
 
1369
- #: src/lang.cls.php:167
1370
  msgid "Create WebP Versions"
1371
  msgstr ""
1372
 
1373
- #: src/lang.cls.php:168
1374
  msgid "Optimize Losslessly"
1375
  msgstr ""
1376
 
1377
- #: src/lang.cls.php:169
1378
  msgid "Preserve EXIF/XMP data"
1379
  msgstr ""
1380
 
1381
- #: src/lang.cls.php:170
1382
  msgid "WebP Attribute To Replace"
1383
  msgstr ""
1384
 
1385
- #: src/lang.cls.php:171
1386
  msgid "WebP For Extra srcset"
1387
  msgstr ""
1388
 
1389
- #: src/lang.cls.php:172
1390
  msgid "WordPress Image Quality Control"
1391
  msgstr ""
1392
 
1393
- #: src/lang.cls.php:173 tpl/esi_widget_edit.php:36
1394
  msgid "Enable ESI"
1395
  msgstr ""
1396
 
1397
- #: src/lang.cls.php:174
1398
  msgid "Cache Admin Bar"
1399
  msgstr ""
1400
 
1401
- #: src/lang.cls.php:175
1402
  msgid "Cache Comment Form"
1403
  msgstr ""
1404
 
1405
- #: src/lang.cls.php:176
1406
  msgid "ESI Nonces"
1407
  msgstr ""
1408
 
1409
- #: src/lang.cls.php:177 tpl/page_optm/settings_css.tpl.php:94
1410
- #: tpl/page_optm/settings_css.tpl.php:192
1411
  msgid "Vary Group"
1412
  msgstr ""
1413
 
1414
- #: src/lang.cls.php:178
1415
  msgid "Purge All Hooks"
1416
  msgstr ""
1417
 
1418
- #: src/lang.cls.php:179
1419
  msgid "Improve HTTP/HTTPS Compatibility"
1420
  msgstr ""
1421
 
1422
- #: src/lang.cls.php:180
1423
  msgid "Instant Click"
1424
  msgstr ""
1425
 
1426
- #: src/lang.cls.php:181
1427
  msgid "Do Not Cache Cookies"
1428
  msgstr ""
1429
 
1430
- #: src/lang.cls.php:182
1431
  msgid "Do Not Cache User Agents"
1432
  msgstr ""
1433
 
1434
- #: src/lang.cls.php:183
1435
  msgid "Login Cookie"
1436
  msgstr ""
1437
 
1438
- #: src/lang.cls.php:184
1439
  msgid "Image WebP Replacement"
1440
  msgstr ""
1441
 
1442
- #: src/lang.cls.php:186
1443
  msgid "Frontend .htaccess Path"
1444
  msgstr ""
1445
 
1446
- #: src/lang.cls.php:187
1447
  msgid "Backend .htaccess Path"
1448
  msgstr ""
1449
 
1450
- #: src/lang.cls.php:188
1451
  msgid "Frontend Heartbeat Control"
1452
  msgstr ""
1453
 
1454
- #: src/lang.cls.php:189
1455
  msgid "Frontend Heartbeat TTL"
1456
  msgstr ""
1457
 
1458
- #: src/lang.cls.php:190
1459
  msgid "Backend Heartbeat Control"
1460
  msgstr ""
1461
 
1462
- #: src/lang.cls.php:191
1463
  msgid "Backend Heartbeat TTL"
1464
  msgstr ""
1465
 
1466
- #: src/lang.cls.php:192
1467
  msgid "Editor Heartbeat"
1468
  msgstr ""
1469
 
1470
- #: src/lang.cls.php:193
1471
  msgid "Editor Heartbeat TTL"
1472
  msgstr ""
1473
 
1474
- #: src/lang.cls.php:195
1475
  msgid "QUIC.cloud CDN"
1476
  msgstr ""
1477
 
1478
- #: src/lang.cls.php:196
1479
  msgid "Use CDN Mapping"
1480
  msgstr ""
1481
 
1482
- #: src/lang.cls.php:197
1483
  msgid "CDN URL"
1484
  msgstr ""
1485
 
1486
- #: src/lang.cls.php:198
1487
  msgid "Include Images"
1488
  msgstr ""
1489
 
1490
- #: src/lang.cls.php:199
1491
  msgid "Include CSS"
1492
  msgstr ""
1493
 
1494
- #: src/lang.cls.php:200
1495
  msgid "Include JS"
1496
  msgstr ""
1497
 
1498
- #: src/lang.cls.php:201 tpl/cdn/settings.tpl.php:96
1499
  msgid "Include File Types"
1500
  msgstr ""
1501
 
1502
- #: src/lang.cls.php:202
1503
  msgid "HTML Attribute To Replace"
1504
  msgstr ""
1505
 
1506
- #: src/lang.cls.php:203
1507
  msgid "Original URLs"
1508
  msgstr ""
1509
 
1510
- #: src/lang.cls.php:204
1511
  msgid "Included Directories"
1512
  msgstr ""
1513
 
1514
- #: src/lang.cls.php:205
1515
  msgid "Exclude Path"
1516
  msgstr ""
1517
 
1518
- #: src/lang.cls.php:206
1519
  msgid "Cloudflare API"
1520
  msgstr ""
1521
 
1522
- #: src/lang.cls.php:209
1523
  msgid "Delay"
1524
  msgstr ""
1525
 
1526
- #: src/lang.cls.php:210
1527
  msgid "Run Duration"
1528
  msgstr ""
1529
 
1530
- #: src/lang.cls.php:211
1531
  msgid "Interval Between Runs"
1532
  msgstr ""
1533
 
1534
- #: src/lang.cls.php:212
1535
  msgid "Crawl Interval"
1536
  msgstr ""
1537
 
1538
- #: src/lang.cls.php:213
1539
  msgid "Threads"
1540
  msgstr ""
1541
 
1542
- #: src/lang.cls.php:214
1543
  msgid "Timeout"
1544
  msgstr ""
1545
 
1546
- #: src/lang.cls.php:215
1547
  msgid "Server Load Limit"
1548
  msgstr ""
1549
 
1550
- #: src/lang.cls.php:216
1551
  msgid "Role Simulation"
1552
  msgstr ""
1553
 
1554
- #: src/lang.cls.php:217
1555
  msgid "Cookie Simulation"
1556
  msgstr ""
1557
 
1558
- #: src/lang.cls.php:218
1559
  msgid "Custom Sitemap"
1560
  msgstr ""
1561
 
1562
- #: src/lang.cls.php:219
1563
  msgid "Drop Domain from Sitemap"
1564
  msgstr ""
1565
 
1566
- #: src/lang.cls.php:220
1567
  msgid "Sitemap Timeout"
1568
  msgstr ""
1569
 
1570
- #: src/lang.cls.php:222 tpl/inc/disabled_all.php:5
1571
  msgid "Disable All Features"
1572
  msgstr ""
1573
 
1574
- #: src/lang.cls.php:223 tpl/toolbox/log_viewer.tpl.php:7
1575
  msgid "Debug Log"
1576
  msgstr ""
1577
 
1578
- #: src/lang.cls.php:224
1579
  msgid "Admin IPs"
1580
  msgstr ""
1581
 
1582
- #: src/lang.cls.php:225
1583
  msgid "Debug Level"
1584
  msgstr ""
1585
 
1586
- #: src/lang.cls.php:226
1587
  msgid "Log File Size Limit"
1588
  msgstr ""
1589
 
1590
- #: src/lang.cls.php:227
1591
  msgid "Log Cookies"
1592
  msgstr ""
1593
 
1594
- #: src/lang.cls.php:228
1595
  msgid "Collapse Query Strings"
1596
  msgstr ""
1597
 
1598
- #: src/lang.cls.php:229
1599
  msgid "Debug URI Includes"
1600
  msgstr ""
1601
 
1602
- #: src/lang.cls.php:230
1603
  msgid "Debug URI Excludes"
1604
  msgstr ""
1605
 
1606
- #: src/lang.cls.php:232
1607
  msgid "Revisions Max Number"
1608
  msgstr ""
1609
 
1610
- #: src/lang.cls.php:233
1611
  msgid "Revisions Max Age"
1612
  msgstr ""
1613
 
@@ -1708,79 +1724,75 @@ msgstr ""
1708
  msgid "LQIP image preview for size %s"
1709
  msgstr ""
1710
 
1711
- #: src/purge.cls.php:181
1712
  msgid "Purged all caches successfully."
1713
  msgstr ""
1714
 
1715
- #: src/purge.cls.php:200
1716
  msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
1717
  msgstr ""
1718
 
1719
- #: src/purge.cls.php:220
1720
  msgid "Cleaned all Critical CSS files."
1721
  msgstr ""
1722
 
1723
- #: src/purge.cls.php:237
1724
  msgid "Cleaned all LQIP files."
1725
  msgstr ""
1726
 
1727
- #: src/purge.cls.php:254
1728
  msgid "Cleaned all Gravatar files."
1729
  msgstr ""
1730
 
1731
- #: src/purge.cls.php:271
1732
- msgid "Notified LiteSpeed Web Server to purge localized resource entries."
1733
- msgstr ""
1734
-
1735
- #: src/purge.cls.php:297
1736
  msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
1737
  msgstr ""
1738
 
1739
- #: src/purge.cls.php:313
1740
  msgid "Opcode cache is not enabled."
1741
  msgstr ""
1742
 
1743
- #: src/purge.cls.php:325
1744
  msgid "Reset the entire opcode cache successfully."
1745
  msgstr ""
1746
 
1747
- #: src/purge.cls.php:353
1748
  msgid "Object cache is not enabled."
1749
  msgstr ""
1750
 
1751
- #: src/purge.cls.php:366
1752
  msgid "Purge all object caches successfully."
1753
  msgstr ""
1754
 
1755
- #: src/purge.cls.php:549
1756
  msgid "Notified LiteSpeed Web Server to purge the front page."
1757
  msgstr ""
1758
 
1759
- #: src/purge.cls.php:562
1760
  msgid "Notified LiteSpeed Web Server to purge all pages."
1761
  msgstr ""
1762
 
1763
- #: src/purge.cls.php:581
1764
  msgid "Notified LiteSpeed Web Server to purge error pages."
1765
  msgstr ""
1766
 
1767
- #: src/purge.cls.php:608
1768
  msgid "Purge category %s"
1769
  msgstr ""
1770
 
1771
- #: src/purge.cls.php:635
1772
  msgid "Purge tag %s"
1773
  msgstr ""
1774
 
1775
- #: src/purge.cls.php:666
1776
  msgid "Purge url %s"
1777
  msgstr ""
1778
 
1779
- #: src/task.cls.php:109
1780
  msgid "Every Minute"
1781
  msgstr ""
1782
 
1783
- #: src/task.cls.php:128
1784
  msgid "LiteSpeed Crawler Cron"
1785
  msgstr ""
1786
 
@@ -1804,89 +1816,99 @@ msgstr ""
1804
  msgid "&raquo;"
1805
  msgstr ""
1806
 
1807
- #: thirdparty/woocommerce.content.tpl.php:14
1808
  msgid "WooCommerce Settings"
1809
  msgstr ""
1810
 
1811
- #: thirdparty/woocommerce.content.tpl.php:19
1812
  #: tpl/cache/settings-advanced.tpl.php:12
1813
  #: tpl/cache/settings_inc.browser.tpl.php:12 tpl/toolbox/heartbeat.tpl.php:14
1814
  #: tpl/toolbox/report.tpl.php:29
1815
  msgid "NOTICE:"
1816
  msgstr ""
1817
 
1818
- #: thirdparty/woocommerce.content.tpl.php:20
1819
  msgid "After verifying that the cache works in general, please test the cart."
1820
  msgstr ""
1821
 
1822
- #: thirdparty/woocommerce.content.tpl.php:21
1823
  msgid "To test the cart, visit the <a %s>FAQ</a>."
1824
  msgstr ""
1825
 
1826
- #: thirdparty/woocommerce.content.tpl.php:22
1827
  msgid ""
1828
  "By default, the My Account, Checkout, and Cart pages are automatically "
1829
  "excluded from caching. Misconfiguration of page associations in WooCommerce "
1830
  "settings may cause some pages to be erroneously excluded."
1831
  msgstr ""
1832
 
1833
- #: thirdparty/woocommerce.content.tpl.php:29
 
 
 
 
 
 
 
 
 
 
1834
  msgid "Product Update Interval"
1835
  msgstr ""
1836
 
1837
- #: thirdparty/woocommerce.content.tpl.php:34
1838
  msgid "Purge product on changes to the quantity or stock status."
1839
  msgstr ""
1840
 
1841
- #: thirdparty/woocommerce.content.tpl.php:34
1842
  msgid "Purge categories only when stock status changes."
1843
  msgstr ""
1844
 
1845
- #: thirdparty/woocommerce.content.tpl.php:35
1846
  msgid "Purge product and categories only when the stock status changes."
1847
  msgstr ""
1848
 
1849
- #: thirdparty/woocommerce.content.tpl.php:36
1850
  msgid "Purge product only when the stock status changes."
1851
  msgstr ""
1852
 
1853
- #: thirdparty/woocommerce.content.tpl.php:36
1854
  msgid "Do not purge categories on changes to the quantity or stock status."
1855
  msgstr ""
1856
 
1857
- #: thirdparty/woocommerce.content.tpl.php:37
1858
  msgid ""
1859
  "Always purge both product and categories on changes to the quantity or stock "
1860
  "status."
1861
  msgstr ""
1862
 
1863
- #: thirdparty/woocommerce.content.tpl.php:50
1864
  msgid ""
1865
  "Determines how changes in product quantity and product stock status affect "
1866
  "product pages and their associated category pages."
1867
  msgstr ""
1868
 
1869
- #: thirdparty/woocommerce.content.tpl.php:58
1870
  msgid "Use Front Page TTL for the Shop Page"
1871
  msgstr ""
1872
 
1873
- #: thirdparty/woocommerce.content.tpl.php:63
1874
  msgid ""
1875
  "Checking this option will force the shop page to use the front page TTL "
1876
  "setting."
1877
  msgstr ""
1878
 
1879
- #: thirdparty/woocommerce.content.tpl.php:64
1880
  msgid ""
1881
  "For example, if the homepage for the site is located at %1$s, the shop page "
1882
  "may be located at %2$s."
1883
  msgstr ""
1884
 
1885
- #: thirdparty/woocommerce.content.tpl.php:72
1886
  msgid "Privately Cache Cart"
1887
  msgstr ""
1888
 
1889
- #: thirdparty/woocommerce.content.tpl.php:77
1890
  msgid "Privately cache cart when not empty."
1891
  msgstr ""
1892
 
@@ -1918,7 +1940,7 @@ msgstr ""
1918
  msgid "Dismiss this notice"
1919
  msgstr ""
1920
 
1921
- #. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 4.0) #-#-#-#-#
1922
  #. Plugin Name of the plugin/theme
1923
  #: tpl/banner/new_version.php:59 tpl/banner/new_version_dev.tpl.php:12
1924
  #: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
@@ -1934,7 +1956,7 @@ msgid "New release %s is available now."
1934
  msgstr ""
1935
 
1936
  #: tpl/banner/new_version.php:71 tpl/banner/new_version_dev.tpl.php:24
1937
- #: tpl/toolbox/beta_test.tpl.php:50
1938
  msgid "Upgrade"
1939
  msgstr ""
1940
 
@@ -1958,26 +1980,26 @@ msgstr ""
1958
  msgid "Thank You for Using the LiteSpeed Cache Plugin!"
1959
  msgstr ""
1960
 
1961
- #: tpl/banner/score.php:28 tpl/dash/dashboard.tpl.php:153
1962
  msgid "Page Load Time"
1963
  msgstr ""
1964
 
1965
  #: tpl/banner/score.php:34 tpl/banner/score.php:74
1966
- #: tpl/dash/dashboard.tpl.php:166 tpl/dash/dashboard.tpl.php:225
1967
  msgid "Before"
1968
  msgstr ""
1969
 
1970
  #: tpl/banner/score.php:45 tpl/banner/score.php:84
1971
- #: tpl/dash/dashboard.tpl.php:175 tpl/dash/dashboard.tpl.php:233
1972
  msgid "After"
1973
  msgstr ""
1974
 
1975
  #: tpl/banner/score.php:55 tpl/banner/score.php:94
1976
- #: tpl/dash/dashboard.tpl.php:183 tpl/dash/dashboard.tpl.php:241
1977
  msgid "Improved by"
1978
  msgstr ""
1979
 
1980
- #: tpl/banner/score.php:68 tpl/dash/dashboard.tpl.php:210
1981
  msgid "PageSpeed Score"
1982
  msgstr ""
1983
 
@@ -2022,7 +2044,7 @@ msgid "TTL"
2022
  msgstr ""
2023
 
2024
  #: tpl/cache/entry.tpl.php:8 tpl/cache/entry_network.tpl.php:7
2025
- #: tpl/toolbox/entry.tpl.php:6 tpl/toolbox/purge.tpl.php:133
2026
  msgid "Purge"
2027
  msgstr ""
2028
 
@@ -2057,7 +2079,7 @@ msgstr ""
2057
 
2058
  #: tpl/cache/more_settings_tip.tpl.php:12
2059
  #: tpl/cache/settings-excludes.tpl.php:61
2060
- #: tpl/cache/settings-excludes.tpl.php:94 tpl/cdn/settings.tpl.php:72
2061
  #: tpl/crawler/settings-general.tpl.php:39
2062
  #: tpl/crawler/settings-general.tpl.php:140
2063
  #: tpl/crawler/settings-general.tpl.php:145
@@ -2240,7 +2262,7 @@ msgstr ""
2240
  #: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
2241
  #: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
2242
  #: tpl/inc/check_if_network_disable_all.php:18
2243
- #: tpl/page_optm/settings_css.tpl.php:56 tpl/page_optm/settings_css.tpl.php:146
2244
  #: tpl/page_optm/settings_localization.tpl.php:11
2245
  msgid "WARNING"
2246
  msgstr ""
@@ -2279,7 +2301,8 @@ msgstr ""
2279
  #: tpl/page_optm/settings_media_exc.tpl.php:26
2280
  #: tpl/page_optm/settings_tuning.tpl.php:36
2281
  #: tpl/page_optm/settings_tuning.tpl.php:57
2282
- #: tpl/page_optm/settings_tuning.tpl.php:107
 
2283
  msgid "Filter %s is supported."
2284
  msgstr ""
2285
 
@@ -2294,7 +2317,7 @@ msgid ""
2294
  msgstr ""
2295
 
2296
  #: tpl/cache/settings-esi.tpl.php:107 tpl/cache/settings-purge.tpl.php:110
2297
- #: tpl/cdn/settings.tpl.php:137
2298
  msgid ""
2299
  "Wildcard %1$s supported (match zero or more characters). For example, to "
2300
  "match %2$s and %3$s, use %4$s."
@@ -2680,7 +2703,7 @@ msgid "Object Cache Settings"
2680
  msgstr ""
2681
 
2682
  #: tpl/cache/settings_inc.object.tpl.php:41
2683
- msgid "Use object cache functionality."
2684
  msgstr ""
2685
 
2686
  #: tpl/cache/settings_inc.object.tpl.php:47 tpl/crawler/blacklist.tpl.php:32
@@ -2824,128 +2847,133 @@ msgstr ""
2824
  msgid "Enable %s CDN API functionality."
2825
  msgstr ""
2826
 
2827
- #: tpl/cdn/settings.tpl.php:48
 
 
 
 
 
 
2828
  msgid ""
2829
- "Turn this setting %1$s if you are using a Content Delivery Network (CDN). "
2830
  "NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are are "
2831
  "only using QUIC.cloud or Cloudflare, leave this setting %2$s."
2832
  msgstr ""
2833
 
2834
- #: tpl/cdn/settings.tpl.php:73
2835
  msgid ""
2836
  "To randomize CDN hostname, define multiple hostnames for the same resources."
2837
  msgstr ""
2838
 
2839
- #: tpl/cdn/settings.tpl.php:78
2840
  msgid ""
2841
  "Serve all image files through the CDN. This will affect all attachments, "
2842
  "HTML %s tags, and CSS %s attributes."
2843
  msgstr ""
2844
 
2845
- #: tpl/cdn/settings.tpl.php:82
2846
  msgid ""
2847
  "Serve all CSS files through the CDN. This will affect all enqueued WP CSS "
2848
  "files."
2849
  msgstr ""
2850
 
2851
- #: tpl/cdn/settings.tpl.php:86
2852
  msgid ""
2853
  "Serve all JavaScript files through the CDN. This will affect all enqueued WP "
2854
  "JavaScript files."
2855
  msgstr ""
2856
 
2857
- #: tpl/cdn/settings.tpl.php:90
2858
  msgid "Static file type links to be replaced by CDN links."
2859
  msgstr ""
2860
 
2861
- #: tpl/cdn/settings.tpl.php:92
2862
  msgid "This will affect all tags containing attributes: %s %s %s."
2863
  msgstr ""
2864
 
2865
- #: tpl/cdn/settings.tpl.php:93
2866
  msgid "Default value"
2867
  msgstr ""
2868
 
2869
- #: tpl/cdn/settings.tpl.php:96
2870
  msgid ""
2871
  "If you turn any of the above settings OFF, please remove the related file "
2872
  "types from the %s box."
2873
  msgstr ""
2874
 
2875
- #: tpl/cdn/settings.tpl.php:120
2876
  msgid ""
2877
  "Specify which HTML element attributes will be replaced with CDN Mapping."
2878
  msgstr ""
2879
 
2880
- #: tpl/cdn/settings.tpl.php:121 tpl/img_optm/settings.tpl.php:140
2881
  msgid "Only attributes listed here will be replaced."
2882
  msgstr ""
2883
 
2884
- #: tpl/cdn/settings.tpl.php:122 tpl/img_optm/settings.tpl.php:141
2885
  msgid "Use the format %1$s or %2$s (element is optional)."
2886
  msgstr ""
2887
 
2888
- #: tpl/cdn/settings.tpl.php:136
2889
  msgid ""
2890
  "Site URL to be served through the CDN. Beginning with %1$s. For example, "
2891
  "%2$s."
2892
  msgstr ""
2893
 
2894
- #: tpl/cdn/settings.tpl.php:159
2895
  msgid "Only files within these directories will be pointed to the CDN."
2896
  msgstr ""
2897
 
2898
- #: tpl/cdn/settings.tpl.php:173
2899
  msgid "Paths containing these strings will not be served from the CDN."
2900
  msgstr ""
2901
 
2902
- #: tpl/cdn/settings.tpl.php:187
2903
  msgid "Use %s API functionality."
2904
  msgstr ""
2905
 
2906
- #: tpl/cdn/settings.tpl.php:188
2907
  msgid "This can be managed from %1$s%2$s tab."
2908
  msgstr ""
2909
 
2910
- #: tpl/cdn/settings.tpl.php:192
2911
- msgid "Email Address"
2912
  msgstr ""
2913
 
2914
- #: tpl/cdn/settings.tpl.php:196
2915
- msgid "Your Email address on %s."
2916
  msgstr ""
2917
 
2918
- #: tpl/cdn/settings.tpl.php:197
2919
- msgid "Optional when API token used."
2920
  msgstr ""
2921
 
2922
- #: tpl/cdn/settings.tpl.php:202
2923
- msgid "Global API Key / API Token"
 
 
2924
  msgstr ""
2925
 
2926
- #: tpl/cdn/settings.tpl.php:206
2927
- msgid "Your API key / token is used to access %s APIs."
2928
  msgstr ""
2929
 
2930
- #: tpl/cdn/settings.tpl.php:207
2931
- msgid "Get it from <a %1$s>%2$s</a>."
2932
  msgstr ""
2933
 
2934
- #: tpl/cdn/settings.tpl.php:208
2935
- msgid ""
2936
- "Recommend to generate the token from Cloudflare API token template "
2937
- "\"WordPress \"."
2938
  msgstr ""
2939
 
2940
- #: tpl/cdn/settings.tpl.php:213
2941
  msgid "Domain"
2942
  msgstr ""
2943
 
2944
- #: tpl/cdn/settings.tpl.php:221
2945
  msgid "You can just type part of the domain."
2946
  msgstr ""
2947
 
2948
- #: tpl/cdn/settings.tpl.php:222
2949
  msgid ""
2950
  "Once saved, it will be matched with the current list and completed "
2951
  "automatically."
@@ -2968,7 +2996,7 @@ msgid "Total"
2968
  msgstr ""
2969
 
2970
  #: tpl/crawler/blacklist.tpl.php:31 tpl/crawler/map.tpl.php:43
2971
- #: tpl/toolbox/purge.tpl.php:215
2972
  msgid "URL"
2973
  msgstr ""
2974
 
@@ -3002,8 +3030,8 @@ msgid "Map"
3002
  msgstr ""
3003
 
3004
  #: tpl/crawler/entry.tpl.php:9 tpl/general/entry.tpl.php:6
3005
- #: tpl/general/entry.tpl.php:11 tpl/general/network_settings.tpl.php:8
3006
- #: tpl/general/settings.tpl.php:43
3007
  msgid "General Settings"
3008
  msgstr ""
3009
 
@@ -3039,7 +3067,7 @@ msgstr ""
3039
  msgid "Sitemap Total"
3040
  msgstr ""
3041
 
3042
- #: tpl/crawler/map.tpl.php:44 tpl/dash/dashboard.tpl.php:495
3043
  msgid "Crawler Status"
3044
  msgstr ""
3045
 
@@ -3047,11 +3075,11 @@ msgstr ""
3047
  msgid "Add to Blacklist"
3048
  msgstr ""
3049
 
3050
- #: tpl/crawler/map.tpl.php:67 tpl/crawler/summary.tpl.php:178
3051
  msgid "Cache Hit"
3052
  msgstr ""
3053
 
3054
- #: tpl/crawler/map.tpl.php:68 tpl/crawler/summary.tpl.php:179
3055
  msgid "Cache Miss"
3056
  msgstr ""
3057
 
@@ -3126,8 +3154,8 @@ msgstr ""
3126
  #: tpl/crawler/settings-simulation.tpl.php:49
3127
  msgid ""
3128
  "To crawl for a particular cookie, enter the cookie name, and the values you "
3129
- "wish to crawl for. Values should be one per line, and can include a blank "
3130
- "line. There will be one crawler created per cookie value, per simulated role."
3131
  msgstr ""
3132
 
3133
  #: tpl/crawler/settings-simulation.tpl.php:51
@@ -3212,19 +3240,19 @@ msgstr ""
3212
  msgid "Run time for previous crawler"
3213
  msgstr ""
3214
 
3215
- #: tpl/crawler/summary.tpl.php:85 tpl/dash/dashboard.tpl.php:507
3216
  msgid "Current crawler started at"
3217
  msgstr ""
3218
 
3219
- #: tpl/crawler/summary.tpl.php:92 tpl/dash/dashboard.tpl.php:514
3220
  msgid "Last interval"
3221
  msgstr ""
3222
 
3223
- #: tpl/crawler/summary.tpl.php:99 tpl/dash/dashboard.tpl.php:521
3224
  msgid "Ended reason"
3225
  msgstr ""
3226
 
3227
- #: tpl/crawler/summary.tpl.php:106 tpl/dash/dashboard.tpl.php:528
3228
  msgid "<b>Last crawled:</b> %s item(s)"
3229
  msgstr ""
3230
 
@@ -3268,6 +3296,14 @@ msgstr ""
3268
  msgid "Waiting to be Crawled"
3269
  msgstr ""
3270
 
 
 
 
 
 
 
 
 
3271
  #: tpl/crawler/summary.tpl.php:184
3272
  msgid "Run frequency is set by the Interval Between Runs setting."
3273
  msgstr ""
@@ -3300,155 +3336,155 @@ msgstr ""
3300
  msgid "No crawler meta file generated yet"
3301
  msgstr ""
3302
 
3303
- #: tpl/dash/dashboard.tpl.php:39
3304
  msgid "QUIC.cloud Service Usage Statistics"
3305
  msgstr ""
3306
 
3307
- #: tpl/dash/dashboard.tpl.php:42
3308
  msgid "Sync data from Cloud"
3309
  msgstr ""
3310
 
3311
- #: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:402
3312
  #: tpl/toolbox/purge.tpl.php:70
3313
  msgid "Critical CSS"
3314
  msgstr ""
3315
 
3316
- #: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:433
3317
  msgid "Unique CSS"
3318
  msgstr ""
3319
 
3320
- #: tpl/dash/dashboard.tpl.php:54 tpl/dash/network_dash.tpl.php:29
3321
  msgid "CDN Bandwidth"
3322
  msgstr ""
3323
 
3324
- #: tpl/dash/dashboard.tpl.php:55 tpl/dash/dashboard.tpl.php:464
3325
  msgid "Low Quality Image Placeholder"
3326
  msgstr ""
3327
 
3328
- #: tpl/dash/dashboard.tpl.php:110 tpl/dash/network_dash.tpl.php:78
3329
  msgid "Fast Queue Usage"
3330
  msgstr ""
3331
 
3332
- #: tpl/dash/dashboard.tpl.php:110 tpl/dash/network_dash.tpl.php:78
3333
  msgid "Usage"
3334
  msgstr ""
3335
 
3336
- #: tpl/dash/dashboard.tpl.php:122 tpl/dash/network_dash.tpl.php:90
3337
  msgid "PAYG Balance"
3338
  msgstr ""
3339
 
3340
- #: tpl/dash/dashboard.tpl.php:123 tpl/dash/network_dash.tpl.php:91
3341
  msgid "This Month Usage"
3342
  msgstr ""
3343
 
3344
- #: tpl/dash/dashboard.tpl.php:125 tpl/dash/network_dash.tpl.php:93
3345
  msgid "Pay as You Go Usage Statistics"
3346
  msgstr ""
3347
 
3348
- #: tpl/dash/dashboard.tpl.php:132 tpl/dash/network_dash.tpl.php:100
3349
  msgid "Total Usage"
3350
  msgstr ""
3351
 
3352
- #: tpl/dash/dashboard.tpl.php:133 tpl/dash/network_dash.tpl.php:101
3353
  msgid "Total images optimized in this month"
3354
  msgstr ""
3355
 
3356
- #: tpl/dash/dashboard.tpl.php:144
3357
  msgid "Go to QUIC.cloud dashboard"
3358
  msgstr ""
3359
 
3360
- #: tpl/dash/dashboard.tpl.php:156
3361
  msgid "Refresh page load time"
3362
  msgstr ""
3363
 
3364
- #: tpl/dash/dashboard.tpl.php:197 tpl/dash/dashboard.tpl.php:257
3365
- #: tpl/dash/dashboard.tpl.php:425 tpl/dash/dashboard.tpl.php:456
3366
- #: tpl/dash/dashboard.tpl.php:487
3367
  msgid "Last requested"
3368
  msgstr ""
3369
 
3370
- #: tpl/dash/dashboard.tpl.php:202
3371
  msgid "Current closest Cloud server is %s.&#10;Click to redetect."
3372
  msgstr ""
3373
 
3374
- #: tpl/dash/dashboard.tpl.php:202 tpl/img_optm/summary.tpl.php:57
3375
- #: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:175
3376
- #: tpl/page_optm/settings_media.tpl.php:173
3377
  msgid ""
3378
  "Are you sure you want to redetect the closest cloud server for this service?"
3379
  msgstr ""
3380
 
3381
- #: tpl/dash/dashboard.tpl.php:213
3382
  msgid "Refresh page score"
3383
  msgstr ""
3384
 
3385
- #: tpl/dash/dashboard.tpl.php:265 tpl/img_optm/entry.tpl.php:6
3386
  msgid "Image Optimization Summary"
3387
  msgstr ""
3388
 
3389
- #: tpl/dash/dashboard.tpl.php:275
3390
  msgid "Image Groups Prepared"
3391
  msgstr ""
3392
 
3393
- #: tpl/dash/dashboard.tpl.php:290
3394
  msgid "Images Requested"
3395
  msgstr ""
3396
 
3397
- #: tpl/dash/dashboard.tpl.php:322 tpl/img_optm/summary.tpl.php:342
3398
  msgid "Last Request"
3399
  msgstr ""
3400
 
3401
- #: tpl/dash/dashboard.tpl.php:325
3402
  msgid "Last Pull"
3403
  msgstr ""
3404
 
3405
- #: tpl/dash/dashboard.tpl.php:354
3406
  msgid "Cache Status"
3407
  msgstr ""
3408
 
3409
- #: tpl/dash/dashboard.tpl.php:359
3410
  msgid "Public Cache"
3411
  msgstr ""
3412
 
3413
- #: tpl/dash/dashboard.tpl.php:360
3414
  msgid "Private Cache"
3415
  msgstr ""
3416
 
3417
- #: tpl/dash/dashboard.tpl.php:388
3418
  msgid "Cache Stats"
3419
  msgstr ""
3420
 
3421
- #: tpl/dash/dashboard.tpl.php:407 tpl/dash/dashboard.tpl.php:438
3422
- #: tpl/dash/dashboard.tpl.php:469 tpl/page_optm/settings_css.tpl.php:69
3423
- #: tpl/page_optm/settings_css.tpl.php:167
3424
- #: tpl/page_optm/settings_media.tpl.php:168
3425
  msgid "Last generated"
3426
  msgstr ""
3427
 
3428
- #: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:441
3429
- #: tpl/dash/dashboard.tpl.php:472
3430
  msgid "Time to execute previous request"
3431
  msgstr ""
3432
 
3433
- #: tpl/dash/dashboard.tpl.php:415 tpl/dash/dashboard.tpl.php:446
3434
- #: tpl/dash/dashboard.tpl.php:477
3435
  msgid "Requests in queue"
3436
  msgstr ""
3437
 
3438
- #: tpl/dash/dashboard.tpl.php:417 tpl/dash/dashboard.tpl.php:448
3439
- #: tpl/dash/dashboard.tpl.php:479
3440
  msgid "Force cron"
3441
  msgstr ""
3442
 
3443
- #: tpl/dash/dashboard.tpl.php:499
3444
  msgid "Crawler(s)"
3445
  msgstr ""
3446
 
3447
- #: tpl/dash/dashboard.tpl.php:502
3448
  msgid "Currently active crawler"
3449
  msgstr ""
3450
 
3451
- #: tpl/dash/dashboard.tpl.php:534
3452
  msgid "Manage Crawler"
3453
  msgstr ""
3454
 
@@ -3638,7 +3674,11 @@ msgstr ""
3638
  msgid "A TTL of 0 indicates do not cache."
3639
  msgstr ""
3640
 
3641
- #: tpl/general/entry.tpl.php:19
 
 
 
 
3642
  msgid "LiteSpeed Cache General Settings"
3643
  msgstr ""
3644
 
@@ -3683,134 +3723,134 @@ msgstr ""
3683
  msgid "Next available request time: <code>After %s</code>"
3684
  msgstr ""
3685
 
3686
- #: tpl/general/settings.tpl.php:74
3687
  msgid "Visit My Dashboard on QUIC.cloud"
3688
  msgstr ""
3689
 
3690
- #: tpl/general/settings.tpl.php:76 tpl/general/settings.tpl.php:78
3691
- #: tpl/general/settings.tpl.php:107
3692
  msgid "Link to QUIC.cloud"
3693
  msgstr ""
3694
 
3695
- #: tpl/general/settings.tpl.php:83 tpl/general/settings.tpl.php:94
3696
- #: tpl/general/settings.tpl.php:106 tpl/general/settings.tpl.php:155
3697
- #: tpl/general/settings.tpl.php:161 tpl/general/settings.tpl.php:167
3698
- #: tpl/general/settings.tpl.php:184
3699
  msgid "Notice"
3700
  msgstr ""
3701
 
3702
- #: tpl/general/settings.tpl.php:84
3703
  msgid ""
3704
  "There was a problem with retrieving your Domain Key. Please click the %s "
3705
  "button to retry."
3706
  msgstr ""
3707
 
3708
- #: tpl/general/settings.tpl.php:85
3709
  msgid ""
3710
  "There are two reasons why we might not be able to communicate with your "
3711
  "domain:"
3712
  msgstr ""
3713
 
3714
- #: tpl/general/settings.tpl.php:86
3715
  msgid "The POST callback to %s failed."
3716
  msgstr ""
3717
 
3718
- #: tpl/general/settings.tpl.php:87
3719
  msgid "Our %s was not whitelisted."
3720
  msgstr ""
3721
 
3722
- #: tpl/general/settings.tpl.php:88
3723
  msgid ""
3724
  "Please verify that your other plugins are not blocking REST API calls, "
3725
  "whitelist our server IPs, or contact your server admin for assistance."
3726
  msgstr ""
3727
 
3728
- #: tpl/general/settings.tpl.php:95
3729
  msgid ""
3730
  "Request submitted. Please wait, then refresh the page to see approval "
3731
  "notification."
3732
  msgstr ""
3733
 
3734
- #: tpl/general/settings.tpl.php:101
3735
  msgid "Warning"
3736
  msgstr ""
3737
 
3738
- #: tpl/general/settings.tpl.php:102
3739
  msgid "You must have %1$s first before linking to QUIC.cloud."
3740
  msgstr ""
3741
 
3742
- #: tpl/general/settings.tpl.php:107
3743
  msgid ""
3744
  "You must click the %s button if you wish to associate this site with a QUIC."
3745
  "cloud account."
3746
  msgstr ""
3747
 
3748
- #: tpl/general/settings.tpl.php:108
3749
  msgid "Benefits of linking to a QUIC.cloud account"
3750
  msgstr ""
3751
 
3752
- #: tpl/general/settings.tpl.php:113
3753
  msgid "A Domain Key is required for QUIC.cloud online services."
3754
  msgstr ""
3755
 
3756
- #: tpl/general/settings.tpl.php:116
3757
  msgid "Current Cloud Nodes in Service"
3758
  msgstr ""
3759
 
3760
- #: tpl/general/settings.tpl.php:117
3761
  msgid "Click to clear all nodes for further redetection."
3762
  msgstr ""
3763
 
3764
- #: tpl/general/settings.tpl.php:117
3765
  msgid "Are you sure you want to clear all cloud nodes?"
3766
  msgstr ""
3767
 
3768
- #: tpl/general/settings.tpl.php:129
3769
  msgid "No cloud services currently in use"
3770
  msgstr ""
3771
 
3772
- #: tpl/general/settings.tpl.php:151
3773
- msgid "This option enables maximum optimization for Guest Mode users."
3774
  msgstr ""
3775
 
3776
- #: tpl/general/settings.tpl.php:155
3777
  msgid "This option only works when turning %s on."
3778
  msgstr ""
3779
 
3780
- #: tpl/general/settings.tpl.php:161
3781
  msgid "You need to turn %s on to get maximum result."
3782
  msgstr ""
3783
 
3784
- #: tpl/general/settings.tpl.php:167
3785
  msgid ""
3786
  "You need to turn %s on and finish all WebP generation to get maximum result."
3787
  msgstr ""
3788
 
3789
- #: tpl/general/settings.tpl.php:182
3790
  msgid ""
3791
  "Enter this site's IP address to allow cloud services directly call IP "
3792
  "instead of domain name. This eliminates the overhead of DNS and CDN lookups."
3793
  msgstr ""
3794
 
3795
- #: tpl/general/settings.tpl.php:183
3796
  msgid "Your server IP"
3797
  msgstr ""
3798
 
3799
- #: tpl/general/settings.tpl.php:183
3800
  msgid "Check my public IP from"
3801
  msgstr ""
3802
 
3803
- #: tpl/general/settings.tpl.php:184
3804
  msgid ""
3805
  "the auto-detected IP may not be accurate if you have an additional outgoing "
3806
  "IP set, or you have multiple IPs configured on your server."
3807
  msgstr ""
3808
 
3809
- #: tpl/general/settings.tpl.php:185
3810
  msgid "Please make sure this IP is the correct one for visiting your site."
3811
  msgstr ""
3812
 
3813
- #: tpl/general/settings.tpl.php:200
3814
  msgid ""
3815
  "Turn this option ON to show latest news automatically, including hotfixes, "
3816
  "new releases, available beta versions, and promotions."
@@ -3824,14 +3864,31 @@ msgstr ""
3824
 
3825
  #: tpl/general/settings_inc.guest.tpl.php:13
3826
  msgid ""
3827
- "Guest Mode provides an always cacheable landing page on a user's first time "
3828
- "visit, and then attempts to update cache varies via AJAX."
3829
  msgstr ""
3830
 
3831
  #: tpl/general/settings_inc.guest.tpl.php:14
3832
  msgid ""
3833
  "This option can help to correct the cache vary for certain advanced mobile "
3834
- "or tablet users."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3835
  msgstr ""
3836
 
3837
  #: tpl/img_optm/entry.tpl.php:7 tpl/img_optm/entry.tpl.php:13
@@ -3914,9 +3971,9 @@ msgstr ""
3914
  msgid "The image compression quality setting of WordPress out of 100."
3915
  msgstr ""
3916
 
3917
- #: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:77
3918
- #: tpl/page_optm/settings_css.tpl.php:175
3919
- #: tpl/page_optm/settings_media.tpl.php:173
3920
  msgid "Current closest Cloud server is %s.&#10; Click to redetect."
3921
  msgstr ""
3922
 
@@ -4254,7 +4311,7 @@ msgid ""
4254
  "dismissed. (<a %3$s>Learn More</a>)"
4255
  msgstr ""
4256
 
4257
- #: tpl/page_optm/entry.tpl.php:6 tpl/page_optm/settings_css.tpl.php:13
4258
  msgid "CSS Settings"
4259
  msgstr ""
4260
 
@@ -4262,11 +4319,11 @@ msgstr ""
4262
  msgid "JS Settings"
4263
  msgstr ""
4264
 
4265
- #: tpl/page_optm/entry.tpl.php:8
4266
  msgid "HTML Settings"
4267
  msgstr ""
4268
 
4269
- #: tpl/page_optm/entry.tpl.php:9 tpl/page_optm/settings_media.tpl.php:12
4270
  msgid "Media Settings"
4271
  msgstr ""
4272
 
@@ -4278,10 +4335,6 @@ msgstr ""
4278
  msgid "Localization"
4279
  msgstr ""
4280
 
4281
- #: tpl/page_optm/entry.tpl.php:12
4282
- msgid "Tuning"
4283
- msgstr ""
4284
-
4285
  #: tpl/page_optm/entry.tpl.php:19
4286
  msgid "LiteSpeed Cache Page Optimization"
4287
  msgstr ""
@@ -4292,124 +4345,120 @@ msgid ""
4292
  "Minify/Combine settings, please do a Purge All action."
4293
  msgstr ""
4294
 
4295
- #: tpl/page_optm/settings_css.tpl.php:27
4296
  msgid "Minify CSS files and inline CSS code."
4297
  msgstr ""
4298
 
4299
- #: tpl/page_optm/settings_css.tpl.php:40
4300
  msgid "Combine CSS files and inline CSS code."
4301
  msgstr ""
4302
 
4303
- #: tpl/page_optm/settings_css.tpl.php:41 tpl/page_optm/settings_js.tpl.php:35
4304
  msgid "How to Fix Problems Caused by CSS/JS Optimization."
4305
  msgstr ""
4306
 
4307
- #: tpl/page_optm/settings_css.tpl.php:61
4308
  msgid "Use QUIC.cloud online service to generate unique CSS."
4309
  msgstr ""
4310
 
4311
- #: tpl/page_optm/settings_css.tpl.php:62
4312
  msgid "This will drop the unused CSS on each page from the combined file."
4313
  msgstr ""
4314
 
4315
- #: tpl/page_optm/settings_css.tpl.php:72 tpl/page_optm/settings_css.tpl.php:170
 
 
 
 
 
 
4316
  msgid "Last requested cost"
4317
  msgstr ""
4318
 
4319
- #: tpl/page_optm/settings_css.tpl.php:83 tpl/page_optm/settings_css.tpl.php:181
4320
- msgid "URL list in queue waiting for cron"
4321
  msgstr ""
4322
 
4323
- #: tpl/page_optm/settings_css.tpl.php:101
4324
- #: tpl/page_optm/settings_css.tpl.php:199
4325
- #: tpl/page_optm/settings_localization.tpl.php:62
4326
- #: tpl/page_optm/settings_media.tpl.php:187
4327
- msgid "Run Queue Manually"
4328
  msgstr ""
4329
 
4330
- #: tpl/page_optm/settings_css.tpl.php:118
4331
  msgid ""
4332
  "Include external CSS and inline CSS in combined file when %1$s is also "
4333
  "enabled. This option helps maintain the priorities of CSS, which should "
4334
  "minimize potential errors caused by CSS Combine."
4335
  msgstr ""
4336
 
4337
- #: tpl/page_optm/settings_css.tpl.php:131
4338
  msgid ""
4339
  "Pre-send internal CSS files to the browser before they are requested. "
4340
  "(Requires the HTTP/2 protocol)"
4341
  msgstr ""
4342
 
4343
- #: tpl/page_optm/settings_css.tpl.php:150
4344
  msgid "Optimize CSS delivery."
4345
  msgstr ""
4346
 
4347
- #: tpl/page_optm/settings_css.tpl.php:151
4348
- #: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:79
4349
- #: tpl/page_optm/settings_media.tpl.php:233
4350
  msgid ""
4351
  "This can improve your speed score in services like Pingdom, GTmetrix and "
4352
  "PageSpeed."
4353
  msgstr ""
4354
 
4355
- #: tpl/page_optm/settings_css.tpl.php:152
4356
  msgid ""
4357
- "When this option is turned %s, it will also load Google Fonts asynchronously."
 
4358
  msgstr ""
4359
 
4360
- #: tpl/page_optm/settings_css.tpl.php:153
4361
  msgid ""
4362
- "Enabling this option will automatically enable Critical CSS generation (%s "
4363
- "service)."
4364
  msgstr ""
4365
 
4366
- #: tpl/page_optm/settings_css.tpl.php:154
4367
  msgid ""
4368
- "Automatic generation of critical CSS is in the background via a cron-based "
4369
- "queue."
4370
  msgstr ""
4371
 
4372
- #: tpl/page_optm/settings_css.tpl.php:158
4373
- #: tpl/page_optm/settings_media_exc.tpl.php:27
4374
- #: tpl/page_optm/settings_tuning.tpl.php:37
4375
- #: tpl/page_optm/settings_tuning.tpl.php:58
4376
- #: tpl/page_optm/settings_tuning.tpl.php:108
4377
- msgid "Elements with attribute %s in html code will be excluded."
4378
  msgstr ""
4379
 
4380
- #: tpl/page_optm/settings_css.tpl.php:215
4381
  msgid ""
4382
  "Disable this option to generate CCSS per Post Type instead of per page. This "
4383
  "can save significant CCSS quota, however it may result in incorrect CSS "
4384
  "styling if your site uses a page builder."
4385
  msgstr ""
4386
 
4387
- #: tpl/page_optm/settings_css.tpl.php:228
4388
  msgid "This will inline the asynchronous CSS library to avoid render blocking."
4389
  msgstr ""
4390
 
4391
- #: tpl/page_optm/settings_css.tpl.php:239
4392
  msgid "Default"
4393
  msgstr ""
4394
 
4395
- #: tpl/page_optm/settings_css.tpl.php:241
4396
  msgid ""
4397
  "Set this to append %1$s to all %2$s rules before caching CSS to specify how "
4398
  "fonts should be displayed while being downloaded."
4399
  msgstr ""
4400
 
4401
- #: tpl/page_optm/settings_css.tpl.php:242
4402
  msgid "%s is recommended."
4403
  msgstr ""
4404
 
4405
- #: tpl/page_optm/settings_css.tpl.php:242
4406
  msgid "Swap"
4407
  msgstr ""
4408
 
4409
- #: tpl/page_optm/settings_html.tpl.php:7
4410
- msgid "Optimization Settings"
4411
- msgstr ""
4412
-
4413
  #: tpl/page_optm/settings_html.tpl.php:20
4414
  msgid "Minify HTML content."
4415
  msgstr ""
@@ -4456,8 +4505,8 @@ msgstr ""
4456
 
4457
  #: tpl/page_optm/settings_html.tpl.php:101
4458
  msgid ""
4459
- "This will also add a preconnect to Google for faster Google Fonts "
4460
- "downloading."
4461
  msgstr ""
4462
 
4463
  #: tpl/page_optm/settings_html.tpl.php:115
@@ -4482,7 +4531,7 @@ msgstr ""
4482
  msgid "Combine all local JS files into a single file."
4483
  msgstr ""
4484
 
4485
- #: tpl/page_optm/settings_js.tpl.php:37 tpl/page_optm/settings_js.tpl.php:81
4486
  msgid ""
4487
  "This option may result in JS error or layout issue on frontend pages on "
4488
  "certain themes/plugins."
@@ -4516,7 +4565,9 @@ msgid "Delayed"
4516
  msgstr ""
4517
 
4518
  #: tpl/page_optm/settings_js.tpl.php:78
4519
- msgid "Doing so can help reduce resource contention and improve performance."
 
 
4520
  msgstr ""
4521
 
4522
  #: tpl/page_optm/settings_localization.tpl.php:12
@@ -4546,172 +4597,150 @@ msgstr ""
4546
  msgid "Avatar list in queue waiting for update"
4547
  msgstr ""
4548
 
4549
- #: tpl/page_optm/settings_localization.tpl.php:79
4550
- msgid "Specify how long, in seconds, Gravatar files are cached."
4551
- msgstr ""
4552
-
4553
- #: tpl/page_optm/settings_localization.tpl.php:94
4554
- msgid "Localize external resources."
4555
- msgstr ""
4556
-
4557
- #: tpl/page_optm/settings_localization.tpl.php:116
4558
- msgid "Resources listed here will be copied and replaced with local URLs."
4559
- msgstr ""
4560
-
4561
- #: tpl/page_optm/settings_localization.tpl.php:117
4562
- msgid "HTTPS sources only."
4563
- msgstr ""
4564
-
4565
- #: tpl/page_optm/settings_localization.tpl.php:121
4566
- msgid ""
4567
- "Comments are supported. Start a line with a %s to turn it into a comment "
4568
- "line."
4569
- msgstr ""
4570
-
4571
- #: tpl/page_optm/settings_localization.tpl.php:123
4572
- msgid "Non-`.js` file extensions will be ignored."
4573
  msgstr ""
4574
 
4575
- #: tpl/page_optm/settings_localization.tpl.php:124
4576
- #: tpl/toolbox/beta_test.tpl.php:25
4577
- msgid "Example"
4578
  msgstr ""
4579
 
4580
- #: tpl/page_optm/settings_media.tpl.php:25
4581
  msgid "Load images only when they enter the viewport."
4582
  msgstr ""
4583
 
4584
- #: tpl/page_optm/settings_media.tpl.php:26
4585
- #: tpl/page_optm/settings_media.tpl.php:204
4586
  msgid "This can improve page loading time by reducing initial HTTP requests."
4587
  msgstr ""
4588
 
4589
- #: tpl/page_optm/settings_media.tpl.php:29
4590
  msgid "Adding Style to Your Lazy-Loaded Images"
4591
  msgstr ""
4592
 
4593
- #: tpl/page_optm/settings_media.tpl.php:43
4594
  msgid ""
4595
  "Specify a base64 image to be used as a simple placeholder while images "
4596
  "finish loading."
4597
  msgstr ""
4598
 
4599
- #: tpl/page_optm/settings_media.tpl.php:44
4600
  msgid ""
4601
  "This can be predefined in %2$s as well using constant %1$s, with this "
4602
  "setting taking priority."
4603
  msgstr ""
4604
 
4605
- #: tpl/page_optm/settings_media.tpl.php:45
4606
  msgid "By default a gray image placeholder %s will be used."
4607
  msgstr ""
4608
 
4609
- #: tpl/page_optm/settings_media.tpl.php:46
4610
  msgid "For example, %s can be used for a transparent placeholder."
4611
  msgstr ""
4612
 
4613
- #: tpl/page_optm/settings_media.tpl.php:59
4614
  msgid ""
4615
  "Responsive image placeholders can help to reduce layout reshuffle when "
4616
  "images are loaded."
4617
  msgstr ""
4618
 
4619
- #: tpl/page_optm/settings_media.tpl.php:60
4620
  msgid ""
4621
  "This will generate the placeholder with same dimensions as the image if it "
4622
  "has the width and height attributes."
4623
  msgstr ""
4624
 
4625
- #: tpl/page_optm/settings_media.tpl.php:73
4626
  msgid "Specify an SVG to be used as a placeholder when generating locally."
4627
  msgstr ""
4628
 
4629
- #: tpl/page_optm/settings_media.tpl.php:74
4630
  msgid "It will be converted to a base64 SVG placeholder on-the-fly."
4631
  msgstr ""
4632
 
4633
- #: tpl/page_optm/settings_media.tpl.php:75
4634
  msgid "Variables %s will be replaced with the corresponding image properties."
4635
  msgstr ""
4636
 
4637
- #: tpl/page_optm/settings_media.tpl.php:76
4638
  msgid "Variables %s will be replaced with the configured background color."
4639
  msgstr ""
4640
 
4641
- #: tpl/page_optm/settings_media.tpl.php:90
4642
  msgid "Specify the responsive placeholder SVG color."
4643
  msgstr ""
4644
 
4645
- #: tpl/page_optm/settings_media.tpl.php:104
4646
  msgid ""
4647
  "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for "
4648
  "responsive image previews while loading."
4649
  msgstr ""
4650
 
4651
- #: tpl/page_optm/settings_media.tpl.php:105
4652
  msgid "Keep this off to use plain color placeholders."
4653
  msgstr ""
4654
 
4655
- #: tpl/page_optm/settings_media.tpl.php:119
4656
  msgid "Specify the quality when generating LQIP."
4657
  msgstr ""
4658
 
4659
- #: tpl/page_optm/settings_media.tpl.php:120
4660
  msgid ""
4661
  "Larger number will generate higher resolution quality placeholder, but will "
4662
  "result in larger files which will increase page size and consume more points."
4663
  msgstr ""
4664
 
4665
- #: tpl/page_optm/settings_media.tpl.php:123
4666
  msgid ""
4667
  "Changes to this setting do not apply to already-generated LQIPs. To "
4668
  "regenerate existing LQIPs, please %s first from the admin bar menu."
4669
  msgstr ""
4670
 
4671
- #: tpl/page_optm/settings_media.tpl.php:136
4672
  msgid "pixels"
4673
  msgstr ""
4674
 
4675
- #: tpl/page_optm/settings_media.tpl.php:138
4676
  msgid ""
4677
  "LQIP requests will not be sent for images where both width and height are "
4678
  "smaller than these dimensions."
4679
  msgstr ""
4680
 
4681
- #: tpl/page_optm/settings_media.tpl.php:154
4682
  msgid "Automatically generate LQIP in the background via a cron-based queue."
4683
  msgstr ""
4684
 
4685
- #: tpl/page_optm/settings_media.tpl.php:156
4686
  msgid ""
4687
  "If set to %1$s, before the placeholder is localized, the %2$s configuration "
4688
  "will be used."
4689
  msgstr ""
4690
 
4691
- #: tpl/page_optm/settings_media.tpl.php:160
4692
  msgid ""
4693
  "If set to %s this is done in the foreground, which may slow down page load."
4694
  msgstr ""
4695
 
4696
- #: tpl/page_optm/settings_media.tpl.php:179
4697
  msgid "Size list in queue waiting for cron"
4698
  msgstr ""
4699
 
4700
- #: tpl/page_optm/settings_media.tpl.php:203
4701
  msgid "Load iframes only when they enter the viewport."
4702
  msgstr ""
4703
 
4704
- #: tpl/page_optm/settings_media.tpl.php:217
4705
  msgid ""
4706
  "Set an explicit width and height on image elements to reduce layout shifts "
4707
- "and improve CLS."
4708
  msgstr ""
4709
 
4710
- #: tpl/page_optm/settings_media.tpl.php:219
4711
  msgid "Note: this option only works when %1$s is %2$s."
4712
  msgstr ""
4713
 
4714
- #: tpl/page_optm/settings_media.tpl.php:232
4715
  msgid "Include the lazy load image JavaScript library inline."
4716
  msgstr ""
4717
 
@@ -4719,6 +4748,14 @@ msgstr ""
4719
  msgid "Listed images will not be lazy loaded."
4720
  msgstr ""
4721
 
 
 
 
 
 
 
 
 
4722
  #: tpl/page_optm/settings_media_exc.tpl.php:49
4723
  msgid "Images containing these class names will not be lazy loaded."
4724
  msgstr ""
@@ -4743,18 +4780,14 @@ msgstr ""
4743
  msgid "These images will not generate LQIP."
4744
  msgstr ""
4745
 
4746
- #: tpl/page_optm/settings_tuning.tpl.php:18
4747
- msgid "Tuning Settings"
4748
- msgstr ""
4749
-
4750
  #: tpl/page_optm/settings_tuning.tpl.php:31
4751
  msgid "Listed CSS files or inline CSS code will not be minified/combined."
4752
  msgstr ""
4753
 
4754
  #: tpl/page_optm/settings_tuning.tpl.php:38
4755
  #: tpl/page_optm/settings_tuning.tpl.php:59
4756
- #: tpl/page_optm/settings_tuning.tpl.php:75
4757
- #: tpl/page_optm/settings_tuning.tpl.php:109
4758
  msgid "Predefined list will also be combined w/ the above settings"
4759
  msgstr ""
4760
 
@@ -4767,71 +4800,102 @@ msgid ""
4767
  "List the CSS selector that its style should be always contained in UCSS."
4768
  msgstr ""
4769
 
4770
- #: tpl/page_optm/settings_tuning.tpl.php:89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4771
  msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
4772
  msgstr ""
4773
 
4774
- #: tpl/page_optm/settings_tuning.tpl.php:102
4775
  msgid "Listed JS files or inline JS code will not be deferred."
4776
  msgstr ""
4777
 
4778
- #: tpl/page_optm/settings_tuning.tpl.php:123
 
 
 
 
4779
  msgid "Prevent any optimization of listed pages."
4780
  msgstr ""
4781
 
4782
- #: tpl/page_optm/settings_tuning.tpl.php:137
4783
  msgid ""
4784
- "Only optimize pages for guest visitors. If turned this OFF, CSS/JS/CCSS "
4785
- "files will be doubled by each user group."
4786
  msgstr ""
4787
 
4788
- #: tpl/page_optm/settings_tuning.tpl.php:149
4789
  msgid "Selected roles will be excluded from all optimizations."
4790
  msgstr ""
4791
 
4792
- #: tpl/toolbox/beta_test.tpl.php:20
4793
  msgid "Try GitHub Version"
4794
  msgstr ""
4795
 
4796
- #: tpl/toolbox/beta_test.tpl.php:24
4797
  msgid ""
4798
  "Use this section to switch plugin versions. To beta test a GitHub commit, "
4799
  "enter the commit URL in the field below."
4800
  msgstr ""
4801
 
4802
- #: tpl/toolbox/beta_test.tpl.php:29
 
 
 
 
4803
  msgid "Use latest GitHub Dev commit"
4804
  msgstr ""
4805
 
4806
- #: tpl/toolbox/beta_test.tpl.php:31
4807
  msgid "Use latest GitHub Master commit"
4808
  msgstr ""
4809
 
4810
- #: tpl/toolbox/beta_test.tpl.php:33 tpl/toolbox/beta_test.tpl.php:44
4811
  msgid "Use latest WordPress release version"
4812
  msgstr ""
4813
 
4814
- #: tpl/toolbox/beta_test.tpl.php:33
4815
  msgid "OR"
4816
  msgstr ""
4817
 
4818
- #: tpl/toolbox/beta_test.tpl.php:43
4819
  msgid ""
4820
  "Press the %s button to use the most recent GitHub commit. Master is for "
4821
  "release candidate & Dev is for experimental testing."
4822
  msgstr ""
4823
 
4824
- #: tpl/toolbox/beta_test.tpl.php:43
4825
  msgid "Use latest GitHub Dev/Master commit"
4826
  msgstr ""
4827
 
4828
- #: tpl/toolbox/beta_test.tpl.php:44
4829
  msgid ""
4830
  "Press the %s button to stop beta testing and go back to the current release "
4831
  "from the WordPress Plugin Directory."
4832
  msgstr ""
4833
 
4834
- #: tpl/toolbox/beta_test.tpl.php:47
4835
  msgid ""
4836
  "In order to avoid an upgrade error, you must be using %1$s or later before "
4837
  "you can upgrade to %2$s versions."
@@ -5064,91 +5128,87 @@ msgid "This will delete all generated critical CSS files"
5064
  msgstr ""
5065
 
5066
  #: tpl/toolbox/purge.tpl.php:80
5067
- msgid "This will delete all localized resources"
5068
- msgstr ""
5069
-
5070
- #: tpl/toolbox/purge.tpl.php:89
5071
  msgid "This will delete all generated image LQIP placeholder files"
5072
  msgstr ""
5073
 
5074
- #: tpl/toolbox/purge.tpl.php:98
5075
  msgid "This will delete all cached Gravatar files"
5076
  msgstr ""
5077
 
5078
- #: tpl/toolbox/purge.tpl.php:107
5079
  msgid ""
5080
  "Purge the cache entries created by this plugin except for Critical CSS & "
5081
  "LQIP caches"
5082
  msgstr ""
5083
 
5084
- #: tpl/toolbox/purge.tpl.php:116
5085
  msgid "Empty Entire Cache"
5086
  msgstr ""
5087
 
5088
- #: tpl/toolbox/purge.tpl.php:117
5089
  msgid ""
5090
  "Clears all cache entries related to this site, <i>including other web "
5091
  "applications</i>."
5092
  msgstr ""
5093
 
5094
- #: tpl/toolbox/purge.tpl.php:118
5095
  msgid "This action should only be used if things are cached incorrectly."
5096
  msgstr ""
5097
 
5098
- #: tpl/toolbox/purge.tpl.php:122
5099
  msgid "This will clear EVERYTHING inside the cache."
5100
  msgstr ""
5101
 
5102
- #: tpl/toolbox/purge.tpl.php:123
5103
  msgid "This may cause heavy load on the server."
5104
  msgstr ""
5105
 
5106
- #: tpl/toolbox/purge.tpl.php:124
5107
  msgid "If only the WordPress site should be purged, use Purge All."
5108
  msgstr ""
5109
 
5110
- #: tpl/toolbox/purge.tpl.php:168
5111
  msgid "Purge By..."
5112
  msgstr ""
5113
 
5114
- #: tpl/toolbox/purge.tpl.php:170
5115
  msgid "Select below for \"Purge by\" options."
5116
  msgstr ""
5117
 
5118
- #: tpl/toolbox/purge.tpl.php:197
5119
  msgid "Category"
5120
  msgstr ""
5121
 
5122
- #: tpl/toolbox/purge.tpl.php:203
5123
  msgid "Post ID"
5124
  msgstr ""
5125
 
5126
- #: tpl/toolbox/purge.tpl.php:209
5127
  msgid "Tag"
5128
  msgstr ""
5129
 
5130
- #: tpl/toolbox/purge.tpl.php:221
5131
  msgid ""
5132
  "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
5133
  msgstr ""
5134
 
5135
- #: tpl/toolbox/purge.tpl.php:226
5136
  msgid "Purge pages by post ID."
5137
  msgstr ""
5138
 
5139
- #: tpl/toolbox/purge.tpl.php:230
5140
  msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
5141
  msgstr ""
5142
 
5143
- #: tpl/toolbox/purge.tpl.php:235
5144
  msgid "Purge pages by relative or full URL."
5145
  msgstr ""
5146
 
5147
- #: tpl/toolbox/purge.tpl.php:236
5148
  msgid "e.g. Use %s or %s."
5149
  msgstr ""
5150
 
5151
- #: tpl/toolbox/purge.tpl.php:249
5152
  msgid "Purge List"
5153
  msgstr ""
5154
 
2
  # This file is distributed under the same license as the LiteSpeed Cache package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: LiteSpeed Cache 4.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
7
+ "POT-Creation-Date: 2021-06-25 19:00:00+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
28
  msgid "Purged!"
29
  msgstr ""
30
 
31
+ #: src/activation.cls.php:491 src/activation.cls.php:496
32
  msgid "Failed to upgrade."
33
  msgstr ""
34
 
35
+ #: src/activation.cls.php:500
36
  msgid "Upgraded successfully."
37
  msgstr ""
38
 
49
  msgid "Cache"
50
  msgstr ""
51
 
52
+ #: src/admin-display.cls.php:121 tpl/cdn/settings.tpl.php:194
53
  msgid "CDN"
54
  msgstr ""
55
 
56
+ #: src/admin-display.cls.php:123 src/gui.cls.php:583
57
+ #: tpl/dash/dashboard.tpl.php:55 tpl/dash/network_dash.tpl.php:27
58
  msgid "Image Optimization"
59
  msgstr ""
60
 
66
  msgid "Database"
67
  msgstr ""
68
 
69
+ #: src/admin-display.cls.php:129 src/lang.cls.php:211
70
  msgid "Crawler"
71
  msgstr ""
72
 
105
  #: src/admin-display.cls.php:232 src/admin-display.cls.php:793
106
  #: src/admin-display.cls.php:828 src/admin-display.cls.php:879
107
  #: tpl/cache/settings-cache.tpl.php:19
108
+ #: tpl/cache/settings_inc.cache_mobile.tpl.php:70 tpl/cdn/settings.tpl.php:49
109
+ #: tpl/page_optm/settings_css.tpl.php:161
110
+ #: tpl/page_optm/settings_media.tpl.php:159
111
+ #: tpl/page_optm/settings_media.tpl.php:229
112
  #: tpl/toolbox/settings-debug.tpl.php:34
113
  msgid "ON"
114
  msgstr ""
116
  #: src/admin-display.cls.php:233 src/admin-display.cls.php:794
117
  #: src/admin-display.cls.php:827 src/admin-display.cls.php:879
118
  #: tpl/cache/settings-cache.tpl.php:19
119
+ #: tpl/cache/settings_inc.object.tpl.php:210 tpl/cdn/settings.tpl.php:54
120
  #: tpl/page_optm/settings_js.tpl.php:76
121
+ #: tpl/page_optm/settings_media.tpl.php:162
122
  #: tpl/toolbox/settings-debug.tpl.php:34
123
  msgid "OFF"
124
  msgstr ""
125
 
126
+ #: src/admin-display.cls.php:275 src/gui.cls.php:574
127
  msgid "Settings"
128
  msgstr ""
129
 
199
  msgstr ""
200
 
201
  #: src/admin-display.cls.php:1079 tpl/cache/settings-esi.tpl.php:95
202
+ #: tpl/page_optm/settings_css.tpl.php:163
203
  #: tpl/page_optm/settings_html.tpl.php:85
204
  #: tpl/page_optm/settings_media_exc.tpl.php:25
205
  #: tpl/page_optm/settings_tuning.tpl.php:35
206
  #: tpl/page_optm/settings_tuning.tpl.php:56
207
+ #: tpl/page_optm/settings_tuning.tpl.php:136
208
+ #: tpl/page_optm/settings_tuning.tpl.php:157
209
  msgid "API"
210
  msgstr ""
211
 
229
  msgid "To do an exact match, add %s to the end of the URL."
230
  msgstr ""
231
 
232
+ #: src/admin-display.cls.php:1097 src/doc.cls.php:62
233
  msgid "One per line."
234
  msgstr ""
235
 
277
  msgid "Failed to communicate with Cloudflare"
278
  msgstr ""
279
 
280
+ #: src/cloud.cls.php:331 src/cloud.cls.php:348 src/cloud.cls.php:379
281
+ #: src/cloud.cls.php:492 src/cloud.cls.php:826
282
  msgid "Cloud Error"
283
  msgstr ""
284
 
285
+ #: src/cloud.cls.php:379
286
  msgid "No available Cloud Node."
287
  msgstr ""
288
 
289
+ #: src/cloud.cls.php:492
290
  msgid "Please try after %1$s for service %2$s."
291
  msgstr ""
292
 
293
+ #: src/cloud.cls.php:575 src/cloud.cls.php:587
294
  msgid "Failed to request via WordPress"
295
  msgstr ""
296
 
297
+ #: src/cloud.cls.php:597
298
  msgid ""
299
  "We are working hard to improve your online service experience. The service "
300
  "will be unavailable while we work. We apologize for any inconvenience."
301
  msgstr ""
302
 
303
+ #: src/cloud.cls.php:606 src/cloud.cls.php:614 src/cloud.cls.php:862
304
  msgid "Message from QUIC.cloud server"
305
  msgstr ""
306
 
307
+ #: src/cloud.cls.php:622
308
  msgid "Good news from QUIC.cloud server"
309
  msgstr ""
310
 
311
+ #: src/cloud.cls.php:631
312
  msgid "%1$s plugin version %2$s required for this action."
313
  msgstr ""
314
 
315
+ #: src/cloud.cls.php:673 src/cloud.cls.php:851
316
  msgid "Failed to communicate with QUIC.cloud server"
317
  msgstr ""
318
 
319
+ #: src/cloud.cls.php:681
320
  msgid ""
321
  "Site not recognized. Domain Key has been automatically removed. Please "
322
  "request a new one."
323
  msgstr ""
324
 
325
+ #: src/cloud.cls.php:682 src/error.cls.php:48
326
  msgid "Click here to set."
327
  msgstr ""
328
 
329
+ #: src/cloud.cls.php:870
330
  msgid ""
331
  "Applied for Domain Key successfully. Please wait for result. Domain Key will "
332
  "be automatically sent to your WordPress."
333
  msgstr ""
334
 
335
+ #: src/cloud.cls.php:921
336
  msgid ""
337
  "Congratulations, your Domain Key has been approved! The setting has been "
338
  "updated accordingly."
339
  msgstr ""
340
 
341
+ #: src/cloud.cls.php:992
342
  msgid "Domain Key hash mismatch"
343
  msgstr ""
344
 
345
+ #: src/cloud.cls.php:1075
346
  msgid "Sync credit allowance with Cloud Server successfully."
347
  msgstr ""
348
 
349
+ #: src/conf.cls.php:693
350
  msgid "Changed setting successfully."
351
  msgstr ""
352
 
353
+ #: src/core.cls.php:270
354
  msgid "Notified LiteSpeed Web Server to purge everything."
355
  msgstr ""
356
 
357
+ #: src/core.cls.php:275
358
  msgid "Notified LiteSpeed Web Server to purge the list."
359
  msgstr ""
360
 
370
  msgid "Sitemap created successfully: %d items"
371
  msgstr ""
372
 
373
+ #: src/crawler.cls.php:771
374
  msgid "Guest"
375
  msgstr ""
376
 
377
+ #: src/crawler.cls.php:920
378
  msgid "Manually added to blacklist"
379
  msgstr ""
380
 
381
+ #: src/crawler.cls.php:923
382
  msgid "Previously existed in blacklist"
383
  msgstr ""
384
 
385
+ #: src/css.cls.php:435 src/placeholder.cls.php:573
386
  msgid "Queue cleared successfully."
387
  msgstr ""
388
 
389
+ #: src/css.cls.php:445
390
+ msgid "%1$s %2$s files left in queue"
391
+ msgstr ""
392
+
393
+ #: src/data.cls.php:210
394
  msgid ""
395
  "The database has been upgrading in the background since %s. This message "
396
  "will disappear once upgrade is complete."
397
  msgstr ""
398
 
399
+ #: src/data.upgrade.func.php:73
400
  msgid ""
401
  "LiteSpeed Cache upgraded successfully. NOTE: Due to changes in this version, "
402
  "the settings %1$s and %2$s have been turned OFF. Please turn them back on "
404
  "errors."
405
  msgstr ""
406
 
407
+ #: src/data.upgrade.func.php:73 src/lang.cls.php:114
408
  msgid "JS Combine"
409
  msgstr ""
410
 
411
+ #: src/data.upgrade.func.php:73
412
  msgid "JS Defer"
413
  msgstr ""
414
 
415
+ #: src/data.upgrade.func.php:74
416
  msgid "Click here to settings"
417
  msgstr ""
418
 
468
  "are never accessed by any third party, except as necessary to obtain "
469
  "technical support from the cache plugin vendor. Cache files expire on a "
470
  "schedule set by the site administrator, but may easily be purged by the "
471
+ "admin before their natural expiration, if necessary. We may use QUIC.cloud "
472
+ "services to process & cache your data temporarily."
473
+ msgstr ""
474
+
475
+ #: src/doc.cls.php:25
476
+ msgid "Please see %s for more details."
477
  msgstr ""
478
 
479
+ #: src/doc.cls.php:41 src/doc.cls.php:93 tpl/cdn/manage.tpl.php:66
480
+ #: tpl/dash/dashboard.tpl.php:49 tpl/img_optm/summary.tpl.php:62
481
  #: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
482
  msgid "Learn More"
483
  msgstr ""
484
 
485
+ #: src/doc.cls.php:77
486
  msgid "Both full and partial strings can be used."
487
  msgstr ""
488
 
489
+ #: src/doc.cls.php:80
490
  msgid "Both full URLs and partial strings can be used."
491
  msgstr ""
492
 
493
+ #: src/doc.cls.php:92
494
  msgid "This setting will edit the .htaccess file."
495
  msgstr ""
496
 
497
+ #: src/doc.cls.php:105
498
  msgid ""
499
+ "For online services to work correctly, you must whitelist all %s server IPs."
 
500
  msgstr ""
501
 
502
+ #: src/doc.cls.php:106
503
  msgid ""
504
  "Before generating key, please verify all IPs on this list are whitelisted"
505
  msgstr ""
506
 
507
+ #: src/doc.cls.php:107 tpl/general/settings.tpl.php:86
508
  msgid "Current Online Server IPs"
509
  msgstr ""
510
 
652
  msgid "Failed to write to %s."
653
  msgstr ""
654
 
655
+ #: src/gui.cls.php:80
656
  msgid "Public Caches"
657
  msgstr ""
658
 
659
+ #: src/gui.cls.php:81
660
  msgid "Public Cache Hits"
661
  msgstr ""
662
 
663
+ #: src/gui.cls.php:82
664
  msgid "Private Caches"
665
  msgstr ""
666
 
667
+ #: src/gui.cls.php:83
668
  msgid "Private Cache Hits"
669
  msgstr ""
670
 
671
+ #: src/gui.cls.php:393
672
  msgid "Purge this page"
673
  msgstr ""
674
 
675
+ #: src/gui.cls.php:401
676
  msgid "Mark this page as "
677
  msgstr ""
678
 
679
+ #: src/gui.cls.php:413
680
  msgid "Forced cacheable"
681
  msgstr ""
682
 
683
+ #: src/gui.cls.php:424
684
  msgid "Non cacheable"
685
  msgstr ""
686
 
687
+ #: src/gui.cls.php:435
688
  msgid "Private cache"
689
  msgstr ""
690
 
691
+ #: src/gui.cls.php:446
692
  msgid "No optimization"
693
  msgstr ""
694
 
695
+ #: src/gui.cls.php:454
696
  msgid "More settings"
697
  msgstr ""
698
 
699
+ #: src/gui.cls.php:461 src/gui.cls.php:469 src/gui.cls.php:477
700
+ #: src/gui.cls.php:486 src/gui.cls.php:496 src/gui.cls.php:506
701
+ #: src/gui.cls.php:516 src/gui.cls.php:526 src/gui.cls.php:592
702
+ #: src/gui.cls.php:600 src/gui.cls.php:608 src/gui.cls.php:617
703
+ #: src/gui.cls.php:627 src/gui.cls.php:637 src/gui.cls.php:647
704
+ #: src/gui.cls.php:657 src/gui.cls.php:667
705
+ #: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:37
706
+ #: tpl/toolbox/purge.tpl.php:43 tpl/toolbox/purge.tpl.php:52
707
+ #: tpl/toolbox/purge.tpl.php:61 tpl/toolbox/purge.tpl.php:70
708
+ #: tpl/toolbox/purge.tpl.php:79 tpl/toolbox/purge.tpl.php:88
709
+ #: tpl/toolbox/purge.tpl.php:97
 
710
  msgid "Purge All"
711
  msgstr ""
712
 
713
+ #: src/gui.cls.php:469 src/gui.cls.php:550 src/gui.cls.php:600
714
  msgid "LSCache"
715
  msgstr ""
716
 
717
+ #: src/gui.cls.php:477 src/gui.cls.php:608 tpl/toolbox/purge.tpl.php:43
718
  msgid "CSS/JS Cache"
719
  msgstr ""
720
 
721
+ #: src/gui.cls.php:486 src/gui.cls.php:627 src/lang.cls.php:82
722
+ #: tpl/dash/dashboard.tpl.php:364 tpl/toolbox/purge.tpl.php:52
723
  msgid "Object Cache"
724
  msgstr ""
725
 
726
+ #: src/gui.cls.php:496 src/gui.cls.php:637 tpl/toolbox/purge.tpl.php:61
727
  msgid "Opcode Cache"
728
  msgstr ""
729
 
730
+ #: src/gui.cls.php:516 src/gui.cls.php:657
731
+ #: tpl/page_optm/settings_media.tpl.php:125 tpl/toolbox/purge.tpl.php:79
 
 
 
 
732
  msgid "LQIP Cache"
733
  msgstr ""
734
 
735
+ #: src/gui.cls.php:526 src/gui.cls.php:667 src/lang.cls.php:142
736
+ #: tpl/toolbox/purge.tpl.php:88
737
  msgid "Gravatar Cache"
738
  msgstr ""
739
 
740
+ #: src/gui.cls.php:550
741
  msgid "LiteSpeed Cache Purge All"
742
  msgstr ""
743
 
744
+ #: src/gui.cls.php:566 tpl/cdn/entry.tpl.php:7 tpl/cdn/settings.tpl.php:194
745
  #: tpl/db_optm/entry.tpl.php:6
746
  msgid "Manage"
747
  msgstr ""
748
 
749
+ #: src/gui.cls.php:617 tpl/cdn/manage.tpl.php:17
750
  msgid "Cloudflare"
751
  msgstr ""
752
 
753
+ #: src/gui.cls.php:686 tpl/img_optm/summary.tpl.php:175
754
  msgid "Remove all previous unfinished image optimization requests."
755
  msgstr ""
756
 
757
+ #: src/gui.cls.php:687 tpl/img_optm/summary.tpl.php:177
758
  msgid "Clean Up Unfinished Data"
759
  msgstr ""
760
 
761
+ #: src/gui.cls.php:705
762
  msgid "Install %s"
763
  msgstr ""
764
 
765
+ #: src/gui.cls.php:706
766
  msgid "Install Now"
767
  msgstr ""
768
 
769
+ #: src/gui.cls.php:725
770
  msgid ""
771
  "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s "
772
  "target=\"_blank\">update now</a>."
773
  msgstr ""
774
 
775
+ #: src/gui.cls.php:728
776
  msgid "View %1$s version %2$s details"
777
  msgstr ""
778
 
779
+ #: src/gui.cls.php:733
780
  msgid "Update %s now"
781
  msgstr ""
782
 
783
+ #: src/htaccess.cls.php:352
784
  msgid "Mobile Agent Rules"
785
  msgstr ""
786
 
787
+ #: src/htaccess.cls.php:811
788
  msgid ""
789
  "<p>Please add/replace the following codes into the beginning of %1$s:</p> "
790
  "%2$s"
791
  msgstr ""
792
 
793
+ #: src/htaccess.cls.php:878
794
  msgid "File Saved."
795
  msgstr ""
796
 
898
  msgid "Import failed due to file error."
899
  msgstr ""
900
 
901
+ #: src/import.cls.php:132
902
  msgid "Imported setting file %s successfully."
903
  msgstr ""
904
 
905
+ #: src/import.cls.php:156
906
  msgid "Reset successfully."
907
  msgstr ""
908
 
910
  msgid "Images not requested"
911
  msgstr ""
912
 
913
+ #: src/lang.cls.php:24 tpl/dash/dashboard.tpl.php:305
914
  msgid "Images requested"
915
  msgstr ""
916
 
917
+ #: src/lang.cls.php:25 tpl/dash/dashboard.tpl.php:315
918
  msgid "Images notified to pull"
919
  msgstr ""
920
 
958
  msgid "Domain Key"
959
  msgstr ""
960
 
961
+ #: src/lang.cls.php:55
962
+ msgid "Guest Mode User Agents"
963
+ msgstr ""
964
+
965
  #: src/lang.cls.php:56
966
+ msgid "Guest Mode IPs"
967
+ msgstr ""
968
+
969
+ #: src/lang.cls.php:58
970
  msgid "Enable Cache"
971
  msgstr ""
972
 
973
+ #: src/lang.cls.php:59 tpl/dash/dashboard.tpl.php:365
974
  msgid "Browser Cache"
975
  msgstr ""
976
 
977
+ #: src/lang.cls.php:60
978
  msgid "Default Public Cache TTL"
979
  msgstr ""
980
 
981
+ #: src/lang.cls.php:61
982
  msgid "Default Private Cache TTL"
983
  msgstr ""
984
 
985
+ #: src/lang.cls.php:62
986
  msgid "Default Front Page TTL"
987
  msgstr ""
988
 
989
+ #: src/lang.cls.php:63
990
  msgid "Default Feed TTL"
991
  msgstr ""
992
 
993
+ #: src/lang.cls.php:64
994
  msgid "Default REST TTL"
995
  msgstr ""
996
 
997
+ #: src/lang.cls.php:65
998
  msgid "Default HTTP Status Code Page TTL"
999
  msgstr ""
1000
 
1001
+ #: src/lang.cls.php:66
1002
  msgid "Browser Cache TTL"
1003
  msgstr ""
1004
 
1005
+ #: src/lang.cls.php:67
1006
  msgid "Automatically Upgrade"
1007
  msgstr ""
1008
 
1009
+ #: src/lang.cls.php:68
1010
  msgid "Guest Mode"
1011
  msgstr ""
1012
 
1013
+ #: src/lang.cls.php:69
1014
  msgid "Guest Optimization"
1015
  msgstr ""
1016
 
1017
+ #: src/lang.cls.php:70
1018
  msgid "Notifications"
1019
  msgstr ""
1020
 
1021
+ #: src/lang.cls.php:71
1022
  msgid "Cache Logged-in Users"
1023
  msgstr ""
1024
 
1025
+ #: src/lang.cls.php:72
1026
  msgid "Cache Commenters"
1027
  msgstr ""
1028
 
1029
+ #: src/lang.cls.php:73
1030
  msgid "Cache REST API"
1031
  msgstr ""
1032
 
1033
+ #: src/lang.cls.php:74
1034
  msgid "Cache Login Page"
1035
  msgstr ""
1036
 
1037
+ #: src/lang.cls.php:75
1038
  msgid "Cache favicon.ico"
1039
  msgstr ""
1040
 
1041
+ #: src/lang.cls.php:76
1042
  msgid "Cache PHP Resources"
1043
  msgstr ""
1044
 
1045
+ #: src/lang.cls.php:77 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1046
  msgid "Cache Mobile"
1047
  msgstr ""
1048
 
1049
+ #: src/lang.cls.php:78 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1050
  msgid "List of Mobile User Agents"
1051
  msgstr ""
1052
 
1053
+ #: src/lang.cls.php:79
1054
  msgid "Private Cached URIs"
1055
  msgstr ""
1056
 
1057
+ #: src/lang.cls.php:80
1058
  msgid "Drop Query String"
1059
  msgstr ""
1060
 
1061
+ #: src/lang.cls.php:83
1062
  msgid "Method"
1063
  msgstr ""
1064
 
1065
+ #: src/lang.cls.php:84
1066
  msgid "Host"
1067
  msgstr ""
1068
 
1069
+ #: src/lang.cls.php:85
1070
  msgid "Port"
1071
  msgstr ""
1072
 
1073
+ #: src/lang.cls.php:86
1074
  msgid "Default Object Lifetime"
1075
  msgstr ""
1076
 
1077
+ #: src/lang.cls.php:87
1078
  msgid "Username"
1079
  msgstr ""
1080
 
1081
+ #: src/lang.cls.php:88
1082
  msgid "Password"
1083
  msgstr ""
1084
 
1085
+ #: src/lang.cls.php:89
1086
  msgid "Redis Database ID"
1087
  msgstr ""
1088
 
1089
+ #: src/lang.cls.php:90
1090
  msgid "Global Groups"
1091
  msgstr ""
1092
 
1093
+ #: src/lang.cls.php:91
1094
  msgid "Do Not Cache Groups"
1095
  msgstr ""
1096
 
1097
+ #: src/lang.cls.php:92
1098
  msgid "Persistent Connection"
1099
  msgstr ""
1100
 
1101
+ #: src/lang.cls.php:93
1102
+ msgid "Cache WP-Admin"
1103
  msgstr ""
1104
 
1105
+ #: src/lang.cls.php:94
1106
  msgid "Store Transients"
1107
  msgstr ""
1108
 
1109
+ #: src/lang.cls.php:96
1110
  msgid "Purge All On Upgrade"
1111
  msgstr ""
1112
 
1113
+ #: src/lang.cls.php:97
1114
  msgid "Serve Stale"
1115
  msgstr ""
1116
 
1117
+ #: src/lang.cls.php:98 tpl/cache/settings-purge.tpl.php:130
1118
  msgid "Scheduled Purge URLs"
1119
  msgstr ""
1120
 
1121
+ #: src/lang.cls.php:99 tpl/cache/settings-purge.tpl.php:105
1122
  msgid "Scheduled Purge Time"
1123
  msgstr ""
1124
 
1125
+ #: src/lang.cls.php:100
1126
  msgid "Force Cache URIs"
1127
  msgstr ""
1128
 
1129
+ #: src/lang.cls.php:101
1130
  msgid "Force Public Cache URIs"
1131
  msgstr ""
1132
 
1133
+ #: src/lang.cls.php:102
1134
  msgid "Do Not Cache URIs"
1135
  msgstr ""
1136
 
1137
+ #: src/lang.cls.php:103
1138
  msgid "Do Not Cache Query Strings"
1139
  msgstr ""
1140
 
1141
+ #: src/lang.cls.php:104
1142
  msgid "Do Not Cache Categories"
1143
  msgstr ""
1144
 
1145
+ #: src/lang.cls.php:105
1146
  msgid "Do Not Cache Tags"
1147
  msgstr ""
1148
 
1149
+ #: src/lang.cls.php:106
1150
  msgid "Do Not Cache Roles"
1151
  msgstr ""
1152
 
1153
+ #: src/lang.cls.php:107
1154
  msgid "CSS Minify"
1155
  msgstr ""
1156
 
1157
+ #: src/lang.cls.php:108
1158
  msgid "CSS Combine"
1159
  msgstr ""
1160
 
1161
+ #: src/lang.cls.php:109
1162
  msgid "CSS Combine External and Inline"
1163
  msgstr ""
1164
 
1165
+ #: src/lang.cls.php:110
1166
  msgid "Generate UCSS"
1167
  msgstr ""
1168
 
1169
+ #: src/lang.cls.php:111
1170
  msgid "UCSS Whitelist"
1171
  msgstr ""
1172
 
1173
+ #: src/lang.cls.php:112
1174
  msgid "CSS HTTP/2 Push"
1175
  msgstr ""
1176
 
1177
+ #: src/lang.cls.php:113
1178
  msgid "JS Minify"
1179
  msgstr ""
1180
 
1181
+ #: src/lang.cls.php:115
1182
  msgid "JS Combine External and Inline"
1183
  msgstr ""
1184
 
1185
+ #: src/lang.cls.php:116
1186
  msgid "JS HTTP/2 Push"
1187
  msgstr ""
1188
 
1189
+ #: src/lang.cls.php:117
1190
  msgid "HTML Minify"
1191
  msgstr ""
1192
 
 
 
 
 
 
 
 
 
1193
  #: src/lang.cls.php:118
1194
+ msgid "HTML Lazy Load Selectors"
1195
  msgstr ""
1196
 
1197
+ #: src/lang.cls.php:119 tpl/page_optm/settings_tuning.tpl.php:119
1198
+ msgid "Load CSS Asynchronously"
1199
  msgstr ""
1200
 
1201
  #: src/lang.cls.php:120
1202
+ msgid "CCSS Per URL"
1203
  msgstr ""
1204
 
1205
  #: src/lang.cls.php:121
1206
+ msgid "Inline CSS Async Lib"
1207
  msgstr ""
1208
 
1209
  #: src/lang.cls.php:122
1210
+ msgid "Font Display Optimization"
1211
  msgstr ""
1212
 
1213
  #: src/lang.cls.php:123
1214
+ msgid "Load JS Deferred"
1215
  msgstr ""
1216
 
1217
  #: src/lang.cls.php:124
1247
  msgstr ""
1248
 
1249
  #: src/lang.cls.php:132
1250
+ msgid "Separate CCSS Cache Post Types"
1251
  msgstr ""
1252
 
1253
  #: src/lang.cls.php:133
1254
+ msgid "Separate CCSS Cache URIs"
1255
  msgstr ""
1256
 
1257
  #: src/lang.cls.php:134
1258
+ msgid "JS Deferred Excludes"
1259
  msgstr ""
1260
 
1261
  #: src/lang.cls.php:135
1262
+ msgid "Guest Mode JS Excludes"
1263
  msgstr ""
1264
 
1265
  #: src/lang.cls.php:136
1266
+ msgid "Remove WordPress Emoji"
1267
  msgstr ""
1268
 
1269
  #: src/lang.cls.php:137
1270
+ msgid "Remove Noscript Tags"
1271
+ msgstr ""
1272
+
1273
+ #: src/lang.cls.php:138
1274
+ msgid "URI Excludes"
1275
+ msgstr ""
1276
+
1277
+ #: src/lang.cls.php:139
1278
+ msgid "Optimize for Guests Only"
1279
  msgstr ""
1280
 
1281
  #: src/lang.cls.php:140
1282
+ msgid "Role Excludes"
1283
+ msgstr ""
1284
+
1285
+ #: src/lang.cls.php:143
1286
  msgid "Gravatar Cache Cron"
1287
  msgstr ""
1288
 
1289
+ #: src/lang.cls.php:144
1290
  msgid "Gravatar Cache TTL"
1291
  msgstr ""
1292
 
1293
+ #: src/lang.cls.php:146
1294
  msgid "Lazy Load Images"
1295
  msgstr ""
1296
 
1297
+ #: src/lang.cls.php:147
1298
  msgid "Lazy Load Image Excludes"
1299
  msgstr ""
1300
 
1301
+ #: src/lang.cls.php:148
1302
  msgid "Lazy Load Image Class Name Excludes"
1303
  msgstr ""
1304
 
1305
+ #: src/lang.cls.php:149
1306
  msgid "Lazy Load Image Parent Class Name Excludes"
1307
  msgstr ""
1308
 
1309
+ #: src/lang.cls.php:150
1310
  msgid "Lazy Load Iframe Class Name Excludes"
1311
  msgstr ""
1312
 
1313
+ #: src/lang.cls.php:151
1314
  msgid "Lazy Load Iframe Parent Class Name Excludes"
1315
  msgstr ""
1316
 
1317
+ #: src/lang.cls.php:152
1318
  msgid "Lazy Load URI Excludes"
1319
  msgstr ""
1320
 
1321
+ #: src/lang.cls.php:153
1322
  msgid "LQIP Excludes"
1323
  msgstr ""
1324
 
1325
+ #: src/lang.cls.php:154
1326
  msgid "Basic Image Placeholder"
1327
  msgstr ""
1328
 
1329
+ #: src/lang.cls.php:155
1330
  msgid "Responsive Placeholder"
1331
  msgstr ""
1332
 
1333
+ #: src/lang.cls.php:156
1334
  msgid "Responsive Placeholder Color"
1335
  msgstr ""
1336
 
1337
+ #: src/lang.cls.php:157
1338
  msgid "Responsive Placeholder SVG"
1339
  msgstr ""
1340
 
1341
+ #: src/lang.cls.php:158
1342
  msgid "LQIP Cloud Generator"
1343
  msgstr ""
1344
 
1345
+ #: src/lang.cls.php:159
1346
  msgid "LQIP Quality"
1347
  msgstr ""
1348
 
1349
+ #: src/lang.cls.php:160
1350
  msgid "LQIP Minimum Dimensions"
1351
  msgstr ""
1352
 
1353
+ #: src/lang.cls.php:162
1354
  msgid "Generate LQIP In Background"
1355
  msgstr ""
1356
 
1357
+ #: src/lang.cls.php:163
1358
  msgid "Lazy Load Iframes"
1359
  msgstr ""
1360
 
1361
+ #: src/lang.cls.php:164
1362
  msgid "Add Missing Sizes"
1363
  msgstr ""
1364
 
1365
+ #: src/lang.cls.php:165
1366
  msgid "Inline Lazy Load Images Library"
1367
  msgstr ""
1368
 
1369
+ #: src/lang.cls.php:166
1370
  msgid "Auto Request Cron"
1371
  msgstr ""
1372
 
1373
+ #: src/lang.cls.php:167
1374
  msgid "Auto Pull Cron"
1375
  msgstr ""
1376
 
1377
+ #: src/lang.cls.php:168
1378
  msgid "Optimize Original Images"
1379
  msgstr ""
1380
 
1381
+ #: src/lang.cls.php:169
1382
  msgid "Remove Original Backups"
1383
  msgstr ""
1384
 
1385
+ #: src/lang.cls.php:170
1386
  msgid "Create WebP Versions"
1387
  msgstr ""
1388
 
1389
+ #: src/lang.cls.php:171
1390
  msgid "Optimize Losslessly"
1391
  msgstr ""
1392
 
1393
+ #: src/lang.cls.php:172
1394
  msgid "Preserve EXIF/XMP data"
1395
  msgstr ""
1396
 
1397
+ #: src/lang.cls.php:173
1398
  msgid "WebP Attribute To Replace"
1399
  msgstr ""
1400
 
1401
+ #: src/lang.cls.php:174
1402
  msgid "WebP For Extra srcset"
1403
  msgstr ""
1404
 
1405
+ #: src/lang.cls.php:175
1406
  msgid "WordPress Image Quality Control"
1407
  msgstr ""
1408
 
1409
+ #: src/lang.cls.php:176 tpl/esi_widget_edit.php:36
1410
  msgid "Enable ESI"
1411
  msgstr ""
1412
 
1413
+ #: src/lang.cls.php:177
1414
  msgid "Cache Admin Bar"
1415
  msgstr ""
1416
 
1417
+ #: src/lang.cls.php:178
1418
  msgid "Cache Comment Form"
1419
  msgstr ""
1420
 
1421
+ #: src/lang.cls.php:179
1422
  msgid "ESI Nonces"
1423
  msgstr ""
1424
 
1425
+ #: src/lang.cls.php:180 tpl/page_optm/settings_css.tpl.php:100
1426
+ #: tpl/page_optm/settings_css.tpl.php:199
1427
  msgid "Vary Group"
1428
  msgstr ""
1429
 
1430
+ #: src/lang.cls.php:181
1431
  msgid "Purge All Hooks"
1432
  msgstr ""
1433
 
1434
+ #: src/lang.cls.php:182
1435
  msgid "Improve HTTP/HTTPS Compatibility"
1436
  msgstr ""
1437
 
1438
+ #: src/lang.cls.php:183
1439
  msgid "Instant Click"
1440
  msgstr ""
1441
 
1442
+ #: src/lang.cls.php:184
1443
  msgid "Do Not Cache Cookies"
1444
  msgstr ""
1445
 
1446
+ #: src/lang.cls.php:185
1447
  msgid "Do Not Cache User Agents"
1448
  msgstr ""
1449
 
1450
+ #: src/lang.cls.php:186
1451
  msgid "Login Cookie"
1452
  msgstr ""
1453
 
1454
+ #: src/lang.cls.php:187
1455
  msgid "Image WebP Replacement"
1456
  msgstr ""
1457
 
1458
+ #: src/lang.cls.php:189
1459
  msgid "Frontend .htaccess Path"
1460
  msgstr ""
1461
 
1462
+ #: src/lang.cls.php:190
1463
  msgid "Backend .htaccess Path"
1464
  msgstr ""
1465
 
1466
+ #: src/lang.cls.php:191
1467
  msgid "Frontend Heartbeat Control"
1468
  msgstr ""
1469
 
1470
+ #: src/lang.cls.php:192
1471
  msgid "Frontend Heartbeat TTL"
1472
  msgstr ""
1473
 
1474
+ #: src/lang.cls.php:193
1475
  msgid "Backend Heartbeat Control"
1476
  msgstr ""
1477
 
1478
+ #: src/lang.cls.php:194
1479
  msgid "Backend Heartbeat TTL"
1480
  msgstr ""
1481
 
1482
+ #: src/lang.cls.php:195
1483
  msgid "Editor Heartbeat"
1484
  msgstr ""
1485
 
1486
+ #: src/lang.cls.php:196
1487
  msgid "Editor Heartbeat TTL"
1488
  msgstr ""
1489
 
1490
+ #: src/lang.cls.php:198
1491
  msgid "QUIC.cloud CDN"
1492
  msgstr ""
1493
 
1494
+ #: src/lang.cls.php:199
1495
  msgid "Use CDN Mapping"
1496
  msgstr ""
1497
 
1498
+ #: src/lang.cls.php:200
1499
  msgid "CDN URL"
1500
  msgstr ""
1501
 
1502
+ #: src/lang.cls.php:201
1503
  msgid "Include Images"
1504
  msgstr ""
1505
 
1506
+ #: src/lang.cls.php:202
1507
  msgid "Include CSS"
1508
  msgstr ""
1509
 
1510
+ #: src/lang.cls.php:203
1511
  msgid "Include JS"
1512
  msgstr ""
1513
 
1514
+ #: src/lang.cls.php:204 tpl/cdn/settings.tpl.php:102
1515
  msgid "Include File Types"
1516
  msgstr ""
1517
 
1518
+ #: src/lang.cls.php:205
1519
  msgid "HTML Attribute To Replace"
1520
  msgstr ""
1521
 
1522
+ #: src/lang.cls.php:206
1523
  msgid "Original URLs"
1524
  msgstr ""
1525
 
1526
+ #: src/lang.cls.php:207
1527
  msgid "Included Directories"
1528
  msgstr ""
1529
 
1530
+ #: src/lang.cls.php:208
1531
  msgid "Exclude Path"
1532
  msgstr ""
1533
 
1534
+ #: src/lang.cls.php:209
1535
  msgid "Cloudflare API"
1536
  msgstr ""
1537
 
1538
+ #: src/lang.cls.php:212
1539
  msgid "Delay"
1540
  msgstr ""
1541
 
1542
+ #: src/lang.cls.php:213
1543
  msgid "Run Duration"
1544
  msgstr ""
1545
 
1546
+ #: src/lang.cls.php:214
1547
  msgid "Interval Between Runs"
1548
  msgstr ""
1549
 
1550
+ #: src/lang.cls.php:215
1551
  msgid "Crawl Interval"
1552
  msgstr ""
1553
 
1554
+ #: src/lang.cls.php:216
1555
  msgid "Threads"
1556
  msgstr ""
1557
 
1558
+ #: src/lang.cls.php:217
1559
  msgid "Timeout"
1560
  msgstr ""
1561
 
1562
+ #: src/lang.cls.php:218
1563
  msgid "Server Load Limit"
1564
  msgstr ""
1565
 
1566
+ #: src/lang.cls.php:219
1567
  msgid "Role Simulation"
1568
  msgstr ""
1569
 
1570
+ #: src/lang.cls.php:220
1571
  msgid "Cookie Simulation"
1572
  msgstr ""
1573
 
1574
+ #: src/lang.cls.php:221
1575
  msgid "Custom Sitemap"
1576
  msgstr ""
1577
 
1578
+ #: src/lang.cls.php:222
1579
  msgid "Drop Domain from Sitemap"
1580
  msgstr ""
1581
 
1582
+ #: src/lang.cls.php:223
1583
  msgid "Sitemap Timeout"
1584
  msgstr ""
1585
 
1586
+ #: src/lang.cls.php:225 tpl/inc/disabled_all.php:5
1587
  msgid "Disable All Features"
1588
  msgstr ""
1589
 
1590
+ #: src/lang.cls.php:226 tpl/toolbox/log_viewer.tpl.php:7
1591
  msgid "Debug Log"
1592
  msgstr ""
1593
 
1594
+ #: src/lang.cls.php:227
1595
  msgid "Admin IPs"
1596
  msgstr ""
1597
 
1598
+ #: src/lang.cls.php:228
1599
  msgid "Debug Level"
1600
  msgstr ""
1601
 
1602
+ #: src/lang.cls.php:229
1603
  msgid "Log File Size Limit"
1604
  msgstr ""
1605
 
1606
+ #: src/lang.cls.php:230
1607
  msgid "Log Cookies"
1608
  msgstr ""
1609
 
1610
+ #: src/lang.cls.php:231
1611
  msgid "Collapse Query Strings"
1612
  msgstr ""
1613
 
1614
+ #: src/lang.cls.php:232
1615
  msgid "Debug URI Includes"
1616
  msgstr ""
1617
 
1618
+ #: src/lang.cls.php:233
1619
  msgid "Debug URI Excludes"
1620
  msgstr ""
1621
 
1622
+ #: src/lang.cls.php:235
1623
  msgid "Revisions Max Number"
1624
  msgstr ""
1625
 
1626
+ #: src/lang.cls.php:236
1627
  msgid "Revisions Max Age"
1628
  msgstr ""
1629
 
1724
  msgid "LQIP image preview for size %s"
1725
  msgstr ""
1726
 
1727
+ #: src/purge.cls.php:175
1728
  msgid "Purged all caches successfully."
1729
  msgstr ""
1730
 
1731
+ #: src/purge.cls.php:194
1732
  msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
1733
  msgstr ""
1734
 
1735
+ #: src/purge.cls.php:214
1736
  msgid "Cleaned all Critical CSS files."
1737
  msgstr ""
1738
 
1739
+ #: src/purge.cls.php:231
1740
  msgid "Cleaned all LQIP files."
1741
  msgstr ""
1742
 
1743
+ #: src/purge.cls.php:248
1744
  msgid "Cleaned all Gravatar files."
1745
  msgstr ""
1746
 
1747
+ #: src/purge.cls.php:274
 
 
 
 
1748
  msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
1749
  msgstr ""
1750
 
1751
+ #: src/purge.cls.php:290
1752
  msgid "Opcode cache is not enabled."
1753
  msgstr ""
1754
 
1755
+ #: src/purge.cls.php:302
1756
  msgid "Reset the entire opcode cache successfully."
1757
  msgstr ""
1758
 
1759
+ #: src/purge.cls.php:330
1760
  msgid "Object cache is not enabled."
1761
  msgstr ""
1762
 
1763
+ #: src/purge.cls.php:343
1764
  msgid "Purge all object caches successfully."
1765
  msgstr ""
1766
 
1767
+ #: src/purge.cls.php:526
1768
  msgid "Notified LiteSpeed Web Server to purge the front page."
1769
  msgstr ""
1770
 
1771
+ #: src/purge.cls.php:539
1772
  msgid "Notified LiteSpeed Web Server to purge all pages."
1773
  msgstr ""
1774
 
1775
+ #: src/purge.cls.php:558
1776
  msgid "Notified LiteSpeed Web Server to purge error pages."
1777
  msgstr ""
1778
 
1779
+ #: src/purge.cls.php:585
1780
  msgid "Purge category %s"
1781
  msgstr ""
1782
 
1783
+ #: src/purge.cls.php:612
1784
  msgid "Purge tag %s"
1785
  msgstr ""
1786
 
1787
+ #: src/purge.cls.php:643
1788
  msgid "Purge url %s"
1789
  msgstr ""
1790
 
1791
+ #: src/task.cls.php:120
1792
  msgid "Every Minute"
1793
  msgstr ""
1794
 
1795
+ #: src/task.cls.php:139
1796
  msgid "LiteSpeed Crawler Cron"
1797
  msgstr ""
1798
 
1816
  msgid "&raquo;"
1817
  msgstr ""
1818
 
1819
+ #: thirdparty/woocommerce.content.tpl.php:16
1820
  msgid "WooCommerce Settings"
1821
  msgstr ""
1822
 
1823
+ #: thirdparty/woocommerce.content.tpl.php:21
1824
  #: tpl/cache/settings-advanced.tpl.php:12
1825
  #: tpl/cache/settings_inc.browser.tpl.php:12 tpl/toolbox/heartbeat.tpl.php:14
1826
  #: tpl/toolbox/report.tpl.php:29
1827
  msgid "NOTICE:"
1828
  msgstr ""
1829
 
1830
+ #: thirdparty/woocommerce.content.tpl.php:22
1831
  msgid "After verifying that the cache works in general, please test the cart."
1832
  msgstr ""
1833
 
1834
+ #: thirdparty/woocommerce.content.tpl.php:23
1835
  msgid "To test the cart, visit the <a %s>FAQ</a>."
1836
  msgstr ""
1837
 
1838
+ #: thirdparty/woocommerce.content.tpl.php:24
1839
  msgid ""
1840
  "By default, the My Account, Checkout, and Cart pages are automatically "
1841
  "excluded from caching. Misconfiguration of page associations in WooCommerce "
1842
  "settings may cause some pages to be erroneously excluded."
1843
  msgstr ""
1844
 
1845
+ #: thirdparty/woocommerce.content.tpl.php:31
1846
+ msgid "Use ESI for Cart"
1847
+ msgstr ""
1848
+
1849
+ #: thirdparty/woocommerce.content.tpl.php:36
1850
+ msgid ""
1851
+ "When the option is ON, cart information will be implemented as ESI blocks. "
1852
+ "NOTE: To make it work, you need to turn on %1$s under ESI settings."
1853
+ msgstr ""
1854
+
1855
+ #: thirdparty/woocommerce.content.tpl.php:43
1856
  msgid "Product Update Interval"
1857
  msgstr ""
1858
 
1859
+ #: thirdparty/woocommerce.content.tpl.php:48
1860
  msgid "Purge product on changes to the quantity or stock status."
1861
  msgstr ""
1862
 
1863
+ #: thirdparty/woocommerce.content.tpl.php:48
1864
  msgid "Purge categories only when stock status changes."
1865
  msgstr ""
1866
 
1867
+ #: thirdparty/woocommerce.content.tpl.php:49
1868
  msgid "Purge product and categories only when the stock status changes."
1869
  msgstr ""
1870
 
1871
+ #: thirdparty/woocommerce.content.tpl.php:50
1872
  msgid "Purge product only when the stock status changes."
1873
  msgstr ""
1874
 
1875
+ #: thirdparty/woocommerce.content.tpl.php:50
1876
  msgid "Do not purge categories on changes to the quantity or stock status."
1877
  msgstr ""
1878
 
1879
+ #: thirdparty/woocommerce.content.tpl.php:51
1880
  msgid ""
1881
  "Always purge both product and categories on changes to the quantity or stock "
1882
  "status."
1883
  msgstr ""
1884
 
1885
+ #: thirdparty/woocommerce.content.tpl.php:64
1886
  msgid ""
1887
  "Determines how changes in product quantity and product stock status affect "
1888
  "product pages and their associated category pages."
1889
  msgstr ""
1890
 
1891
+ #: thirdparty/woocommerce.content.tpl.php:72
1892
  msgid "Use Front Page TTL for the Shop Page"
1893
  msgstr ""
1894
 
1895
+ #: thirdparty/woocommerce.content.tpl.php:77
1896
  msgid ""
1897
  "Checking this option will force the shop page to use the front page TTL "
1898
  "setting."
1899
  msgstr ""
1900
 
1901
+ #: thirdparty/woocommerce.content.tpl.php:78
1902
  msgid ""
1903
  "For example, if the homepage for the site is located at %1$s, the shop page "
1904
  "may be located at %2$s."
1905
  msgstr ""
1906
 
1907
+ #: thirdparty/woocommerce.content.tpl.php:86
1908
  msgid "Privately Cache Cart"
1909
  msgstr ""
1910
 
1911
+ #: thirdparty/woocommerce.content.tpl.php:91
1912
  msgid "Privately cache cart when not empty."
1913
  msgstr ""
1914
 
1940
  msgid "Dismiss this notice"
1941
  msgstr ""
1942
 
1943
+ #. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 4.1) #-#-#-#-#
1944
  #. Plugin Name of the plugin/theme
1945
  #: tpl/banner/new_version.php:59 tpl/banner/new_version_dev.tpl.php:12
1946
  #: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
1956
  msgstr ""
1957
 
1958
  #: tpl/banner/new_version.php:71 tpl/banner/new_version_dev.tpl.php:24
1959
+ #: tpl/toolbox/beta_test.tpl.php:51
1960
  msgid "Upgrade"
1961
  msgstr ""
1962
 
1980
  msgid "Thank You for Using the LiteSpeed Cache Plugin!"
1981
  msgstr ""
1982
 
1983
+ #: tpl/banner/score.php:28 tpl/dash/dashboard.tpl.php:156
1984
  msgid "Page Load Time"
1985
  msgstr ""
1986
 
1987
  #: tpl/banner/score.php:34 tpl/banner/score.php:74
1988
+ #: tpl/dash/dashboard.tpl.php:169 tpl/dash/dashboard.tpl.php:228
1989
  msgid "Before"
1990
  msgstr ""
1991
 
1992
  #: tpl/banner/score.php:45 tpl/banner/score.php:84
1993
+ #: tpl/dash/dashboard.tpl.php:178 tpl/dash/dashboard.tpl.php:236
1994
  msgid "After"
1995
  msgstr ""
1996
 
1997
  #: tpl/banner/score.php:55 tpl/banner/score.php:94
1998
+ #: tpl/dash/dashboard.tpl.php:186 tpl/dash/dashboard.tpl.php:244
1999
  msgid "Improved by"
2000
  msgstr ""
2001
 
2002
+ #: tpl/banner/score.php:68 tpl/dash/dashboard.tpl.php:213
2003
  msgid "PageSpeed Score"
2004
  msgstr ""
2005
 
2044
  msgstr ""
2045
 
2046
  #: tpl/cache/entry.tpl.php:8 tpl/cache/entry_network.tpl.php:7
2047
+ #: tpl/toolbox/entry.tpl.php:6 tpl/toolbox/purge.tpl.php:124
2048
  msgid "Purge"
2049
  msgstr ""
2050
 
2079
 
2080
  #: tpl/cache/more_settings_tip.tpl.php:12
2081
  #: tpl/cache/settings-excludes.tpl.php:61
2082
+ #: tpl/cache/settings-excludes.tpl.php:94 tpl/cdn/settings.tpl.php:78
2083
  #: tpl/crawler/settings-general.tpl.php:39
2084
  #: tpl/crawler/settings-general.tpl.php:140
2085
  #: tpl/crawler/settings-general.tpl.php:145
2262
  #: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
2263
  #: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
2264
  #: tpl/inc/check_if_network_disable_all.php:18
2265
+ #: tpl/page_optm/settings_css.tpl.php:59 tpl/page_optm/settings_css.tpl.php:152
2266
  #: tpl/page_optm/settings_localization.tpl.php:11
2267
  msgid "WARNING"
2268
  msgstr ""
2301
  #: tpl/page_optm/settings_media_exc.tpl.php:26
2302
  #: tpl/page_optm/settings_tuning.tpl.php:36
2303
  #: tpl/page_optm/settings_tuning.tpl.php:57
2304
+ #: tpl/page_optm/settings_tuning.tpl.php:137
2305
+ #: tpl/page_optm/settings_tuning.tpl.php:158
2306
  msgid "Filter %s is supported."
2307
  msgstr ""
2308
 
2317
  msgstr ""
2318
 
2319
  #: tpl/cache/settings-esi.tpl.php:107 tpl/cache/settings-purge.tpl.php:110
2320
+ #: tpl/cdn/settings.tpl.php:143
2321
  msgid ""
2322
  "Wildcard %1$s supported (match zero or more characters). For example, to "
2323
  "match %2$s and %3$s, use %4$s."
2703
  msgstr ""
2704
 
2705
  #: tpl/cache/settings_inc.object.tpl.php:41
2706
+ msgid "Use external object cache functionality."
2707
  msgstr ""
2708
 
2709
  #: tpl/cache/settings_inc.object.tpl.php:47 tpl/crawler/blacklist.tpl.php:32
2847
  msgid "Enable %s CDN API functionality."
2848
  msgstr ""
2849
 
2850
+ #: tpl/cdn/settings.tpl.php:49
2851
+ msgid ""
2852
+ "Turn this setting %1$s if you are using a traditional Content Delivery "
2853
+ "Network (CDN) or a subdomain for static content with QUIC.cloud CDN."
2854
+ msgstr ""
2855
+
2856
+ #: tpl/cdn/settings.tpl.php:54
2857
  msgid ""
 
2858
  "NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are are "
2859
  "only using QUIC.cloud or Cloudflare, leave this setting %2$s."
2860
  msgstr ""
2861
 
2862
+ #: tpl/cdn/settings.tpl.php:79
2863
  msgid ""
2864
  "To randomize CDN hostname, define multiple hostnames for the same resources."
2865
  msgstr ""
2866
 
2867
+ #: tpl/cdn/settings.tpl.php:84
2868
  msgid ""
2869
  "Serve all image files through the CDN. This will affect all attachments, "
2870
  "HTML %s tags, and CSS %s attributes."
2871
  msgstr ""
2872
 
2873
+ #: tpl/cdn/settings.tpl.php:88
2874
  msgid ""
2875
  "Serve all CSS files through the CDN. This will affect all enqueued WP CSS "
2876
  "files."
2877
  msgstr ""
2878
 
2879
+ #: tpl/cdn/settings.tpl.php:92
2880
  msgid ""
2881
  "Serve all JavaScript files through the CDN. This will affect all enqueued WP "
2882
  "JavaScript files."
2883
  msgstr ""
2884
 
2885
+ #: tpl/cdn/settings.tpl.php:96
2886
  msgid "Static file type links to be replaced by CDN links."
2887
  msgstr ""
2888
 
2889
+ #: tpl/cdn/settings.tpl.php:98
2890
  msgid "This will affect all tags containing attributes: %s %s %s."
2891
  msgstr ""
2892
 
2893
+ #: tpl/cdn/settings.tpl.php:99
2894
  msgid "Default value"
2895
  msgstr ""
2896
 
2897
+ #: tpl/cdn/settings.tpl.php:102
2898
  msgid ""
2899
  "If you turn any of the above settings OFF, please remove the related file "
2900
  "types from the %s box."
2901
  msgstr ""
2902
 
2903
+ #: tpl/cdn/settings.tpl.php:126
2904
  msgid ""
2905
  "Specify which HTML element attributes will be replaced with CDN Mapping."
2906
  msgstr ""
2907
 
2908
+ #: tpl/cdn/settings.tpl.php:127 tpl/img_optm/settings.tpl.php:140
2909
  msgid "Only attributes listed here will be replaced."
2910
  msgstr ""
2911
 
2912
+ #: tpl/cdn/settings.tpl.php:128 tpl/img_optm/settings.tpl.php:141
2913
  msgid "Use the format %1$s or %2$s (element is optional)."
2914
  msgstr ""
2915
 
2916
+ #: tpl/cdn/settings.tpl.php:142
2917
  msgid ""
2918
  "Site URL to be served through the CDN. Beginning with %1$s. For example, "
2919
  "%2$s."
2920
  msgstr ""
2921
 
2922
+ #: tpl/cdn/settings.tpl.php:165
2923
  msgid "Only files within these directories will be pointed to the CDN."
2924
  msgstr ""
2925
 
2926
+ #: tpl/cdn/settings.tpl.php:179
2927
  msgid "Paths containing these strings will not be served from the CDN."
2928
  msgstr ""
2929
 
2930
+ #: tpl/cdn/settings.tpl.php:193
2931
  msgid "Use %s API functionality."
2932
  msgstr ""
2933
 
2934
+ #: tpl/cdn/settings.tpl.php:194
2935
  msgid "This can be managed from %1$s%2$s tab."
2936
  msgstr ""
2937
 
2938
+ #: tpl/cdn/settings.tpl.php:198
2939
+ msgid "Global API Key / API Token"
2940
  msgstr ""
2941
 
2942
+ #: tpl/cdn/settings.tpl.php:202
2943
+ msgid "Your API key / token is used to access %s APIs."
2944
  msgstr ""
2945
 
2946
+ #: tpl/cdn/settings.tpl.php:203
2947
+ msgid "Get it from <a %1$s>%2$s</a>."
2948
  msgstr ""
2949
 
2950
+ #: tpl/cdn/settings.tpl.php:204
2951
+ msgid ""
2952
+ "Recommended to generate the token from Cloudflare API token template "
2953
+ "\"WordPress\"."
2954
  msgstr ""
2955
 
2956
+ #: tpl/cdn/settings.tpl.php:209
2957
+ msgid "Email Address"
2958
  msgstr ""
2959
 
2960
+ #: tpl/cdn/settings.tpl.php:213
2961
+ msgid "Your Email address on %s."
2962
  msgstr ""
2963
 
2964
+ #: tpl/cdn/settings.tpl.php:214
2965
+ msgid "Optional when API token used."
 
 
2966
  msgstr ""
2967
 
2968
+ #: tpl/cdn/settings.tpl.php:219
2969
  msgid "Domain"
2970
  msgstr ""
2971
 
2972
+ #: tpl/cdn/settings.tpl.php:227
2973
  msgid "You can just type part of the domain."
2974
  msgstr ""
2975
 
2976
+ #: tpl/cdn/settings.tpl.php:228
2977
  msgid ""
2978
  "Once saved, it will be matched with the current list and completed "
2979
  "automatically."
2996
  msgstr ""
2997
 
2998
  #: tpl/crawler/blacklist.tpl.php:31 tpl/crawler/map.tpl.php:43
2999
+ #: tpl/toolbox/purge.tpl.php:206
3000
  msgid "URL"
3001
  msgstr ""
3002
 
3030
  msgstr ""
3031
 
3032
  #: tpl/crawler/entry.tpl.php:9 tpl/general/entry.tpl.php:6
3033
+ #: tpl/general/entry.tpl.php:12 tpl/general/network_settings.tpl.php:8
3034
+ #: tpl/general/settings.tpl.php:42
3035
  msgid "General Settings"
3036
  msgstr ""
3037
 
3067
  msgid "Sitemap Total"
3068
  msgstr ""
3069
 
3070
+ #: tpl/crawler/map.tpl.php:44 tpl/dash/dashboard.tpl.php:500
3071
  msgid "Crawler Status"
3072
  msgstr ""
3073
 
3075
  msgid "Add to Blacklist"
3076
  msgstr ""
3077
 
3078
+ #: tpl/crawler/map.tpl.php:67
3079
  msgid "Cache Hit"
3080
  msgstr ""
3081
 
3082
+ #: tpl/crawler/map.tpl.php:68
3083
  msgid "Cache Miss"
3084
  msgstr ""
3085
 
3154
  #: tpl/crawler/settings-simulation.tpl.php:49
3155
  msgid ""
3156
  "To crawl for a particular cookie, enter the cookie name, and the values you "
3157
+ "wish to crawl for. Values should be one per line. There will be one crawler "
3158
+ "created per cookie value, per simulated role."
3159
  msgstr ""
3160
 
3161
  #: tpl/crawler/settings-simulation.tpl.php:51
3240
  msgid "Run time for previous crawler"
3241
  msgstr ""
3242
 
3243
+ #: tpl/crawler/summary.tpl.php:85 tpl/dash/dashboard.tpl.php:512
3244
  msgid "Current crawler started at"
3245
  msgstr ""
3246
 
3247
+ #: tpl/crawler/summary.tpl.php:92 tpl/dash/dashboard.tpl.php:519
3248
  msgid "Last interval"
3249
  msgstr ""
3250
 
3251
+ #: tpl/crawler/summary.tpl.php:99 tpl/dash/dashboard.tpl.php:526
3252
  msgid "Ended reason"
3253
  msgstr ""
3254
 
3255
+ #: tpl/crawler/summary.tpl.php:106 tpl/dash/dashboard.tpl.php:533
3256
  msgid "<b>Last crawled:</b> %s item(s)"
3257
  msgstr ""
3258
 
3296
  msgid "Waiting to be Crawled"
3297
  msgstr ""
3298
 
3299
+ #: tpl/crawler/summary.tpl.php:178
3300
+ msgid "Already Cached"
3301
+ msgstr ""
3302
+
3303
+ #: tpl/crawler/summary.tpl.php:179
3304
+ msgid "Successfully Crawled"
3305
+ msgstr ""
3306
+
3307
  #: tpl/crawler/summary.tpl.php:184
3308
  msgid "Run frequency is set by the Interval Between Runs setting."
3309
  msgstr ""
3336
  msgid "No crawler meta file generated yet"
3337
  msgstr ""
3338
 
3339
+ #: tpl/dash/dashboard.tpl.php:42
3340
  msgid "QUIC.cloud Service Usage Statistics"
3341
  msgstr ""
3342
 
3343
+ #: tpl/dash/dashboard.tpl.php:45
3344
  msgid "Sync data from Cloud"
3345
  msgstr ""
3346
 
3347
+ #: tpl/dash/dashboard.tpl.php:56 tpl/dash/dashboard.tpl.php:405
3348
  #: tpl/toolbox/purge.tpl.php:70
3349
  msgid "Critical CSS"
3350
  msgstr ""
3351
 
3352
+ #: tpl/dash/dashboard.tpl.php:56 tpl/dash/dashboard.tpl.php:437
3353
  msgid "Unique CSS"
3354
  msgstr ""
3355
 
3356
+ #: tpl/dash/dashboard.tpl.php:57 tpl/dash/network_dash.tpl.php:29
3357
  msgid "CDN Bandwidth"
3358
  msgstr ""
3359
 
3360
+ #: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:469
3361
  msgid "Low Quality Image Placeholder"
3362
  msgstr ""
3363
 
3364
+ #: tpl/dash/dashboard.tpl.php:113 tpl/dash/network_dash.tpl.php:78
3365
  msgid "Fast Queue Usage"
3366
  msgstr ""
3367
 
3368
+ #: tpl/dash/dashboard.tpl.php:113 tpl/dash/network_dash.tpl.php:78
3369
  msgid "Usage"
3370
  msgstr ""
3371
 
3372
+ #: tpl/dash/dashboard.tpl.php:125 tpl/dash/network_dash.tpl.php:90
3373
  msgid "PAYG Balance"
3374
  msgstr ""
3375
 
3376
+ #: tpl/dash/dashboard.tpl.php:126 tpl/dash/network_dash.tpl.php:91
3377
  msgid "This Month Usage"
3378
  msgstr ""
3379
 
3380
+ #: tpl/dash/dashboard.tpl.php:128 tpl/dash/network_dash.tpl.php:93
3381
  msgid "Pay as You Go Usage Statistics"
3382
  msgstr ""
3383
 
3384
+ #: tpl/dash/dashboard.tpl.php:135 tpl/dash/network_dash.tpl.php:100
3385
  msgid "Total Usage"
3386
  msgstr ""
3387
 
3388
+ #: tpl/dash/dashboard.tpl.php:136 tpl/dash/network_dash.tpl.php:101
3389
  msgid "Total images optimized in this month"
3390
  msgstr ""
3391
 
3392
+ #: tpl/dash/dashboard.tpl.php:147
3393
  msgid "Go to QUIC.cloud dashboard"
3394
  msgstr ""
3395
 
3396
+ #: tpl/dash/dashboard.tpl.php:159
3397
  msgid "Refresh page load time"
3398
  msgstr ""
3399
 
3400
+ #: tpl/dash/dashboard.tpl.php:200 tpl/dash/dashboard.tpl.php:260
3401
+ #: tpl/dash/dashboard.tpl.php:429 tpl/dash/dashboard.tpl.php:461
3402
+ #: tpl/dash/dashboard.tpl.php:492
3403
  msgid "Last requested"
3404
  msgstr ""
3405
 
3406
+ #: tpl/dash/dashboard.tpl.php:205
3407
  msgid "Current closest Cloud server is %s.&#10;Click to redetect."
3408
  msgstr ""
3409
 
3410
+ #: tpl/dash/dashboard.tpl.php:205 tpl/img_optm/summary.tpl.php:57
3411
+ #: tpl/page_optm/settings_css.tpl.php:83 tpl/page_optm/settings_css.tpl.php:182
3412
+ #: tpl/page_optm/settings_media.tpl.php:176
3413
  msgid ""
3414
  "Are you sure you want to redetect the closest cloud server for this service?"
3415
  msgstr ""
3416
 
3417
+ #: tpl/dash/dashboard.tpl.php:216
3418
  msgid "Refresh page score"
3419
  msgstr ""
3420
 
3421
+ #: tpl/dash/dashboard.tpl.php:268 tpl/img_optm/entry.tpl.php:6
3422
  msgid "Image Optimization Summary"
3423
  msgstr ""
3424
 
3425
+ #: tpl/dash/dashboard.tpl.php:278
3426
  msgid "Image Groups Prepared"
3427
  msgstr ""
3428
 
3429
+ #: tpl/dash/dashboard.tpl.php:293
3430
  msgid "Images Requested"
3431
  msgstr ""
3432
 
3433
+ #: tpl/dash/dashboard.tpl.php:325 tpl/img_optm/summary.tpl.php:342
3434
  msgid "Last Request"
3435
  msgstr ""
3436
 
3437
+ #: tpl/dash/dashboard.tpl.php:328
3438
  msgid "Last Pull"
3439
  msgstr ""
3440
 
3441
+ #: tpl/dash/dashboard.tpl.php:357
3442
  msgid "Cache Status"
3443
  msgstr ""
3444
 
3445
+ #: tpl/dash/dashboard.tpl.php:362
3446
  msgid "Public Cache"
3447
  msgstr ""
3448
 
3449
+ #: tpl/dash/dashboard.tpl.php:363
3450
  msgid "Private Cache"
3451
  msgstr ""
3452
 
3453
+ #: tpl/dash/dashboard.tpl.php:391
3454
  msgid "Cache Stats"
3455
  msgstr ""
3456
 
3457
+ #: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:442
3458
+ #: tpl/dash/dashboard.tpl.php:474 tpl/page_optm/settings_css.tpl.php:74
3459
+ #: tpl/page_optm/settings_css.tpl.php:173
3460
+ #: tpl/page_optm/settings_media.tpl.php:170
3461
  msgid "Last generated"
3462
  msgstr ""
3463
 
3464
+ #: tpl/dash/dashboard.tpl.php:413 tpl/dash/dashboard.tpl.php:445
3465
+ #: tpl/dash/dashboard.tpl.php:477
3466
  msgid "Time to execute previous request"
3467
  msgstr ""
3468
 
3469
+ #: tpl/dash/dashboard.tpl.php:418 tpl/dash/dashboard.tpl.php:450
3470
+ #: tpl/dash/dashboard.tpl.php:482
3471
  msgid "Requests in queue"
3472
  msgstr ""
3473
 
3474
+ #: tpl/dash/dashboard.tpl.php:421 tpl/dash/dashboard.tpl.php:453
3475
+ #: tpl/dash/dashboard.tpl.php:484
3476
  msgid "Force cron"
3477
  msgstr ""
3478
 
3479
+ #: tpl/dash/dashboard.tpl.php:504
3480
  msgid "Crawler(s)"
3481
  msgstr ""
3482
 
3483
+ #: tpl/dash/dashboard.tpl.php:507
3484
  msgid "Currently active crawler"
3485
  msgstr ""
3486
 
3487
+ #: tpl/dash/dashboard.tpl.php:539
3488
  msgid "Manage Crawler"
3489
  msgstr ""
3490
 
3674
  msgid "A TTL of 0 indicates do not cache."
3675
  msgstr ""
3676
 
3677
+ #: tpl/general/entry.tpl.php:7 tpl/page_optm/entry.tpl.php:12
3678
+ msgid "Tuning"
3679
+ msgstr ""
3680
+
3681
+ #: tpl/general/entry.tpl.php:20
3682
  msgid "LiteSpeed Cache General Settings"
3683
  msgstr ""
3684
 
3723
  msgid "Next available request time: <code>After %s</code>"
3724
  msgstr ""
3725
 
3726
+ #: tpl/general/settings.tpl.php:73
3727
  msgid "Visit My Dashboard on QUIC.cloud"
3728
  msgstr ""
3729
 
3730
+ #: tpl/general/settings.tpl.php:75 tpl/general/settings.tpl.php:77
3731
+ #: tpl/general/settings.tpl.php:106
3732
  msgid "Link to QUIC.cloud"
3733
  msgstr ""
3734
 
3735
+ #: tpl/general/settings.tpl.php:82 tpl/general/settings.tpl.php:93
3736
+ #: tpl/general/settings.tpl.php:105 tpl/general/settings.tpl.php:154
3737
+ #: tpl/general/settings.tpl.php:160 tpl/general/settings.tpl.php:166
3738
+ #: tpl/general/settings.tpl.php:172 tpl/general/settings.tpl.php:189
3739
  msgid "Notice"
3740
  msgstr ""
3741
 
3742
+ #: tpl/general/settings.tpl.php:83
3743
  msgid ""
3744
  "There was a problem with retrieving your Domain Key. Please click the %s "
3745
  "button to retry."
3746
  msgstr ""
3747
 
3748
+ #: tpl/general/settings.tpl.php:84
3749
  msgid ""
3750
  "There are two reasons why we might not be able to communicate with your "
3751
  "domain:"
3752
  msgstr ""
3753
 
3754
+ #: tpl/general/settings.tpl.php:85
3755
  msgid "The POST callback to %s failed."
3756
  msgstr ""
3757
 
3758
+ #: tpl/general/settings.tpl.php:86
3759
  msgid "Our %s was not whitelisted."
3760
  msgstr ""
3761
 
3762
+ #: tpl/general/settings.tpl.php:87
3763
  msgid ""
3764
  "Please verify that your other plugins are not blocking REST API calls, "
3765
  "whitelist our server IPs, or contact your server admin for assistance."
3766
  msgstr ""
3767
 
3768
+ #: tpl/general/settings.tpl.php:94
3769
  msgid ""
3770
  "Request submitted. Please wait, then refresh the page to see approval "
3771
  "notification."
3772
  msgstr ""
3773
 
3774
+ #: tpl/general/settings.tpl.php:100
3775
  msgid "Warning"
3776
  msgstr ""
3777
 
3778
+ #: tpl/general/settings.tpl.php:101
3779
  msgid "You must have %1$s first before linking to QUIC.cloud."
3780
  msgstr ""
3781
 
3782
+ #: tpl/general/settings.tpl.php:106
3783
  msgid ""
3784
  "You must click the %s button if you wish to associate this site with a QUIC."
3785
  "cloud account."
3786
  msgstr ""
3787
 
3788
+ #: tpl/general/settings.tpl.php:107
3789
  msgid "Benefits of linking to a QUIC.cloud account"
3790
  msgstr ""
3791
 
3792
+ #: tpl/general/settings.tpl.php:112
3793
  msgid "A Domain Key is required for QUIC.cloud online services."
3794
  msgstr ""
3795
 
3796
+ #: tpl/general/settings.tpl.php:115
3797
  msgid "Current Cloud Nodes in Service"
3798
  msgstr ""
3799
 
3800
+ #: tpl/general/settings.tpl.php:116
3801
  msgid "Click to clear all nodes for further redetection."
3802
  msgstr ""
3803
 
3804
+ #: tpl/general/settings.tpl.php:116
3805
  msgid "Are you sure you want to clear all cloud nodes?"
3806
  msgstr ""
3807
 
3808
+ #: tpl/general/settings.tpl.php:128
3809
  msgid "No cloud services currently in use"
3810
  msgstr ""
3811
 
3812
+ #: tpl/general/settings.tpl.php:150
3813
+ msgid "This option enables maximum optimization for Guest Mode visitors."
3814
  msgstr ""
3815
 
3816
+ #: tpl/general/settings.tpl.php:154
3817
  msgid "This option only works when turning %s on."
3818
  msgstr ""
3819
 
3820
+ #: tpl/general/settings.tpl.php:160 tpl/general/settings.tpl.php:172
3821
  msgid "You need to turn %s on to get maximum result."
3822
  msgstr ""
3823
 
3824
+ #: tpl/general/settings.tpl.php:166
3825
  msgid ""
3826
  "You need to turn %s on and finish all WebP generation to get maximum result."
3827
  msgstr ""
3828
 
3829
+ #: tpl/general/settings.tpl.php:187
3830
  msgid ""
3831
  "Enter this site's IP address to allow cloud services directly call IP "
3832
  "instead of domain name. This eliminates the overhead of DNS and CDN lookups."
3833
  msgstr ""
3834
 
3835
+ #: tpl/general/settings.tpl.php:188
3836
  msgid "Your server IP"
3837
  msgstr ""
3838
 
3839
+ #: tpl/general/settings.tpl.php:188
3840
  msgid "Check my public IP from"
3841
  msgstr ""
3842
 
3843
+ #: tpl/general/settings.tpl.php:189
3844
  msgid ""
3845
  "the auto-detected IP may not be accurate if you have an additional outgoing "
3846
  "IP set, or you have multiple IPs configured on your server."
3847
  msgstr ""
3848
 
3849
+ #: tpl/general/settings.tpl.php:190
3850
  msgid "Please make sure this IP is the correct one for visiting your site."
3851
  msgstr ""
3852
 
3853
+ #: tpl/general/settings.tpl.php:205
3854
  msgid ""
3855
  "Turn this option ON to show latest news automatically, including hotfixes, "
3856
  "new releases, available beta versions, and promotions."
3864
 
3865
  #: tpl/general/settings_inc.guest.tpl.php:13
3866
  msgid ""
3867
+ "Guest Mode provides an always cacheable landing page for an automated "
3868
+ "guest's first time visit, and then attempts to update cache varies via AJAX."
3869
  msgstr ""
3870
 
3871
  #: tpl/general/settings_inc.guest.tpl.php:14
3872
  msgid ""
3873
  "This option can help to correct the cache vary for certain advanced mobile "
3874
+ "or tablet visitors."
3875
+ msgstr ""
3876
+
3877
+ #: tpl/general/settings_inc.guest.tpl.php:29
3878
+ msgid "Your %1s quota on %2s will still be in use."
3879
+ msgstr ""
3880
+
3881
+ #: tpl/general/settings_tuning.tpl.php:7
3882
+ #: tpl/page_optm/settings_tuning.tpl.php:18
3883
+ msgid "Tuning Settings"
3884
+ msgstr ""
3885
+
3886
+ #: tpl/general/settings_tuning.tpl.php:20
3887
+ msgid "Listed User Agents will be considered as Guest Mode visitors."
3888
+ msgstr ""
3889
+
3890
+ #: tpl/general/settings_tuning.tpl.php:34
3891
+ msgid "Listed IPs will be considered as Guest Mode visitors."
3892
  msgstr ""
3893
 
3894
  #: tpl/img_optm/entry.tpl.php:7 tpl/img_optm/entry.tpl.php:13
3971
  msgid "The image compression quality setting of WordPress out of 100."
3972
  msgstr ""
3973
 
3974
+ #: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:83
3975
+ #: tpl/page_optm/settings_css.tpl.php:182
3976
+ #: tpl/page_optm/settings_media.tpl.php:176
3977
  msgid "Current closest Cloud server is %s.&#10; Click to redetect."
3978
  msgstr ""
3979
 
4311
  "dismissed. (<a %3$s>Learn More</a>)"
4312
  msgstr ""
4313
 
4314
+ #: tpl/page_optm/entry.tpl.php:6 tpl/page_optm/settings_css.tpl.php:16
4315
  msgid "CSS Settings"
4316
  msgstr ""
4317
 
4319
  msgid "JS Settings"
4320
  msgstr ""
4321
 
4322
+ #: tpl/page_optm/entry.tpl.php:8 tpl/page_optm/settings_html.tpl.php:7
4323
  msgid "HTML Settings"
4324
  msgstr ""
4325
 
4326
+ #: tpl/page_optm/entry.tpl.php:9 tpl/page_optm/settings_media.tpl.php:14
4327
  msgid "Media Settings"
4328
  msgstr ""
4329
 
4335
  msgid "Localization"
4336
  msgstr ""
4337
 
 
 
 
 
4338
  #: tpl/page_optm/entry.tpl.php:19
4339
  msgid "LiteSpeed Cache Page Optimization"
4340
  msgstr ""
4345
  "Minify/Combine settings, please do a Purge All action."
4346
  msgstr ""
4347
 
4348
+ #: tpl/page_optm/settings_css.tpl.php:30
4349
  msgid "Minify CSS files and inline CSS code."
4350
  msgstr ""
4351
 
4352
+ #: tpl/page_optm/settings_css.tpl.php:43
4353
  msgid "Combine CSS files and inline CSS code."
4354
  msgstr ""
4355
 
4356
+ #: tpl/page_optm/settings_css.tpl.php:44 tpl/page_optm/settings_js.tpl.php:35
4357
  msgid "How to Fix Problems Caused by CSS/JS Optimization."
4358
  msgstr ""
4359
 
4360
+ #: tpl/page_optm/settings_css.tpl.php:64
4361
  msgid "Use QUIC.cloud online service to generate unique CSS."
4362
  msgstr ""
4363
 
4364
+ #: tpl/page_optm/settings_css.tpl.php:65
4365
  msgid "This will drop the unused CSS on each page from the combined file."
4366
  msgstr ""
4367
 
4368
+ #: tpl/page_optm/settings_css.tpl.php:67
4369
+ msgid ""
4370
+ "Automatic generation of unused CSS is in the background via a cron-based "
4371
+ "queue."
4372
+ msgstr ""
4373
+
4374
+ #: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:176
4375
  msgid "Last requested cost"
4376
  msgstr ""
4377
 
4378
+ #: tpl/page_optm/settings_css.tpl.php:89 tpl/page_optm/settings_css.tpl.php:188
4379
+ msgid "URL list in %s queue waiting for cron"
4380
  msgstr ""
4381
 
4382
+ #: tpl/page_optm/settings_css.tpl.php:108
4383
+ #: tpl/page_optm/settings_css.tpl.php:207
4384
+ msgid "Run %s Queue Manually"
 
 
4385
  msgstr ""
4386
 
4387
+ #: tpl/page_optm/settings_css.tpl.php:124
4388
  msgid ""
4389
  "Include external CSS and inline CSS in combined file when %1$s is also "
4390
  "enabled. This option helps maintain the priorities of CSS, which should "
4391
  "minimize potential errors caused by CSS Combine."
4392
  msgstr ""
4393
 
4394
+ #: tpl/page_optm/settings_css.tpl.php:137
4395
  msgid ""
4396
  "Pre-send internal CSS files to the browser before they are requested. "
4397
  "(Requires the HTTP/2 protocol)"
4398
  msgstr ""
4399
 
4400
+ #: tpl/page_optm/settings_css.tpl.php:156
4401
  msgid "Optimize CSS delivery."
4402
  msgstr ""
4403
 
4404
+ #: tpl/page_optm/settings_css.tpl.php:157
4405
+ #: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:80
4406
+ #: tpl/page_optm/settings_media.tpl.php:243
4407
  msgid ""
4408
  "This can improve your speed score in services like Pingdom, GTmetrix and "
4409
  "PageSpeed."
4410
  msgstr ""
4411
 
4412
+ #: tpl/page_optm/settings_css.tpl.php:158
4413
  msgid ""
4414
+ "Use QUIC.cloud online service to generate critical CSS and load remaining "
4415
+ "CSS asynchronously."
4416
  msgstr ""
4417
 
4418
+ #: tpl/page_optm/settings_css.tpl.php:160
4419
  msgid ""
4420
+ "Automatic generation of critical CSS is in the background via a cron-based "
4421
+ "queue."
4422
  msgstr ""
4423
 
4424
+ #: tpl/page_optm/settings_css.tpl.php:161
4425
  msgid ""
4426
+ "When this option is turned %s, it will also load Google Fonts asynchronously."
 
4427
  msgstr ""
4428
 
4429
+ #: tpl/page_optm/settings_css.tpl.php:164
4430
+ msgid "Elements with attribute %s in HTML code will be excluded."
 
 
 
 
4431
  msgstr ""
4432
 
4433
+ #: tpl/page_optm/settings_css.tpl.php:222
4434
  msgid ""
4435
  "Disable this option to generate CCSS per Post Type instead of per page. This "
4436
  "can save significant CCSS quota, however it may result in incorrect CSS "
4437
  "styling if your site uses a page builder."
4438
  msgstr ""
4439
 
4440
+ #: tpl/page_optm/settings_css.tpl.php:235
4441
  msgid "This will inline the asynchronous CSS library to avoid render blocking."
4442
  msgstr ""
4443
 
4444
+ #: tpl/page_optm/settings_css.tpl.php:246
4445
  msgid "Default"
4446
  msgstr ""
4447
 
4448
+ #: tpl/page_optm/settings_css.tpl.php:248
4449
  msgid ""
4450
  "Set this to append %1$s to all %2$s rules before caching CSS to specify how "
4451
  "fonts should be displayed while being downloaded."
4452
  msgstr ""
4453
 
4454
+ #: tpl/page_optm/settings_css.tpl.php:249
4455
  msgid "%s is recommended."
4456
  msgstr ""
4457
 
4458
+ #: tpl/page_optm/settings_css.tpl.php:249
4459
  msgid "Swap"
4460
  msgstr ""
4461
 
 
 
 
 
4462
  #: tpl/page_optm/settings_html.tpl.php:20
4463
  msgid "Minify HTML content."
4464
  msgstr ""
4505
 
4506
  #: tpl/page_optm/settings_html.tpl.php:101
4507
  msgid ""
4508
+ "This will also add a preconnect to Google Fonts to establish a connection "
4509
+ "earlier."
4510
  msgstr ""
4511
 
4512
  #: tpl/page_optm/settings_html.tpl.php:115
4531
  msgid "Combine all local JS files into a single file."
4532
  msgstr ""
4533
 
4534
+ #: tpl/page_optm/settings_js.tpl.php:37 tpl/page_optm/settings_js.tpl.php:83
4535
  msgid ""
4536
  "This option may result in JS error or layout issue on frontend pages on "
4537
  "certain themes/plugins."
4565
  msgstr ""
4566
 
4567
  #: tpl/page_optm/settings_js.tpl.php:78
4568
+ msgid ""
4569
+ "Doing so can help reduce resource contention and improve performance causing "
4570
+ "a lower FID (Core Web Vitals metric)."
4571
  msgstr ""
4572
 
4573
  #: tpl/page_optm/settings_localization.tpl.php:12
4597
  msgid "Avatar list in queue waiting for update"
4598
  msgstr ""
4599
 
4600
+ #: tpl/page_optm/settings_localization.tpl.php:62
4601
+ #: tpl/page_optm/settings_media.tpl.php:198
4602
+ msgid "Run Queue Manually"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4603
  msgstr ""
4604
 
4605
+ #: tpl/page_optm/settings_localization.tpl.php:79
4606
+ msgid "Specify how long, in seconds, Gravatar files are cached."
 
4607
  msgstr ""
4608
 
4609
+ #: tpl/page_optm/settings_media.tpl.php:27
4610
  msgid "Load images only when they enter the viewport."
4611
  msgstr ""
4612
 
4613
+ #: tpl/page_optm/settings_media.tpl.php:28
4614
+ #: tpl/page_optm/settings_media.tpl.php:214
4615
  msgid "This can improve page loading time by reducing initial HTTP requests."
4616
  msgstr ""
4617
 
4618
+ #: tpl/page_optm/settings_media.tpl.php:31
4619
  msgid "Adding Style to Your Lazy-Loaded Images"
4620
  msgstr ""
4621
 
4622
+ #: tpl/page_optm/settings_media.tpl.php:45
4623
  msgid ""
4624
  "Specify a base64 image to be used as a simple placeholder while images "
4625
  "finish loading."
4626
  msgstr ""
4627
 
4628
+ #: tpl/page_optm/settings_media.tpl.php:46
4629
  msgid ""
4630
  "This can be predefined in %2$s as well using constant %1$s, with this "
4631
  "setting taking priority."
4632
  msgstr ""
4633
 
4634
+ #: tpl/page_optm/settings_media.tpl.php:47
4635
  msgid "By default a gray image placeholder %s will be used."
4636
  msgstr ""
4637
 
4638
+ #: tpl/page_optm/settings_media.tpl.php:48
4639
  msgid "For example, %s can be used for a transparent placeholder."
4640
  msgstr ""
4641
 
4642
+ #: tpl/page_optm/settings_media.tpl.php:61
4643
  msgid ""
4644
  "Responsive image placeholders can help to reduce layout reshuffle when "
4645
  "images are loaded."
4646
  msgstr ""
4647
 
4648
+ #: tpl/page_optm/settings_media.tpl.php:62
4649
  msgid ""
4650
  "This will generate the placeholder with same dimensions as the image if it "
4651
  "has the width and height attributes."
4652
  msgstr ""
4653
 
4654
+ #: tpl/page_optm/settings_media.tpl.php:75
4655
  msgid "Specify an SVG to be used as a placeholder when generating locally."
4656
  msgstr ""
4657
 
4658
+ #: tpl/page_optm/settings_media.tpl.php:76
4659
  msgid "It will be converted to a base64 SVG placeholder on-the-fly."
4660
  msgstr ""
4661
 
4662
+ #: tpl/page_optm/settings_media.tpl.php:77
4663
  msgid "Variables %s will be replaced with the corresponding image properties."
4664
  msgstr ""
4665
 
4666
+ #: tpl/page_optm/settings_media.tpl.php:78
4667
  msgid "Variables %s will be replaced with the configured background color."
4668
  msgstr ""
4669
 
4670
+ #: tpl/page_optm/settings_media.tpl.php:92
4671
  msgid "Specify the responsive placeholder SVG color."
4672
  msgstr ""
4673
 
4674
+ #: tpl/page_optm/settings_media.tpl.php:106
4675
  msgid ""
4676
  "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for "
4677
  "responsive image previews while loading."
4678
  msgstr ""
4679
 
4680
+ #: tpl/page_optm/settings_media.tpl.php:107
4681
  msgid "Keep this off to use plain color placeholders."
4682
  msgstr ""
4683
 
4684
+ #: tpl/page_optm/settings_media.tpl.php:121
4685
  msgid "Specify the quality when generating LQIP."
4686
  msgstr ""
4687
 
4688
+ #: tpl/page_optm/settings_media.tpl.php:122
4689
  msgid ""
4690
  "Larger number will generate higher resolution quality placeholder, but will "
4691
  "result in larger files which will increase page size and consume more points."
4692
  msgstr ""
4693
 
4694
+ #: tpl/page_optm/settings_media.tpl.php:125
4695
  msgid ""
4696
  "Changes to this setting do not apply to already-generated LQIPs. To "
4697
  "regenerate existing LQIPs, please %s first from the admin bar menu."
4698
  msgstr ""
4699
 
4700
+ #: tpl/page_optm/settings_media.tpl.php:138
4701
  msgid "pixels"
4702
  msgstr ""
4703
 
4704
+ #: tpl/page_optm/settings_media.tpl.php:140
4705
  msgid ""
4706
  "LQIP requests will not be sent for images where both width and height are "
4707
  "smaller than these dimensions."
4708
  msgstr ""
4709
 
4710
+ #: tpl/page_optm/settings_media.tpl.php:156
4711
  msgid "Automatically generate LQIP in the background via a cron-based queue."
4712
  msgstr ""
4713
 
4714
+ #: tpl/page_optm/settings_media.tpl.php:158
4715
  msgid ""
4716
  "If set to %1$s, before the placeholder is localized, the %2$s configuration "
4717
  "will be used."
4718
  msgstr ""
4719
 
4720
+ #: tpl/page_optm/settings_media.tpl.php:162
4721
  msgid ""
4722
  "If set to %s this is done in the foreground, which may slow down page load."
4723
  msgstr ""
4724
 
4725
+ #: tpl/page_optm/settings_media.tpl.php:182
4726
  msgid "Size list in queue waiting for cron"
4727
  msgstr ""
4728
 
4729
+ #: tpl/page_optm/settings_media.tpl.php:213
4730
  msgid "Load iframes only when they enter the viewport."
4731
  msgstr ""
4732
 
4733
+ #: tpl/page_optm/settings_media.tpl.php:227
4734
  msgid ""
4735
  "Set an explicit width and height on image elements to reduce layout shifts "
4736
+ "and improve CLS (a Core Web Vitals metric)."
4737
  msgstr ""
4738
 
4739
+ #: tpl/page_optm/settings_media.tpl.php:229
4740
  msgid "Note: this option only works when %1$s is %2$s."
4741
  msgstr ""
4742
 
4743
+ #: tpl/page_optm/settings_media.tpl.php:242
4744
  msgid "Include the lazy load image JavaScript library inline."
4745
  msgstr ""
4746
 
4748
  msgid "Listed images will not be lazy loaded."
4749
  msgstr ""
4750
 
4751
+ #: tpl/page_optm/settings_media_exc.tpl.php:27
4752
+ #: tpl/page_optm/settings_tuning.tpl.php:37
4753
+ #: tpl/page_optm/settings_tuning.tpl.php:58
4754
+ #: tpl/page_optm/settings_tuning.tpl.php:138
4755
+ #: tpl/page_optm/settings_tuning.tpl.php:159
4756
+ msgid "Elements with attribute %s in html code will be excluded."
4757
+ msgstr ""
4758
+
4759
  #: tpl/page_optm/settings_media_exc.tpl.php:49
4760
  msgid "Images containing these class names will not be lazy loaded."
4761
  msgstr ""
4780
  msgid "These images will not generate LQIP."
4781
  msgstr ""
4782
 
 
 
 
 
4783
  #: tpl/page_optm/settings_tuning.tpl.php:31
4784
  msgid "Listed CSS files or inline CSS code will not be minified/combined."
4785
  msgstr ""
4786
 
4787
  #: tpl/page_optm/settings_tuning.tpl.php:38
4788
  #: tpl/page_optm/settings_tuning.tpl.php:59
4789
+ #: tpl/page_optm/settings_tuning.tpl.php:76
4790
+ #: tpl/page_optm/settings_tuning.tpl.php:139
4791
  msgid "Predefined list will also be combined w/ the above settings"
4792
  msgstr ""
4793
 
4800
  "List the CSS selector that its style should be always contained in UCSS."
4801
  msgstr ""
4802
 
4803
+ #: tpl/page_optm/settings_tuning.tpl.php:74
4804
+ msgid "Wildcard %s supported."
4805
+ msgstr ""
4806
+
4807
+ #: tpl/page_optm/settings_tuning.tpl.php:90
4808
+ msgid ""
4809
+ "List post types where each item of that type should have its own CCSS "
4810
+ "generated."
4811
+ msgstr ""
4812
+
4813
+ #: tpl/page_optm/settings_tuning.tpl.php:91
4814
+ msgid ""
4815
+ "For example, if every Page on the site has different formatting, enter %s in "
4816
+ "the box. Separate critical CSS files will be stored for every Page on the "
4817
+ "site."
4818
+ msgstr ""
4819
+
4820
+ #: tpl/page_optm/settings_tuning.tpl.php:105
4821
+ msgid ""
4822
+ "Separate critical CSS files will be generated for paths containing these "
4823
+ "strings."
4824
+ msgstr ""
4825
+
4826
+ #: tpl/page_optm/settings_tuning.tpl.php:119
4827
  msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
4828
  msgstr ""
4829
 
4830
+ #: tpl/page_optm/settings_tuning.tpl.php:132
4831
  msgid "Listed JS files or inline JS code will not be deferred."
4832
  msgstr ""
4833
 
4834
+ #: tpl/page_optm/settings_tuning.tpl.php:153
4835
+ msgid "Listed JS files or inline JS code will not be optimized by %s."
4836
+ msgstr ""
4837
+
4838
+ #: tpl/page_optm/settings_tuning.tpl.php:173
4839
  msgid "Prevent any optimization of listed pages."
4840
  msgstr ""
4841
 
4842
+ #: tpl/page_optm/settings_tuning.tpl.php:187
4843
  msgid ""
4844
+ "Only optimize pages for guest (not logged in) visitors. If turned this OFF, "
4845
+ "CSS/JS/CCSS files will be doubled by each user group."
4846
  msgstr ""
4847
 
4848
+ #: tpl/page_optm/settings_tuning.tpl.php:199
4849
  msgid "Selected roles will be excluded from all optimizations."
4850
  msgstr ""
4851
 
4852
+ #: tpl/toolbox/beta_test.tpl.php:21
4853
  msgid "Try GitHub Version"
4854
  msgstr ""
4855
 
4856
+ #: tpl/toolbox/beta_test.tpl.php:25
4857
  msgid ""
4858
  "Use this section to switch plugin versions. To beta test a GitHub commit, "
4859
  "enter the commit URL in the field below."
4860
  msgstr ""
4861
 
4862
+ #: tpl/toolbox/beta_test.tpl.php:26
4863
+ msgid "Example"
4864
+ msgstr ""
4865
+
4866
+ #: tpl/toolbox/beta_test.tpl.php:30
4867
  msgid "Use latest GitHub Dev commit"
4868
  msgstr ""
4869
 
4870
+ #: tpl/toolbox/beta_test.tpl.php:32
4871
  msgid "Use latest GitHub Master commit"
4872
  msgstr ""
4873
 
4874
+ #: tpl/toolbox/beta_test.tpl.php:34 tpl/toolbox/beta_test.tpl.php:45
4875
  msgid "Use latest WordPress release version"
4876
  msgstr ""
4877
 
4878
+ #: tpl/toolbox/beta_test.tpl.php:34
4879
  msgid "OR"
4880
  msgstr ""
4881
 
4882
+ #: tpl/toolbox/beta_test.tpl.php:44
4883
  msgid ""
4884
  "Press the %s button to use the most recent GitHub commit. Master is for "
4885
  "release candidate & Dev is for experimental testing."
4886
  msgstr ""
4887
 
4888
+ #: tpl/toolbox/beta_test.tpl.php:44
4889
  msgid "Use latest GitHub Dev/Master commit"
4890
  msgstr ""
4891
 
4892
+ #: tpl/toolbox/beta_test.tpl.php:45
4893
  msgid ""
4894
  "Press the %s button to stop beta testing and go back to the current release "
4895
  "from the WordPress Plugin Directory."
4896
  msgstr ""
4897
 
4898
+ #: tpl/toolbox/beta_test.tpl.php:48
4899
  msgid ""
4900
  "In order to avoid an upgrade error, you must be using %1$s or later before "
4901
  "you can upgrade to %2$s versions."
5128
  msgstr ""
5129
 
5130
  #: tpl/toolbox/purge.tpl.php:80
 
 
 
 
5131
  msgid "This will delete all generated image LQIP placeholder files"
5132
  msgstr ""
5133
 
5134
+ #: tpl/toolbox/purge.tpl.php:89
5135
  msgid "This will delete all cached Gravatar files"
5136
  msgstr ""
5137
 
5138
+ #: tpl/toolbox/purge.tpl.php:98
5139
  msgid ""
5140
  "Purge the cache entries created by this plugin except for Critical CSS & "
5141
  "LQIP caches"
5142
  msgstr ""
5143
 
5144
+ #: tpl/toolbox/purge.tpl.php:107
5145
  msgid "Empty Entire Cache"
5146
  msgstr ""
5147
 
5148
+ #: tpl/toolbox/purge.tpl.php:108
5149
  msgid ""
5150
  "Clears all cache entries related to this site, <i>including other web "
5151
  "applications</i>."
5152
  msgstr ""
5153
 
5154
+ #: tpl/toolbox/purge.tpl.php:109
5155
  msgid "This action should only be used if things are cached incorrectly."
5156
  msgstr ""
5157
 
5158
+ #: tpl/toolbox/purge.tpl.php:113
5159
  msgid "This will clear EVERYTHING inside the cache."
5160
  msgstr ""
5161
 
5162
+ #: tpl/toolbox/purge.tpl.php:114
5163
  msgid "This may cause heavy load on the server."
5164
  msgstr ""
5165
 
5166
+ #: tpl/toolbox/purge.tpl.php:115
5167
  msgid "If only the WordPress site should be purged, use Purge All."
5168
  msgstr ""
5169
 
5170
+ #: tpl/toolbox/purge.tpl.php:159
5171
  msgid "Purge By..."
5172
  msgstr ""
5173
 
5174
+ #: tpl/toolbox/purge.tpl.php:161
5175
  msgid "Select below for \"Purge by\" options."
5176
  msgstr ""
5177
 
5178
+ #: tpl/toolbox/purge.tpl.php:188
5179
  msgid "Category"
5180
  msgstr ""
5181
 
5182
+ #: tpl/toolbox/purge.tpl.php:194
5183
  msgid "Post ID"
5184
  msgstr ""
5185
 
5186
+ #: tpl/toolbox/purge.tpl.php:200
5187
  msgid "Tag"
5188
  msgstr ""
5189
 
5190
+ #: tpl/toolbox/purge.tpl.php:212
5191
  msgid ""
5192
  "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
5193
  msgstr ""
5194
 
5195
+ #: tpl/toolbox/purge.tpl.php:217
5196
  msgid "Purge pages by post ID."
5197
  msgstr ""
5198
 
5199
+ #: tpl/toolbox/purge.tpl.php:221
5200
  msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
5201
  msgstr ""
5202
 
5203
+ #: tpl/toolbox/purge.tpl.php:226
5204
  msgid "Purge pages by relative or full URL."
5205
  msgstr ""
5206
 
5207
+ #: tpl/toolbox/purge.tpl.php:227
5208
  msgid "e.g. Use %s or %s."
5209
  msgstr ""
5210
 
5211
+ #: tpl/toolbox/purge.tpl.php:240
5212
  msgid "Purge List"
5213
  msgstr ""
5214
 
lib/guest.cls.php ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace LiteSpeed\Lib;
3
+
4
+ /**
5
+ * Update guest vary
6
+ *
7
+ * @since 4.1
8
+ */
9
+ class Guest {
10
+ const CONF_FILE = '.litespeed_conf.dat';
11
+ const HASH = 'hash'; // Not set-able
12
+ const O_CACHE_LOGIN_COOKIE = 'cache-login_cookie';
13
+ const O_DEBUG = 'debug';
14
+ const O_DEBUG_IPS = 'debug-ips';
15
+ const O_UTIL_NO_HTTPS_VARY = 'util-no_https_vary';
16
+ const O_GUEST_UAS = 'guest_uas';
17
+ const O_GUEST_IPS = 'guest_ips';
18
+
19
+ private static $_ip;
20
+ private static $_vary_name = '_lscache_vary'; // this default vary cookie is used for logged in status check
21
+ private $_conf = false;
22
+
23
+ /**
24
+ * Construtor
25
+ *
26
+ * @since 4.1
27
+ */
28
+ public function __construct() {
29
+ ! defined( 'LSCWP_CONTENT_FOLDER' ) && define( 'LSCWP_CONTENT_FOLDER', dirname( dirname( dirname( __DIR__ ) ) ) );
30
+ // Load config
31
+ $this->_conf = file_get_contents( LSCWP_CONTENT_FOLDER . '/' . self::CONF_FILE );
32
+ if ( $this->_conf ) {
33
+ $this->_conf = json_decode( $this->_conf, true );
34
+ }
35
+
36
+ if ( ! empty( $this->_conf[ self::O_CACHE_LOGIN_COOKIE ] ) ) {
37
+ self::$_vary_name = $this->_conf[ self::O_CACHE_LOGIN_COOKIE ];
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Update Guest vary
43
+ *
44
+ * @since 4.0
45
+ */
46
+ public function update_guest_vary() {
47
+ // This process must not be cached
48
+ header( 'X-LiteSpeed-Cache-Control: no-cache' );
49
+
50
+ if ( $this->always_guest() ) {
51
+ echo '[]';
52
+ exit;
53
+ }
54
+
55
+ // If contains vary already, don't reload to avoid infinite loop when parent page having browser cache
56
+ if ( $this->_conf && self::has_vary() ) {
57
+ echo '[]';
58
+ exit;
59
+ }
60
+
61
+ // Send vary cookie
62
+ $vary = 'guest_mode:1';
63
+ if ( $this->_conf && empty( $this->_conf[ self::O_DEBUG ] ) ) {
64
+ $vary = md5( $this->_conf[ self::HASH ] . $vary );
65
+ }
66
+
67
+ $expire = time() + 2 * 86400;
68
+ $is_ssl = ! empty( $this->_conf[ self::O_UTIL_NO_HTTPS_VARY ] ) ? false : $this->is_ssl();
69
+ setcookie( self::$_vary_name, $vary, $expire, '/', false, $is_ssl, true );
70
+
71
+ // return json
72
+ echo json_encode( array( 'reload' => 'yes' ) );
73
+ exit;
74
+ }
75
+
76
+ /**
77
+ * WP's is_ssl() func
78
+ *
79
+ * @since 4.1
80
+ */
81
+ private function is_ssl() {
82
+ if ( isset( $_SERVER['HTTPS'] ) ) {
83
+ if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) {
84
+ return true;
85
+ }
86
+
87
+ if ( '1' == $_SERVER['HTTPS'] ) {
88
+ return true;
89
+ }
90
+ } elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+
96
+ /**
97
+ * Check if default vary has a value
98
+ *
99
+ * @since 1.1.3
100
+ * @access public
101
+ */
102
+ public static function has_vary() {
103
+ if ( empty( $_COOKIE[ self::$_vary_name ] ) ) {
104
+ return false;
105
+ }
106
+ return $_COOKIE[ self::$_vary_name ];
107
+ }
108
+
109
+ /**
110
+ * Detect if is a guest visitor or not
111
+ *
112
+ * @since 4.0
113
+ */
114
+ public function always_guest() {
115
+ if ( empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ) {
116
+ return false;
117
+ }
118
+
119
+ $quoted_uas = array();
120
+ foreach ( $this->_conf[ self::O_GUEST_UAS ] as $v ) {
121
+ $quoted_uas[] = preg_quote( $v, '#' );
122
+ }
123
+ $match = preg_match( '#' . implode( '|', $quoted_uas ) . '#i', $_SERVER[ 'HTTP_USER_AGENT' ] );
124
+ if ( $match ) {
125
+ return true;
126
+ }
127
+
128
+ if ( $this->ip_access( $this->_conf[ self::O_GUEST_IPS ] ) ) {
129
+ return true;
130
+ }
131
+
132
+ return false;
133
+ }
134
+
135
+ /**
136
+ * Check if the ip is in the range
137
+ *
138
+ * @since 1.1.0
139
+ * @access public
140
+ */
141
+ public function ip_access( $ip_list ) {
142
+ if ( ! $ip_list ) {
143
+ return false;
144
+ }
145
+ if ( ! isset( self::$_ip ) ) {
146
+ self::$_ip = self::get_ip();
147
+ }
148
+ // $uip = explode('.', $_ip);
149
+ // if(empty($uip) || count($uip) != 4) Return false;
150
+ // foreach($ip_list as $key => $ip) $ip_list[$key] = explode('.', trim($ip));
151
+ // foreach($ip_list as $key => $ip) {
152
+ // if(count($ip) != 4) continue;
153
+ // for($i = 0; $i <= 3; $i++) if($ip[$i] == '*') $ip_list[$key][$i] = $uip[$i];
154
+ // }
155
+ return in_array( self::$_ip, $ip_list );
156
+ }
157
+
158
+ /**
159
+ * Get client ip
160
+ *
161
+ * @since 1.1.0
162
+ * @since 1.6.5 changed to public
163
+ * @access public
164
+ * @return string
165
+ */
166
+ public static function get_ip() {
167
+ $_ip = '';
168
+ if ( function_exists( 'apache_request_headers' ) ) {
169
+ $apache_headers = apache_request_headers();
170
+ $_ip = ! empty( $apache_headers['True-Client-IP'] ) ? $apache_headers['True-Client-IP'] : false;
171
+ if ( ! $_ip ) {
172
+ $_ip = ! empty( $apache_headers['X-Forwarded-For'] ) ? $apache_headers['X-Forwarded-For'] : false;
173
+ $_ip = explode( ',', $_ip );
174
+ $_ip = $_ip[ 0 ];
175
+ }
176
+
177
+ }
178
+
179
+ if ( ! $_ip ) {
180
+ $_ip = ! empty( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : false;
181
+ }
182
+ return $_ip;
183
+ }
184
+
185
+
186
+ }
lib/object-cache.php CHANGED
@@ -19,7 +19,7 @@ if ( ! file_exists( $lscwp_dir . 'litespeed-cache.php' ) ) {
19
  }
20
  }
21
 
22
- $data_file = WP_CONTENT_DIR . '/.object-cache.ini';
23
  $lib_file = $lscwp_dir . 'src/object.lib.php';
24
 
25
  // Can't find LSCWP location, terminate object cache process
19
  }
20
  }
21
 
22
+ $data_file = WP_CONTENT_DIR . '/.litespeed_conf.dat';
23
  $lib_file = $lscwp_dir . 'src/object.lib.php';
24
 
25
  // Can't find LSCWP location, terminate object cache process
litespeed-cache.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: LiteSpeed Cache
4
  * Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
5
  * Description: High-performance page caching and site optimization from LiteSpeed
6
- * Version: 4.0
7
  * Author: LiteSpeed Technologies
8
  * Author URI: https://www.litespeedtech.com
9
  * License: GPLv3
@@ -33,7 +33,7 @@ if ( defined( 'LSCWP_V' ) ) {
33
  return;
34
  }
35
 
36
- ! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '4.0' );
37
 
38
  ! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR ) ;
39
  ! defined( 'LSCWP_DIR' ) && define( 'LSCWP_DIR', __DIR__ . '/' ) ;// Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU
3
  * Plugin Name: LiteSpeed Cache
4
  * Plugin URI: https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
5
  * Description: High-performance page caching and site optimization from LiteSpeed
6
+ * Version: 4.1
7
  * Author: LiteSpeed Technologies
8
  * Author URI: https://www.litespeedtech.com
9
  * License: GPLv3
33
  return;
34
  }
35
 
36
+ ! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '4.1' );
37
 
38
  ! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR ) ;
39
  ! defined( 'LSCWP_DIR' ) && define( 'LSCWP_DIR', __DIR__ . '/' ) ;// Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU
readme.txt CHANGED
@@ -1,8 +1,8 @@
1
  === LiteSpeed Cache ===
2
  Contributors: LiteSpeedTech
3
- Tags: caching, optimize, performance, pagespeed, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
4
  Requires at least: 4.0
5
- Tested up to: 5.7.1
6
  Stable tag: 3.6.4
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl.html
@@ -39,7 +39,7 @@ LiteSpeed Cache for WordPress is compatible with ClassicPress.
39
  * Load CSS/JS Asynchronously
40
  * Browser Cache Support<sup>+</sup>
41
  * Database Cleaner and Optimizer
42
- * PageSpeed score optimization
43
  * OPcode Cache Support<sup>+</sup>
44
  * HTTP/2 Push for CSS/JS (on web servers that support it)
45
  * DNS Prefetch
@@ -126,11 +126,11 @@ The vast majority of plugins and themes are compatible with LSCache. [Our API](h
126
 
127
  == Privacy ==
128
 
129
- This plugin includes a Privacy blurb that you can add to your site's Privacy Policy via the WordPress Privacy settings.
130
 
131
  **For your own information:** LiteSpeed Cache for WordPress potentially stores a duplicate copy of every web page on display on your site. The pages are stored locally on the system where LiteSpeed server software is installed and are not transferred to or accessed by LiteSpeed employees in any way, except as necessary in providing routine technical support if you request it. All cache files are temporary, and may easily be purged before their natural expiration, if necessary, via a Purge All command. It is up to individual site administrators to come up with their own cache expiration rules.
132
 
133
- In addition to caching, our WordPress plugin has an Image Optimization feature. When optimization is requested, images are transmitted to a remote QUIC.cloud server, processed, and then transmitted back for use on your site. LiteSpeed keeps copies of optimized images for 7 days (in case of network stability issues) and then permanently deletes them. Similarly, the WordPress plugin has a Reporting feature whereby a site owner can transmit an environment report to our server so that we may better provide technical support. Neither of these features collects any visitor data. Only server and site data is involved.
134
 
135
  Please see the [QUIC.cloud Privacy Policy](https://quic.cloud/privacy-policy/) for our complete Privacy/GDPR statement.
136
 
@@ -246,6 +246,51 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
246
 
247
  == Changelog ==
248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  = 4.0 - Apr 30 2021 =
250
  * 🌱🌱🌱**Guest** Introduced `Guest Mode` for instantly cacheable content on the first visit.
251
  * 🌱**UCSS** Added a new service: `Unique CSS`, to drop unused CSS from elements from combined CSS
1
  === LiteSpeed Cache ===
2
  Contributors: LiteSpeedTech
3
+ Tags: caching, optimize, performance, pagespeed, core web vitals, seo, speed, image optimize, compress, object cache, redis, memcached, database cleaner
4
  Requires at least: 4.0
5
+ Tested up to: 5.7.2
6
  Stable tag: 3.6.4
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl.html
39
  * Load CSS/JS Asynchronously
40
  * Browser Cache Support<sup>+</sup>
41
  * Database Cleaner and Optimizer
42
+ * PageSpeed score (including Core Web Vitals) optimization
43
  * OPcode Cache Support<sup>+</sup>
44
  * HTTP/2 Push for CSS/JS (on web servers that support it)
45
  * DNS Prefetch
126
 
127
  == Privacy ==
128
 
129
+ This plugin includes some suggested text that you can add to your site's Privacy Policy via the Guide in the WordPress Privacy settings.
130
 
131
  **For your own information:** LiteSpeed Cache for WordPress potentially stores a duplicate copy of every web page on display on your site. The pages are stored locally on the system where LiteSpeed server software is installed and are not transferred to or accessed by LiteSpeed employees in any way, except as necessary in providing routine technical support if you request it. All cache files are temporary, and may easily be purged before their natural expiration, if necessary, via a Purge All command. It is up to individual site administrators to come up with their own cache expiration rules.
132
 
133
+ In addition to caching, our WordPress plugin has online features provided by QUIC.cloud for Image Optimization, CSS Optimization and Low Quality Image Placeholder services. When one of those optimizations are requested, data is transmitted to a remote QUIC.cloud server, processed, and then transmitted back for use on your site. Now if using the QUIC.cloud CDN it uses LSCache technologies to access your site then host your site to others globally and also your data is not transferred to or accessed by QUIC.cloud employees in any way, except as necessary in providing maintenance or technical support. QUIC.cloud keeps copies of that data for up to 7 days and then permanently deletes them. Similarly, the WordPress plugin has a Reporting feature whereby a site owner can transmit an environment report to LiteSpeed so that we may better provide technical support. None of these features collects any visitor data. Only server and site data are involved.
134
 
135
  Please see the [QUIC.cloud Privacy Policy](https://quic.cloud/privacy-policy/) for our complete Privacy/GDPR statement.
136
 
246
 
247
  == Changelog ==
248
 
249
+ = 4.1 - Jun 25 2021 =
250
+ * 🌱**UCSS/CCSS/LQIP** Moved queue storage to file system from database wp-options table to lessen the IO load. (#633504)
251
+ * 🌱**3rd** Added an option to disable ESI for the WooCommerce Cart. (#358 @Anna Feng @Astrid Wang)
252
+ * **ESI** Fixed an ESI nonce issue introduced in v4.0. (@Andrew Choi)
253
+ * **Object** Used new `.litespeed_conf.dat` instead of `.object-cache.ini` for object cache configuration storage.
254
+ * **Conf** Now updating related files after plugin upgrade and not just after activation.
255
+ * 🌱**Guest** Added a Guest Mode JS Excludes option. (@Ankit @Mamac @Rcverma)
256
+ * **Guest** Guest Mode now uses a lightweight script to update guest vary for reduced server load.
257
+ * **Guest** Guest Mode now adds missing image dimensions.
258
+ * **Guest** Guest vary will no longer update if there's already a vary in place to address the infinite loop caused by CloudFlare's incorrect cache control setting for PHP.
259
+ * **Guest** Guest vary update request will no longer be sent if `lscache_vary` is already set.
260
+ * **Guest** Added a Configurable Guest Mode UA/IP under the Tuning tab in the General menu.
261
+ * **Guest** Guest Mode now allows cron to be hooked, even when UCSS/CCSS options are off. (#338437 @Stars)
262
+ * **Guest** Simplified the vary generation process under Guest Mode.
263
+ * **Guest** Added a Guest Mode HTML comment for easier debugging. (@Ruikai)
264
+ * **Guest** Guest vary update ajax now bypasses potential POST cache.
265
+ * **CCSS** Added back the options `Separate CCSS Cache Post Types` and `Separate CCSS Cache URIs`. (@Joshua @Ankit)
266
+ * **CCSS** CCSS/UCSS queue is now limited to a maximum of 500 entries.
267
+ * **Control** The cache control constant `LSCACHE_NO_CACHE` will now have a higher priority than the Forced Public Cache setting.
268
+ * **Crawler** The Crawler can now crawl Guest Mode pages.
269
+ * **Crawler** Fixed a potential XSS vulnerability in the Crawler settings. (#927355)
270
+ * **Crawler** The Crawler now supports a cookie value of `_null`. (@Tobolo)
271
+ * **Media** Updated the default value for the Responsive Placeholder SVG to be transparent.
272
+ * **Media** WebP images in the background may now be served in Guest Mode.
273
+ * **Media** WebP images in CSS may now be bypassed if the requesting Guest Mode client doesnt support WebP.
274
+ * **Media** Fixed empty default image placeholder under Guest Mode.
275
+ * 🐞**Image Optimize** Changed the missing `$_POST` to `$post_data` so the database status is properly updated. (#345 @Lucas)
276
+ * **Import** Export file is now readable to allow importing of partial configurations. (@Ryan D @Joshua)
277
+ * **Page Optimize** Fixed W3 validator errors in Guest Mode. (#61393817)
278
+ * **3rd** A fatal WooCommerce error is no longer triggered by a custom theme reusing a previous LSCWP cache detection tag.
279
+ * **3rd** AMP may now bypass Guest Mode automatically.
280
+ * **Localize** Dropped the `Localize Resources` option as Guest Mode is a sufficient replacement. (Note: Due to user feedback during the development period, we have decided to reinstate this option in a future version.)
281
+ * **Cloud** Changed the WP API url.
282
+ * **Lang** Corrected a missing language folder.
283
+ * **GUI** Added a CCSS/UCSS loading page visualization. (#360 @Astrid Wang @Anna Feng)
284
+ * **GUI** Added a warning to indicate when Guest Mode CCSS/UCSS quota is in use. (#361 @Astrid Wang @Anna Feng)
285
+ * **GUI** Added a `litespeed-info` text color. (@Astrid Wang)
286
+ * **GUI** Implemented various UI/UX improvements. (@Joshua @Lisa)
287
+ * **GUI** Duplicate cloud service messages with the same content will only display once now. (@Marc Dahl)
288
+ * **GUI** Added a WebP replacement warning for Guest Mode Optimization if WebP replacement is off.
289
+ * **Misc** Dropped `wp_assets` from distribution to reduce the package size. (@lowwebtech)
290
+ * **Misc** Increased the new version and score detection intervals.
291
+ * **Misc** Optimized WP Assets images. (#352 @lowwebtech)
292
+ * **Debug** Dropped the redudant error_log debug info.
293
+
294
  = 4.0 - Apr 30 2021 =
295
  * 🌱🌱🌱**Guest** Introduced `Guest Mode` for instantly cacheable content on the first visit.
296
  * 🌱**UCSS** Added a new service: `Unique CSS`, to drop unused CSS from elements from combined CSS
src/activation.cls.php CHANGED
@@ -20,6 +20,17 @@ class Activation extends Base {
20
 
21
  const NETWORK_TRANSIENT_COUNT = 'lscwp_network_count';
22
 
 
 
 
 
 
 
 
 
 
 
 
23
  /**
24
  * The activation hook callback.
25
  *
@@ -236,6 +247,10 @@ class Activation extends Base {
236
  Admin_Display::error( $ex->getMessage() );
237
  }
238
 
 
 
 
 
239
  // delete in case it's not deleted prior to deactivation.
240
  GUI::dismiss_whm();
241
  }
@@ -250,6 +265,7 @@ class Activation extends Base {
250
  * 2) adv-cache.php;
251
  * 3) object-cache.php;
252
  * 4) .htaccess;
 
253
  *
254
  * @since 3.0
255
  * @access public
@@ -290,6 +306,74 @@ class Activation extends Base {
290
  } catch ( \Exception $ex ) {
291
  Admin_Display::error( $ex->getMessage() );
292
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  }
294
 
295
  /**
20
 
21
  const NETWORK_TRANSIENT_COUNT = 'lscwp_network_count';
22
 
23
+ private static $_data_file;
24
+
25
+ /**
26
+ * Construct
27
+ *
28
+ * @since 4.1
29
+ */
30
+ public function __construct() {
31
+ self::$_data_file = LSCWP_CONTENT_DIR . '/' . self::CONF_FILE;
32
+ }
33
+
34
  /**
35
  * The activation hook callback.
36
  *
247
  Admin_Display::error( $ex->getMessage() );
248
  }
249
 
250
+ /* 5) .litespeed_conf.dat; */
251
+
252
+ self::_del_conf_data_file();
253
+
254
  // delete in case it's not deleted prior to deactivation.
255
  GUI::dismiss_whm();
256
  }
265
  * 2) adv-cache.php;
266
  * 3) object-cache.php;
267
  * 4) .htaccess;
268
+ * 5) .litespeed_conf.dat;
269
  *
270
  * @since 3.0
271
  * @access public
306
  } catch ( \Exception $ex ) {
307
  Admin_Display::error( $ex->getMessage() );
308
  }
309
+
310
+ /* 5) .litespeed_conf.dat; */
311
+
312
+ if ( ( $options[ self::O_GUEST ] || $options[ self::O_OBJECT ] ) && ( ! $options[ self::O_DEBUG_DISABLE_ALL ] || is_multisite() ) ) {
313
+ $this->_update_conf_data_file( $options );
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Delete data conf file
319
+ *
320
+ * @since 4.1
321
+ */
322
+ private static function _del_conf_data_file() {
323
+ if ( file_exists( self::$_data_file ) ) {
324
+ unlink( self::$_data_file );
325
+ }
326
+ }
327
+
328
+ /**
329
+ * Update data conf file for guest mode & object cache
330
+ *
331
+ * @since 4.1
332
+ */
333
+ private function _update_conf_data_file( $options ) {
334
+ $ids = array();
335
+ if ( $options[ self::O_OBJECT ] ) {
336
+ $this_ids = array(
337
+ self::O_OBJECT_KIND,
338
+ self::O_OBJECT_HOST,
339
+ self::O_OBJECT_PORT,
340
+ self::O_OBJECT_LIFE,
341
+ self::O_OBJECT_USER,
342
+ self::O_OBJECT_PSWD,
343
+ self::O_OBJECT_DB_ID,
344
+ self::O_OBJECT_PERSISTENT,
345
+ self::O_OBJECT_ADMIN,
346
+ self::O_OBJECT_TRANSIENTS,
347
+ self::O_OBJECT_GLOBAL_GROUPS,
348
+ self::O_OBJECT_NON_PERSISTENT_GROUPS,
349
+ );
350
+ $ids = array_merge( $ids, $this_ids );
351
+ }
352
+
353
+ if ( $options[ self::O_GUEST ] ) {
354
+ $this_ids = array(
355
+ self::HASH,
356
+ self::O_CACHE_LOGIN_COOKIE,
357
+ self::O_DEBUG,
358
+ self::O_DEBUG_IPS,
359
+ self::O_UTIL_NO_HTTPS_VARY,
360
+ self::O_GUEST_UAS,
361
+ self::O_GUEST_IPS,
362
+ );
363
+ $ids = array_merge( $ids, $this_ids );
364
+ }
365
+
366
+ $data = array();
367
+ foreach ( $ids as $v ) {
368
+ $data[ $v ] = $options[ $v ];
369
+ }
370
+ $data = json_encode( $data );
371
+
372
+ $old_data = File::read( self::$_data_file );
373
+ if ( $old_data != $data ) {
374
+ defined( 'LSCWP_LOG' ) && Debug2::debug( '[Activation] Updating .litespeed_conf.dat' );
375
+ File::save( self::$_data_file, $data );
376
+ }
377
  }
378
 
379
  /**
src/admin-display.cls.php CHANGED
@@ -382,8 +382,8 @@ class Admin_Display extends Base {
382
  $messages = self::get_option( $msg_name, array() );
383
 
384
  if ( is_array($msg) ) {
385
- foreach ($msg as $str) {
386
- $messages[] = self::build_notice( $color, $str, $irremovable );
387
  }
388
  }
389
  else {
382
  $messages = self::get_option( $msg_name, array() );
383
 
384
  if ( is_array($msg) ) {
385
+ foreach ( $msg as $k => $str ) {
386
+ $messages[ $k ] = self::build_notice( $color, $str, $irremovable );
387
  }
388
  }
389
  else {
src/admin.cls.php CHANGED
@@ -89,7 +89,7 @@ class Admin extends Root {
89
  // Add privacy policy
90
  // @since 2.2.6
91
  if ( function_exists( 'wp_add_privacy_policy_content' ) ) {
92
- wp_add_privacy_policy_content( Core::PLUGIN_NAME, Doc::privacy_policy() );
93
  }
94
 
95
  $this->cls( 'Media' )->after_admin_init();
89
  // Add privacy policy
90
  // @since 2.2.6
91
  if ( function_exists( 'wp_add_privacy_policy_content' ) ) {
92
+ wp_add_privacy_policy_content( Core::NAME, Doc::privacy_policy() );
93
  }
94
 
95
  $this->cls( 'Media' )->after_admin_init();
src/base.cls.php CHANGED
@@ -26,6 +26,8 @@ class Base extends Root {
26
  const O_GUEST = 'guest';
27
  const O_GUEST_OPTM = 'guest_optm';
28
  const O_NEWS = 'news';
 
 
29
 
30
  ## -------------------------------------------------- ##
31
  ## -------------- Cache ----------------- ##
@@ -135,17 +137,18 @@ class Base extends Root {
135
  const O_OPTM_GGFONTS_RM = 'optm-ggfonts_rm';
136
  const O_OPTM_CSS_ASYNC = 'optm-css_async';
137
  const O_OPTM_CCSS_PER_URL = 'optm-ccss_per_url';
 
 
138
  const O_OPTM_CSS_ASYNC_INLINE = 'optm-css_async_inline';
139
  const O_OPTM_CSS_FONT_DISPLAY = 'optm-css_font_display';
140
  const O_OPTM_JS_DEFER = 'optm-js_defer';
141
- const O_OPTM_LOCALIZE = 'optm-localize';
142
- const O_OPTM_LOCALIZE_DOMAINS = 'optm-localize_domains';
143
  const O_OPTM_EMOJI_RM = 'optm-emoji_rm';
144
  const O_OPTM_NOSCRIPT_RM = 'optm-noscript_rm';
145
  const O_OPTM_GGFONTS_ASYNC = 'optm-ggfonts_async';
146
  const O_OPTM_EXC_ROLES = 'optm-exc_roles';
147
  const O_OPTM_CCSS_CON = 'optm-ccss_con';
148
  const O_OPTM_JS_DEFER_EXC = 'optm-js_defer_exc';
 
149
  const O_OPTM_DNS_PREFETCH = 'optm-dns_prefetch';
150
  const O_OPTM_DNS_PREFETCH_CTRL = 'optm-dns_prefetch_ctrl';
151
  const O_OPTM_EXC = 'optm-exc';
@@ -319,6 +322,8 @@ class Base extends Root {
319
  self::O_GUEST => false,
320
  self::O_GUEST_OPTM => false,
321
  self::O_NEWS => false,
 
 
322
 
323
  // Cache
324
  self::O_CACHE => false,
@@ -414,6 +419,8 @@ class Base extends Root {
414
  self::O_OPTM_GGFONTS_RM => false,
415
  self::O_OPTM_CSS_ASYNC => false,
416
  self::O_OPTM_CCSS_PER_URL => false,
 
 
417
  self::O_OPTM_CSS_ASYNC_INLINE => false,
418
  self::O_OPTM_CSS_FONT_DISPLAY => false,
419
  self::O_OPTM_JS_DEFER => false,
@@ -423,6 +430,7 @@ class Base extends Root {
423
  self::O_OPTM_EXC_ROLES => array(),
424
  self::O_OPTM_CCSS_CON => '',
425
  self::O_OPTM_JS_DEFER_EXC => array(),
 
426
  self::O_OPTM_DNS_PREFETCH => array(),
427
  self::O_OPTM_DNS_PREFETCH_CTRL => false,
428
  self::O_OPTM_EXC => array(),
@@ -447,8 +455,6 @@ class Base extends Root {
447
  self::O_DISCUSS_AVATAR_CACHE => false,
448
  self::O_DISCUSS_AVATAR_CRON => false,
449
  self::O_DISCUSS_AVATAR_CACHE_TTL => 0,
450
- self::O_OPTM_LOCALIZE => false,
451
- self::O_OPTM_LOCALIZE_DOMAINS => array(),
452
 
453
  // Media
454
  self::O_MEDIA_LAZY => false,
@@ -810,10 +816,10 @@ class Base extends Root {
810
  // self::O_OPTM_CSS_EXC => 'uri', // Need to comment out for inline & external CSS
811
  // self::O_OPTM_JS_EXC => 'uri',
812
  self::O_OPTM_EXC => 'relative',
 
813
  // self::O_OPTM_JS_DEFER_EXC => 'uri',
814
  self::O_OPTM_DNS_PREFETCH => 'domain',
815
  self::O_CDN_ORI => 'noprotocol', // `Original URLs`
816
- // self::O_OPTM_LOCALIZE_DOMAINS => 'noprotocol', // `Localize Resources`
817
  // self:: => '',
818
  // self:: => '',
819
  );
26
  const O_GUEST = 'guest';
27
  const O_GUEST_OPTM = 'guest_optm';
28
  const O_NEWS = 'news';
29
+ const O_GUEST_UAS = 'guest_uas';
30
+ const O_GUEST_IPS = 'guest_ips';
31
 
32
  ## -------------------------------------------------- ##
33
  ## -------------- Cache ----------------- ##
137
  const O_OPTM_GGFONTS_RM = 'optm-ggfonts_rm';
138
  const O_OPTM_CSS_ASYNC = 'optm-css_async';
139
  const O_OPTM_CCSS_PER_URL = 'optm-ccss_per_url';
140
+ const O_OPTM_CCSS_SEP_POSTTYPE = 'optm-ccss_sep_posttype';
141
+ const O_OPTM_CCSS_SEP_URI = 'optm-ccss_sep_uri';
142
  const O_OPTM_CSS_ASYNC_INLINE = 'optm-css_async_inline';
143
  const O_OPTM_CSS_FONT_DISPLAY = 'optm-css_font_display';
144
  const O_OPTM_JS_DEFER = 'optm-js_defer';
 
 
145
  const O_OPTM_EMOJI_RM = 'optm-emoji_rm';
146
  const O_OPTM_NOSCRIPT_RM = 'optm-noscript_rm';
147
  const O_OPTM_GGFONTS_ASYNC = 'optm-ggfonts_async';
148
  const O_OPTM_EXC_ROLES = 'optm-exc_roles';
149
  const O_OPTM_CCSS_CON = 'optm-ccss_con';
150
  const O_OPTM_JS_DEFER_EXC = 'optm-js_defer_exc';
151
+ const O_OPTM_GM_JS_EXC = 'optm-gm_js_exc';
152
  const O_OPTM_DNS_PREFETCH = 'optm-dns_prefetch';
153
  const O_OPTM_DNS_PREFETCH_CTRL = 'optm-dns_prefetch_ctrl';
154
  const O_OPTM_EXC = 'optm-exc';
322
  self::O_GUEST => false,
323
  self::O_GUEST_OPTM => false,
324
  self::O_NEWS => false,
325
+ self::O_GUEST_UAS => array(),
326
+ self::O_GUEST_IPS => array(),
327
 
328
  // Cache
329
  self::O_CACHE => false,
419
  self::O_OPTM_GGFONTS_RM => false,
420
  self::O_OPTM_CSS_ASYNC => false,
421
  self::O_OPTM_CCSS_PER_URL => false,
422
+ self::O_OPTM_CCSS_SEP_POSTTYPE => array(),
423
+ self::O_OPTM_CCSS_SEP_URI => array(),
424
  self::O_OPTM_CSS_ASYNC_INLINE => false,
425
  self::O_OPTM_CSS_FONT_DISPLAY => false,
426
  self::O_OPTM_JS_DEFER => false,
430
  self::O_OPTM_EXC_ROLES => array(),
431
  self::O_OPTM_CCSS_CON => '',
432
  self::O_OPTM_JS_DEFER_EXC => array(),
433
+ self::O_OPTM_GM_JS_EXC => array(),
434
  self::O_OPTM_DNS_PREFETCH => array(),
435
  self::O_OPTM_DNS_PREFETCH_CTRL => false,
436
  self::O_OPTM_EXC => array(),
455
  self::O_DISCUSS_AVATAR_CACHE => false,
456
  self::O_DISCUSS_AVATAR_CRON => false,
457
  self::O_DISCUSS_AVATAR_CACHE_TTL => 0,
 
 
458
 
459
  // Media
460
  self::O_MEDIA_LAZY => false,
816
  // self::O_OPTM_CSS_EXC => 'uri', // Need to comment out for inline & external CSS
817
  // self::O_OPTM_JS_EXC => 'uri',
818
  self::O_OPTM_EXC => 'relative',
819
+ self::O_OPTM_CCSS_SEP_URI => 'uri',
820
  // self::O_OPTM_JS_DEFER_EXC => 'uri',
821
  self::O_OPTM_DNS_PREFETCH => 'domain',
822
  self::O_CDN_ORI => 'noprotocol', // `Original URLs`
 
823
  // self:: => '',
824
  // self:: => '',
825
  );
src/cloud.cls.php CHANGED
@@ -9,6 +9,7 @@ defined( 'WPINC' ) || exit;
9
 
10
  class Cloud extends Base {
11
  const CLOUD_SERVER = 'https://api.quic.cloud';
 
12
  const CLOUD_SERVER_DASH = 'https://my.quic.cloud';
13
 
14
  const SVC_D_NODES = 'd/nodes';
@@ -32,18 +33,24 @@ class Cloud extends Base {
32
  const EXPIRATION_REQ = 300; // Seconds of min interval between two unfinished requests
33
  const EXPIRATION_TOKEN = 900; // Min intval to request a token 15m
34
 
35
- const API_NEWS = 'wp/news';
36
  const API_REPORT = 'wp/report' ;
37
- const API_VER = 'wp/ver' ;
38
- const API_BETA_TEST = 'wp/beta_test' ;
 
39
 
40
  private static $CENTER_SVC_SET = array(
41
  self::SVC_D_NODES,
42
  self::SVC_D_REGIONNODES,
43
  self::SVC_D_SYNC_CONF,
44
  self::SVC_D_USAGE,
45
- self::API_NEWS,
46
  self::API_REPORT,
 
 
 
 
 
 
47
  self::API_VER,
48
  self::API_BETA_TEST,
49
  );
@@ -309,6 +316,10 @@ class Cloud extends Base {
309
  return self::CLOUD_SERVER;
310
  }
311
 
 
 
 
 
312
  // Check if the stored server needs to be refreshed
313
  if ( ! $force ) {
314
  if ( ! empty( $this->_summary[ 'server.' . $service ] ) && ! empty( $this->_summary[ 'server_date.' . $service ] ) && $this->_summary[ 'server_date.' . $service ] > time() - 86400 * self::EXPIRATION_NODE ) {
@@ -479,7 +490,7 @@ class Cloud extends Base {
479
 
480
  if ( $service_tag !== self::API_VER ) {
481
  $msg = __( 'Cloud Error', 'litespeed-cache' ) . ': ' . sprintf( __( 'Please try after %1$s for service %2$s.', 'litespeed-cache' ), Utility::readable_time( $expired, 0, true ), '<code>' . $service_tag . '</code>' );
482
- Admin_Display::error( $msg );
483
  }
484
 
485
  return false;
9
 
10
  class Cloud extends Base {
11
  const CLOUD_SERVER = 'https://api.quic.cloud';
12
+ const CLOUD_SERVER_WP = 'https://wpapi.quic.cloud';
13
  const CLOUD_SERVER_DASH = 'https://my.quic.cloud';
14
 
15
  const SVC_D_NODES = 'd/nodes';
33
  const EXPIRATION_REQ = 300; // Seconds of min interval between two unfinished requests
34
  const EXPIRATION_TOKEN = 900; // Min intval to request a token 15m
35
 
 
36
  const API_REPORT = 'wp/report' ;
37
+ const API_NEWS = 'news';
38
+ const API_VER = 'ver';
39
+ const API_BETA_TEST = 'beta_test';
40
 
41
  private static $CENTER_SVC_SET = array(
42
  self::SVC_D_NODES,
43
  self::SVC_D_REGIONNODES,
44
  self::SVC_D_SYNC_CONF,
45
  self::SVC_D_USAGE,
46
+ // self::API_NEWS,
47
  self::API_REPORT,
48
+ // self::API_VER,
49
+ // self::API_BETA_TEST,
50
+ );
51
+
52
+ private static $WP_SVC_SET = array(
53
+ self::API_NEWS,
54
  self::API_VER,
55
  self::API_BETA_TEST,
56
  );
316
  return self::CLOUD_SERVER;
317
  }
318
 
319
+ if ( in_array( $service, self::$WP_SVC_SET ) ) {
320
+ return self::CLOUD_SERVER_WP;
321
+ }
322
+
323
  // Check if the stored server needs to be refreshed
324
  if ( ! $force ) {
325
  if ( ! empty( $this->_summary[ 'server.' . $service ] ) && ! empty( $this->_summary[ 'server_date.' . $service ] ) && $this->_summary[ 'server_date.' . $service ] > time() - 86400 * self::EXPIRATION_NODE ) {
490
 
491
  if ( $service_tag !== self::API_VER ) {
492
  $msg = __( 'Cloud Error', 'litespeed-cache' ) . ': ' . sprintf( __( 'Please try after %1$s for service %2$s.', 'litespeed-cache' ), Utility::readable_time( $expired, 0, true ), '<code>' . $service_tag . '</code>' );
493
+ Admin_Display::error( array( 'cloud_trylater' => $msg ) );
494
  }
495
 
496
  return false;
src/conf.cls.php CHANGED
@@ -127,7 +127,11 @@ class Conf extends Base {
127
  // Mark as conf loaded
128
  ! defined( 'LITESPEED_CONF_LOADED' ) && define( 'LITESPEED_CONF_LOADED', true );
129
 
130
- // Activation delayed file update
 
 
 
 
131
  if ( self::get_option( '__activation' ) ) {
132
  // Check new version @since 2.9.3
133
  Cloud::version_check( 'activate' . ( defined( 'LSCWP_REF' ) ? '_' . LSCWP_REF : '' ) );
127
  // Mark as conf loaded
128
  ! defined( 'LITESPEED_CONF_LOADED' ) && define( 'LITESPEED_CONF_LOADED', true );
129
 
130
+ /**
131
+ * Activation delayed file update
132
+ * Pros: This is to avoid file correction script changed in new versions
133
+ * Cons: Conf upgrade won't get file correction if there is new values that are used in file
134
+ */
135
  if ( self::get_option( '__activation' ) ) {
136
  // Check new version @since 2.9.3
137
  Cloud::version_check( 'activate' . ( defined( 'LSCWP_REF' ) ? '_' . LSCWP_REF : '' ) );
src/control.cls.php CHANGED
@@ -391,6 +391,11 @@ class Control extends Root {
391
  * @return bool True if is still cacheable, otherwise false.
392
  */
393
  public static function is_cacheable() {
 
 
 
 
 
394
  // Guest mode always cacheable
395
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
396
  return true;
@@ -529,8 +534,15 @@ class Control extends Root {
529
 
530
  // Guest mode directly return cacheable result
531
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
532
- $hdr .= 'public';
533
- $hdr .= ',max-age=' . $this->get_ttl();
 
 
 
 
 
 
 
534
  return $hdr;
535
  }
536
 
@@ -609,11 +621,6 @@ class Control extends Root {
609
  return;
610
  }
611
 
612
- if ( defined('LSCACHE_NO_CACHE') && LSCACHE_NO_CACHE ) {
613
- self::set_nocache('LSCACHE_NO_CACHE constant defined');
614
- return;
615
- }
616
-
617
  // Apply 3rd party filter
618
  // NOTE: Hook always needs to run asap because some 3rd party set is_mobile in this hook
619
  do_action('litespeed_control_finalize', defined( 'LSCACHE_IS_ESI' ) ? LSCACHE_IS_ESI : false ); // Pass ESI block id
391
  * @return bool True if is still cacheable, otherwise false.
392
  */
393
  public static function is_cacheable() {
394
+ if ( defined( 'LSCACHE_NO_CACHE' ) && LSCACHE_NO_CACHE ) {
395
+ Debug2::debug( '[Ctrl] LSCACHE_NO_CACHE constant defined' );
396
+ return false;
397
+ }
398
+
399
  // Guest mode always cacheable
400
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
401
  return true;
534
 
535
  // Guest mode directly return cacheable result
536
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
537
+ // If is POST, no cache
538
+ if ( defined( 'LSCACHE_NO_CACHE' ) && LSCACHE_NO_CACHE ) {
539
+ $hdr .= 'no-cache';
540
+ }
541
+ else {
542
+ $hdr .= 'public';
543
+ $hdr .= ',max-age=' . $this->get_ttl();
544
+ }
545
+
546
  return $hdr;
547
  }
548
 
621
  return;
622
  }
623
 
 
 
 
 
 
624
  // Apply 3rd party filter
625
  // NOTE: Hook always needs to run asap because some 3rd party set is_mobile in this hook
626
  do_action('litespeed_control_finalize', defined( 'LSCACHE_IS_ESI' ) ? LSCACHE_IS_ESI : false ); // Pass ESI block id
src/core.cls.php CHANGED
@@ -90,6 +90,17 @@ class Core extends Root {
90
  * @since 2.9.4
91
  */
92
  $this->cls( 'REST' );
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
 
95
  /**
@@ -579,6 +590,10 @@ class Core extends Root {
579
  $this->footer_comment .= "\n<!-- Object Cache " . \WP_Object_Cache::get_instance()->debug() . " -->";
580
  }
581
 
 
 
 
 
582
  if ( $is_forced ) {
583
  Debug2::debug( '--forced--' );
584
  }
90
  * @since 2.9.4
91
  */
92
  $this->cls( 'REST' );
93
+
94
+ /**
95
+ * Hook wpnonce function
96
+ *
97
+ * Note: ESI nonce won't be available until hook after_setup_theme ESI init due to Guest Mode concern
98
+ * @since v4.1
99
+ */
100
+ if ( $this->cls( 'Router' )->esi_enabled() && ! function_exists( 'wp_create_nonce' ) ) {
101
+ Debug2::debug( '[ESI] Overwrite wp_create_nonce()' );
102
+ litespeed_define_nonce_func();
103
+ }
104
  }
105
 
106
  /**
590
  $this->footer_comment .= "\n<!-- Object Cache " . \WP_Object_Cache::get_instance()->debug() . " -->";
591
  }
592
 
593
+ if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST && $running_info_showing ) {
594
+ $this->footer_comment .= "\n<!-- Guest Mode -->";
595
+ }
596
+
597
  if ( $is_forced ) {
598
  Debug2::debug( '--forced--' );
599
  }
src/crawler.cls.php CHANGED
@@ -209,6 +209,10 @@ class Crawler extends Root {
209
  continue;
210
  }
211
 
 
 
 
 
212
  $this->_crawler_conf[ 'cookies' ][ substr( $k, 7 ) ] = $v;
213
  }
214
 
@@ -696,9 +700,12 @@ class Crawler extends Root {
696
  *
697
  * @since 3.3
698
  */
699
- public function self_curl( $url, $ua, $uid = false ) {
700
  $this->_crawler_conf[ 'base' ] = home_url();
701
  $this->_crawler_conf[ 'ua' ] = $ua;
 
 
 
702
  if ( $uid ) {
703
  $this->_crawler_conf[ 'cookies' ][ 'litespeed_role' ] = $uid;
704
  $this->_crawler_conf[ 'cookies' ][ 'litespeed_hash' ] = Router::get_hash();
@@ -768,6 +775,16 @@ class Crawler extends Root {
768
  $crawler_factors[ 'webp' ] = array( 1 => 'WebP', 0 => '' );
769
  }
770
 
 
 
 
 
 
 
 
 
 
 
771
  // Mobile crawler
772
  if ( $this->conf( Base::O_CACHE_MOBILE ) ) {
773
  $crawler_factors[ 'mobile' ] = array( 1 => '<font data-balloon-pos="up" aria-label="Mobile">📱</font>', 0 => '' );
@@ -800,7 +817,7 @@ class Crawler extends Root {
800
  $crawler_factors[ $this_cookie_key ] = array();
801
 
802
  foreach ( $v[ 'vals' ] as $v2 ) {
803
- $crawler_factors[ $this_cookie_key ][ $v2 ] = '<font data-balloon-pos="up" aria-label="Cookie">🍪</font>' . $v[ 'name' ] . '=' . $v2;
804
  }
805
  }
806
 
209
  continue;
210
  }
211
 
212
+ if ( $v == '_null' ) {
213
+ continue;
214
+ }
215
+
216
  $this->_crawler_conf[ 'cookies' ][ substr( $k, 7 ) ] = $v;
217
  }
218
 
700
  *
701
  * @since 3.3
702
  */
703
+ public function self_curl( $url, $ua, $uid = false, $accept = false ) { // $accept not in use yet
704
  $this->_crawler_conf[ 'base' ] = home_url();
705
  $this->_crawler_conf[ 'ua' ] = $ua;
706
+ if ( $accept ) {
707
+ $this->_crawler_conf[ 'headers' ] = array( 'Accept: ' . $accept );
708
+ }
709
  if ( $uid ) {
710
  $this->_crawler_conf[ 'cookies' ][ 'litespeed_role' ] = $uid;
711
  $this->_crawler_conf[ 'cookies' ][ 'litespeed_hash' ] = Router::get_hash();
775
  $crawler_factors[ 'webp' ] = array( 1 => 'WebP', 0 => '' );
776
  }
777
 
778
+ // Guest Mode on/off
779
+ if ( $this->conf( Base::O_GUEST ) ) {
780
+ $vary_name = $this->cls( 'Vary' )->get_vary_name();
781
+ $vary_val = 'guest_mode:1';
782
+ if ( ! defined( 'LSCWP_LOG' ) ) {
783
+ $vary_val = md5( $this->conf( Base::HASH ) . $vary_val );
784
+ }
785
+ $crawler_factors[ 'cookie:' . $vary_name ] = array( $vary_val => '', '_null' => '<font data-balloon-pos="up" aria-label="Guest Mode">👒</font>' );
786
+ }
787
+
788
  // Mobile crawler
789
  if ( $this->conf( Base::O_CACHE_MOBILE ) ) {
790
  $crawler_factors[ 'mobile' ] = array( 1 => '<font data-balloon-pos="up" aria-label="Mobile">📱</font>', 0 => '' );
817
  $crawler_factors[ $this_cookie_key ] = array();
818
 
819
  foreach ( $v[ 'vals' ] as $v2 ) {
820
+ $crawler_factors[ $this_cookie_key ][ $v2 ] = $v2 == '_null' ? '' : '<font data-balloon-pos="up" aria-label="Cookie">🍪</font>' . esc_html( $v[ 'name' ] ) . '=' . esc_html( $v2 );
821
  }
822
  }
823
 
src/css.cls.php CHANGED
@@ -87,11 +87,8 @@ class CSS extends Base {
87
  file_exists( LITESPEED_STATIC_DIR . '/ucss' ) && File::rrmdir( LITESPEED_STATIC_DIR . '/ucss' );
88
  }
89
 
90
- // Clear CCSS in queue too
91
- $this->_summary[ 'queue_ccss' ] = array();
92
- $this->_summary[ 'queue_ucss' ] = array();
93
- $this->_summary[ 'curr_request_ccss' ] = 0;
94
- $this->_summary[ 'curr_request_ucss' ] = 0;
95
  self::save_summary();
96
 
97
  Debug2::debug2( '[CSS] Cleared ccss/ucss queue' );
@@ -125,8 +122,22 @@ class CSS extends Base {
125
  return $request_url;
126
  }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  // Per posttype
129
- return Utility::page_type();
130
  }
131
 
132
  /**
@@ -153,33 +164,81 @@ class CSS extends Base {
153
 
154
  $uid = get_current_user_id();
155
 
 
 
 
156
  // Store it to prepare for cron
157
- if ( empty( $this->_summary[ 'queue_ccss' ] ) ) {
158
- $this->_summary[ 'queue_ccss' ] = array();
 
 
 
159
  }
 
160
  $queue_k = ( strlen( $vary ) > 32 ? md5( $vary ) : $vary ) . ' ' . $url_tag;
161
- $this->_summary[ 'queue_ccss' ][ $queue_k ] = array(
162
  'url' => $request_url,
163
- 'user_agent' => substr( $_SERVER[ 'HTTP_USER_AGENT' ], 0, 200 ),
164
  'is_mobile' => $this->_separate_mobile_ccss(),
 
165
  'uid' => $uid,
166
  'vary' => $vary,
167
  'url_tag' => $url_tag,
168
  ); // Current UA will be used to request
169
- Debug2::debug( '[CSS] Added queue_ccss [url_tag] ' . $url_tag . ' [UA] ' . $_SERVER[ 'HTTP_USER_AGENT' ] . ' [vary] ' . $vary . ' [uid] ' . $uid );
 
170
 
171
  // Prepare cache tag for later purge
172
  Tag::add( 'CCSS.' . md5( $queue_k ) );
173
 
174
- // For v4.0- clean up
175
- if ( isset( $this->_summary[ 'ccss_type_history' ] ) ) {
176
- unset( $this->_summary[ 'ccss_type_history' ] );
 
 
 
 
 
 
 
 
 
177
  }
178
 
179
- self::save_summary();
180
  return null;
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  /**
184
  * Get UCSS path
185
  *
@@ -202,25 +261,42 @@ class CSS extends Base {
202
 
203
  $uid = get_current_user_id();
204
 
 
 
205
  // Store it for cron
206
- if ( empty( $this->_summary[ 'queue_ucss' ] ) ) {
207
- $this->_summary[ 'queue_ucss' ] = array();
 
 
 
208
  }
 
209
  $queue_k = ( strlen( $vary ) > 32 ? md5( $vary ) : $vary ) . ' ' . $url_tag;
210
- $this->_summary[ 'queue_ucss' ][ $queue_k ] = array(
211
  'url' => $request_url,
212
- 'user_agent' => substr( $_SERVER[ 'HTTP_USER_AGENT' ], 0, 200 ),
213
  'is_mobile' => $this->_separate_mobile_ccss(),
 
214
  'uid' => $uid,
215
  'vary' => $vary,
216
  'url_tag' => $url_tag,
217
  ); // Current UA will be used to request
218
- Debug2::debug( '[CSS] Added queue_ucss [url_tag] ' . $url_tag . ' [UA] ' . $_SERVER[ 'HTTP_USER_AGENT' ] . ' [vary] ' . $vary . ' [uid] ' . $uid );
 
219
 
220
  // Prepare cache tag for later purge
221
  Tag::add( 'UCSS.' . md5( $queue_k ) );
222
 
223
- self::save_summary();
 
 
 
 
 
 
 
 
 
224
 
225
  return false;
226
  }
@@ -243,7 +319,10 @@ class CSS extends Base {
243
  */
244
  public static function cron_ccss( $continue = false ) {
245
  $_instance = self::cls();
246
- if ( empty( $_instance->_summary[ 'queue_ccss' ] ) ) {
 
 
 
247
  return;
248
  }
249
 
@@ -256,8 +335,9 @@ class CSS extends Base {
256
  }
257
 
258
  $i = 0;
259
- foreach ( $_instance->_summary[ 'queue_ccss' ] as $k => $v ) {
260
- $_instance->_popup_and_save( 'ccss', $k, $v[ 'url' ] );
 
261
  Debug2::debug( '[CCSS] cron job [tag] ' . $k . ' [url] ' . $v[ 'url' ] . ( $v[ 'is_mobile' ] ? ' 📱 ' : '' ) . ' [UA] ' . $v[ 'user_agent' ] );
262
 
263
  if ( empty( $v[ 'url_tag' ] ) ) {
@@ -265,8 +345,12 @@ class CSS extends Base {
265
  continue;
266
  }
267
 
 
 
 
 
268
  $i ++;
269
- $res = $_instance->_generate( $v[ 'url' ], $k, $v[ 'uid' ], $v[ 'user_agent' ], $v[ 'vary' ], $v[ 'url_tag' ], 'ccss', $v[ 'is_mobile' ] );
270
 
271
  if ( $res ) {
272
  Purge::add( 'CCSS.' . md5( $k ) );
@@ -278,6 +362,7 @@ class CSS extends Base {
278
  }
279
 
280
  if ( $i > 3 ) {
 
281
  return Router::self_redirect( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS );
282
  }
283
  }
@@ -290,7 +375,10 @@ class CSS extends Base {
290
  */
291
  public static function cron_ucss( $continue = false ) {
292
  $_instance = self::cls();
293
- if ( empty( $_instance->_summary[ 'queue_ucss' ] ) ) {
 
 
 
294
  return;
295
  }
296
 
@@ -303,12 +391,17 @@ class CSS extends Base {
303
  }
304
 
305
  $i = 0;
306
- foreach ( $_instance->_summary[ 'queue_ucss' ] as $k => $v ) {
307
- $_instance->_popup_and_save( 'ucss', $k, $v[ 'url' ] );
 
308
  Debug2::debug( '[UCSS] cron job [tag] ' . $k . ' [url] ' . $v[ 'url' ] . ( $v[ 'is_mobile' ] ? ' 📱 ' : '' ) . ' [UA] ' . $v[ 'user_agent' ] );
309
 
 
 
 
 
310
  $i ++;
311
- $res = $_instance->_generate( $v[ 'url' ], $k, $v[ 'uid' ], $v[ 'user_agent' ], $v[ 'vary' ], $v[ 'url_tag' ], 'ucss', $v[ 'is_mobile' ] );
312
 
313
  if ( $res ) {
314
  Purge::add( 'UCSS.' . md5( $k ) );
@@ -320,18 +413,46 @@ class CSS extends Base {
320
  }
321
 
322
  if ( $i > 3 ) {
 
323
  return Router::self_redirect( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS );
324
  }
325
  }
326
  }
327
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  /**
329
  * Send to QC API to generate CCSS/UCSS
330
  *
331
  * @since 2.3
332
  * @access private
333
  */
334
- private function _generate( $request_url, $queue_k, $uid, $user_agent, $vary, $url_tag, $type, $is_mobile ) {
335
  set_time_limit( 120 );
336
 
337
  // Check if has credit to push
@@ -356,10 +477,10 @@ class CSS extends Base {
356
  // Parse HTML to gather all CSS content before requesting
357
  $css = false;
358
  if ( $type == 'ccss' ) {
359
- list( $css, $html ) = $this->_prepare_css( $html );
360
  }
361
  else {
362
- list( , $html ) = $this->_prepare_css( $html, true ); // Use this to drop CSS from HTML as we don't need those CSS to generate UCSS
363
  $filename = $this->cls( 'Data' )->load_url_file( $url_tag, $vary, 'css' );
364
  $filepath_prefix = $this->_build_filepath_prefix( 'css' );
365
  $static_file = LITESPEED_STATIC_DIR . $filepath_prefix . $filename . '.css';
@@ -380,6 +501,7 @@ class CSS extends Base {
380
  'ccss_type' => $queue_k,
381
  'user_agent' => $user_agent,
382
  'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
 
383
  'html' => $html,
384
  'css' => $css,
385
  );
@@ -439,7 +561,7 @@ class CSS extends Base {
439
  public function test_url( $request_url ) {
440
  $user_agent = $_SERVER[ 'HTTP_USER_AGENT' ];
441
  $html = $this->_prepare_html( $request_url, $user_agent );
442
- list( $css, $html ) = $this->_prepare_css( $html, true );
443
  // var_dump( $css );
444
  // $html = <<<EOT
445
 
@@ -488,7 +610,7 @@ class CSS extends Base {
488
  *
489
  * @since 3.4.3
490
  */
491
- private function _prepare_css( $html, $dryrun = false ) {
492
  $css = '';
493
  preg_match_all( '#<link ([^>]+)/?>|<style([^>]*)>([^<]+)</style>#isU', $html, $matches, PREG_SET_ORDER );
494
  foreach ( $matches as $match ) {
@@ -547,7 +669,9 @@ class CSS extends Base {
547
  }
548
 
549
  $con = Optimizer::minify_css( $con );
550
- $con = $this->cls( 'Media' )->replace_background_webp( $con );
 
 
551
 
552
  if ( ! empty( $attrs[ 'media' ] ) && $attrs[ 'media' ] !== 'all' ) {
553
  $con = '@media ' . $attrs[ 'media' ] . '{' . $con . "}\n";
@@ -588,43 +712,6 @@ class CSS extends Base {
588
  return $whitelist;
589
  }
590
 
591
- /**
592
- * Pop up the current request and save
593
- *
594
- * @since 3.0
595
- */
596
- private function _popup_and_save( $type, $queue_k, $request_url ) {
597
- if ( empty( $this->_summary[ $type . '_history' ] ) ) {
598
- $this->_summary[ $type . '_history' ] = array();
599
- }
600
- $this->_summary[ $type . '_history' ][ $queue_k ] = $request_url;
601
-
602
- while ( count( $this->_summary[ $type . '_history' ] ) > 10 ) {
603
- array_shift( $this->_summary[ $type . '_history' ] );
604
- }
605
-
606
- unset( $this->_summary[ 'queue_' . $type ][ $queue_k ] );
607
-
608
- self::save_summary();
609
- }
610
-
611
- /**
612
- * Clear all waiting queues
613
- *
614
- * @since 3.4
615
- */
616
- public function clear_q( $type ) {
617
- if ( empty( $this->_summary[ 'queue_' . $type ] ) ) {
618
- return;
619
- }
620
-
621
- $this->_summary[ 'queue_' . $type ] = array();
622
- self::save_summary();
623
-
624
- $msg = __( 'Queue cleared successfully.', 'litespeed-cache' );
625
- Admin_Display::succeed( $msg );
626
- }
627
-
628
  /**
629
  * Handle all request actions from main cls
630
  *
87
  file_exists( LITESPEED_STATIC_DIR . '/ucss' ) && File::rrmdir( LITESPEED_STATIC_DIR . '/ucss' );
88
  }
89
 
90
+ // Clear All summary data
91
+ $this->_summary = array();
 
 
 
92
  self::save_summary();
93
 
94
  Debug2::debug2( '[CSS] Cleared ccss/ucss queue' );
122
  return $request_url;
123
  }
124
 
125
+ $sep_uri = $this->conf( self::O_OPTM_CCSS_SEP_URI );
126
+ if ( $sep_uri && $hit = Utility::str_hit_array( $request_url, $sep_uri ) ) {
127
+ Debug2::debug( '[CCSS] Separate CCSS due to separate URI setting: ' . $hit );
128
+ return $request_url;
129
+ }
130
+
131
+ $pt = Utility::page_type();
132
+
133
+ $sep_pt = $this->conf( self::O_OPTM_CCSS_SEP_POSTTYPE );
134
+ if ( in_array( $pt, $sep_pt ) ) {
135
+ Debug2::debug( '[CCSS] Separate CCSS due to posttype setting: ' . $pt );
136
+ return $request_url;
137
+ }
138
+
139
  // Per posttype
140
+ return $pt;
141
  }
142
 
143
  /**
164
 
165
  $uid = get_current_user_id();
166
 
167
+ $ua = ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
168
+
169
+
170
  // Store it to prepare for cron
171
+ $queue = $this->load_queue( 'ccss' );
172
+
173
+ if ( count( $queue ) > 500 ) {
174
+ Debug2::debug( '[CSS] CCSS Queue is full - 500' );
175
+ return null;
176
  }
177
+
178
  $queue_k = ( strlen( $vary ) > 32 ? md5( $vary ) : $vary ) . ' ' . $url_tag;
179
+ $queue[ $queue_k ] = array(
180
  'url' => $request_url,
181
+ 'user_agent' => substr( $ua, 0, 200 ),
182
  'is_mobile' => $this->_separate_mobile_ccss(),
183
+ 'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
184
  'uid' => $uid,
185
  'vary' => $vary,
186
  'url_tag' => $url_tag,
187
  ); // Current UA will be used to request
188
+ $this->save_queue( 'ccss', $queue );
189
+ Debug2::debug( '[CSS] Added queue_ccss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid );
190
 
191
  // Prepare cache tag for later purge
192
  Tag::add( 'CCSS.' . md5( $queue_k ) );
193
 
194
+ // For v4.1- clean up
195
+ if ( isset( $this->_summary[ 'ccss_type_history' ] ) || isset( $this->_summary[ 'ccss_history' ] ) || isset( $this->_summary[ 'queue_ccss' ] ) ) {
196
+ if ( isset( $this->_summary[ 'ccss_type_history' ] ) ) {
197
+ unset( $this->_summary[ 'ccss_type_history' ] );
198
+ }
199
+ if ( isset( $this->_summary[ 'ccss_history' ] ) ) {
200
+ unset( $this->_summary[ 'ccss_history' ] );
201
+ }
202
+ if ( isset( $this->_summary[ 'queue_ccss' ] ) ) {
203
+ unset( $this->_summary[ 'queue_ccss' ] );
204
+ }
205
+ self::save_summary();
206
  }
207
 
 
208
  return null;
209
  }
210
 
211
+ /**
212
+ * Load current queues from data file
213
+ *
214
+ * @since 4.1
215
+ */
216
+ public function load_queue( $type ) {
217
+ $filepath_prefix = $this->_build_filepath_prefix( $type );
218
+ $static_path = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';
219
+
220
+ $queue = array();
221
+ if ( file_exists( $static_path ) ) {
222
+ $queue = json_decode( file_get_contents( $static_path ), true );
223
+ }
224
+
225
+ return $queue;
226
+ }
227
+
228
+ /**
229
+ * Save current queues to data file
230
+ *
231
+ * @since 4.1
232
+ */
233
+ public function save_queue( $type, $list ) {
234
+ $filepath_prefix = $this->_build_filepath_prefix( $type );
235
+ $static_path = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';
236
+
237
+ $data = json_encode( $list );
238
+
239
+ File::save( $static_path, $data, true );
240
+ }
241
+
242
  /**
243
  * Get UCSS path
244
  *
261
 
262
  $uid = get_current_user_id();
263
 
264
+ $ua = ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
265
+
266
  // Store it for cron
267
+ $queue = $this->load_queue( 'ucss' );
268
+
269
+ if ( count( $queue ) > 500 ) {
270
+ Debug2::debug( '[CSS] UCSS Queue is full - 500' );
271
+ return false;
272
  }
273
+
274
  $queue_k = ( strlen( $vary ) > 32 ? md5( $vary ) : $vary ) . ' ' . $url_tag;
275
+ $queue[ $queue_k ] = array(
276
  'url' => $request_url,
277
+ 'user_agent' => substr( $ua, 0, 200 ),
278
  'is_mobile' => $this->_separate_mobile_ccss(),
279
+ 'is_webp' => $this->cls( 'Media' )->webp_support() ? 1 : 0,
280
  'uid' => $uid,
281
  'vary' => $vary,
282
  'url_tag' => $url_tag,
283
  ); // Current UA will be used to request
284
+ $this->save_queue( 'ucss', $queue );
285
+ Debug2::debug( '[CSS] Added queue_ucss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid );
286
 
287
  // Prepare cache tag for later purge
288
  Tag::add( 'UCSS.' . md5( $queue_k ) );
289
 
290
+ // For v4.1- clean up
291
+ if ( isset( $this->_summary[ 'ucss_history' ] ) || isset( $this->_summary[ 'queue_ucss' ] ) ) {
292
+ if ( isset( $this->_summary[ 'ucss_history' ] ) ) {
293
+ unset( $this->_summary[ 'ucss_history' ] );
294
+ }
295
+ if ( isset( $this->_summary[ 'queue_ucss' ] ) ) {
296
+ unset( $this->_summary[ 'queue_ucss' ] );
297
+ }
298
+ self::save_summary();
299
+ }
300
 
301
  return false;
302
  }
319
  */
320
  public static function cron_ccss( $continue = false ) {
321
  $_instance = self::cls();
322
+
323
+ $queue = $_instance->load_queue( 'ccss' );
324
+
325
+ if ( empty( $queue ) ) {
326
  return;
327
  }
328
 
335
  }
336
 
337
  $i = 0;
338
+ foreach ( $queue as $k => $v ) {
339
+ unset( $queue[ $k ] );
340
+ $_instance->save_queue( 'ccss', $queue );
341
  Debug2::debug( '[CCSS] cron job [tag] ' . $k . ' [url] ' . $v[ 'url' ] . ( $v[ 'is_mobile' ] ? ' 📱 ' : '' ) . ' [UA] ' . $v[ 'user_agent' ] );
342
 
343
  if ( empty( $v[ 'url_tag' ] ) ) {
345
  continue;
346
  }
347
 
348
+ if ( ! isset( $v[ 'is_webp' ] ) ) {
349
+ $v[ 'is_webp' ] = false;
350
+ }
351
+
352
  $i ++;
353
+ $res = $_instance->_generate( $v[ 'url' ], $k, $v[ 'uid' ], $v[ 'user_agent' ], $v[ 'vary' ], $v[ 'url_tag' ], 'ccss', $v[ 'is_mobile' ], $v[ 'is_webp' ] );
354
 
355
  if ( $res ) {
356
  Purge::add( 'CCSS.' . md5( $k ) );
362
  }
363
 
364
  if ( $i > 3 ) {
365
+ $_instance->_print_loading( count( $queue ), 'CCSS' );
366
  return Router::self_redirect( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS );
367
  }
368
  }
375
  */
376
  public static function cron_ucss( $continue = false ) {
377
  $_instance = self::cls();
378
+
379
+ $queue = $_instance->load_queue( 'ucss' );
380
+
381
+ if ( empty( $queue ) ) {
382
  return;
383
  }
384
 
391
  }
392
 
393
  $i = 0;
394
+ foreach ( $queue as $k => $v ) {
395
+ unset( $queue[ $k ] );
396
+ $_instance->save_queue( 'ucss', $queue );
397
  Debug2::debug( '[UCSS] cron job [tag] ' . $k . ' [url] ' . $v[ 'url' ] . ( $v[ 'is_mobile' ] ? ' 📱 ' : '' ) . ' [UA] ' . $v[ 'user_agent' ] );
398
 
399
+ if ( ! isset( $v[ 'is_webp' ] ) ) {
400
+ $v[ 'is_webp' ] = false;
401
+ }
402
+
403
  $i ++;
404
+ $res = $_instance->_generate( $v[ 'url' ], $k, $v[ 'uid' ], $v[ 'user_agent' ], $v[ 'vary' ], $v[ 'url_tag' ], 'ucss', $v[ 'is_mobile' ], $v[ 'is_webp' ] );
405
 
406
  if ( $res ) {
407
  Purge::add( 'UCSS.' . md5( $k ) );
413
  }
414
 
415
  if ( $i > 3 ) {
416
+ $_instance->_print_loading( count( $queue ), 'UCSS' );
417
  return Router::self_redirect( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS );
418
  }
419
  }
420
  }
421
 
422
+ /**
423
+ * Clear all waiting queues
424
+ *
425
+ * @since 3.4
426
+ */
427
+ public function clear_q( $type ) {
428
+ $filepath_prefix = $this->_build_filepath_prefix( $type );
429
+ $static_path = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';
430
+
431
+ if ( file_exists( $static_path ) ) {
432
+ unlink( $static_path );
433
+ }
434
+
435
+ $msg = __( 'Queue cleared successfully.', 'litespeed-cache' );
436
+ Admin_Display::succeed( $msg );
437
+ }
438
+
439
+ /**
440
+ * Print a loading message when redirecting CCSS/UCSS page to aviod whiteboard confusion
441
+ */
442
+ private function _print_loading( $counter, $type ) {
443
+ echo '<div style="font-size: 25px; text-align: center; padding-top: 150px; width: 100%; position: absolute;">';
444
+ echo "<img width='35' src='" . LSWCP_PLUGIN_URL . "assets/img/Litespeed.icon.svg' /> ";
445
+ echo sprintf( __( '%1$s %2$s files left in queue', 'litespeed-cache' ), $counter, $type );
446
+ echo '</div>';
447
+ }
448
+
449
  /**
450
  * Send to QC API to generate CCSS/UCSS
451
  *
452
  * @since 2.3
453
  * @access private
454
  */
455
+ private function _generate( $request_url, $queue_k, $uid, $user_agent, $vary, $url_tag, $type, $is_mobile, $is_webp ) {
456
  set_time_limit( 120 );
457
 
458
  // Check if has credit to push
477
  // Parse HTML to gather all CSS content before requesting
478
  $css = false;
479
  if ( $type == 'ccss' ) {
480
+ list( $css, $html ) = $this->_prepare_css( $html, $is_webp );
481
  }
482
  else {
483
+ list( , $html ) = $this->_prepare_css( $html, $is_webp, true ); // Use this to drop CSS from HTML as we don't need those CSS to generate UCSS
484
  $filename = $this->cls( 'Data' )->load_url_file( $url_tag, $vary, 'css' );
485
  $filepath_prefix = $this->_build_filepath_prefix( 'css' );
486
  $static_file = LITESPEED_STATIC_DIR . $filepath_prefix . $filename . '.css';
501
  'ccss_type' => $queue_k,
502
  'user_agent' => $user_agent,
503
  'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
504
+ 'is_webp' => $is_webp ? 1 : 0,
505
  'html' => $html,
506
  'css' => $css,
507
  );
561
  public function test_url( $request_url ) {
562
  $user_agent = $_SERVER[ 'HTTP_USER_AGENT' ];
563
  $html = $this->_prepare_html( $request_url, $user_agent );
564
+ list( $css, $html ) = $this->_prepare_css( $html, true, true );
565
  // var_dump( $css );
566
  // $html = <<<EOT
567
 
610
  *
611
  * @since 3.4.3
612
  */
613
+ private function _prepare_css( $html, $is_webp = false, $dryrun = false ) {
614
  $css = '';
615
  preg_match_all( '#<link ([^>]+)/?>|<style([^>]*)>([^<]+)</style>#isU', $html, $matches, PREG_SET_ORDER );
616
  foreach ( $matches as $match ) {
669
  }
670
 
671
  $con = Optimizer::minify_css( $con );
672
+ if ( $is_webp ) {
673
+ $con = $this->cls( 'Media' )->replace_background_webp( $con );
674
+ }
675
 
676
  if ( ! empty( $attrs[ 'media' ] ) && $attrs[ 'media' ] !== 'all' ) {
677
  $con = '@media ' . $attrs[ 'media' ] . '{' . $con . "}\n";
712
  return $whitelist;
713
  }
714
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
  /**
716
  * Handle all request actions from main cls
717
  *
src/data.cls.php CHANGED
@@ -18,6 +18,9 @@ class Data extends Root {
18
  '4.0' => array(
19
  'litespeed_update_4',
20
  ),
 
 
 
21
  );
22
 
23
  private $_db_site_updater = array(
@@ -121,6 +124,9 @@ class Data extends Root {
121
 
122
  $this->correct_tb_existance();
123
 
 
 
 
124
  // Update version to latest
125
  Conf::delete_option( Base::_VER );
126
  Conf::add_option( Base::_VER, Core::VER );
18
  '4.0' => array(
19
  'litespeed_update_4',
20
  ),
21
+ '4.1' => array(
22
+ 'litespeed_update_4_1',
23
+ ),
24
  );
25
 
26
  private $_db_site_updater = array(
124
 
125
  $this->correct_tb_existance();
126
 
127
+ // Update related files
128
+ $this->cls( 'Activation' )->update_files();
129
+
130
  // Update version to latest
131
  Conf::delete_option( Base::_VER );
132
  Conf::add_option( Base::_VER, Core::VER );
src/data.upgrade.func.php CHANGED
@@ -13,6 +13,16 @@ use LiteSpeed\Conf;
13
  use LiteSpeed\Admin_Display;
14
  use LiteSpeed\File;
15
 
 
 
 
 
 
 
 
 
 
 
16
  /**
17
  * Drop cssjs table and rm cssjs folder
18
  * @since 4.0
@@ -186,8 +196,8 @@ function litespeed_update_3_0( $ver ) {
186
  'litespeed-media-webp_attribute' => 'img_optm-webp_attr',
187
  'litespeed-optm-css' => 'optm-ccss_con',
188
  'litespeed-optm_excludes' => 'optm-exc',
189
- // 'litespeed-optm-ccss-separate_posttype' => 'optm-ccss_sep_posttype',
190
- // 'litespeed-optm-css-separate_uri' => 'optm-ccss_sep_uri',
191
  'litespeed-optm-js-defer-excludes' => 'optm-js_defer_exc',
192
  'litespeed-cache-dns_prefetch' => 'optm-dns_prefetch',
193
  'litespeed-cache-exclude-optimization-roles' => 'optm-exc_roles',
13
  use LiteSpeed\Admin_Display;
14
  use LiteSpeed\File;
15
 
16
+ /**
17
+ * Drop object cache data file
18
+ * @since 4.1
19
+ */
20
+ function litespeed_update_4_1() {
21
+ if ( file_exists( WP_CONTENT_DIR . '/.object-cache.ini' ) ) {
22
+ unlink( WP_CONTENT_DIR . '/.object-cache.ini' );
23
+ }
24
+ }
25
+
26
  /**
27
  * Drop cssjs table and rm cssjs folder
28
  * @since 4.0
196
  'litespeed-media-webp_attribute' => 'img_optm-webp_attr',
197
  'litespeed-optm-css' => 'optm-ccss_con',
198
  'litespeed-optm_excludes' => 'optm-exc',
199
+ 'litespeed-optm-ccss-separate_posttype' => 'optm-ccss_sep_posttype',
200
+ 'litespeed-optm-css-separate_uri' => 'optm-ccss_sep_uri',
201
  'litespeed-optm-js-defer-excludes' => 'optm-js_defer_exc',
202
  'litespeed-cache-dns_prefetch' => 'optm-dns_prefetch',
203
  'litespeed-cache-exclude-optimization-roles' => 'optm-exc_roles',
src/doc.cls.php CHANGED
@@ -21,7 +21,8 @@ class Doc {
21
  * @access public
22
  */
23
  public static function privacy_policy() {
24
- return __( 'This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary.', 'litespeed-cache' );
 
25
  }
26
 
27
 
@@ -101,10 +102,10 @@ class Doc {
101
  */
102
  public static function notice_ips() {
103
  echo '<div class="litespeed-primary">';
104
- echo '⚠️ ' . __( 'For online services to work correctly, you must whitelist all online server IPs.', 'litespeed-cache' ) . '<br/>';
105
  echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . __( 'Before generating key, please verify all IPs on this list are whitelisted', 'litespeed-cache' ) . ': ';
106
  echo '<a href="' . Cloud::CLOUD_SERVER . '/ips" target="_blank">' . __( 'Current Online Server IPs', 'litespeed-cache' ) . '</a>';
107
  echo '</div>';
108
  }
109
 
110
- }
21
  * @access public
22
  */
23
  public static function privacy_policy() {
24
+ return __( 'This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.', 'litespeed-cache' )
25
+ . sprintf( __( 'Please see %s for more details.', 'litespeed-cache' ), '<a href="https://quic.cloud/privacy-policy/" target="_blank">https://quic.cloud/privacy-policy/</a>' );
26
  }
27
 
28
 
102
  */
103
  public static function notice_ips() {
104
  echo '<div class="litespeed-primary">';
105
+ echo '⚠️ ' . sprintf( __( 'For online services to work correctly, you must whitelist all %s server IPs.', 'litespeed-cache' ), 'QUIC.cloud' ) . '<br/>';
106
  echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . __( 'Before generating key, please verify all IPs on this list are whitelisted', 'litespeed-cache' ) . ': ';
107
  echo '<a href="' . Cloud::CLOUD_SERVER . '/ips" target="_blank">' . __( 'Current Online Server IPs', 'litespeed-cache' ) . '</a>';
108
  echo '</div>';
109
  }
110
 
111
+ }
src/esi.cls.php CHANGED
@@ -59,9 +59,9 @@ class ESI extends Root {
59
  * Overwrite wp_create_nonce func
60
  * @since 2.9.5
61
  */
62
- if ( ! is_admin() && ! function_exists( 'wp_create_nonce' ) ) {
63
- $this->_transform_nonce();
64
- }
65
  }
66
 
67
  /**
@@ -112,6 +112,10 @@ class ESI extends Root {
112
  * @since 2.9.5
113
  */
114
  private function _transform_nonce() {
 
 
 
 
115
  // Load ESI nonces in conf
116
  $nonces = $this->conf( Base::O_ESI_NONCE );
117
  add_filter( 'litespeed_esi_nonces', array( $this->cls( 'Data' ), 'load_esi_nonces' ) );
@@ -122,9 +126,6 @@ class ESI extends Root {
122
  }
123
 
124
  add_action( 'litespeed_nonce', array( $this, 'nonce_action' ) );
125
-
126
- Debug2::debug( '[ESI] Overwrite wp_create_nonce()' );
127
- litespeed_define_nonce_func();
128
  }
129
 
130
  /**
@@ -156,6 +157,15 @@ class ESI extends Root {
156
  * @since 2.9.5
157
  */
158
  public function is_nonce_action( $action ) {
 
 
 
 
 
 
 
 
 
159
  foreach ( $this->_nonce_actions as $k => $v ) {
160
  if ( strpos( $k, '*' ) !== false ) {
161
  if( preg_match( '#' . $k . '#iU', $action ) ) {
59
  * Overwrite wp_create_nonce func
60
  * @since 2.9.5
61
  */
62
+ $this->_transform_nonce();
63
+
64
+ ! defined( 'LITESPEED_ESI_INITED' ) && define( 'LITESPEED_ESI_INITED', true );
65
  }
66
 
67
  /**
112
  * @since 2.9.5
113
  */
114
  private function _transform_nonce() {
115
+ if ( is_admin() ) {
116
+ return;
117
+ }
118
+
119
  // Load ESI nonces in conf
120
  $nonces = $this->conf( Base::O_ESI_NONCE );
121
  add_filter( 'litespeed_esi_nonces', array( $this->cls( 'Data' ), 'load_esi_nonces' ) );
126
  }
127
 
128
  add_action( 'litespeed_nonce', array( $this, 'nonce_action' ) );
 
 
 
129
  }
130
 
131
  /**
157
  * @since 2.9.5
158
  */
159
  public function is_nonce_action( $action ) {
160
+ // If GM not run yet, then ESI not init yet, then ESI nonce will not be allowed even nonce func replaced.
161
+ if ( ! defined( 'LITESPEED_ESI_INITED' ) ) {
162
+ return null;
163
+ }
164
+
165
+ if ( is_admin() ) {
166
+ return null;
167
+ }
168
+
169
  foreach ( $this->_nonce_actions as $k => $v ) {
170
  if ( strpos( $k, '*' ) !== false ) {
171
  if( preg_match( '#' . $k . '#iU', $action ) ) {
src/gui.cls.php CHANGED
@@ -16,12 +16,13 @@ class GUI extends Base {
16
 
17
  // [ file_tag => [ days, litespeed_only ], ... ]
18
  private $_promo_list = array(
19
- 'new_version' => array( 1, false ),
20
- 'score' => array( 5, false ),
21
  // 'slack' => array( 3, false ),
22
  );
23
 
24
  const LIB_GUEST_JS = 'assets/js/guest.min.js';
 
25
 
26
  const TYPE_DISMISS_WHM = 'whm';
27
  const TYPE_DISMISS_EXPIRESDEFAULT = 'ExpiresDefault';
@@ -508,16 +509,6 @@ class GUI extends Base {
508
  ) );
509
  }
510
 
511
- if ( $this->conf( self::O_OPTM_LOCALIZE ) ) {
512
- $wp_admin_bar->add_menu( array(
513
- 'parent' => 'litespeed-menu',
514
- 'id' => 'litespeed-purge-localres',
515
- 'title' => __( 'Purge All', 'litespeed-cache' ) . ' - ' . __( 'Localized Resources', 'litespeed-cache' ),
516
- 'href' => Utility::build_url( Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LOCALRES, false, '_ori' ),
517
- 'meta' => array( 'tabindex' => '0' ),
518
- ) );
519
- }
520
-
521
  if ( Placeholder::has_lqip_cache() ) {
522
  $wp_admin_bar->add_menu( array(
523
  'parent' => 'litespeed-menu',
@@ -659,16 +650,6 @@ class GUI extends Base {
659
  ) );
660
  }
661
 
662
- if ( $this->conf( self::O_OPTM_LOCALIZE ) ) {
663
- $wp_admin_bar->add_menu( array(
664
- 'parent' => 'litespeed-menu',
665
- 'id' => 'litespeed-purge-localres',
666
- 'title' => __( 'Purge All', 'litespeed-cache' ) . ' - ' . __( 'Localized Resources', 'litespeed-cache' ),
667
- 'href' => Utility::build_url( Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LOCALRES ),
668
- 'meta' => array( 'tabindex' => '0' ),
669
- ) );
670
- }
671
-
672
  if ( Placeholder::has_lqip_cache() ) {
673
  $wp_admin_bar->add_menu( array(
674
  'parent' => 'litespeed-menu',
@@ -779,8 +760,10 @@ class GUI extends Base {
779
  */
780
  private function _enqueue_guest_js( $buffer ) {
781
  $js_con = File::read( LSCWP_DIR . self::LIB_GUEST_JS );
782
- $js_con = str_replace( 'litespeed_url', esc_url( add_query_arg( 'litespeed_guest', 1, home_url( '/' ) ) ), $js_con );
783
- $buffer = str_replace( '</body>', '<script data-no-optimize="1" async>' . $js_con . '</script></body>', $buffer );
 
 
784
  return $buffer;
785
  }
786
 
16
 
17
  // [ file_tag => [ days, litespeed_only ], ... ]
18
  private $_promo_list = array(
19
+ 'new_version' => array( 7, false ),
20
+ 'score' => array( 14, false ),
21
  // 'slack' => array( 3, false ),
22
  );
23
 
24
  const LIB_GUEST_JS = 'assets/js/guest.min.js';
25
+ const PHP_GUEST = 'guest.vary.php';
26
 
27
  const TYPE_DISMISS_WHM = 'whm';
28
  const TYPE_DISMISS_EXPIRESDEFAULT = 'ExpiresDefault';
509
  ) );
510
  }
511
 
 
 
 
 
 
 
 
 
 
 
512
  if ( Placeholder::has_lqip_cache() ) {
513
  $wp_admin_bar->add_menu( array(
514
  'parent' => 'litespeed-menu',
650
  ) );
651
  }
652
 
 
 
 
 
 
 
 
 
 
 
653
  if ( Placeholder::has_lqip_cache() ) {
654
  $wp_admin_bar->add_menu( array(
655
  'parent' => 'litespeed-menu',
760
  */
761
  private function _enqueue_guest_js( $buffer ) {
762
  $js_con = File::read( LSCWP_DIR . self::LIB_GUEST_JS );
763
+ // $guest_update_url = add_query_arg( 'litespeed_guest', 1, home_url( '/' ) );
764
+ $guest_update_url = LSWCP_PLUGIN_URL . self::PHP_GUEST;
765
+ $js_con = str_replace( 'litespeed_url', esc_url( $guest_update_url ), $js_con );
766
+ $buffer = str_replace( '</body>', '<script data-no-optimize="1">' . $js_con . '</script></body>', $buffer );
767
  return $buffer;
768
  }
769
 
src/htaccess.cls.php CHANGED
@@ -90,7 +90,8 @@ class Htaccess extends Root {
90
  self::REWRITE_ON,
91
  "CacheLookup on",
92
  "RewriteRule .* - [E=Cache-Control:no-autoflush]",
93
- "RewriteRule \.object-cache\.ini - [F,L]",
 
94
  );
95
 
96
  // backend .htaccess privilege
90
  self::REWRITE_ON,
91
  "CacheLookup on",
92
  "RewriteRule .* - [E=Cache-Control:no-autoflush]",
93
+ // "RewriteRule \.object-cache\.ini - [F,L]",
94
+ 'RewriteRule ' . preg_quote( self::CONF_FILE ) . ' - [F,L]',
95
  );
96
 
97
  // backend .htaccess privilege
src/img-optm.cls.php CHANGED
@@ -721,7 +721,7 @@ class Img_Optm extends Base {
721
  return Cloud::err( 'no/wrong status' );
722
  }
723
 
724
- $status = $_POST[ 'status' ];
725
 
726
  $last_log_pid = 0;
727
 
721
  return Cloud::err( 'no/wrong status' );
722
  }
723
 
724
+ $status = $post_data[ 'status' ];
725
 
726
  $last_log_pid = 0;
727
 
src/import.cls.php CHANGED
@@ -3,20 +3,17 @@
3
  * The import/export class.
4
  *
5
  * @since 1.8.2
6
- * @package LiteSpeed_Cache
7
- * @subpackage LiteSpeed_Cache/inc
8
- * @author LiteSpeed Technologies <info@litespeedtech.com>
9
  */
10
- namespace LiteSpeed ;
11
 
12
- defined( 'WPINC' ) || exit ;
13
 
14
  class Import extends Base {
15
  protected $_summary;
16
 
17
- const TYPE_IMPORT = 'import' ;
18
- const TYPE_EXPORT = 'export' ;
19
- const TYPE_RESET = 'reset' ;
20
 
21
  /**
22
  * Init
@@ -24,7 +21,7 @@ class Import extends Base {
24
  * @since 1.8.2
25
  */
26
  public function __construct() {
27
- Debug2::debug( 'Import init' ) ;
28
 
29
  $this->_summary = self::get_summary();
30
  }
@@ -36,28 +33,32 @@ class Import extends Base {
36
  * @access public
37
  */
38
  public function export( $only_data_return = false ) {
 
39
 
40
- $data = $this->get_options( true );
 
 
 
41
 
42
- $data = base64_encode( json_encode( $data ) ) ;
43
 
44
  if ( $only_data_return ) {
45
- return $data ;
46
  }
47
 
48
- $filename = $this->_generate_filename() ;
49
 
50
  // Update log
51
- $this->_summary[ 'export_file' ] = $filename ;
52
- $this->_summary[ 'export_time' ] = time() ;
53
  self::save_summary();
54
 
55
- Debug2::debug( 'Import: Saved to ' . $filename ) ;
56
 
57
- @header( 'Content-Disposition: attachment; filename=' . $filename ) ;
58
- echo $data ;
59
 
60
- exit ;
61
  }
62
 
63
  /**
@@ -66,58 +67,76 @@ class Import extends Base {
66
  * @since 1.8.2
67
  * @access public
68
  */
69
- public function import( $file = false )
70
- {
71
  if ( ! $file ) {
72
  if ( empty( $_FILES[ 'ls_file' ][ 'name' ] ) || substr( $_FILES[ 'ls_file' ][ 'name' ], -5 ) != '.data' || empty( $_FILES[ 'ls_file' ][ 'tmp_name' ] ) ) {
73
- Debug2::debug( 'Import: Failed to import, wront ls_file' ) ;
74
 
75
- $msg = __( 'Import failed due to file error.', 'litespeed-cache' ) ;
76
- Admin_Display::error( $msg ) ;
77
 
78
- return false ;
79
  }
80
 
81
- $this->_summary[ 'import_file' ] = $_FILES[ 'ls_file' ][ 'name' ] ;
82
 
83
- $data = file_get_contents( $_FILES[ 'ls_file' ][ 'tmp_name' ] ) ;
84
  }
85
  else {
86
- $this->_summary[ 'import_file' ] = $file ;
87
 
88
- $data = file_get_contents( $file ) ;
89
  }
90
 
91
  // Update log
92
- $this->_summary[ 'import_time' ] = time() ;
93
  self::save_summary();
94
 
 
95
  try {
96
- $data = json_decode( base64_decode( $data ), true ) ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  } catch ( \Exception $ex ) {
98
- Debug2::debug( 'Import: Failed to parse serialized data' ) ;
99
- return false ;
100
  }
101
 
102
- if ( ! $data ) {
103
- Debug2::debug( 'Import: Failed to import, no data' ) ;
104
- return false ;
 
 
 
105
  }
106
 
107
- $this->cls( 'Conf' )->update_confs( $data ) ;
108
 
109
 
110
  if ( ! $file ) {
111
- Debug2::debug( 'Import: Imported ' . $_FILES[ 'ls_file' ][ 'name' ] ) ;
112
 
113
- $msg = sprintf( __( 'Imported setting file %s successfully.', 'litespeed-cache' ), $_FILES[ 'ls_file' ][ 'name' ] ) ;
114
- Admin_Display::succeed( $msg ) ;
115
  }
116
  else {
117
- Debug2::debug( 'Import: Imported ' . $file ) ;
118
  }
119
 
120
- return true ;
121
 
122
  }
123
 
@@ -127,16 +146,15 @@ class Import extends Base {
127
  * @since 2.6.3
128
  * @access public
129
  */
130
- public function reset()
131
- {
132
- $options = $this->cls( 'Conf' )->load_default_vals() ;
133
 
134
- $this->cls( 'Conf' )->update_confs( $options ) ;
135
 
136
- Debug2::debug( '[Import] Reset successfully.' ) ;
137
 
138
- $msg = __( 'Reset successfully.', 'litespeed-cache' ) ;
139
- Admin_Display::succeed( $msg ) ;
140
 
141
  }
142
 
@@ -146,24 +164,23 @@ class Import extends Base {
146
  * @since 1.8.2
147
  * @access private
148
  */
149
- private function _generate_filename()
150
- {
151
  // Generate filename
152
- $parsed_home = parse_url( get_home_url() ) ;
153
- $filename = 'LSCWP_cfg-' ;
154
  if ( ! empty( $parsed_home[ 'host' ] ) ) {
155
- $filename .= $parsed_home[ 'host' ] . '_' ;
156
  }
157
 
158
  if ( ! empty( $parsed_home[ 'path' ] ) ) {
159
- $filename .= $parsed_home[ 'path' ] . '_' ;
160
  }
161
 
162
- $filename = str_replace( '/', '_', $filename ) ;
163
 
164
- $filename .= '-' . date( 'Ymd_His' ) . '.data' ;
165
 
166
- return $filename ;
167
  }
168
 
169
  /**
3
  * The import/export class.
4
  *
5
  * @since 1.8.2
 
 
 
6
  */
7
+ namespace LiteSpeed;
8
 
9
+ defined( 'WPINC' ) || exit;
10
 
11
  class Import extends Base {
12
  protected $_summary;
13
 
14
+ const TYPE_IMPORT = 'import';
15
+ const TYPE_EXPORT = 'export';
16
+ const TYPE_RESET = 'reset';
17
 
18
  /**
19
  * Init
21
  * @since 1.8.2
22
  */
23
  public function __construct() {
24
+ Debug2::debug( 'Import init' );
25
 
26
  $this->_summary = self::get_summary();
27
  }
33
  * @access public
34
  */
35
  public function export( $only_data_return = false ) {
36
+ $raw_data = $this->get_options( true );
37
 
38
+ $data = array();
39
+ foreach ( $raw_data as $k => $v ) {
40
+ $data[] = json_encode( array( $k, $v ) );
41
+ }
42
 
43
+ $data = implode( "\n\n", $data );
44
 
45
  if ( $only_data_return ) {
46
+ return $data;
47
  }
48
 
49
+ $filename = $this->_generate_filename();
50
 
51
  // Update log
52
+ $this->_summary[ 'export_file' ] = $filename;
53
+ $this->_summary[ 'export_time' ] = time();
54
  self::save_summary();
55
 
56
+ Debug2::debug( 'Import: Saved to ' . $filename );
57
 
58
+ @header( 'Content-Disposition: attachment; filename=' . $filename );
59
+ echo $data;
60
 
61
+ exit;
62
  }
63
 
64
  /**
67
  * @since 1.8.2
68
  * @access public
69
  */
70
+ public function import( $file = false ) {
 
71
  if ( ! $file ) {
72
  if ( empty( $_FILES[ 'ls_file' ][ 'name' ] ) || substr( $_FILES[ 'ls_file' ][ 'name' ], -5 ) != '.data' || empty( $_FILES[ 'ls_file' ][ 'tmp_name' ] ) ) {
73
+ Debug2::debug( 'Import: Failed to import, wront ls_file' );
74
 
75
+ $msg = __( 'Import failed due to file error.', 'litespeed-cache' );
76
+ Admin_Display::error( $msg );
77
 
78
+ return false;
79
  }
80
 
81
+ $this->_summary[ 'import_file' ] = $_FILES[ 'ls_file' ][ 'name' ];
82
 
83
+ $data = file_get_contents( $_FILES[ 'ls_file' ][ 'tmp_name' ] );
84
  }
85
  else {
86
+ $this->_summary[ 'import_file' ] = $file;
87
 
88
+ $data = file_get_contents( $file );
89
  }
90
 
91
  // Update log
92
+ $this->_summary[ 'import_time' ] = time();
93
  self::save_summary();
94
 
95
+ $ori_data = array();
96
  try {
97
+ // Check if the data is v4+ or not
98
+ if ( strpos( $data, '["_version",' ) === 0 ) {
99
+ Debug2::debug( '[Import] Data version: v4+' );
100
+ $data = explode( "\n", $data );
101
+ foreach ( $data as $v ) {
102
+ $v = trim( $v );
103
+ if ( ! $v ) {
104
+ continue;
105
+ }
106
+ list( $k, $v ) = json_decode( $v, true );
107
+ $ori_data[ $k ] = $v;
108
+ }
109
+ }
110
+ else {
111
+ $ori_data = json_decode( base64_decode( $data ), true );
112
+ }
113
  } catch ( \Exception $ex ) {
114
+ Debug2::debug( '[Import] Failed to parse serialized data' );
115
+ return false;
116
  }
117
 
118
+ if ( ! $ori_data ) {
119
+ Debug2::debug( '[Import] Failed to import, no data' );
120
+ return false;
121
+ }
122
+ else {
123
+ Debug2::debug( '[Import] Importing data', $ori_data );
124
  }
125
 
126
+ $this->cls( 'Conf' )->update_confs( $ori_data );
127
 
128
 
129
  if ( ! $file ) {
130
+ Debug2::debug( 'Import: Imported ' . $_FILES[ 'ls_file' ][ 'name' ] );
131
 
132
+ $msg = sprintf( __( 'Imported setting file %s successfully.', 'litespeed-cache' ), $_FILES[ 'ls_file' ][ 'name' ] );
133
+ Admin_Display::succeed( $msg );
134
  }
135
  else {
136
+ Debug2::debug( 'Import: Imported ' . $file );
137
  }
138
 
139
+ return true;
140
 
141
  }
142
 
146
  * @since 2.6.3
147
  * @access public
148
  */
149
+ public function reset() {
150
+ $options = $this->cls( 'Conf' )->load_default_vals();
 
151
 
152
+ $this->cls( 'Conf' )->update_confs( $options );
153
 
154
+ Debug2::debug( '[Import] Reset successfully.' );
155
 
156
+ $msg = __( 'Reset successfully.', 'litespeed-cache' );
157
+ Admin_Display::succeed( $msg );
158
 
159
  }
160
 
164
  * @since 1.8.2
165
  * @access private
166
  */
167
+ private function _generate_filename() {
 
168
  // Generate filename
169
+ $parsed_home = parse_url( get_home_url() );
170
+ $filename = 'LSCWP_cfg-';
171
  if ( ! empty( $parsed_home[ 'host' ] ) ) {
172
+ $filename .= $parsed_home[ 'host' ] . '_';
173
  }
174
 
175
  if ( ! empty( $parsed_home[ 'path' ] ) ) {
176
+ $filename .= $parsed_home[ 'path' ] . '_';
177
  }
178
 
179
+ $filename = str_replace( '/', '_', $filename );
180
 
181
+ $filename .= '-' . date( 'Ymd_His' ) . '.data';
182
 
183
+ return $filename;
184
  }
185
 
186
  /**
src/lang.cls.php CHANGED
@@ -52,6 +52,8 @@ class Lang extends Base {
52
  $_lang_list = array(
53
  self::O_SERVER_IP => __( 'Server IP', 'litespeed-cache' ),
54
  self::O_API_KEY => __( 'Domain Key', 'litespeed-cache' ),
 
 
55
 
56
  self::O_CACHE => __( 'Enable Cache', 'litespeed-cache' ),
57
  self::O_CACHE_BROWSER => __( 'Browser Cache', 'litespeed-cache' ),
@@ -88,7 +90,7 @@ class Lang extends Base {
88
  self::O_OBJECT_GLOBAL_GROUPS => __( 'Global Groups', 'litespeed-cache' ),
89
  self::O_OBJECT_NON_PERSISTENT_GROUPS => __( 'Do Not Cache Groups', 'litespeed-cache' ),
90
  self::O_OBJECT_PERSISTENT => __( 'Persistent Connection', 'litespeed-cache' ),
91
- self::O_OBJECT_ADMIN => __( 'Cache Wp-Admin', 'litespeed-cache' ),
92
  self::O_OBJECT_TRANSIENTS => __( 'Store Transients', 'litespeed-cache' ),
93
 
94
  self::O_PURGE_ON_UPGRADE => __( 'Purge All On Upgrade', 'litespeed-cache' ),
@@ -113,14 +115,12 @@ class Lang extends Base {
113
  self::O_OPTM_JS_COMB_EXT_INL => __( 'JS Combine External and Inline', 'litespeed-cache' ),
114
  self::O_OPTM_JS_HTTP2 => __( 'JS HTTP/2 Push', 'litespeed-cache' ),
115
  self::O_OPTM_HTML_MIN => __( 'HTML Minify', 'litespeed-cache' ),
116
- self::O_OPTM_HTML_LAZY => __( 'HTML Lazyload Selectors', 'litespeed-cache' ),
117
  self::O_OPTM_CSS_ASYNC => __( 'Load CSS Asynchronously', 'litespeed-cache' ),
118
  self::O_OPTM_CCSS_PER_URL => __( 'CCSS Per URL', 'litespeed-cache' ),
119
  self::O_OPTM_CSS_ASYNC_INLINE => __( 'Inline CSS Async Lib', 'litespeed-cache' ),
120
  self::O_OPTM_CSS_FONT_DISPLAY => __( 'Font Display Optimization', 'litespeed-cache' ),
121
  self::O_OPTM_JS_DEFER => __( 'Load JS Deferred', 'litespeed-cache' ),
122
- self::O_OPTM_LOCALIZE => __( 'Localize Resources', 'litespeed-cache' ),
123
- self::O_OPTM_LOCALIZE_DOMAINS => __( 'Localization Files', 'litespeed-cache' ),
124
  self::O_OPTM_DNS_PREFETCH => __( 'DNS Prefetch', 'litespeed-cache' ),
125
  self::O_OPTM_DNS_PREFETCH_CTRL => __( 'DNS Prefetch Control', 'litespeed-cache' ),
126
  self::O_OPTM_CSS_EXC => __( 'CSS Excludes', 'litespeed-cache' ),
@@ -129,11 +129,14 @@ class Lang extends Base {
129
  self::O_OPTM_GGFONTS_ASYNC => __( 'Load Google Fonts Asynchronously', 'litespeed-cache' ),
130
  self::O_OPTM_GGFONTS_RM => __( 'Remove Google Fonts', 'litespeed-cache' ),
131
  self::O_OPTM_CCSS_CON => __( 'Critical CSS Rules', 'litespeed-cache' ),
 
 
132
  self::O_OPTM_JS_DEFER_EXC => __( 'JS Deferred Excludes', 'litespeed-cache' ),
 
133
  self::O_OPTM_EMOJI_RM => __( 'Remove WordPress Emoji', 'litespeed-cache' ),
134
- self::O_OPTM_NOSCRIPT_RM => __( 'Remove Noscript Tag', 'litespeed-cache' ),
135
  self::O_OPTM_EXC => __( 'URI Excludes', 'litespeed-cache' ),
136
- self::O_OPTM_GUEST_ONLY => __( 'Optimize for Guest Only', 'litespeed-cache' ),
137
  self::O_OPTM_EXC_ROLES => __( 'Role Excludes', 'litespeed-cache' ),
138
 
139
  self::O_DISCUSS_AVATAR_CACHE => __( 'Gravatar Cache', 'litespeed-cache' ),
52
  $_lang_list = array(
53
  self::O_SERVER_IP => __( 'Server IP', 'litespeed-cache' ),
54
  self::O_API_KEY => __( 'Domain Key', 'litespeed-cache' ),
55
+ self::O_GUEST_UAS => __( 'Guest Mode User Agents', 'litespeed-cache' ),
56
+ self::O_GUEST_IPS => __( 'Guest Mode IPs', 'litespeed-cache' ),
57
 
58
  self::O_CACHE => __( 'Enable Cache', 'litespeed-cache' ),
59
  self::O_CACHE_BROWSER => __( 'Browser Cache', 'litespeed-cache' ),
90
  self::O_OBJECT_GLOBAL_GROUPS => __( 'Global Groups', 'litespeed-cache' ),
91
  self::O_OBJECT_NON_PERSISTENT_GROUPS => __( 'Do Not Cache Groups', 'litespeed-cache' ),
92
  self::O_OBJECT_PERSISTENT => __( 'Persistent Connection', 'litespeed-cache' ),
93
+ self::O_OBJECT_ADMIN => __( 'Cache WP-Admin', 'litespeed-cache' ),
94
  self::O_OBJECT_TRANSIENTS => __( 'Store Transients', 'litespeed-cache' ),
95
 
96
  self::O_PURGE_ON_UPGRADE => __( 'Purge All On Upgrade', 'litespeed-cache' ),
115
  self::O_OPTM_JS_COMB_EXT_INL => __( 'JS Combine External and Inline', 'litespeed-cache' ),
116
  self::O_OPTM_JS_HTTP2 => __( 'JS HTTP/2 Push', 'litespeed-cache' ),
117
  self::O_OPTM_HTML_MIN => __( 'HTML Minify', 'litespeed-cache' ),
118
+ self::O_OPTM_HTML_LAZY => __( 'HTML Lazy Load Selectors', 'litespeed-cache' ),
119
  self::O_OPTM_CSS_ASYNC => __( 'Load CSS Asynchronously', 'litespeed-cache' ),
120
  self::O_OPTM_CCSS_PER_URL => __( 'CCSS Per URL', 'litespeed-cache' ),
121
  self::O_OPTM_CSS_ASYNC_INLINE => __( 'Inline CSS Async Lib', 'litespeed-cache' ),
122
  self::O_OPTM_CSS_FONT_DISPLAY => __( 'Font Display Optimization', 'litespeed-cache' ),
123
  self::O_OPTM_JS_DEFER => __( 'Load JS Deferred', 'litespeed-cache' ),
 
 
124
  self::O_OPTM_DNS_PREFETCH => __( 'DNS Prefetch', 'litespeed-cache' ),
125
  self::O_OPTM_DNS_PREFETCH_CTRL => __( 'DNS Prefetch Control', 'litespeed-cache' ),
126
  self::O_OPTM_CSS_EXC => __( 'CSS Excludes', 'litespeed-cache' ),
129
  self::O_OPTM_GGFONTS_ASYNC => __( 'Load Google Fonts Asynchronously', 'litespeed-cache' ),
130
  self::O_OPTM_GGFONTS_RM => __( 'Remove Google Fonts', 'litespeed-cache' ),
131
  self::O_OPTM_CCSS_CON => __( 'Critical CSS Rules', 'litespeed-cache' ),
132
+ self::O_OPTM_CCSS_SEP_POSTTYPE => __( 'Separate CCSS Cache Post Types', 'litespeed-cache' ),
133
+ self::O_OPTM_CCSS_SEP_URI => __( 'Separate CCSS Cache URIs', 'litespeed-cache' ),
134
  self::O_OPTM_JS_DEFER_EXC => __( 'JS Deferred Excludes', 'litespeed-cache' ),
135
+ self::O_OPTM_GM_JS_EXC => __( 'Guest Mode JS Excludes', 'litespeed-cache' ),
136
  self::O_OPTM_EMOJI_RM => __( 'Remove WordPress Emoji', 'litespeed-cache' ),
137
+ self::O_OPTM_NOSCRIPT_RM => __( 'Remove Noscript Tags', 'litespeed-cache' ),
138
  self::O_OPTM_EXC => __( 'URI Excludes', 'litespeed-cache' ),
139
+ self::O_OPTM_GUEST_ONLY => __( 'Optimize for Guests Only', 'litespeed-cache' ),
140
  self::O_OPTM_EXC_ROLES => __( 'Role Excludes', 'litespeed-cache' ),
141
 
142
  self::O_DISCUSS_AVATAR_CACHE => __( 'Gravatar Cache', 'litespeed-cache' ),
src/localization.cls.php DELETED
@@ -1,135 +0,0 @@
1
- <?php
2
- /**
3
- * The localization class.
4
- *
5
- * @since 3.3
6
- */
7
- namespace LiteSpeed;
8
-
9
- defined( 'WPINC' ) || exit;
10
-
11
- class Localization extends Base {
12
- /**
13
- * Localize Resources
14
- *
15
- * @since 3.3
16
- */
17
- public function serve_static( $uri ) {
18
- $url = 'https://' . $uri;
19
-
20
- if ( ! $this->conf( self::O_OPTM_LOCALIZE ) ) {
21
- // wp_redirect( $url );
22
- exit( 'Not supported' );
23
- }
24
-
25
- if ( substr( $url, -3 ) !== '.js' ) {
26
- // wp_redirect( $url );
27
- exit( 'Not supported' );
28
- }
29
-
30
- $match = false;
31
- $domains = $this->conf( self::O_OPTM_LOCALIZE_DOMAINS );
32
- foreach ( $domains as $v ) {
33
- if ( ! $v || strpos( $v, '#' ) === 0 ) {
34
- continue;
35
- }
36
-
37
- $type = 'js';
38
- $domain = $v;
39
- // Try to parse space splitted value
40
- if ( strpos( $v, ' ' ) ) {
41
- $v = explode( ' ', $v );
42
- if ( ! empty( $v[ 1 ] ) ) {
43
- $type = strtolower( $v[ 0 ] );
44
- $domain = $v[ 1 ];
45
- }
46
- }
47
-
48
- if ( strpos( $domain, 'https://' ) !== 0 ) {
49
- continue;
50
- }
51
-
52
- if ( $type != 'js' ) {
53
- continue;
54
- }
55
-
56
- if ( strpos( $url, $domain ) !== 0 ) {
57
- continue;
58
- }
59
-
60
- $match = true;
61
- break;
62
- }
63
-
64
- if ( ! $match ) {
65
- // wp_redirect( $url );
66
- exit( 'Not supported' );
67
- }
68
-
69
- Control::set_no_vary();
70
- Control::set_public_forced( 'Localized Resources' );
71
- Tag::add( Tag::TYPE_LOCALRES );
72
-
73
- header( 'Content-Type: application/javascript' );
74
-
75
- $res = wp_remote_get( $url );
76
- $content = wp_remote_retrieve_body( $res );
77
-
78
- if ( ! $content ) {
79
- $content = '/* Failed to load ' . $url . ' */';
80
- }
81
-
82
- echo $content;
83
-
84
- exit;
85
- }
86
-
87
-
88
-
89
- /**
90
- * Localize JS/Fonts
91
- *
92
- * @since 3.3
93
- * @access public
94
- */
95
- public function finalize( $content ) {
96
- if ( ! $this->conf( self::O_OPTM_LOCALIZE ) ) {
97
- return $content;
98
- }
99
-
100
- $domains = $this->conf( self::O_OPTM_LOCALIZE_DOMAINS );
101
- if ( ! $domains ) {
102
- return $content;
103
- }
104
-
105
- foreach ( $domains as $v ) {
106
- if ( ! $v || strpos( $v, '#' ) === 0 ) {
107
- continue;
108
- }
109
-
110
- $type = 'js';
111
- $domain = $v;
112
- // Try to parse space splitted value
113
- if ( strpos( $v, ' ' ) ) {
114
- $v = explode( ' ', $v );
115
- if ( ! empty( $v[ 1 ] ) ) {
116
- $type = strtolower( $v[ 0 ] );
117
- $domain = $v[ 1 ];
118
- }
119
- }
120
-
121
- if ( strpos( $domain, 'https://' ) !== 0 ) {
122
- continue;
123
- }
124
-
125
- if ( $type != 'js' ) {
126
- continue;
127
- }
128
-
129
- $content = str_replace( $domain, LITESPEED_STATIC_URL . '/localres/' . substr( $domain, 8 ), $content );
130
- }
131
-
132
- return $content;
133
- }
134
-
135
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/media.cls.php CHANGED
@@ -374,7 +374,7 @@ class Media extends Root {
374
  * @since 1.6.2
375
  * @access public
376
  */
377
- private function webp_support() {
378
  if ( ! empty( $_SERVER[ 'HTTP_ACCEPT' ] ) && strpos( $_SERVER[ 'HTTP_ACCEPT' ], 'image/webp' ) !== false ) {
379
  return true;
380
  }
@@ -491,7 +491,7 @@ class Media extends Root {
491
  foreach ( $html_list as $k => $v ) {
492
  $snippet = $cfg_trim_noscript ? '' : '<noscript>' . $v . '</noscript>';
493
  if ( $cfg_js_delay ) {
494
- $v = str_replace( ' src=', ' litespeed-src=', $v );
495
  }
496
  else {
497
  $v = str_replace( ' src=', ' data-src=', $v );
@@ -608,8 +608,9 @@ class Media extends Root {
608
  }
609
 
610
  // Add missing dimensions
611
- if ( $this->conf( Base::O_MEDIA_ADD_MISSING_SIZES ) ) {
612
  if ( empty( $attrs[ 'width' ] ) || $attrs[ 'width' ] == 'auto' || empty( $attrs[ 'height' ] ) || $attrs[ 'height' ] == 'auto' ) {
 
613
  $dimensions = $this->_detect_dimensions( $attrs[ 'src' ] );
614
  if ( $dimensions ) {
615
  $ori_width = $dimensions[ 0 ];
@@ -791,12 +792,14 @@ class Media extends Root {
791
 
792
  // parse srcset
793
  // todo: should apply this to cdn too
794
- if ( $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE_SRCSET ) ) {
795
  $content = Utility::srcset_replace( $content, array( $this, 'replace_webp' ) );
796
  }
797
 
798
  // Replace background-image
799
- $content = $this->replace_background_webp( $content );
 
 
800
 
801
  return $content;
802
  }
@@ -807,9 +810,7 @@ class Media extends Root {
807
  * @since 4.0
808
  */
809
  public function replace_background_webp( $content ) {
810
- if ( ! $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE ) ) {
811
- return $content;
812
- }
813
 
814
  // preg_match_all( '#background-image:(\s*)url\((.*)\)#iU', $content, $matches );
815
  preg_match_all( '#url\(([^)]+)\)#iU', $content, $matches );
@@ -844,7 +845,7 @@ class Media extends Root {
844
  * @access public
845
  */
846
  public function replace_webp( $url ) {
847
- Debug2::debug2( '[Media] webp replacing: ' . $url );
848
 
849
  if ( substr( $url, -5 ) == '.webp' ) {
850
  Debug2::debug2( '[Media] already webp' );
374
  * @since 1.6.2
375
  * @access public
376
  */
377
+ public function webp_support() {
378
  if ( ! empty( $_SERVER[ 'HTTP_ACCEPT' ] ) && strpos( $_SERVER[ 'HTTP_ACCEPT' ], 'image/webp' ) !== false ) {
379
  return true;
380
  }
491
  foreach ( $html_list as $k => $v ) {
492
  $snippet = $cfg_trim_noscript ? '' : '<noscript>' . $v . '</noscript>';
493
  if ( $cfg_js_delay ) {
494
+ $v = str_replace( ' src=', ' data-litespeed-src=', $v );
495
  }
496
  else {
497
  $v = str_replace( ' src=', ' data-src=', $v );
608
  }
609
 
610
  // Add missing dimensions
611
+ if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_MEDIA_ADD_MISSING_SIZES ) ) {
612
  if ( empty( $attrs[ 'width' ] ) || $attrs[ 'width' ] == 'auto' || empty( $attrs[ 'height' ] ) || $attrs[ 'height' ] == 'auto' ) {
613
+ Debug2::debug( '[Media] ⚠️ Missing sizes for image [src] ' . $attrs[ 'src' ] );
614
  $dimensions = $this->_detect_dimensions( $attrs[ 'src' ] );
615
  if ( $dimensions ) {
616
  $ori_width = $dimensions[ 0 ];
792
 
793
  // parse srcset
794
  // todo: should apply this to cdn too
795
+ if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE_SRCSET ) ) {
796
  $content = Utility::srcset_replace( $content, array( $this, 'replace_webp' ) );
797
  }
798
 
799
  // Replace background-image
800
+ if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE ) ) {
801
+ $content = $this->replace_background_webp( $content );
802
+ }
803
 
804
  return $content;
805
  }
810
  * @since 4.0
811
  */
812
  public function replace_background_webp( $content ) {
813
+ Debug2::debug2( '[Media] Start replacing bakcground WebP.' );
 
 
814
 
815
  // preg_match_all( '#background-image:(\s*)url\((.*)\)#iU', $content, $matches );
816
  preg_match_all( '#url\(([^)]+)\)#iU', $content, $matches );
845
  * @access public
846
  */
847
  public function replace_webp( $url ) {
848
+ Debug2::debug2( '[Media] webp replacing: ' . substr( $url, 0, 200 ) );
849
 
850
  if ( substr( $url, -5 ) == '.webp' ) {
851
  Debug2::debug2( '[Media] already webp' );
src/object-cache.cls.php CHANGED
@@ -13,7 +13,20 @@ defined( 'WPINC' ) || exit;
13
  require_once dirname( __DIR__ ) . '/autoload.php';
14
 
15
  class Object_Cache extends Root {
16
- private $_oc_data_file;
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  private $_conn;
18
  private $_cfg_enabled;
19
  private $_cfg_method;
@@ -29,8 +42,8 @@ class Object_Cache extends Root {
29
 
30
  private $_oc_driver = 'Memcached'; // Redis or Memcached
31
 
32
- private $_global_groups;
33
- private $_non_persistent_groups;
34
 
35
  /**
36
  * Init
@@ -42,8 +55,6 @@ class Object_Cache extends Root {
42
  public function __construct( $cfg = false ) {
43
  defined( 'LSCWP_LOG' ) && Debug2::debug2( '[Object] init' );
44
 
45
- $this->_oc_data_file = WP_CONTENT_DIR . '/.object-cache.ini';
46
-
47
  if ( $cfg ) {
48
  if ( ! is_array( $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] ) ) {
49
  $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] = explode( "\n", $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] );
@@ -91,20 +102,21 @@ class Object_Cache extends Root {
91
  }
92
  $this->_cfg_enabled = $this->conf( Base::O_OBJECT ) && class_exists( $this->_oc_driver ) && $this->_cfg_host;
93
  }
94
- elseif ( file_exists( $this->_oc_data_file ) ) { // Get cfg from oc_data_file
95
- $cfg = parse_ini_file( $this->_oc_data_file, true );
96
- $this->_cfg_method = ! empty( $cfg[ 'object_cache' ][ 'method' ] ) ? $cfg[ 'object_cache' ][ 'method' ] : false;
97
- $this->_cfg_host = $cfg[ 'object_cache' ][ 'host' ];
98
- $this->_cfg_port = $cfg[ 'object_cache' ][ 'port' ];
99
- $this->_cfg_life = ! empty( $cfg[ 'object_cache' ][ 'life' ] ) ? $cfg[ 'object_cache' ][ 'life' ] : $this->_default_life;
100
- $this->_cfg_persistent = ! empty( $cfg[ 'object_cache' ][ 'persistent' ] ) ? $cfg[ 'object_cache' ][ 'persistent' ] : false;
101
- $this->_cfg_admin = ! empty( $cfg[ 'object_cache' ][ 'cache_admin' ] ) ? $cfg[ 'object_cache' ][ 'cache_admin' ] : false;
102
- $this->_cfg_transients = ! empty( $cfg[ 'object_cache' ][ 'cache_transients' ] ) ? $cfg[ 'object_cache' ][ 'cache_transients' ] : false;
103
- $this->_cfg_db = ! empty( $cfg[ 'object_cache' ][ 'db' ] ) ? $cfg[ 'object_cache' ][ 'db' ] : 0;
104
- $this->_cfg_user = ! empty( $cfg[ 'object_cache' ][ 'user' ] ) ? $cfg[ 'object_cache' ][ 'user' ] : '';
105
- $this->_cfg_pswd = ! empty( $cfg[ 'object_cache' ][ 'pswd' ] ) ? $cfg[ 'object_cache' ][ 'pswd' ] : '';
106
- $this->_global_groups = ! empty( $cfg[ 'object_cache' ][ 'global_groups' ] ) ? explode( ',', $cfg[ 'object_cache' ][ 'global_groups' ] ) : array();
107
- $this->_non_persistent_groups = ! empty( $cfg[ 'object_cache' ][ 'non_persistent_groups' ] ) ? explode( ',', $cfg[ 'object_cache' ][ 'non_persistent_groups' ] ) : array();
 
108
 
109
  if ( $this->_cfg_method ) {
110
  $this->_oc_driver = 'Redis';
@@ -145,30 +157,6 @@ class Object_Cache extends Root {
145
  public function update_file( $options ) {
146
  $changed = false;
147
 
148
- // Update data file
149
- $data = "[object_cache]"
150
- . "\nmethod = " . $options[ Base::O_OBJECT_KIND ]
151
- . "\nhost = " . $options[ Base::O_OBJECT_HOST ]
152
- . "\nport = " . (int) $options[ Base::O_OBJECT_PORT ]
153
- . "\nlife = " . $options[ Base::O_OBJECT_LIFE ]
154
- . "\nuser = '" . $options[ Base::O_OBJECT_USER ] . "'"
155
- . "\npswd = '" . $options[ Base::O_OBJECT_PSWD ] . "'"
156
- . "\ndb = " . (int) $options[ Base::O_OBJECT_DB_ID ]
157
- . "\npersistent = " . ( $options[ Base::O_OBJECT_PERSISTENT ] ? 1 : 0 )
158
- . "\ncache_admin = " . ( $options[ Base::O_OBJECT_ADMIN ] ? 1 : 0 )
159
- . "\ncache_transients = " . ( $options[ Base::O_OBJECT_TRANSIENTS ] ? 1 : 0 )
160
- . "\nglobal_groups = " . implode( ',', $options[ Base::O_OBJECT_GLOBAL_GROUPS ] )
161
- . "\nnon_persistent_groups = " . implode( ',', $options[ Base::O_OBJECT_NON_PERSISTENT_GROUPS ] )
162
- ;
163
-
164
- $old_data = File::read( $this->_oc_data_file );
165
- if ( $old_data != $data ) {
166
- defined( 'LSCWP_LOG' ) && Debug2::debug( '[Settings] Update .object_cache.ini and flush object cache' );
167
- File::save( $this->_oc_data_file, $data );
168
-
169
- $changed = true;
170
- }
171
-
172
  // NOTE: When included in oc.php, `LSCWP_DIR` will show undefined, so this must be assigned/generated when used
173
  $_oc_ori_file = LSCWP_DIR . 'lib/object-cache.php';
174
  $_oc_wp_file = WP_CONTENT_DIR . '/object-cache.php';
@@ -204,11 +192,6 @@ class Object_Cache extends Root {
204
  defined( 'LSCWP_LOG' ) && Debug2::debug( '[Object] removing ' . $_oc_wp_file );
205
  unlink( $_oc_wp_file );
206
  }
207
-
208
- if ( file_exists( $this->_oc_data_file ) ) {
209
- Debug2::debug( '[Object] Removing ' . $this->_oc_data_file );
210
- unlink( $this->_oc_data_file );
211
- }
212
  }
213
 
214
  /**
13
  require_once dirname( __DIR__ ) . '/autoload.php';
14
 
15
  class Object_Cache extends Root {
16
+ const O_OBJECT = 'object';
17
+ const O_OBJECT_KIND = 'object-kind';
18
+ const O_OBJECT_HOST = 'object-host';
19
+ const O_OBJECT_PORT = 'object-port';
20
+ const O_OBJECT_LIFE = 'object-life';
21
+ const O_OBJECT_PERSISTENT = 'object-persistent';
22
+ const O_OBJECT_ADMIN = 'object-admin';
23
+ const O_OBJECT_TRANSIENTS = 'object-transients';
24
+ const O_OBJECT_DB_ID = 'object-db_id';
25
+ const O_OBJECT_USER = 'object-user';
26
+ const O_OBJECT_PSWD = 'object-pswd';
27
+ const O_OBJECT_GLOBAL_GROUPS = 'object-global_groups';
28
+ const O_OBJECT_NON_PERSISTENT_GROUPS = 'object-non_persistent_groups';
29
+
30
  private $_conn;
31
  private $_cfg_enabled;
32
  private $_cfg_method;
42
 
43
  private $_oc_driver = 'Memcached'; // Redis or Memcached
44
 
45
+ private $_global_groups = array();
46
+ private $_non_persistent_groups = array();
47
 
48
  /**
49
  * Init
55
  public function __construct( $cfg = false ) {
56
  defined( 'LSCWP_LOG' ) && Debug2::debug2( '[Object] init' );
57
 
 
 
58
  if ( $cfg ) {
59
  if ( ! is_array( $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] ) ) {
60
  $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] = explode( "\n", $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] );
102
  }
103
  $this->_cfg_enabled = $this->conf( Base::O_OBJECT ) && class_exists( $this->_oc_driver ) && $this->_cfg_host;
104
  }
105
+ elseif ( file_exists( WP_CONTENT_DIR . '/' . self::CONF_FILE ) ) { // Get cfg from _data_file
106
+ // Use self::const to avoid loading more classes
107
+ $cfg = json_decode( file_get_contents( WP_CONTENT_DIR . '/' . self::CONF_FILE ), true );
108
+ $this->_cfg_method = ! empty( $cfg[ self::O_OBJECT_KIND ] ) ? $cfg[ self::O_OBJECT_KIND ] : false;
109
+ $this->_cfg_host = $cfg[ self::O_OBJECT_HOST ];
110
+ $this->_cfg_port = $cfg[ self::O_OBJECT_PORT ];
111
+ $this->_cfg_life = ! empty( $cfg[ self::O_OBJECT_LIFE ] ) ? $cfg[ self::O_OBJECT_LIFE ] : $this->_default_life;
112
+ $this->_cfg_persistent = ! empty( $cfg[ self::O_OBJECT_PERSISTENT ] ) ? $cfg[ self::O_OBJECT_PERSISTENT ] : false;
113
+ $this->_cfg_admin = ! empty( $cfg[ self::O_OBJECT_ADMIN ] ) ? $cfg[ self::O_OBJECT_ADMIN ] : false;
114
+ $this->_cfg_transients = ! empty( $cfg[ self::O_OBJECT_TRANSIENTS ] ) ? $cfg[ self::O_OBJECT_TRANSIENTS ] : false;
115
+ $this->_cfg_db = ! empty( $cfg[ self::O_OBJECT_DB_ID ] ) ? $cfg[ self::O_OBJECT_DB_ID ] : 0;
116
+ $this->_cfg_user = ! empty( $cfg[ self::O_OBJECT_USER ] ) ? $cfg[ self::O_OBJECT_USER ] : '';
117
+ $this->_cfg_pswd = ! empty( $cfg[ self::O_OBJECT_PSWD ] ) ? $cfg[ self::O_OBJECT_PSWD ] : '';
118
+ $this->_global_groups = ! empty( $cfg[ self::O_OBJECT_GLOBAL_GROUPS ] ) ? $cfg[ self::O_OBJECT_GLOBAL_GROUPS ] : array();
119
+ $this->_non_persistent_groups = ! empty( $cfg[ self::O_OBJECT_NON_PERSISTENT_GROUPS ] ) ? $cfg[ self::O_OBJECT_NON_PERSISTENT_GROUPS ] : array();
120
 
121
  if ( $this->_cfg_method ) {
122
  $this->_oc_driver = 'Redis';
157
  public function update_file( $options ) {
158
  $changed = false;
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  // NOTE: When included in oc.php, `LSCWP_DIR` will show undefined, so this must be assigned/generated when used
161
  $_oc_ori_file = LSCWP_DIR . 'lib/object-cache.php';
162
  $_oc_wp_file = WP_CONTENT_DIR . '/object-cache.php';
192
  defined( 'LSCWP_LOG' ) && Debug2::debug( '[Object] removing ' . $_oc_wp_file );
193
  unlink( $_oc_wp_file );
194
  }
 
 
 
 
 
195
  }
196
 
197
  /**
src/optimize.cls.php CHANGED
@@ -84,13 +84,19 @@ class Optimize extends Base {
84
  add_filter( 'script_loader_src', array( $this, 'remove_query_strings' ), 999 );
85
  }
86
 
87
- /**
88
- * Exclude js from deferred setting
89
- * @since 1.5
90
- */
91
- if ( $this->cfg_js_defer && ! defined( 'LITESPEED_GUEST_OPTM' ) ) {
92
- add_filter( 'litespeed_optm_js_defer_exc', array( $this->cls( 'Data' ), 'load_js_defer_exc' ) );
93
- $this->cfg_js_defer_exc = apply_filters( 'litespeed_optm_js_defer_exc', $this->conf( self::O_OPTM_JS_DEFER_EXC ) );
 
 
 
 
 
 
94
  }
95
 
96
  /**
@@ -256,6 +262,7 @@ class Optimize extends Base {
256
  do_action( 'litespeed_optm' );
257
 
258
  // Parse css from content
 
259
  if ( $this->cfg_css_min || $this->cfg_css_comb || $this->cfg_http2_css || $this->cfg_ggfonts_rm || $this->cfg_css_async || $this->cfg_ggfonts_async || $this->_conf_css_font_display ) {
260
  add_filter( 'litespeed_optimize_css_excludes', array( $this->cls( 'Data' ), 'load_css_exc' ) );
261
  list( $src_list, $html_list ) = $this->_parse_css();
@@ -312,6 +319,7 @@ class Optimize extends Base {
312
  }
313
 
314
  // Parse js from buffer as needed
 
315
  if ( $this->cfg_js_min || $this->cfg_js_comb || $this->cfg_http2_js || $this->cfg_js_defer ) {
316
  add_filter( 'litespeed_optimize_js_excludes', array( $this->cls( 'Data' ), 'load_js_exc' ) );
317
  list( $src_list, $html_list ) = $this->_parse_js();
@@ -401,12 +409,6 @@ class Optimize extends Base {
401
  // Inject JS Delay lib
402
  $this->_maybe_js_delay();
403
 
404
- /**
405
- * Localize GG/FB JS/Fonts
406
- * @since 3.3
407
- */
408
- $this->content = $this->cls( 'Localization' )->finalize( $this->content );
409
-
410
  /**
411
  * HTML Lazyload
412
  */
@@ -459,7 +461,7 @@ class Optimize extends Base {
459
  */
460
  private function _build_js_tag( $src ) {
461
  if ( $this->cfg_js_defer === 2 ) {
462
- return '<script data-optimized="1" type="litespeed/javascript" src="' . $src . '"></script>';
463
  }
464
 
465
  if ( $this->cfg_js_defer ) {
@@ -655,13 +657,15 @@ class Optimize extends Base {
655
  private function _src_queue_handler( $src_list, $html_list, $file_type = 'css' ) {
656
  $html_list_ori = $html_list;
657
 
 
 
658
  $tag = $file_type == 'css' ? 'link' : 'script';
659
  foreach ( $src_list as $key => $src_info ) {
660
  // Minify inline CSS/JS
661
  if ( ! empty( $src_info[ 'inl' ] ) ) {
662
  if ( $file_type == 'css' ) {
663
  $code = Optimizer::minify_css( $src_info[ 'src' ] );
664
- $code = $this->cls( 'Media' )->replace_background_webp( $code );
665
  $snippet = str_replace( $src_info[ 'src' ], $code, $html_list[ $key ] );
666
  }
667
  else {
@@ -903,8 +907,8 @@ class Optimize extends Base {
903
  $attrs = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $attrs );
904
  }
905
  $this->i2++;
906
- return '<script' . $attrs . ' type="litespeed/javascript" litespeed_i="' . $this->i2 . '">' . $con . '</script>';
907
- // return '<script' . $attrs . ' type="litespeed/javascript" litespeed_i="' . $this->i2 . '" src="data:text/javascript;base64,' . base64_encode( $con ) . '"></script>';
908
  // return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
909
  }
910
 
@@ -1140,7 +1144,7 @@ class Optimize extends Base {
1140
  $ori = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $ori );
1141
  }
1142
  $this->i2++;
1143
- return str_replace( ' src=', ' type="litespeed/javascript" litespeed_i="' . $this->i2 . '" src=', $ori );
1144
  }
1145
 
1146
  return str_replace( '></script>', ' defer data-deferred="1"></script>', $ori );
84
  add_filter( 'script_loader_src', array( $this, 'remove_query_strings' ), 999 );
85
  }
86
 
87
+ // GM JS exclude @since 4.1
88
+ if ( defined( 'LITESPEED_GUEST_OPTM' ) ) {
89
+ $this->cfg_js_defer_exc = apply_filters( 'litespeed_optm_gm_js_exc', $this->conf( self::O_OPTM_GM_JS_EXC ) );
90
+ }
91
+ else {
92
+ /**
93
+ * Exclude js from deferred setting
94
+ * @since 1.5
95
+ */
96
+ if ( $this->cfg_js_defer ) {
97
+ add_filter( 'litespeed_optm_js_defer_exc', array( $this->cls( 'Data' ), 'load_js_defer_exc' ) );
98
+ $this->cfg_js_defer_exc = apply_filters( 'litespeed_optm_js_defer_exc', $this->conf( self::O_OPTM_JS_DEFER_EXC ) );
99
+ }
100
  }
101
 
102
  /**
262
  do_action( 'litespeed_optm' );
263
 
264
  // Parse css from content
265
+ $src_list = false;
266
  if ( $this->cfg_css_min || $this->cfg_css_comb || $this->cfg_http2_css || $this->cfg_ggfonts_rm || $this->cfg_css_async || $this->cfg_ggfonts_async || $this->_conf_css_font_display ) {
267
  add_filter( 'litespeed_optimize_css_excludes', array( $this->cls( 'Data' ), 'load_css_exc' ) );
268
  list( $src_list, $html_list ) = $this->_parse_css();
319
  }
320
 
321
  // Parse js from buffer as needed
322
+ $src_list = false;
323
  if ( $this->cfg_js_min || $this->cfg_js_comb || $this->cfg_http2_js || $this->cfg_js_defer ) {
324
  add_filter( 'litespeed_optimize_js_excludes', array( $this->cls( 'Data' ), 'load_js_exc' ) );
325
  list( $src_list, $html_list ) = $this->_parse_js();
409
  // Inject JS Delay lib
410
  $this->_maybe_js_delay();
411
 
 
 
 
 
 
 
412
  /**
413
  * HTML Lazyload
414
  */
461
  */
462
  private function _build_js_tag( $src ) {
463
  if ( $this->cfg_js_defer === 2 ) {
464
+ return '<script data-optimized="1" type="litespeed/javascript" data-src="' . $src . '"></script>';
465
  }
466
 
467
  if ( $this->cfg_js_defer ) {
657
  private function _src_queue_handler( $src_list, $html_list, $file_type = 'css' ) {
658
  $html_list_ori = $html_list;
659
 
660
+ $can_webp = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE );
661
+
662
  $tag = $file_type == 'css' ? 'link' : 'script';
663
  foreach ( $src_list as $key => $src_info ) {
664
  // Minify inline CSS/JS
665
  if ( ! empty( $src_info[ 'inl' ] ) ) {
666
  if ( $file_type == 'css' ) {
667
  $code = Optimizer::minify_css( $src_info[ 'src' ] );
668
+ $can_webp && $code = $this->cls( 'Media' )->replace_background_webp( $code );
669
  $snippet = str_replace( $src_info[ 'src' ], $code, $html_list[ $key ] );
670
  }
671
  else {
907
  $attrs = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $attrs );
908
  }
909
  $this->i2++;
910
+ return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . $this->i2 . '">' . $con . '</script>';
911
+ // return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . $this->i2 . '" src="data:text/javascript;base64,' . base64_encode( $con ) . '"></script>';
912
  // return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
913
  }
914
 
1144
  $ori = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $ori );
1145
  }
1146
  $this->i2++;
1147
+ return str_replace( ' src=', ' type="litespeed/javascript" data-i="' . $this->i2 . '" data-src=', $ori );
1148
  }
1149
 
1150
  return str_replace( '></script>', ' defer data-deferred="1"></script>', $ori );
src/optimizer.cls.php CHANGED
@@ -154,7 +154,10 @@ class Optimizer extends Root {
154
 
155
  $content = $this->cls( 'CDN' )->finalize( $content );
156
 
157
- $content = $this->cls( 'Media' )->replace_background_webp( $content );
 
 
 
158
  }
159
  else {
160
  if ( $minify ) {
154
 
155
  $content = $this->cls( 'CDN' )->finalize( $content );
156
 
157
+ if ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE ) ) {
158
+ $content = $this->cls( 'Media' )->replace_background_webp( $content );
159
+ }
160
+
161
  }
162
  else {
163
  if ( $minify ) {
src/placeholder.cls.php CHANGED
@@ -35,7 +35,7 @@ class Placeholder extends Base {
35
  */
36
  public function __construct() {
37
  $this->_conf_placeholder_resp = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_MEDIA_PLACEHOLDER_RESP );
38
- $this->_conf_placeholder_resp_svg = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_MEDIA_PLACEHOLDER_RESP_SVG );
39
  $this->_conf_lqip = ! defined( 'LITESPEED_GUEST_OPTM' ) && $this->conf( self::O_MEDIA_LQIP );
40
  $this->_conf_lqip_qual = $this->conf( self::O_MEDIA_LQIP_QUAL );
41
  $this->_conf_lqip_min_w = $this->conf( self::O_MEDIA_LQIP_MIN_W );
@@ -250,28 +250,53 @@ class Placeholder extends Base {
250
  $tmp_placeholder = $this->_generate_placeholder_locally( $size );
251
 
252
  // Store it to prepare for cron
253
- if ( empty( $this->_summary[ 'queue' ] ) ) {
254
- $this->_summary[ 'queue' ] = array();
255
- }
256
- if ( in_array( $arr_key, $this->_summary[ 'queue' ] ) ) {
257
  Debug2::debug2( '[LQIP] already in queue' );
258
 
259
  return $tmp_placeholder;
260
  }
261
 
262
- if ( count( $this->_summary[ 'queue' ] ) > 100 ) {
263
  Debug2::debug2( '[LQIP] queue is full' );
264
 
265
  return $tmp_placeholder;
266
  }
267
 
268
- $this->_summary[ 'queue' ][] = $arr_key;
269
-
270
  Debug2::debug( '[LQIP] Added placeholder queue' );
271
 
272
- self::save_summary();
273
  return $tmp_placeholder;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
 
 
275
  }
276
 
277
  /**
@@ -338,7 +363,10 @@ class Placeholder extends Base {
338
  */
339
  public static function cron( $continue = false ) {
340
  $_instance = self::cls();
341
- if ( empty( $_instance->_summary[ 'queue' ] ) ) {
 
 
 
342
  return;
343
  }
344
 
@@ -350,7 +378,7 @@ class Placeholder extends Base {
350
  }
351
  }
352
 
353
- foreach ( $_instance->_summary[ 'queue' ] as $v ) {
354
  Debug2::debug( '[LQIP] cron job [size] ' . $v );
355
 
356
  $_instance->_generate_placeholder( $v );
@@ -422,7 +450,7 @@ class Placeholder extends Base {
422
 
423
  // CHeck if the image is 404 first
424
  if ( File::is_404( $req_data[ 'url' ] ) ) {
425
- $this->_popup_and_save( $raw_size_and_src );
426
  $this->_append_exc( $src );
427
  Debug2::debug( '[LQIP] 404 before request [src] ' . $req_data[ 'url' ] );
428
  return $this->_generate_placeholder_locally( $size );
@@ -439,7 +467,7 @@ class Placeholder extends Base {
439
 
440
  if ( empty( $json[ 'lqip' ] ) || strpos( $json[ 'lqip' ], 'data:image/svg+xml' ) !== 0 ) {
441
  // image error, pop up the current queue
442
- $this->_popup_and_save( $raw_size_and_src );
443
  $this->_append_exc( $src );
444
  Debug2::debug( '[LQIP] wrong response format', $json );
445
 
@@ -458,6 +486,7 @@ class Placeholder extends Base {
458
  $this->_summary[ 'last_spent' ] = time() - $this->_summary[ 'curr_request' ];
459
  $this->_summary[ 'last_request' ] = $this->_summary[ 'curr_request' ];
460
  $this->_summary[ 'curr_request' ] = 0;
 
461
  $this->_popup_and_save( $raw_size_and_src );
462
 
463
  Debug2::debug( '[LQIP] saved LQIP ' . $file );
@@ -476,6 +505,8 @@ class Placeholder extends Base {
476
  return true;
477
  }
478
 
 
 
479
  return false;
480
  }
481
 
@@ -489,25 +520,6 @@ class Placeholder extends Base {
489
  $val[] = $src;
490
  $this->cls( 'Conf' )->update( self::O_MEDIA_LQIP_EXC, $val );
491
  Debug2::debug( '[LQIP] Appended to LQIP Excludes [URL] ' . $src );
492
-
493
- if ( ! empty( $this->_summary[ 'queue' ] ) ) {
494
- $changed = false;
495
- foreach ( $this->_summary[ 'queue' ] as $k => $raw_size_and_src ) {
496
- $size_and_src = explode( ' ', $raw_size_and_src, 2 );
497
- if ( empty( $size_and_src[ 1 ] ) ) {
498
- continue;
499
- }
500
-
501
- if ( $size_and_src[ 1 ] == $src ) {
502
- unset( $this->_summary[ 'queue' ][ $k ] );
503
- $changed = true;
504
- }
505
- }
506
-
507
- if ( $changed ) {
508
- self::save_summary();
509
- }
510
- }
511
  }
512
 
513
  /**
@@ -515,12 +527,35 @@ class Placeholder extends Base {
515
  *
516
  * @since 3.0
517
  */
518
- private function _popup_and_save( $raw_size_and_src ) {
519
- if ( ! empty( $this->_summary[ 'queue' ] ) && in_array( $raw_size_and_src, $this->_summary[ 'queue' ] ) ) {
520
- unset( $this->_summary[ 'queue' ][ array_search( $raw_size_and_src, $this->_summary[ 'queue' ] ) ] );
 
521
  }
522
 
523
- self::save_summary();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  }
525
 
526
  /**
@@ -529,12 +564,11 @@ class Placeholder extends Base {
529
  * @since 3.4
530
  */
531
  public function clear_q() {
532
- if ( empty( $this->_summary[ 'queue' ] ) ) {
533
- return;
534
- }
535
 
536
- $this->_summary[ 'queue' ] = array();
537
- self::save_summary();
 
538
 
539
  $msg = __( 'Queue cleared successfully.', 'litespeed-cache' );
540
  Admin_Display::succeed( $msg );
35
  */
36
  public function __construct() {
37
  $this->_conf_placeholder_resp = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_MEDIA_PLACEHOLDER_RESP );
38
+ $this->_conf_placeholder_resp_svg = $this->conf( self::O_MEDIA_PLACEHOLDER_RESP_SVG );
39
  $this->_conf_lqip = ! defined( 'LITESPEED_GUEST_OPTM' ) && $this->conf( self::O_MEDIA_LQIP );
40
  $this->_conf_lqip_qual = $this->conf( self::O_MEDIA_LQIP_QUAL );
41
  $this->_conf_lqip_min_w = $this->conf( self::O_MEDIA_LQIP_MIN_W );
250
  $tmp_placeholder = $this->_generate_placeholder_locally( $size );
251
 
252
  // Store it to prepare for cron
253
+ $queue = $this->load_queue();
254
+ if ( in_array( $arr_key, $queue ) ) {
 
 
255
  Debug2::debug2( '[LQIP] already in queue' );
256
 
257
  return $tmp_placeholder;
258
  }
259
 
260
+ if ( count( $queue ) > 500 ) {
261
  Debug2::debug2( '[LQIP] queue is full' );
262
 
263
  return $tmp_placeholder;
264
  }
265
 
266
+ $queue[] = $arr_key;
267
+ $this->save_queue( $queue );
268
  Debug2::debug( '[LQIP] Added placeholder queue' );
269
 
 
270
  return $tmp_placeholder;
271
+ }
272
+
273
+ /**
274
+ * Load current queues from data file
275
+ *
276
+ * @since 4.1
277
+ */
278
+ public function load_queue() {
279
+ $static_path = LITESPEED_STATIC_DIR . '/lqip/.litespeed_conf.dat';
280
+
281
+ $queue = array();
282
+ if ( file_exists( $static_path ) ) {
283
+ $queue = json_decode( file_get_contents( $static_path ), true );
284
+ }
285
+
286
+ return $queue;
287
+ }
288
+
289
+ /**
290
+ * Save current queues to data file
291
+ *
292
+ * @since 4.1
293
+ */
294
+ public function save_queue( $list ) {
295
+ $static_path = LITESPEED_STATIC_DIR . '/lqip/.litespeed_conf.dat';
296
+
297
+ $data = json_encode( $list );
298
 
299
+ File::save( $static_path, $data, true );
300
  }
301
 
302
  /**
363
  */
364
  public static function cron( $continue = false ) {
365
  $_instance = self::cls();
366
+
367
+ $queue = $_instance->load_queue();
368
+
369
+ if ( empty( $queue ) ) {
370
  return;
371
  }
372
 
378
  }
379
  }
380
 
381
+ foreach ( $queue as $v ) {
382
  Debug2::debug( '[LQIP] cron job [size] ' . $v );
383
 
384
  $_instance->_generate_placeholder( $v );
450
 
451
  // CHeck if the image is 404 first
452
  if ( File::is_404( $req_data[ 'url' ] ) ) {
453
+ $this->_popup_and_save( $raw_size_and_src, true );
454
  $this->_append_exc( $src );
455
  Debug2::debug( '[LQIP] 404 before request [src] ' . $req_data[ 'url' ] );
456
  return $this->_generate_placeholder_locally( $size );
467
 
468
  if ( empty( $json[ 'lqip' ] ) || strpos( $json[ 'lqip' ], 'data:image/svg+xml' ) !== 0 ) {
469
  // image error, pop up the current queue
470
+ $this->_popup_and_save( $raw_size_and_src, true );
471
  $this->_append_exc( $src );
472
  Debug2::debug( '[LQIP] wrong response format', $json );
473
 
486
  $this->_summary[ 'last_spent' ] = time() - $this->_summary[ 'curr_request' ];
487
  $this->_summary[ 'last_request' ] = $this->_summary[ 'curr_request' ];
488
  $this->_summary[ 'curr_request' ] = 0;
489
+ self::save_summary();
490
  $this->_popup_and_save( $raw_size_and_src );
491
 
492
  Debug2::debug( '[LQIP] saved LQIP ' . $file );
505
  return true;
506
  }
507
 
508
+ Debug2::debug2( '[LQIP] Size too small' );
509
+
510
  return false;
511
  }
512
 
520
  $val[] = $src;
521
  $this->cls( 'Conf' )->update( self::O_MEDIA_LQIP_EXC, $val );
522
  Debug2::debug( '[LQIP] Appended to LQIP Excludes [URL] ' . $src );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
  }
524
 
525
  /**
527
  *
528
  * @since 3.0
529
  */
530
+ private function _popup_and_save( $raw_size_and_src, $append_to_exc = false ) {
531
+ $queue = $this->load_queue();
532
+ if ( ! empty( $queue ) && in_array( $raw_size_and_src, $queue ) ) {
533
+ unset( $queue[ array_search( $raw_size_and_src, $queue ) ] );
534
  }
535
 
536
+ if ( $append_to_exc ) {
537
+ $size_and_src = explode( ' ', $raw_size_and_src, 2 );
538
+ $this_src = $size_and_src[ 1 ];
539
+
540
+ // Append to lqip exc setting first
541
+ $this->_append_exc( $this_src );
542
+
543
+ // Check if other queues contain this src or not
544
+ if ( $queue ) {
545
+ foreach ( $queue as $k => $raw_size_and_src ) {
546
+ $size_and_src = explode( ' ', $raw_size_and_src, 2 );
547
+ if ( empty( $size_and_src[ 1 ] ) ) {
548
+ continue;
549
+ }
550
+
551
+ if ( $size_and_src[ 1 ] == $this_src ) {
552
+ unset( $queue[ $k ] );
553
+ }
554
+ }
555
+ }
556
+ }
557
+
558
+ $this->save_queue( $queue );
559
  }
560
 
561
  /**
564
  * @since 3.4
565
  */
566
  public function clear_q() {
567
+ $static_path = LITESPEED_STATIC_DIR . '/lqip/.litespeed_conf.dat';
 
 
568
 
569
+ if ( file_exists( $static_path ) ) {
570
+ unlink( $static_path );
571
+ }
572
 
573
  $msg = __( 'Queue cleared successfully.', 'litespeed-cache' );
574
  Admin_Display::succeed( $msg );
src/purge.cls.php CHANGED
@@ -21,7 +21,6 @@ class Purge extends Base {
21
  const TYPE_PURGE_ALL = 'purge_all';
22
  const TYPE_PURGE_ALL_LSCACHE = 'purge_all_lscache';
23
  const TYPE_PURGE_ALL_CSSJS = 'purge_all_cssjs';
24
- const TYPE_PURGE_ALL_LOCALRES = 'purge_all_localres';
25
  const TYPE_PURGE_ALL_CCSS = 'purge_all_ccss';
26
  const TYPE_PURGE_ALL_LQIP = 'purge_all_lqip';
27
  const TYPE_PURGE_ALL_AVATAR = 'purge_all_avatar';
@@ -96,10 +95,6 @@ class Purge extends Base {
96
  $this->_purge_all_cssjs();
97
  break;
98
 
99
- case self::TYPE_PURGE_ALL_LOCALRES:
100
- $this->_purge_all_localres();
101
- break;
102
-
103
  case self::TYPE_PURGE_ALL_CCSS:
104
  $this->_purge_all_ccss();
105
  break;
@@ -162,7 +157,6 @@ class Purge extends Base {
162
  private function _purge_all( $reason = false ) {
163
  $this->_purge_all_lscache( true );
164
  $this->_purge_all_cssjs( true );
165
- $this->_purge_all_localres( true );
166
  // $this->_purge_all_ccss( true );
167
  // $this->_purge_all_lqip( true );
168
  $this->_purge_all_object( true );
@@ -256,23 +250,6 @@ class Purge extends Base {
256
  }
257
  }
258
 
259
- /**
260
- * Delete all localized JS
261
- *
262
- * @since 3.3
263
- * @access private
264
- */
265
- private function _purge_all_localres( $silence = false ) {
266
- do_action( 'litespeed_purged_all_localres' );
267
-
268
- $this->_add( Tag::TYPE_LOCALRES );
269
-
270
- if ( ! $silence ) {
271
- $msg = __( 'Notified LiteSpeed Web Server to purge localized resource entries.', 'litespeed-cache' );
272
- ! defined( 'LITESPEED_PURGE_SILENT' ) && Admin_Display::succeed( $msg );
273
- }
274
- }
275
-
276
  /**
277
  * Alerts LiteSpeed Web Server to purge pages.
278
  *
21
  const TYPE_PURGE_ALL = 'purge_all';
22
  const TYPE_PURGE_ALL_LSCACHE = 'purge_all_lscache';
23
  const TYPE_PURGE_ALL_CSSJS = 'purge_all_cssjs';
 
24
  const TYPE_PURGE_ALL_CCSS = 'purge_all_ccss';
25
  const TYPE_PURGE_ALL_LQIP = 'purge_all_lqip';
26
  const TYPE_PURGE_ALL_AVATAR = 'purge_all_avatar';
95
  $this->_purge_all_cssjs();
96
  break;
97
 
 
 
 
 
98
  case self::TYPE_PURGE_ALL_CCSS:
99
  $this->_purge_all_ccss();
100
  break;
157
  private function _purge_all( $reason = false ) {
158
  $this->_purge_all_lscache( true );
159
  $this->_purge_all_cssjs( true );
 
160
  // $this->_purge_all_ccss( true );
161
  // $this->_purge_all_lqip( true );
162
  $this->_purge_all_object( true );
250
  }
251
  }
252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  /**
254
  * Alerts LiteSpeed Web Server to purge pages.
255
  *
src/root.cls.php CHANGED
@@ -9,6 +9,7 @@ namespace LiteSpeed;
9
  defined( 'WPINC' ) || exit;
10
 
11
  abstract class Root {
 
12
  // Instance set
13
  private static $_instances;
14
 
9
  defined( 'WPINC' ) || exit;
10
 
11
  abstract class Root {
12
+ const CONF_FILE = '.litespeed_conf.dat';
13
  // Instance set
14
  private static $_instances;
15
 
src/router.cls.php CHANGED
@@ -708,10 +708,6 @@ class Router extends Base {
708
  $this->cls( 'Avatar' )->serve_static( $path[ 1 ] );
709
  break;
710
 
711
- case 'localres':
712
- $this->cls( 'Localization' )->serve_static( $path[ 1 ] );
713
- break;
714
-
715
  default :
716
  break;
717
  }
708
  $this->cls( 'Avatar' )->serve_static( $path[ 1 ] );
709
  break;
710
 
 
 
 
 
711
  default :
712
  break;
713
  }
src/tag.cls.php CHANGED
@@ -29,7 +29,6 @@ class Tag extends Root {
29
  const TYPE_REST = 'REST';
30
  const TYPE_LIST = 'LIST';
31
  const TYPE_MIN = 'MIN';
32
- const TYPE_LOCALRES = 'LOCALRES';
33
 
34
  const X_HEADER = 'X-LiteSpeed-Tag';
35
 
@@ -337,6 +336,10 @@ class Tag extends Root {
337
  * @return string empty string if empty, otherwise the cache tags header.
338
  */
339
  public function output( $no_finalize = false ) {
 
 
 
 
340
  if ( ! $no_finalize ) {
341
  self::_finalize();
342
  }
29
  const TYPE_REST = 'REST';
30
  const TYPE_LIST = 'LIST';
31
  const TYPE_MIN = 'MIN';
 
32
 
33
  const X_HEADER = 'X-LiteSpeed-Tag';
34
 
336
  * @return string empty string if empty, otherwise the cache tags header.
337
  */
338
  public function output( $no_finalize = false ) {
339
+ if ( defined( 'LSCACHE_NO_CACHE' ) && LSCACHE_NO_CACHE ) {
340
+ return;
341
+ }
342
+
343
  if ( ! $no_finalize ) {
344
  self::_finalize();
345
  }
src/task.cls.php CHANGED
@@ -20,6 +20,11 @@ class Task extends Root {
20
  Base::O_CRAWLER => array( 'name' => 'litespeed_task_crawler', 'hook' => 'LiteSpeed\Crawler::start' ), // Set crawler to last one to use above results
21
  );
22
 
 
 
 
 
 
23
  const FITLER_CRAWLER = 'litespeed_crawl_filter';
24
  const FITLER = 'litespeed_filter';
25
 
@@ -34,25 +39,31 @@ class Task extends Root {
34
 
35
  add_filter( 'cron_schedules', array( $this, 'lscache_cron_filter' ) );
36
 
 
 
37
  foreach ( self::$_triggers as $id => $trigger ) {
38
- if ( $this->conf( $id ) ) {
39
- // Special check for crawler
40
- if ( $id == Base::O_CRAWLER ) {
41
- if ( ! Router::can_crawl() ) {
42
- continue;
43
- }
44
-
45
- add_filter( 'cron_schedules', array( $this, 'lscache_cron_filter_crawler' ) );
46
  }
 
47
 
48
- if( ! wp_next_scheduled( $trigger[ 'name' ] ) ) {
49
- Debug2::debug( '⏰ Cron hook register [name] ' . $trigger[ 'name' ] );
50
-
51
- wp_schedule_event( time(), $id == Base::O_CRAWLER ? self::FITLER_CRAWLER : self::FITLER, $trigger[ 'name' ] );
52
  }
53
 
54
- add_action( $trigger[ 'name' ], $trigger[ 'hook' ] );
55
  }
 
 
 
 
 
 
 
 
56
  }
57
 
58
  }
20
  Base::O_CRAWLER => array( 'name' => 'litespeed_task_crawler', 'hook' => 'LiteSpeed\Crawler::start' ), // Set crawler to last one to use above results
21
  );
22
 
23
+ private static $_guest_options = array(
24
+ Base::O_OPTM_CSS_ASYNC,
25
+ Base::O_OPTM_UCSS,
26
+ );
27
+
28
  const FITLER_CRAWLER = 'litespeed_crawl_filter';
29
  const FITLER = 'litespeed_filter';
30
 
39
 
40
  add_filter( 'cron_schedules', array( $this, 'lscache_cron_filter' ) );
41
 
42
+ $guest_optm = $this->conf( Base::O_GUEST ) && $this->conf( Base::O_GUEST_OPTM );
43
+
44
  foreach ( self::$_triggers as $id => $trigger ) {
45
+ if ( ! $this->conf( $id ) ) {
46
+ if ( ! $guest_optm || ! in_array( $id, self::$_guest_options ) ) {
47
+ continue;
 
 
 
 
 
48
  }
49
+ }
50
 
51
+ // Special check for crawler
52
+ if ( $id == Base::O_CRAWLER ) {
53
+ if ( ! Router::can_crawl() ) {
54
+ continue;
55
  }
56
 
57
+ add_filter( 'cron_schedules', array( $this, 'lscache_cron_filter_crawler' ) );
58
  }
59
+
60
+ if( ! wp_next_scheduled( $trigger[ 'name' ] ) ) {
61
+ Debug2::debug( '⏰ Cron hook register [name] ' . $trigger[ 'name' ] );
62
+
63
+ wp_schedule_event( time(), $id == Base::O_CRAWLER ? self::FITLER_CRAWLER : self::FITLER, $trigger[ 'name' ] );
64
+ }
65
+
66
+ add_action( $trigger[ 'name' ], $trigger[ 'hook' ] );
67
  }
68
 
69
  }
src/vary.cls.php CHANGED
@@ -136,6 +136,11 @@ class Vary extends Root {
136
  * @since 4.0
137
  */
138
  private function _maybe_guest_mode() {
 
 
 
 
 
139
  if ( ! $this->conf( Base::O_GUEST ) ) {
140
  return;
141
  }
@@ -159,6 +164,8 @@ class Vary extends Root {
159
  }
160
 
161
  // If is the request to update vary, then no guest
 
 
162
  if ( ! empty( $_GET[ 'litespeed_guest' ] ) ) {
163
  return;
164
  }
@@ -176,118 +183,27 @@ class Vary extends Root {
176
  * Update Guest vary
177
  *
178
  * @since 4.0
 
179
  */
180
  public function update_guest_vary() {
181
- if ( $this->_always_guest() ) {
182
- ! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', true );
 
 
 
 
183
  Debug2::debug( '[Vary] 🤠🤠 Guest' );
184
  echo '[]';
185
  exit;
186
  }
187
 
188
- $vary = $this->finalize_default_vary();
189
-
190
- // save it
191
- $expire = time() + 2 * DAY_IN_SECONDS;
192
-
193
- $this->_cookie( $vary, $expire );
194
- Debug2::debug( "[Vary] update guest vary set_cookie ---> $vary" );
195
 
196
  // return json
197
  echo json_encode( array( 'reload' => 'yes' ) );
198
  exit;
199
  }
200
 
201
- /**
202
- * Detect if is a guest visitor
203
- *
204
- * @since 4.0
205
- */
206
- private function _always_guest() {
207
- if ( empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ) {
208
- return false;
209
- }
210
-
211
- $match = preg_match( '#Page Speed|Lighthouse|GTmetrix|Google|Pingdom|bot#i', $_SERVER[ 'HTTP_USER_AGENT' ] );
212
- if ( $match ) {
213
- return true;
214
- }
215
-
216
- $ips = [
217
- '208.70.247.157',
218
- '172.255.48.130',
219
- '172.255.48.131',
220
- '172.255.48.132',
221
- '172.255.48.133',
222
- '172.255.48.134',
223
- '172.255.48.135',
224
- '172.255.48.136',
225
- '172.255.48.137',
226
- '172.255.48.138',
227
- '172.255.48.139',
228
- '172.255.48.140',
229
- '172.255.48.141',
230
- '172.255.48.142',
231
- '172.255.48.143',
232
- '172.255.48.144',
233
- '172.255.48.145',
234
- '172.255.48.146',
235
- '172.255.48.147',
236
- '52.229.122.240',
237
- '104.214.72.101',
238
- '13.66.7.11',
239
- '13.85.24.83',
240
- '13.85.24.90',
241
- '13.85.82.26',
242
- '40.74.242.253',
243
- '40.74.243.13',
244
- '40.74.243.176',
245
- '104.214.48.247',
246
- '157.55.189.189',
247
- '104.214.110.135',
248
- '70.37.83.240',
249
- '65.52.36.250',
250
- '13.78.216.56',
251
- '52.162.212.163',
252
- '23.96.34.105',
253
- '65.52.113.236',
254
- '172.255.61.34',
255
- '172.255.61.35',
256
- '172.255.61.36',
257
- '172.255.61.37',
258
- '172.255.61.38',
259
- '172.255.61.39',
260
- '172.255.61.40',
261
- '104.41.2.19',
262
- '191.235.98.164',
263
- '191.235.99.221',
264
- '191.232.194.51',
265
- '52.237.235.185',
266
- '52.237.250.73',
267
- '52.237.236.145',
268
- '104.211.143.8',
269
- '104.211.165.53',
270
- '52.172.14.87',
271
- '40.83.89.214',
272
- '52.175.57.81',
273
- '20.188.63.151',
274
- '20.52.36.49',
275
- '52.246.165.153',
276
- '51.144.102.233',
277
- '13.76.97.224',
278
- '102.133.169.66',
279
- '52.231.199.170',
280
- '13.53.162.7',
281
- '40.123.218.94',
282
- ];
283
-
284
- if ( $this->cls( 'Router' )->ip_access( $ips ) ) {
285
- return true;
286
- }
287
-
288
- return false;
289
- }
290
-
291
  /**
292
  * Hooked to the comments_array filter.
293
  *
@@ -533,7 +449,9 @@ class Vary extends Root {
533
  * @access public
534
  */
535
  public function finalize_default_vary( $uid = false ) {
536
- if ( defined( 'LITESPEED_GUEST' ) ) {
 
 
537
  return false;
538
  }
539
 
@@ -712,7 +630,9 @@ class Vary extends Root {
712
  */
713
  public function finalize() {
714
  // Finalize default vary
715
- $this->_update_default_vary();
 
 
716
 
717
  $tp_cookies = $this->_finalize_curr_vary_cookies();
718
 
136
  * @since 4.0
137
  */
138
  private function _maybe_guest_mode() {
139
+ if ( defined( 'LITESPEED_GUEST' ) ) {
140
+ Debug2::debug( '[Vary] 👒👒 Guest mode ' . ( LITESPEED_GUEST ? 'predefined' : 'turned off' ) );
141
+ return;
142
+ }
143
+
144
  if ( ! $this->conf( Base::O_GUEST ) ) {
145
  return;
146
  }
164
  }
165
 
166
  // If is the request to update vary, then no guest
167
+ // Don't need anymore as it is always ajax call
168
+ // Still keep it in case some WP blocked the lightweigh guest vary update script, WP can still update the vary
169
  if ( ! empty( $_GET[ 'litespeed_guest' ] ) ) {
170
  return;
171
  }
183
  * Update Guest vary
184
  *
185
  * @since 4.0
186
+ * @deprecated 4.1 Use independent lightweight guest.vary.php as a replacement
187
  */
188
  public function update_guest_vary() {
189
+ // This process must not be cached
190
+ ! defined( 'LSCACHE_NO_CACHE' ) && define( 'LSCACHE_NO_CACHE', true );
191
+
192
+ $_guest = new Lib\Guest();
193
+ if ( $_guest->always_guest() || self::has_vary() ) { // If contains vary already, don't reload to avoid infinite loop when parent page having browser cache
194
+ ! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', true ); // Reuse this const to bypass set vary in vary finalize
195
  Debug2::debug( '[Vary] 🤠🤠 Guest' );
196
  echo '[]';
197
  exit;
198
  }
199
 
200
+ Debug2::debug( "[Vary] Will update guest vary in finalize" );
 
 
 
 
 
 
201
 
202
  // return json
203
  echo json_encode( array( 'reload' => 'yes' ) );
204
  exit;
205
  }
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  /**
208
  * Hooked to the comments_array filter.
209
  *
449
  * @access public
450
  */
451
  public function finalize_default_vary( $uid = false ) {
452
+ // Must check this to bypass vary generation for guests
453
+ // Must check this to avoid Guest page's CSS/JS/CCSS/UCSS get non-guest vary filename
454
+ if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
455
  return false;
456
  }
457
 
630
  */
631
  public function finalize() {
632
  // Finalize default vary
633
+ if ( ! defined( 'LITESPEED_GUEST' ) || ! LITESPEED_GUEST ) {
634
+ $this->_update_default_vary();
635
+ }
636
 
637
  $tp_cookies = $this->_finalize_curr_vary_cookies();
638
 
thirdparty/amp.cls.php CHANGED
@@ -28,6 +28,7 @@ class AMP
28
  if ( ! function_exists( 'is_amp_endpoint' ) || is_admin() || ! isset( $_GET[ 'amp' ] ) ) return;
29
  ! defined( 'LITESPEED_NO_PAGEOPTM' ) && define( 'LITESPEED_NO_PAGEOPTM', true );
30
  ! defined( 'LITESPEED_NO_LAZY' ) && define( 'LITESPEED_NO_LAZY', true );
 
31
  // add_filter( 'litespeed_can_optm', '__return_false' );
32
  // do_action( 'litespeed_conf_force', API::O_OPTM_CSS_ASYNC, false );
33
  // do_action( 'litespeed_conf_force', API::O_MEDIA_LAZY, false );
28
  if ( ! function_exists( 'is_amp_endpoint' ) || is_admin() || ! isset( $_GET[ 'amp' ] ) ) return;
29
  ! defined( 'LITESPEED_NO_PAGEOPTM' ) && define( 'LITESPEED_NO_PAGEOPTM', true );
30
  ! defined( 'LITESPEED_NO_LAZY' ) && define( 'LITESPEED_NO_LAZY', true );
31
+ ! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', false );
32
  // add_filter( 'litespeed_can_optm', '__return_false' );
33
  // do_action( 'litespeed_conf_force', API::O_OPTM_CSS_ASYNC, false );
34
  // do_action( 'litespeed_conf_force', API::O_MEDIA_LAZY, false );
thirdparty/woocommerce.cls.php CHANGED
@@ -20,6 +20,7 @@ class WooCommerce extends Base {
20
 
21
  const CACHETAG_SHOP = 'WC_S' ;
22
  const CACHETAG_TERM = 'WC_T.' ;
 
23
  const O_UPDATE_INTERVAL = 'wc_update_interval' ;
24
  const O_SHOP_FRONT_TTL = 'wc_shop_use_front_ttl' ;
25
  const O_WOO_CACHE_CART = 'woo_cache_cart' ;
@@ -94,8 +95,10 @@ class WooCommerce extends Base {
94
  * Call when template_include to make sure woo cart is initialized
95
  * @since 1.7.2
96
  */
97
- add_action( 'template_include', array( $this, 'check_if_need_esi' ) );
98
- add_filter( 'litespeed_vary', array( $this, 'vary_maintain' ) );
 
 
99
 
100
  }
101
 
@@ -497,10 +500,10 @@ class WooCommerce extends Base {
497
  if ( function_exists( 'is_product_taxonomy' ) && ! is_product_taxonomy() ) {
498
  return ;
499
  }
500
- if ( isset($GLOBALS['product_cat']) ) {
501
  $term = get_term_by('slug', $GLOBALS['product_cat'], 'product_cat') ;
502
  }
503
- elseif ( isset($GLOBALS['product_tag']) ) {
504
  $term = get_term_by('slug', $GLOBALS['product_tag'], 'product_tag') ;
505
  }
506
  else {
@@ -767,6 +770,7 @@ class WooCommerce extends Base {
767
  // Append option save value filter
768
  do_action( 'litespeed_conf_multi_switch', self::O_UPDATE_INTERVAL, 3 ); // This need to be before conf_append
769
 
 
770
  do_action( 'litespeed_conf_append', self::O_UPDATE_INTERVAL, false );
771
  do_action( 'litespeed_conf_append', self::O_SHOP_FRONT_TTL, true );
772
  do_action( 'litespeed_conf_append', self::O_WOO_CACHE_CART, true );
20
 
21
  const CACHETAG_SHOP = 'WC_S' ;
22
  const CACHETAG_TERM = 'WC_T.' ;
23
+ const O_ESI_CACHE_CART = 'wc_esi_cache_cart';
24
  const O_UPDATE_INTERVAL = 'wc_update_interval' ;
25
  const O_SHOP_FRONT_TTL = 'wc_shop_use_front_ttl' ;
26
  const O_WOO_CACHE_CART = 'woo_cache_cart' ;
95
  * Call when template_include to make sure woo cart is initialized
96
  * @since 1.7.2
97
  */
98
+ if ( apply_filters( 'litespeed_conf', self::O_ESI_CACHE_CART ) ) {
99
+ add_action( 'template_include', array( $this, 'check_if_need_esi' ) );
100
+ add_filter( 'litespeed_vary', array( $this, 'vary_maintain' ) );
101
+ }
102
 
103
  }
104
 
500
  if ( function_exists( 'is_product_taxonomy' ) && ! is_product_taxonomy() ) {
501
  return ;
502
  }
503
+ if ( isset($GLOBALS['product_cat']) && is_string( $GLOBALS['product_cat'] ) ) { // todo: need to check previous woo version to find if its from old woo versions or not!
504
  $term = get_term_by('slug', $GLOBALS['product_cat'], 'product_cat') ;
505
  }
506
+ elseif ( isset($GLOBALS['product_tag']) && is_string( $GLOBALS['product_tag'] ) ) {
507
  $term = get_term_by('slug', $GLOBALS['product_tag'], 'product_tag') ;
508
  }
509
  else {
770
  // Append option save value filter
771
  do_action( 'litespeed_conf_multi_switch', self::O_UPDATE_INTERVAL, 3 ); // This need to be before conf_append
772
 
773
+ do_action( 'litespeed_conf_append', self::O_ESI_CACHE_CART, true );
774
  do_action( 'litespeed_conf_append', self::O_UPDATE_INTERVAL, false );
775
  do_action( 'litespeed_conf_append', self::O_SHOP_FRONT_TTL, true );
776
  do_action( 'litespeed_conf_append', self::O_WOO_CACHE_CART, true );
thirdparty/woocommerce.content.tpl.php CHANGED
@@ -6,6 +6,8 @@ defined( 'WPINC' ) || exit;
6
  use \LiteSpeed\API;
7
  use \LiteSpeed\Doc;
8
  use \LiteSpeed\Admin_Display;
 
 
9
  ?>
10
 
11
  <div data-litespeed-layout='woocommerce'>
@@ -23,6 +25,18 @@ use \LiteSpeed\Admin_Display;
23
  </div>
24
 
25
  <table class="wp-list-table striped litespeed-table"><tbody>
 
 
 
 
 
 
 
 
 
 
 
 
26
  <tr>
27
  <th>
28
  <?php $id = self::O_UPDATE_INTERVAL; ?>
6
  use \LiteSpeed\API;
7
  use \LiteSpeed\Doc;
8
  use \LiteSpeed\Admin_Display;
9
+ use \LiteSpeed\Lang;
10
+ use \LiteSpeed\Base;
11
  ?>
12
 
13
  <div data-litespeed-layout='woocommerce'>
25
  </div>
26
 
27
  <table class="wp-list-table striped litespeed-table"><tbody>
28
+ <tr>
29
+ <th>
30
+ <?php $id = self::O_ESI_CACHE_CART; ?>
31
+ <?php echo __( 'Use ESI for Cart', 'litespeed-cache' ); ?>
32
+ </th>
33
+ <td>
34
+ <?php do_action( 'litespeed_build_switch' , $id ); ?>
35
+ <div class="litespeed-desc">
36
+ <?php echo sprintf( __( 'When the option is ON, cart information will be implemented as ESI blocks. NOTE: To make it work, you need to turn on %1$s under ESI settings.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_ESI ) . '</code>' ); ?>
37
+ </div>
38
+ </td>
39
+ </tr>
40
  <tr>
41
  <th>
42
  <?php $id = self::O_UPDATE_INTERVAL; ?>
tpl/cache/settings_inc.object.tpl.php CHANGED
@@ -38,7 +38,7 @@ else {
38
  <td>
39
  <?php $this->build_switch( $id ) ; ?>
40
  <div class="litespeed-desc">
41
- <?php echo __( 'Use object cache functionality.', 'litespeed-cache' ) ; ?>
42
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#memcached-lsmcd-and-redis-object-cache-support-in-lscwp' ); ?>
43
  </div>
44
  <div class="litespeed-block">
38
  <td>
39
  <?php $this->build_switch( $id ) ; ?>
40
  <div class="litespeed-desc">
41
+ <?php echo __( 'Use external object cache functionality.', 'litespeed-cache' ) ; ?>
42
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#memcached-lsmcd-and-redis-object-cache-support-in-lscwp' ); ?>
43
  </div>
44
  <div class="litespeed-block">
tpl/cdn/settings.tpl.php CHANGED
@@ -33,6 +33,7 @@ $this->form_action();
33
  <?php $this->build_switch( $id ); ?>
34
  <div class="litespeed-desc">
35
  <?php echo sprintf( __( 'Enable %s CDN API functionality.', 'litespeed-cache' ), 'QUIC.cloud' ); ?>
 
36
  </div>
37
  </td>
38
  </tr>
@@ -45,7 +46,12 @@ $this->form_action();
45
  <td>
46
  <?php $this->build_switch( $id ); ?>
47
  <div class="litespeed-desc">
48
- <?php echo sprintf( __( 'Turn this setting %1$s if you are using a Content Delivery Network (CDN). NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are are only using QUIC.cloud or Cloudflare, leave this setting %2$s.', 'litespeed-cache' ), '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>', '<code>' . __( 'OFF', 'litespeed-cache' ) . '</code>' ); ?>
 
 
 
 
 
49
  </div>
50
  </td>
51
  </tr>
@@ -189,23 +195,23 @@ $this->form_action();
189
  </div>
190
  <div class="litespeed-block">
191
  <div class='litespeed-col'>
192
- <label class="litespeed-form-label"><?php echo __( 'Email Address', 'litespeed-cache' ); ?></label>
193
 
194
- <?php $this->build_input( Base::O_CDN_CLOUDFLARE_EMAIL ); ?>
195
  <div class="litespeed-desc">
196
- <?php echo sprintf( __( 'Your Email address on %s.', 'litespeed-cache' ), 'Cloudflare' ); ?>
197
- <?php echo sprintf( __( 'Optional when API token used.', 'litespeed-cache' ) ); ?>
 
198
  </div>
199
  </div>
200
 
201
  <div class='litespeed-col'>
202
- <label class="litespeed-form-label"><?php echo __( 'Global API Key / API Token', 'litespeed-cache' ); ?></label>
203
 
204
- <?php $this->build_input( Base::O_CDN_CLOUDFLARE_KEY ); ?>
205
  <div class="litespeed-desc">
206
- <?php echo sprintf( __( 'Your API key / token is used to access %s APIs.', 'litespeed-cache' ), 'Cloudflare' ); ?>
207
- <?php echo sprintf( __( 'Get it from <a %1$s>%2$s</a>.', 'litespeed-cache' ), 'href="https://dash.cloudflare.com/profile/api-tokens" target="_blank"', 'Cloudflare' ); ?>
208
- <?php echo sprintf( __( 'Recommend to generate the token from Cloudflare API token template "WordPress ".', 'litespeed-cache' ) ); ?>
209
  </div>
210
  </div>
211
 
33
  <?php $this->build_switch( $id ); ?>
34
  <div class="litespeed-desc">
35
  <?php echo sprintf( __( 'Enable %s CDN API functionality.', 'litespeed-cache' ), 'QUIC.cloud' ); ?>
36
+ <?php Doc::learn_more( 'https://quic.cloud/docs/cdn/getting-started/verify-quic-cloud-cdn-is-working/#check-lscache-wordpress-plugin' ); ?>
37
  </div>
38
  </td>
39
  </tr>
46
  <td>
47
  <?php $this->build_switch( $id ); ?>
48
  <div class="litespeed-desc">
49
+ <?php echo sprintf( __( 'Turn this setting %1$s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.', 'litespeed-cache' ), '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
50
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#use-cdn-mapping' ); ?>
51
+ </div>
52
+
53
+ <div class="litespeed-desc">
54
+ <?php echo sprintf( __( 'NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are are only using QUIC.cloud or Cloudflare, leave this setting %2$s.', 'litespeed-cache' ), '<code>' . __( 'OFF', 'litespeed-cache' ) . '</code>' ); ?>
55
  </div>
56
  </td>
57
  </tr>
195
  </div>
196
  <div class="litespeed-block">
197
  <div class='litespeed-col'>
198
+ <label class="litespeed-form-label"><?php echo __( 'Global API Key / API Token', 'litespeed-cache' ); ?></label>
199
 
200
+ <?php $this->build_input( Base::O_CDN_CLOUDFLARE_KEY ); ?>
201
  <div class="litespeed-desc">
202
+ <?php echo sprintf( __( 'Your API key / token is used to access %s APIs.', 'litespeed-cache' ), 'Cloudflare' ); ?>
203
+ <?php echo sprintf( __( 'Get it from <a %1$s>%2$s</a>.', 'litespeed-cache' ), 'href="https://dash.cloudflare.com/profile/api-tokens" target="_blank"', 'Cloudflare' ); ?>
204
+ <?php echo sprintf( __( 'Recommended to generate the token from Cloudflare API token template "WordPress".', 'litespeed-cache' ) ); ?>
205
  </div>
206
  </div>
207
 
208
  <div class='litespeed-col'>
209
+ <label class="litespeed-form-label"><?php echo __( 'Email Address', 'litespeed-cache' ); ?></label>
210
 
211
+ <?php $this->build_input( Base::O_CDN_CLOUDFLARE_EMAIL ); ?>
212
  <div class="litespeed-desc">
213
+ <?php echo sprintf( __( 'Your Email address on %s.', 'litespeed-cache' ), 'Cloudflare' ); ?>
214
+ <?php echo sprintf( __( 'Optional when API token used.', 'litespeed-cache' ) ); ?>
 
215
  </div>
216
  </div>
217
 
tpl/crawler/settings-simulation.tpl.php CHANGED
@@ -46,7 +46,7 @@ $this->form_action();
46
  </script>
47
 
48
  <div class="litespeed-desc">
49
- <?php echo __('To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line, and can include a blank line. There will be one crawler created per cookie value, per simulated role.', 'litespeed-cache'); ?>
50
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#cookie-simulation' ); ?>
51
  <p><?php echo sprintf( __( 'Use %1$s in %2$s to indicate this cookie has not been set.', 'litespeed-cache' ), '<code>_null</code>', __( 'Cookie Values', 'litespeed-cache' ) ); ?></p>
52
  </div>
46
  </script>
47
 
48
  <div class="litespeed-desc">
49
+ <?php echo __('To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.', 'litespeed-cache'); ?>
50
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#cookie-simulation' ); ?>
51
  <p><?php echo sprintf( __( 'Use %1$s in %2$s to indicate this cookie has not been set.', 'litespeed-cache' ), '<code>_null</code>', __( 'Cookie Values', 'litespeed-cache' ) ); ?></p>
52
  </div>
tpl/crawler/summary.tpl.php CHANGED
@@ -175,8 +175,8 @@ if($seconds > 0):
175
 
176
  <p>
177
  <i class="litespeed-badge litespeed-bg-default"></i> = <?php echo __( 'Waiting to be Crawled', 'litespeed-cache' ); ?><br>
178
- <i class="litespeed-badge litespeed-bg-success"></i> = <?php echo __( 'Cache Hit', 'litespeed-cache' ); ?><br>
179
- <i class="litespeed-badge litespeed-bg-primary"></i> = <?php echo __( 'Cache Miss', 'litespeed-cache' ); ?><br>
180
  <i class="litespeed-badge litespeed-bg-danger"></i> = <?php echo __( 'Blacklisted', 'litespeed-cache' ); ?><br>
181
  </p>
182
 
175
 
176
  <p>
177
  <i class="litespeed-badge litespeed-bg-default"></i> = <?php echo __( 'Waiting to be Crawled', 'litespeed-cache' ); ?><br>
178
+ <i class="litespeed-badge litespeed-bg-success"></i> = <?php echo __( 'Already Cached', 'litespeed-cache' ); ?><br>
179
+ <i class="litespeed-badge litespeed-bg-primary"></i> = <?php echo __( 'Successfully Crawled', 'litespeed-cache' ); ?><br>
180
  <i class="litespeed-badge litespeed-bg-danger"></i> = <?php echo __( 'Blacklisted', 'litespeed-cache' ); ?><br>
181
  </p>
182
 
tpl/dash/dashboard.tpl.php CHANGED
@@ -29,6 +29,9 @@ $cloud_summary = Cloud::get_summary();
29
  $css_summary = CSS::get_summary();
30
  $placeholder_summary = Placeholder::get_summary();
31
 
 
 
 
32
  ?>
33
 
34
  <div class="litespeed-dashboard">
@@ -412,8 +415,9 @@ $placeholder_summary = Placeholder::get_summary();
412
  <?php endif; ?>
413
 
414
  <p>
415
- <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $css_summary[ 'queue_ccss' ] ) ? count( $css_summary[ 'queue_ccss' ] ) : '-' ?></code>
416
- <a href="<?php echo ! empty( $css_summary[ 'queue_ccss' ] ) ? Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ) : 'javascript:;'; ?>" class="button button-secondary button-small <?php if ( empty( $css_summary[ 'queue_ccss' ] ) ) echo 'disabled'; ?>">
 
417
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
418
  </a>
419
  </p>
@@ -443,8 +447,9 @@ $placeholder_summary = Placeholder::get_summary();
443
  <?php endif; ?>
444
 
445
  <p>
446
- <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $css_summary[ 'queue_ucss' ] ) ? count( $css_summary[ 'queue_ucss' ] ) : '-' ?></code>
447
- <a href="<?php echo ! empty( $css_summary[ 'queue_ucss' ] ) ? Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS ) : 'javascript:;'; ?>" class="button button-secondary button-small <?php if ( empty( $css_summary[ 'queue_ucss' ] ) ) echo 'disabled'; ?>">
 
448
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
449
  </a>
450
  </p>
@@ -474,8 +479,8 @@ $placeholder_summary = Placeholder::get_summary();
474
  <?php endif; ?>
475
 
476
  <p>
477
- <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $placeholder_summary[ 'queue' ] ) ? count( $placeholder_summary[ 'queue' ] ) : '-' ?></code>
478
- <a href="<?php echo ! empty( $placeholder_summary[ 'queue' ] ) ? Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ) : 'javascript:;'; ?>" class="button button-secondary button-small <?php if ( empty( $placeholder_summary[ 'queue' ] ) ) echo 'disabled'; ?>">
479
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
480
  </a>
481
  </p>
29
  $css_summary = CSS::get_summary();
30
  $placeholder_summary = Placeholder::get_summary();
31
 
32
+ $ccss_count = count( CSS::cls()->load_queue( 'ccss' ) );
33
+ $ucss_count = count( CSS::cls()->load_queue( 'ucss' ) );
34
+ $placeholder_queue_count = count( Placeholder::cls()->load_queue() );
35
  ?>
36
 
37
  <div class="litespeed-dashboard">
415
  <?php endif; ?>
416
 
417
  <p>
418
+ <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo $ccss_count ?: '-'; ?></code>
419
+ <a href="<?php echo $ccss_count ? Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ) : 'javascript:;'; ?>"
420
+ class="button button-secondary button-small <?php if ( ! $ccss_count ) echo 'disabled'; ?>">
421
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
422
  </a>
423
  </p>
447
  <?php endif; ?>
448
 
449
  <p>
450
+ <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo $ucss_count ?: '-' ?></code>
451
+ <a href="<?php echo $ucss_count ? Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS ) : 'javascript:;'; ?>"
452
+ class="button button-secondary button-small <?php if ( ! $ucss_count ) echo 'disabled'; ?>">
453
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
454
  </a>
455
  </p>
479
  <?php endif; ?>
480
 
481
  <p>
482
+ <?php echo __( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo $placeholder_queue_count ?: '-' ?></code>
483
+ <a href="<?php echo $placeholder_queue_count ? Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ) : 'javascript:;'; ?>" class="button button-secondary button-small <?php if ( ! $placeholder_queue_count ) echo 'disabled'; ?>">
484
  <?php echo __( 'Force cron', 'litespeed-cache' ); ?>
485
  </a>
486
  </p>
tpl/general/entry.tpl.php CHANGED
@@ -4,6 +4,7 @@ defined( 'WPINC' ) || exit;
4
 
5
  $menu_list = array(
6
  'settings' => __( 'General Settings', 'litespeed-cache' ),
 
7
  );
8
 
9
  if ( $this->_is_network_admin ) {
@@ -38,12 +39,16 @@ if ( $this->_is_network_admin ) {
38
 
39
  <div class="litespeed-body">
40
  <?php
 
 
41
  // include all tpl for faster UE
42
  foreach ($menu_list as $tab => $val) {
43
  echo "<div data-litespeed-layout='$tab'>";
44
  require LSCWP_DIR . "tpl/general/$tab.tpl.php";
45
  echo "</div>";
46
  }
 
 
47
  ?>
48
  </div>
49
 
4
 
5
  $menu_list = array(
6
  'settings' => __( 'General Settings', 'litespeed-cache' ),
7
+ 'settings_tuning' => __( 'Tuning', 'litespeed-cache' ),
8
  );
9
 
10
  if ( $this->_is_network_admin ) {
39
 
40
  <div class="litespeed-body">
41
  <?php
42
+ $this->form_action();
43
+
44
  // include all tpl for faster UE
45
  foreach ($menu_list as $tab => $val) {
46
  echo "<div data-litespeed-layout='$tab'>";
47
  require LSCWP_DIR . "tpl/general/$tab.tpl.php";
48
  echo "</div>";
49
  }
50
+
51
+ $this->form_end();
52
  ?>
53
  </div>
54
 
tpl/general/settings.tpl.php CHANGED
@@ -36,7 +36,6 @@ if ( ! $can_token ) {
36
  $apply_ts_txt .= ' ' . sprintf( __( 'Next available request time: <code>After %s</code>', 'litespeed-cache' ), Utility::readable_time( $next_available_req, 0, true ) );
37
  }
38
 
39
- $this->form_action();
40
  ?>
41
 
42
  <h3 class="litespeed-title-short">
@@ -148,7 +147,7 @@ $this->form_action();
148
  <td>
149
  <?php $this->build_switch( $id ); ?>
150
  <div class="litespeed-desc">
151
- <?php echo __( 'This option enables maximum optimization for Guest Mode users.', 'litespeed-cache' ); ?>
152
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#guest-optimization' ); ?>
153
  <?php if ( ! $this->conf( Base::O_GUEST ) ) : ?>
154
  <br /><font class="litespeed-warning litespeed-left10">
@@ -167,6 +166,12 @@ $this->form_action();
167
  ⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( 'You need to turn %s on and finish all WebP generation to get maximum result.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_IMG_OPTM_WEBP ) . '</code>' ); ?>
168
  </font>
169
  <?php endif; ?>
 
 
 
 
 
 
170
  </div>
171
  </td>
172
  </tr>
@@ -203,7 +208,3 @@ $this->form_action();
203
  </tr>
204
 
205
  </tbody></table>
206
-
207
- <?php
208
- $this->form_end();
209
-
36
  $apply_ts_txt .= ' ' . sprintf( __( 'Next available request time: <code>After %s</code>', 'litespeed-cache' ), Utility::readable_time( $next_available_req, 0, true ) );
37
  }
38
 
 
39
  ?>
40
 
41
  <h3 class="litespeed-title-short">
147
  <td>
148
  <?php $this->build_switch( $id ); ?>
149
  <div class="litespeed-desc">
150
+ <?php echo __( 'This option enables maximum optimization for Guest Mode visitors.', 'litespeed-cache' ); ?>
151
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#guest-optimization' ); ?>
152
  <?php if ( ! $this->conf( Base::O_GUEST ) ) : ?>
153
  <br /><font class="litespeed-warning litespeed-left10">
166
  ⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( 'You need to turn %s on and finish all WebP generation to get maximum result.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_IMG_OPTM_WEBP ) . '</code>' ); ?>
167
  </font>
168
  <?php endif; ?>
169
+
170
+ <?php if ( ! $this->conf( Base::O_IMG_OPTM_WEBP_REPLACE ) ) : ?>
171
+ <br /><font class="litespeed-danger litespeed-left10">
172
+ ⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( 'You need to turn %s on to get maximum result.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_IMG_OPTM_WEBP_REPLACE ) . '</code>' ); ?>
173
+ </font>
174
+ <?php endif; ?>
175
  </div>
176
  </td>
177
  </tr>
208
  </tr>
209
 
210
  </tbody></table>
 
 
 
 
tpl/general/settings_inc.guest.tpl.php CHANGED
@@ -10,9 +10,26 @@ defined( 'WPINC' ) || exit;
10
  <td>
11
  <?php $this->build_switch( $id ); ?>
12
  <div class="litespeed-desc">
13
- <?php echo __( 'Guest Mode provides an always cacheable landing page on a user\'s first time visit, and then attempts to update cache varies via AJAX.', 'litespeed-cache' ); ?>
14
- <?php echo __( 'This option can help to correct the cache vary for certain advanced mobile or tablet users.', 'litespeed-cache' ); ?>
 
15
  <br /><?php Doc::notice_htaccess(); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  </div>
17
  </td>
18
  </tr>
10
  <td>
11
  <?php $this->build_switch( $id ); ?>
12
  <div class="litespeed-desc">
13
+ <?php echo __( 'Guest Mode provides an always cacheable landing page for an automated guest\'s first time visit, and then attempts to update cache varies via AJAX.', 'litespeed-cache' ); ?>
14
+ <?php echo __( 'This option can help to correct the cache vary for certain advanced mobile or tablet visitors.', 'litespeed-cache' ); ?>
15
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#guest-mode' ); ?>
16
  <br /><?php Doc::notice_htaccess(); ?>
17
+ <?php
18
+ $typeList = array();
19
+ if ( $this->conf( Base::O_GUEST ) && ! $this->conf( Base::O_OPTM_UCSS ) ) {
20
+ $typeList[] = 'UCSS';
21
+ }
22
+ if ( $this->conf( Base::O_GUEST ) && ! $this->conf( Base::O_OPTM_CSS_ASYNC ) ) {
23
+ $typeList[] = 'CCSS';
24
+ }
25
+ if ( ! empty( $typeList ) ) {
26
+ $theType = implode( '/', $typeList );
27
+ echo '<br />';
28
+ echo '<font class="litespeed-info">';
29
+ echo '⚠️ ' . sprintf( __( 'Your %1s quota on %2s will still be in use.', 'litespeed-cache' ), $theType, 'QUIC.cloud' );
30
+ echo '</font>';
31
+ }
32
+ ?>
33
  </div>
34
  </td>
35
  </tr>
tpl/general/settings_tuning.tpl.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace LiteSpeed;
3
+ defined( 'WPINC' ) || exit;
4
+
5
+ ?>
6
+ <h3 class="litespeed-title-short">
7
+ <?php echo __( 'Tuning Settings', 'litespeed-cache' ); ?>
8
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#tuning-tab' ); ?>
9
+ </h3>
10
+
11
+ <table class="wp-list-table striped litespeed-table"><tbody>
12
+ <tr>
13
+ <th>
14
+ <?php $id = Base::O_GUEST_UAS; ?>
15
+ <?php $this->title( $id ); ?>
16
+ </th>
17
+ <td>
18
+ <?php $this->build_textarea( $id, 30 ); ?>
19
+ <div class="litespeed-desc">
20
+ <?php echo __( 'Listed User Agents will be considered as Guest Mode visitors.', 'litespeed-cache' ); ?>
21
+ <?php Doc::one_per_line(); ?>
22
+ </div>
23
+ </td>
24
+ </tr>
25
+
26
+ <tr>
27
+ <th>
28
+ <?php $id = Base::O_GUEST_IPS; ?>
29
+ <?php $this->title( $id ); ?>
30
+ </th>
31
+ <td>
32
+ <?php $this->build_textarea( $id, 50 ); ?>
33
+ <div class="litespeed-desc">
34
+ <?php echo __( 'Listed IPs will be considered as Guest Mode visitors.', 'litespeed-cache' ); ?>
35
+ <?php Doc::one_per_line(); ?>
36
+ </div>
37
+ </td>
38
+ </tr>
39
+ </tbody></table>
tpl/page_optm/settings_css.tpl.php CHANGED
@@ -7,6 +7,9 @@ defined( 'WPINC' ) || exit;
7
 
8
  $css_summary = CSS::get_summary();
9
  $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
 
 
 
10
  ?>
11
 
12
  <h3 class="litespeed-title-short">
@@ -60,31 +63,34 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
60
 
61
  <?php echo __( 'Use QUIC.cloud online service to generate unique CSS.', 'litespeed-cache' ); ?>
62
  <?php echo __( 'This will drop the unused CSS on each page from the combined file.', 'litespeed-cache' ); ?>
 
 
63
  </div>
64
 
65
- <?php if ( $css_summary ) : ?>
66
  <div class="litespeed-desc litespeed-left20">
67
- <?php if ( ! empty( $css_summary[ 'last_request_ucss' ] ) ) : ?>
68
- <p>
69
- <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $css_summary[ 'last_request_ucss' ] ) . '</code>'; ?>
70
- </p>
71
- <p>
72
- <?php echo __( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . $css_summary[ 'last_spent_ucss' ] . 's</code>'; ?>
73
- </p>
 
 
74
  <?php endif; ?>
75
 
76
  <?php if ( $closest_server ) : ?>
77
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
78
  <?php endif; ?>
79
 
80
- <?php if ( ! empty( $css_summary[ 'queue_ucss' ] ) ) : ?>
81
  <div class="litespeed-callout notice notice-warning inline">
82
  <h4>
83
- <?php echo __( 'URL list in queue waiting for cron','litespeed-cache' ); ?> ( <?php echo count( $css_summary[ 'queue_ucss' ] ); ?> )
84
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_CLEAR_Q_UCSS ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
85
  </h4>
86
  <p>
87
- <?php $i=0; foreach ( $css_summary[ 'queue_ucss' ] as $k => $v ) : ?>
88
  <?php if ( $i++ > 20 ) : ?>
89
  <?php echo '...'; ?>
90
  <?php break; ?>
@@ -93,16 +99,16 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
93
  <?php echo $v[ 'url' ]; ?>
94
  <?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . substr( $k, 0, $pos ) . ')'; ?>
95
  <?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
 
96
  <br />
97
  <?php endforeach; ?>
98
  </p>
99
  </div>
100
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS ); ?>" class="button litespeed-btn-success">
101
- <?php echo __( 'Run Queue Manually', 'litespeed-cache' ); ?>
102
  </a>
103
  <?php endif; ?>
104
  </div>
105
- <?php endif; ?>
106
 
107
  </td>
108
  </tr>
@@ -149,40 +155,41 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
149
  <?php endif; ?>
150
  <?php echo __( 'Optimize CSS delivery.', 'litespeed-cache' ); ?>
151
  <?php echo __( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?><br />
 
 
 
152
  <?php echo sprintf( __( 'When this option is turned %s, it will also load Google Fonts asynchronously.', 'litespeed-cache' ), '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
153
- <br /><?php echo sprintf( __( 'Enabling this option will automatically enable Critical CSS generation (%s service).', 'litespeed-cache' ), '<code>QUIC.cloud</code>' ); ?><br />
154
- <?php echo __( 'Automatic generation of critical CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?>
155
- <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-critical-css-in-the-background' ); ?>
156
  <br /><font class="litespeed-success">
157
  <?php echo __( 'API', 'litespeed-cache' ); ?>:
158
- <?php echo sprintf( __( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-async="1"</code>' ); ?>
159
  </font>
160
 
161
  </div>
162
 
163
- <?php if ( $css_summary ) : ?>
164
  <div class="litespeed-desc litespeed-left20">
165
- <?php if ( ! empty( $css_summary[ 'last_request_ccss' ] ) ) : ?>
166
- <p>
167
- <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $css_summary[ 'last_request_ccss' ] ) . '</code>'; ?>
168
- </p>
169
- <p>
170
- <?php echo __( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . $css_summary[ 'last_spent_ccss' ] . 's</code>'; ?>
171
- </p>
 
 
172
  <?php endif; ?>
173
 
174
  <?php if ( $closest_server ) : ?>
175
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
176
  <?php endif; ?>
177
 
178
- <?php if ( ! empty( $css_summary[ 'queue_ccss' ] ) ) : ?>
179
  <div class="litespeed-callout notice notice-warning inline">
180
  <h4>
181
- <?php echo __( 'URL list in queue waiting for cron','litespeed-cache' ); ?> ( <?php echo count( $css_summary[ 'queue_ccss' ] ); ?> )
182
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_CLEAR_Q_CCSS ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
183
  </h4>
184
  <p>
185
- <?php $i=0; foreach ( $css_summary[ 'queue_ccss' ] as $k => $v ) : ?>
186
  <?php if ( $i++ > 20 ) : ?>
187
  <?php echo '...'; ?>
188
  <?php break; ?>
@@ -191,16 +198,16 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
191
  <?php echo $v[ 'url' ]; ?>
192
  <?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . substr( $k, 0, $pos ) . ')'; ?>
193
  <?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
 
194
  <br />
195
  <?php endforeach; ?>
196
  </p>
197
  </div>
198
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ); ?>" class="button litespeed-btn-success">
199
- <?php echo __( 'Run Queue Manually', 'litespeed-cache' ); ?>
200
  </a>
201
  <?php endif; ?>
202
  </div>
203
- <?php endif; ?>
204
  </td>
205
  </tr>
206
 
7
 
8
  $css_summary = CSS::get_summary();
9
  $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );
10
+
11
+ $ccss_queue = CSS::cls()->load_queue( 'ccss' );
12
+ $ucss_queue = CSS::cls()->load_queue( 'ucss' );
13
  ?>
14
 
15
  <h3 class="litespeed-title-short">
63
 
64
  <?php echo __( 'Use QUIC.cloud online service to generate unique CSS.', 'litespeed-cache' ); ?>
65
  <?php echo __( 'This will drop the unused CSS on each page from the combined file.', 'litespeed-cache' ); ?>
66
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-ucss' ); ?><br />
67
+ <?php echo __( 'Automatic generation of unused CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?>
68
  </div>
69
 
 
70
  <div class="litespeed-desc litespeed-left20">
71
+ <?php if ( $css_summary ) : ?>
72
+ <?php if ( ! empty( $css_summary[ 'last_request_ucss' ] ) ) : ?>
73
+ <p>
74
+ <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $css_summary[ 'last_request_ucss' ] ) . '</code>'; ?>
75
+ </p>
76
+ <p>
77
+ <?php echo __( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . $css_summary[ 'last_spent_ucss' ] . 's</code>'; ?>
78
+ </p>
79
+ <?php endif; ?>
80
  <?php endif; ?>
81
 
82
  <?php if ( $closest_server ) : ?>
83
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
84
  <?php endif; ?>
85
 
86
+ <?php if ( ! empty( $ucss_queue ) ) : ?>
87
  <div class="litespeed-callout notice notice-warning inline">
88
  <h4>
89
+ <?php echo sprintf( __( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'UCSS' ); ?> ( <?php echo count( $ucss_queue ); ?> )
90
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_CLEAR_Q_UCSS ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
91
  </h4>
92
  <p>
93
+ <?php $i=0; foreach ( $ucss_queue as $k => $v ) : ?>
94
  <?php if ( $i++ > 20 ) : ?>
95
  <?php echo '...'; ?>
96
  <?php break; ?>
99
  <?php echo $v[ 'url' ]; ?>
100
  <?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . substr( $k, 0, $pos ) . ')'; ?>
101
  <?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
102
+ <?php if ( ! empty( $v[ 'is_webp' ] ) ) echo ' WebP'; ?>
103
  <br />
104
  <?php endforeach; ?>
105
  </p>
106
  </div>
107
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_UCSS ); ?>" class="button litespeed-btn-success">
108
+ <?php echo sprintf( __( 'Run %s Queue Manually', 'litespeed-cache' ), 'UCSS' ); ?>
109
  </a>
110
  <?php endif; ?>
111
  </div>
 
112
 
113
  </td>
114
  </tr>
155
  <?php endif; ?>
156
  <?php echo __( 'Optimize CSS delivery.', 'litespeed-cache' ); ?>
157
  <?php echo __( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?><br />
158
+ <?php echo __( 'Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.', 'litespeed-cache' ); ?>
159
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-css-asynchronously' ); ?><br />
160
+ <?php echo __( 'Automatic generation of critical CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?><br />
161
  <?php echo sprintf( __( 'When this option is turned %s, it will also load Google Fonts asynchronously.', 'litespeed-cache' ), '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
 
 
 
162
  <br /><font class="litespeed-success">
163
  <?php echo __( 'API', 'litespeed-cache' ); ?>:
164
+ <?php echo sprintf( __( 'Elements with attribute %s in HTML code will be excluded.', 'litespeed-cache' ), '<code>data-no-async="1"</code>' ); ?>
165
  </font>
166
 
167
  </div>
168
 
 
169
  <div class="litespeed-desc litespeed-left20">
170
+ <?php if ( $css_summary ) : ?>
171
+ <?php if ( ! empty( $css_summary[ 'last_request_ccss' ] ) ) : ?>
172
+ <p>
173
+ <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $css_summary[ 'last_request_ccss' ] ) . '</code>'; ?>
174
+ </p>
175
+ <p>
176
+ <?php echo __( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . $css_summary[ 'last_spent_ccss' ] . 's</code>'; ?>
177
+ </p>
178
+ <?php endif; ?>
179
  <?php endif; ?>
180
 
181
  <?php if ( $closest_server ) : ?>
182
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
183
  <?php endif; ?>
184
 
185
+ <?php if ( ! empty( $ccss_queue ) ) : ?>
186
  <div class="litespeed-callout notice notice-warning inline">
187
  <h4>
188
+ <?php echo sprintf( __( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'CCSS' ); ?> ( <?php echo count( $ccss_queue ); ?> )
189
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_CLEAR_Q_CCSS ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
190
  </h4>
191
  <p>
192
+ <?php $i=0; foreach ( $ccss_queue as $k => $v ) : ?>
193
  <?php if ( $i++ > 20 ) : ?>
194
  <?php echo '...'; ?>
195
  <?php break; ?>
198
  <?php echo $v[ 'url' ]; ?>
199
  <?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . substr( $k, 0, $pos ) . ')'; ?>
200
  <?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
201
+ <?php if ( ! empty( $v[ 'is_webp' ] ) ) echo ' WebP'; ?>
202
  <br />
203
  <?php endforeach; ?>
204
  </p>
205
  </div>
206
  <a href="<?php echo Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ); ?>" class="button litespeed-btn-success">
207
+ <?php echo sprintf( __( 'Run %s Queue Manually', 'litespeed-cache' ), 'CCSS' ); ?>
208
  </a>
209
  <?php endif; ?>
210
  </div>
 
211
  </td>
212
  </tr>
213
 
tpl/page_optm/settings_html.tpl.php CHANGED
@@ -4,8 +4,8 @@ defined( 'WPINC' ) || exit;
4
  ?>
5
 
6
  <h3 class="litespeed-title-short">
7
- <?php echo __( 'Optimization Settings', 'litespeed-cache' ); ?>
8
- <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#optimization-settings-tab' ); ?>
9
  </h3>
10
 
11
  <table class="wp-list-table striped litespeed-table"><tbody>
@@ -63,7 +63,7 @@ defined( 'WPINC' ) || exit;
63
  <div class="litespeed-desc">
64
  <?php echo __( 'Delay rendering off-screen HTML elements by its selector.', 'litespeed-cache' ); ?>
65
  <?php Doc::one_per_line(); ?>
66
- <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#html-lazy' ); ?>
67
  </div>
68
  </td>
69
  </tr>
@@ -98,7 +98,7 @@ defined( 'WPINC' ) || exit;
98
  <?php $this->build_switch( $id ); ?>
99
  <div class="litespeed-desc">
100
  <?php echo __( 'Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.', 'litespeed-cache' ); ?>
101
- <?php echo __( 'This will also add a preconnect to Google for faster Google Fonts downloading.', 'litespeed-cache' ); ?>
102
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-google-fonts-asynchronously' ); ?>
103
  </div>
104
  </td>
4
  ?>
5
 
6
  <h3 class="litespeed-title-short">
7
+ <?php echo __( 'HTML Settings', 'litespeed-cache' ); ?>
8
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#html-settings-tab' ); ?>
9
  </h3>
10
 
11
  <table class="wp-list-table striped litespeed-table"><tbody>
63
  <div class="litespeed-desc">
64
  <?php echo __( 'Delay rendering off-screen HTML elements by its selector.', 'litespeed-cache' ); ?>
65
  <?php Doc::one_per_line(); ?>
66
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#html-lazyload-selectors' ); ?>
67
  </div>
68
  </td>
69
  </tr>
98
  <?php $this->build_switch( $id ); ?>
99
  <div class="litespeed-desc">
100
  <?php echo __( 'Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.', 'litespeed-cache' ); ?>
101
+ <?php echo __( 'This will also add a preconnect to Google Fonts to establish a connection earlier.', 'litespeed-cache' ); ?>
102
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-google-fonts-asynchronously' ); ?>
103
  </div>
104
  </td>
tpl/page_optm/settings_js.tpl.php CHANGED
@@ -75,8 +75,10 @@ defined( 'WPINC' ) || exit;
75
  <td>
76
  <?php $this->build_switch( $id, array( __( 'OFF', 'litespeed-cache' ), __( 'Deferred', 'litespeed-cache' ), __( 'Delayed', 'litespeed-cache' ) ) ); ?>
77
  <div class="litespeed-desc">
78
- <?php echo __( 'Doing so can help reduce resource contention and improve performance.', 'litespeed-cache' ); ?>
 
79
  <?php echo __( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?>
 
80
  <br /><font class="litespeed-danger">
81
  🚨 <?php echo __( 'This option may result in JS error or layout issue on frontend pages on certain themes/plugins.', 'litespeed-cache' ); ?>
82
  </font>
75
  <td>
76
  <?php $this->build_switch( $id, array( __( 'OFF', 'litespeed-cache' ), __( 'Deferred', 'litespeed-cache' ), __( 'Delayed', 'litespeed-cache' ) ) ); ?>
77
  <div class="litespeed-desc">
78
+ <?php echo __( 'Doing so can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).', 'litespeed-cache' ); ?>
79
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-js-deferred' ); ?><br />
80
  <?php echo __( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?>
81
+ <?php Doc::learn_more( 'https://web.dev/fid/#what-is-fid' ); ?>
82
  <br /><font class="litespeed-danger">
83
  🚨 <?php echo __( 'This option may result in JS error or layout issue on frontend pages on certain themes/plugins.', 'litespeed-cache' ); ?>
84
  </font>
tpl/page_optm/settings_localization.tpl.php CHANGED
@@ -83,49 +83,4 @@ $avatar_queue = Avatar::cls()->queue_count();
83
  </td>
84
  </tr>
85
 
86
- <tr>
87
- <th>
88
- <?php $id = Base::O_OPTM_LOCALIZE; ?>
89
- <?php $this->title( $id ); ?>
90
- </th>
91
- <td>
92
- <?php $this->build_switch( $id ); ?>
93
- <div class="litespeed-desc">
94
- <?php echo __( 'Localize external resources.', 'litespeed-cache' ); ?>
95
- <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#localize' ); ?>
96
- </div>
97
- </td>
98
- </tr>
99
-
100
- <tr>
101
- <th class="litespeed-padding-left">
102
- <?php $id = Base::O_OPTM_LOCALIZE_DOMAINS; ?>
103
- <?php $this->title( $id ); ?>
104
- </th>
105
- <td>
106
- <div class="litespeed-textarea-recommended">
107
- <div>
108
- <?php $this->build_textarea( $id ); ?>
109
- </div>
110
- <div>
111
- <?php $this->recommended( $id, true ); ?>
112
- </div>
113
- </div>
114
-
115
- <div class="litespeed-desc">
116
- <?php echo __( 'Resources listed here will be copied and replaced with local URLs.', 'litespeed-cache' ); ?>
117
- <?php echo __( 'HTTPS sources only.', 'litespeed-cache' ); ?>
118
-
119
- <?php Doc::one_per_line(); ?>
120
-
121
- <br /><?php echo sprintf( __( 'Comments are supported. Start a line with a %s to turn it into a comment line.', 'litespeed-cache' ), '<code>#</code>' ); ?>
122
-
123
- <br /><?php echo __( 'Non-`.js` file extensions will be ignored.', 'litespeed-cache' ); ?>
124
- <?php echo __( 'Example', 'litespeed-cache' ); ?>: <code>https://www.example.com/one.js</code>
125
- <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#localization-files' ); ?>
126
-
127
- </div>
128
- </td>
129
- </tr>
130
-
131
  </tbody></table>
83
  </td>
84
  </tr>
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  </tbody></table>
tpl/page_optm/settings_media.tpl.php CHANGED
@@ -6,6 +6,8 @@ $placeholder_summary = Placeholder::get_summary();
6
 
7
  $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );
8
 
 
 
9
  ?>
10
 
11
  <h3 class="litespeed-title-short">
@@ -161,26 +163,35 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );
161
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-lqip-in-background' ); ?>
162
  </div>
163
 
164
- <?php if ( $placeholder_summary ) : ?>
165
  <div class="litespeed-desc">
166
- <?php if ( ! empty( $placeholder_summary[ 'last_request' ] ) ) : ?>
167
- <p>
168
- <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $placeholder_summary[ 'last_request' ] ) . '</code>'; ?>
169
- </p>
 
 
170
  <?php endif; ?>
171
 
172
  <?php if ( $closest_server ) : ?>
173
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_LQIP ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
174
  <?php endif; ?>
175
 
176
- <?php if ( ! empty( $placeholder_summary[ 'queue' ] ) ) : ?>
177
  <div class="litespeed-callout notice notice-warning inline">
178
  <h4>
179
  <?php echo __( 'Size list in queue waiting for cron','litespeed-cache' ); ?>
180
  <a href="<?php echo Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_CLEAR_Q ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
181
  </h4>
182
  <p>
183
- <?php echo implode( '<br>', $placeholder_summary[ 'queue' ] ); ?>
 
 
 
 
 
 
 
 
184
  </p>
185
  </div>
186
  <a href="<?php echo Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ); ?>" class="button litespeed-btn-success">
@@ -188,7 +199,6 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );
188
  </a>
189
  <?php endif; ?>
190
  </div>
191
- <?php endif; ?>
192
  </td>
193
  </tr>
194
 
@@ -214,8 +224,8 @@ $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );
214
  <td>
215
  <?php $this->build_switch( $id ); ?>
216
  <div class="litespeed-desc">
217
- <?php echo __( 'Set an explicit width and height on image elements to reduce layout shifts and improve CLS.', 'litespeed-cache' ); ?>
218
- <?php Doc::learn_more( 'https://web.dev/optimize-cls/?utm_source=lighthouse&utm_medium=unknown#images-without-dimensions' ); ?>
219
  <br /><?php echo sprintf( __( 'Note: this option only works when %1$s is %2$s.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_MEDIA_LAZY ) . '</code>', '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
220
  </div>
221
  </td>
6
 
7
  $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );
8
 
9
+ $placeholder_queue = Placeholder::cls()->load_queue();
10
+
11
  ?>
12
 
13
  <h3 class="litespeed-title-short">
163
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-lqip-in-background' ); ?>
164
  </div>
165
 
 
166
  <div class="litespeed-desc">
167
+ <?php if ( $placeholder_summary ) : ?>
168
+ <?php if ( ! empty( $placeholder_summary[ 'last_request' ] ) ) : ?>
169
+ <p>
170
+ <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $placeholder_summary[ 'last_request' ] ) . '</code>'; ?>
171
+ </p>
172
+ <?php endif; ?>
173
  <?php endif; ?>
174
 
175
  <?php if ( $closest_server ) : ?>
176
  <a href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_LQIP ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i></a>
177
  <?php endif; ?>
178
 
179
+ <?php if ( ! empty( $placeholder_queue ) ) : ?>
180
  <div class="litespeed-callout notice notice-warning inline">
181
  <h4>
182
  <?php echo __( 'Size list in queue waiting for cron','litespeed-cache' ); ?>
183
  <a href="<?php echo Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_CLEAR_Q ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
184
  </h4>
185
  <p>
186
+ <?php foreach ( $placeholder_queue as $k => $v ) : ?>
187
+ <?php if ( $k > 20 ) : ?>
188
+ <?php echo '...'; ?>
189
+ <?php break; ?>
190
+ <?php endif; ?>
191
+
192
+ <?php echo $v; ?>
193
+ <br />
194
+ <?php endforeach; ?>
195
  </p>
196
  </div>
197
  <a href="<?php echo Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ); ?>" class="button litespeed-btn-success">
199
  </a>
200
  <?php endif; ?>
201
  </div>
 
202
  </td>
203
  </tr>
204
 
224
  <td>
225
  <?php $this->build_switch( $id ); ?>
226
  <div class="litespeed-desc">
227
+ <?php echo __( 'Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).', 'litespeed-cache' ); ?>
228
+ <?php Doc::learn_more( 'https://web.dev/optimize-cls/#images-without-dimensions' ); ?>
229
  <br /><?php echo sprintf( __( 'Note: this option only works when %1$s is %2$s.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_MEDIA_LAZY ) . '</code>', '<code>' . __( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
230
  </div>
231
  </td>
tpl/page_optm/settings_tuning.tpl.php CHANGED
@@ -62,7 +62,7 @@ ksort( $roles );
62
  </td>
63
  </tr>
64
 
65
- <tr class="litespeed-hide2">
66
  <th>
67
  <?php $id = Base::O_OPTM_UCSS_WHITELIST; ?>
68
  <?php $this->title( $id ); ?>
@@ -71,6 +71,7 @@ ksort( $roles );
71
  <?php $this->build_textarea( $id ); ?>
72
  <div class="litespeed-desc">
73
  <?php echo __( 'List the CSS selector that its style should be always contained in UCSS.', 'litespeed-cache' ); ?>
 
74
  <br /><font class="litespeed-success">
75
  <?php echo __( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt</a>
76
  </font>
@@ -78,6 +79,35 @@ ksort( $roles );
78
  </td>
79
  </tr>
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  <tr>
82
  <th>
83
  <?php $id = Base::O_OPTM_CCSS_CON; ?>
@@ -112,6 +142,26 @@ ksort( $roles );
112
  </td>
113
  </tr>
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  <tr>
116
  <th>
117
  <?php $id = Base::O_OPTM_EXC; ?>
@@ -134,7 +184,7 @@ ksort( $roles );
134
  <td>
135
  <?php $this->build_switch( $id ); ?>
136
  <div class="litespeed-desc">
137
- <?php echo __( 'Only optimize pages for guest visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.', 'litespeed-cache' ); ?>
138
  </div>
139
  </td>
140
  </tr>
62
  </td>
63
  </tr>
64
 
65
+ <tr>
66
  <th>
67
  <?php $id = Base::O_OPTM_UCSS_WHITELIST; ?>
68
  <?php $this->title( $id ); ?>
71
  <?php $this->build_textarea( $id ); ?>
72
  <div class="litespeed-desc">
73
  <?php echo __( 'List the CSS selector that its style should be always contained in UCSS.', 'litespeed-cache' ); ?>
74
+ <br /><?php echo sprintf( __( 'Wildcard %s supported.', 'litespeed-cache' ), '<code>*</code>' ); ?>
75
  <br /><font class="litespeed-success">
76
  <?php echo __( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt</a>
77
  </font>
79
  </td>
80
  </tr>
81
 
82
+ <tr>
83
+ <th>
84
+ <?php $id = Base::O_OPTM_CCSS_SEP_POSTTYPE; ?>
85
+ <?php $this->title( $id ); ?>
86
+ </th>
87
+ <td>
88
+ <?php $this->build_textarea( $id ); ?>
89
+ <div class="litespeed-desc">
90
+ <?php echo __('List post types where each item of that type should have its own CCSS generated.', 'litespeed-cache'); ?>
91
+ <?php echo sprintf( __( 'For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.', 'litespeed-cache' ), '<code>page</code>' ); ?>
92
+ <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#separate-ccss-cache-post-types_1' ); ?>
93
+ </div>
94
+ </td>
95
+ </tr>
96
+
97
+ <tr>
98
+ <th>
99
+ <?php $id = Base::O_OPTM_CCSS_SEP_URI; ?>
100
+ <?php $this->title( $id ); ?>
101
+ </th>
102
+ <td>
103
+ <?php $this->build_textarea( $id ); ?>
104
+ <div class="litespeed-desc">
105
+ <?php echo __( 'Separate critical CSS files will be generated for paths containing these strings.', 'litespeed-cache' ); ?>
106
+ <?php $this->_uri_usage_example(); ?>
107
+ </div>
108
+ </td>
109
+ </tr>
110
+
111
  <tr>
112
  <th>
113
  <?php $id = Base::O_OPTM_CCSS_CON; ?>
142
  </td>
143
  </tr>
144
 
145
+ <tr>
146
+ <th>
147
+ <?php $id = Base::O_OPTM_GM_JS_EXC; ?>
148
+ <?php $this->title( $id ); ?>
149
+ </th>
150
+ <td>
151
+ <?php $this->build_textarea( $id ); ?>
152
+ <div class="litespeed-desc">
153
+ <?php echo sprintf( __( 'Listed JS files or inline JS code will not be optimized by %s.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_GUEST ) . '</code>' ); ?>
154
+ <?php Doc::full_or_partial_url(); ?>
155
+ <?php Doc::one_per_line(); ?>
156
+ <br /><span class="litespeed-success">
157
+ <?php echo __( 'API', 'litespeed-cache' ); ?>:
158
+ <?php echo sprintf( __( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optm_gm_js_exc</code>' ); ?>
159
+ <?php echo sprintf( __( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-defer="1"</code>' ); ?>
160
+ </span>
161
+ </div>
162
+ </td>
163
+ </tr>
164
+
165
  <tr>
166
  <th>
167
  <?php $id = Base::O_OPTM_EXC; ?>
184
  <td>
185
  <?php $this->build_switch( $id ); ?>
186
  <div class="litespeed-desc">
187
+ <?php echo __( 'Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.', 'litespeed-cache' ); ?>
188
  </div>
189
  </td>
190
  </tr>
tpl/toolbox/beta_test.tpl.php CHANGED
@@ -4,6 +4,7 @@ defined( 'WPINC' ) || exit;
4
 
5
  // Existing public version list
6
  $v_list = array(
 
7
  '4.0',
8
  '3.6.4',
9
  '3.5.2',
4
 
5
  // Existing public version list
6
  $v_list = array(
7
+ '4.1',
8
  '4.0',
9
  '3.6.4',
10
  '3.5.2',
tpl/toolbox/purge.tpl.php CHANGED
@@ -74,15 +74,6 @@ if ( file_exists( LITESPEED_STATIC_DIR . '/ccss' ) ) {
74
  ) ;
75
  }
76
 
77
- if ( $this->conf( Base::O_OPTM_LOCALIZE ) ) {
78
- $_panels[] = array(
79
- 'title' => __( 'Purge All', 'litespeed-cache' ) . ' - ' . __( 'Localized Resources', 'litespeed-cache' ),
80
- 'desc' => __( 'This will delete all localized resources', 'litespeed-cache' ),
81
- 'icon' => 'purge-cssjs',
82
- 'append_url' => Purge::TYPE_PURGE_ALL_LOCALRES,
83
- );
84
- }
85
-
86
  if ( Placeholder::has_lqip_cache() ) {
87
  $_panels[] = array(
88
  'title' => __( 'Purge All', 'litespeed-cache' ) . ' - ' . __( 'LQIP Cache', 'litespeed-cache' ),
74
  ) ;
75
  }
76
 
 
 
 
 
 
 
 
 
 
77
  if ( Placeholder::has_lqip_cache() ) {
78
  $_panels[] = array(
79
  'title' => __( 'Purge All', 'litespeed-cache' ) . ' - ' . __( 'LQIP Cache', 'litespeed-cache' ),
tpl/toolbox/settings-debug.tpl.php CHANGED
@@ -47,7 +47,7 @@ $this->form_action( $this->_is_network_admin ? Router::ACTION_SAVE_SETTINGS_NETW
47
  <?php $this->title( $id ); ?>
48
  </th>
49
  <td>
50
- <?php $this->build_textarea( $id, 30 ); ?>
51
  <div class="litespeed-desc">
52
  <?php echo __( 'Allows listed IPs (one per line) to perform certain actions from their browsers.', 'litespeed-cache' ); ?>
53
  <?php echo __( 'Your IP', 'litespeed-cache' ); ?>: <code><?php echo Router::get_ip(); ?></code>
47
  <?php $this->title( $id ); ?>
48
  </th>
49
  <td>
50
+ <?php $this->build_textarea( $id, 50 ); ?>
51
  <div class="litespeed-desc">
52
  <?php echo __( 'Allows listed IPs (one per line) to perform certain actions from their browsers.', 'litespeed-cache' ); ?>
53
  <?php echo __( 'Your IP', 'litespeed-cache' ); ?>: <code><?php echo Router::get_ip(); ?></code>
wp_assets/banner-1544x500.png DELETED
Binary file
wp_assets/banner-772x250.png DELETED
Binary file
wp_assets/icon-128x128.png DELETED
Binary file
wp_assets/icon-256x256.png DELETED
Binary file
wp_assets/screenshot-1.png DELETED
Binary file
wp_assets/screenshot-10.png DELETED
Binary file
wp_assets/screenshot-11.png DELETED
Binary file
wp_assets/screenshot-2.png DELETED
Binary file
wp_assets/screenshot-3.png DELETED
Binary file
wp_assets/screenshot-4.png DELETED
Binary file
wp_assets/screenshot-5.png DELETED
Binary file
wp_assets/screenshot-6.png DELETED
Binary file
wp_assets/screenshot-7.png DELETED
Binary file
wp_assets/screenshot-8.png DELETED
Binary file
wp_assets/screenshot-9.png DELETED
Binary file