LiteSpeed Cache - Version 4.4

Version Description

  • Sep 8 2021 =
  • Crawler Added the ability to enable or disable specific crawlers. ( Contributed by Astrid Wang #PR390)
  • UCSS Added UCSS Inline option. (Ankit).
  • UCSS Added UCSS URI Excludes option. (RC Verma).
  • Page Optimize Fixed an issue where combined CSS/JS files would potentially return 404 errors after a Purge All. (Special thanks to Abe & Ruikai)
  • Page Optimize Minimized the potential for 404 errors by query string when Purging All.
  • Page Optimize Dropped redundant query strings for minified CSS/JS files.
  • Conf Ugrade configuration safely to avoid the issue of new functions not being found in old codebase.
  • Conf Configuration upgrade process now adds a notification to admin pages and disables configuration save until upgrade is complete. (Lisa)
  • JS Fixed an issue where JS Defer caused a litespeed_var_1_ is not defined error when enabled w/ ESI options. (Tobolo)
  • JS Fixed an issue where JS Delay doesn't work for combined JS when JS Combine is enabled. (Special thanks to Joshua & Ankit)
  • JS JS Delay now will continue loading JS, even if there is an error in the current JS loading process.
  • CCSS If CCSS fails to generate, Load CSS Asynchronously will now be disabled. (Stars #54074166)
  • UCSS If UCSS generation fails the generated error will no longer be served inside the file. (Ryan D)
  • Log Updated the Debug log to use less code for prefix.
  • 3rd Always respect DONOTCACHEPAGE constant defination to fix DIVI dynamic css calculation process.
Download this release

Release Info

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

Code changes from version 4.3 to 4.4

assets/css/litespeed.css CHANGED
@@ -1152,7 +1152,7 @@ h3 .litespeed-learn-more {
1152
  overflow: hidden;
1153
  min-width: 58px;
1154
  height: 21px;
1155
- margin-left: 1.2rem;
1156
  }
1157
 
1158
  .litespeed-toggle-group {
1152
  overflow: hidden;
1153
  min-width: 58px;
1154
  height: 21px;
1155
+ /*margin-left: 1.2rem;*/
1156
  }
1157
 
1158
  .litespeed-toggle-group {
assets/js/js_delay.js CHANGED
@@ -30,7 +30,7 @@ function litespeed_load_delayed_js_forced() {
30
 
31
  function litespeed_load_delayed_js( is_forced ) {
32
  if ( is_forced ) {
33
- console.log( 'Force running delayed JS' );
34
  }
35
 
36
  litespeed_load_one();
@@ -52,16 +52,21 @@ 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
 
30
 
31
  function litespeed_load_delayed_js( is_forced ) {
32
  if ( is_forced ) {
33
+ console.log( '[LiteSpeed] Force running delayed JS' );
34
  }
35
 
36
  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( '[LiteSpeed] All loaded!' );
56
  return;
57
  }
58
 
59
+ console.log( '[LiteSpeed] Load i=' + e.getAttribute( 'data-i' ), '-----',e );
60
 
61
  var e2 = document.createElement( 'script' );
62
 
63
  e2.addEventListener( 'load', function(){
64
+ console.log('[LiteSpeed] loaded --- ' + e2.getAttribute('data-i'));
65
+ litespeed_load_one();
66
+ }, { passive: true } );
67
+
68
+ e2.addEventListener( 'error', function(){
69
+ console.log('[LiteSpeed] loaded error! --- ' + e2.getAttribute('data-i'));
70
  litespeed_load_one();
71
  }, { passive: true } );
72
 
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[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})});
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("[LiteSpeed] Start Load JS Delayed"),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("[LiteSpeed] Force running delayed JS"),litespeed_load_one()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}function litespeed_load_one(){litespeed_delay_i++;var t,d=document.querySelector('script[type="litespeed/javascript"][data-i="'+litespeed_delay_i+'"]');d?(console.log("[LiteSpeed] Load i="+d.getAttribute("data-i"),"-----",d),(t=document.createElement("script")).addEventListener("load",function(){console.log("[LiteSpeed] loaded --- "+t.getAttribute("data-i")),litespeed_load_one()},{passive:!0}),t.addEventListener("error",function(){console.log("[LiteSpeed] loaded error! --- "+t.getAttribute("data-i")),litespeed_load_one()},{passive:!0}),d.getAttributeNames().forEach(function(e){"type"!=e&&t.setAttribute("data-src"==e?"src":e,d.getAttribute(e))}),t.type="text/javascript",!t.src&&d.textContent&&(t.src=litespeed_inline2src(d.textContent)),d.after(t),d.remove()):console.log("[LiteSpeed] All loaded!")}litespeed_ui_events.forEach(function(e){window.addEventListener(e,litespeed_load_delayed_js_forced,{passive:!0})});
assets/js/litespeed-cache-admin.js CHANGED
@@ -172,6 +172,37 @@ var _litespeed_dots ;
172
  } ) ;
173
  } ) ;
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  /**
176
  * Click only once
177
  */
172
  } ) ;
173
  } ) ;
174
 
175
+ /**
176
+ * Freeze or melt a specific crawler
177
+ * @since 4.3
178
+ */
179
+ if ( $( '.litespeed-toggle' ).length > 0 ) {
180
+ $( '.litespeed-toggle' ).on( 'click', function( e ) {
181
+ var crawler_id = $( this ).attr( "data-litespeed_crawler_id" );
182
+ var crawler_id = Number( crawler_id.split('-').pop() );
183
+ var that = this;
184
+ $.ajax( {
185
+ url: litespeed_data.ajax_url_crawler_switch,
186
+ dataType: 'json',
187
+ method: 'POST',
188
+ cache: false,
189
+ data:{ crawler_id: crawler_id },
190
+ beforeSend: function ( xhr ) {
191
+ xhr.setRequestHeader( 'X-WP-Nonce', litespeed_data.nonce ) ;
192
+ },
193
+ success: function( data ) {
194
+ $( that ).toggleClass( 'litespeed-toggle-btn-default litespeed-toggleoff' , data == 0 ).toggleClass( 'litespeed-toggle-btn-primary' , data == 1 );
195
+ console.log( 'litespeed-crawler-ajax: change Activate option' );
196
+ },
197
+ error: function( xhr, error ) {
198
+ console.log( xhr );
199
+ console.log( error );
200
+ console.log( 'litespeed-crawler-ajax: option failed to save due to some error' );
201
+ }
202
+ } ) ;
203
+ } ) ;
204
+ }
205
+
206
  /**
207
  * Click only once
208
  */
data/const.default.ini CHANGED
@@ -305,9 +305,15 @@ optm-css_comb_ext_inl = true
305
  ; O_OPTM_UCSS
306
  optm-ucss = false
307
 
 
 
 
308
  ; O_OPTM_UCSS_WHITELIST
309
  optm-ucss_whitelist = ''
310
 
 
 
 
311
  ; O_OPTM_CSS_HTTP2
312
  optm-css_http2 = false
313
 
305
  ; O_OPTM_UCSS
306
  optm-ucss = false
307
 
308
+ ; O_OPTM_UCSS_INLINE
309
+ optm-ucss_inline = false
310
+
311
  ; O_OPTM_UCSS_WHITELIST
312
  optm-ucss_whitelist = ''
313
 
314
+ ; O_OPTM_UCSS_EXC
315
+ optm-ucss_exc = ''
316
+
317
  ; O_OPTM_CSS_HTTP2
318
  optm-css_http2 = false
319
 
lang/litespeed-cache.pot CHANGED
@@ -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.3\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
7
- "POT-Creation-Date: 2021-08-13 15:13:19+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -66,7 +66,7 @@ msgstr ""
66
  msgid "Database"
67
  msgstr ""
68
 
69
- #: src/admin-display.cls.php:129 src/lang.cls.php:211
70
  msgid "Crawler"
71
  msgstr ""
72
 
@@ -102,151 +102,152 @@ msgstr ""
102
  msgid "Add new CDN URL"
103
  msgstr ""
104
 
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:163
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 ""
115
 
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:584
127
  msgid "Settings"
128
  msgstr ""
129
 
130
- #: src/admin-display.cls.php:440
131
  msgid "Dismiss"
132
  msgstr ""
133
 
134
- #: src/admin-display.cls.php:668
135
  msgid "Save Changes"
136
  msgstr ""
137
 
138
- #: src/admin-display.cls.php:891
139
  msgid "This setting is overwritten by the PHP constant %s"
140
  msgstr ""
141
 
142
- #: src/admin-display.cls.php:894
143
  msgid "This setting is overwritten by the primary site setting"
144
  msgstr ""
145
 
146
- #: src/admin-display.cls.php:897
147
  msgid "This setting is overwritten by the Network setting"
148
  msgstr ""
149
 
150
- #: src/admin-display.cls.php:901
151
  msgid "currently set to %s"
152
  msgstr ""
153
 
154
- #: src/admin-display.cls.php:911 tpl/cache/settings_inc.object.tpl.php:103
155
  #: tpl/crawler/settings-general.tpl.php:60
156
  #: tpl/crawler/settings-general.tpl.php:74
157
  #: tpl/crawler/settings-general.tpl.php:89 tpl/esi_widget_edit.php:70
158
  msgid "seconds"
159
  msgstr ""
160
 
161
- #: src/admin-display.cls.php:942 src/admin-display.cls.php:947
162
  #: tpl/cdn/settings.tpl.php:99
163
  msgid "Default value"
164
  msgstr ""
165
 
166
- #: src/admin-display.cls.php:971
167
  msgid "Invalid rewrite rule"
168
  msgstr ""
169
 
170
- #: src/admin-display.cls.php:988
171
  msgid "Path must end with %s"
172
  msgstr ""
173
 
174
- #: src/admin-display.cls.php:1006
175
  msgid "Minimum value"
176
  msgstr ""
177
 
178
- #: src/admin-display.cls.php:1009
179
  msgid "Maximum value"
180
  msgstr ""
181
 
182
- #: src/admin-display.cls.php:1021
183
  msgid "Zero, or"
184
  msgstr ""
185
 
186
- #: src/admin-display.cls.php:1028
187
  msgid "Larger than"
188
  msgstr ""
189
 
190
- #: src/admin-display.cls.php:1031
191
  msgid "Smaller than"
192
  msgstr ""
193
 
194
- #: src/admin-display.cls.php:1034
195
  msgid "Value range"
196
  msgstr ""
197
 
198
- #: src/admin-display.cls.php:1059
199
  msgid "Invalid IP"
200
  msgstr ""
201
 
202
- #: src/admin-display.cls.php:1079 tpl/cache/settings-esi.tpl.php:95
203
- #: tpl/page_optm/settings_css.tpl.php:165
204
  #: tpl/page_optm/settings_html.tpl.php:85
205
  #: tpl/page_optm/settings_media_exc.tpl.php:26
206
  #: tpl/page_optm/settings_tuning.tpl.php:35
207
  #: tpl/page_optm/settings_tuning.tpl.php:56
208
- #: tpl/page_optm/settings_tuning.tpl.php:143
209
- #: tpl/page_optm/settings_tuning.tpl.php:164
 
210
  msgid "API"
211
  msgstr ""
212
 
213
- #: src/admin-display.cls.php:1080
214
  msgid "Server variable(s) %s available to override this setting."
215
  msgstr ""
216
 
217
- #: src/admin-display.cls.php:1092
218
  msgid "The URLs will be compared to the REQUEST_URI server variable."
219
  msgstr ""
220
 
221
- #: src/admin-display.cls.php:1093
222
  msgid "For example, for %s, %s can be used here."
223
  msgstr ""
224
 
225
- #: src/admin-display.cls.php:1095
226
  msgid "To match the beginning, add %s to the beginning of the item."
227
  msgstr ""
228
 
229
- #: src/admin-display.cls.php:1096
230
  msgid "To do an exact match, add %s to the end of the URL."
231
  msgstr ""
232
 
233
- #: src/admin-display.cls.php:1097 src/doc.cls.php:62
234
  msgid "One per line."
235
  msgstr ""
236
 
237
- #: src/admin-display.cls.php:1111
238
  msgid "%s groups"
239
  msgstr ""
240
 
241
- #: src/admin-display.cls.php:1114
242
  msgid "%s images"
243
  msgstr ""
244
 
245
- #: src/admin-display.cls.php:1124
246
  msgid "%s group"
247
  msgstr ""
248
 
249
- #: src/admin-display.cls.php:1127
250
  msgid "%s image"
251
  msgstr ""
252
 
@@ -278,84 +279,84 @@ msgstr ""
278
  msgid "Failed to communicate with Cloudflare"
279
  msgstr ""
280
 
281
- #: src/cloud.cls.php:358 src/cloud.cls.php:371 src/cloud.cls.php:406
282
- #: src/cloud.cls.php:431 src/cloud.cls.php:550 src/cloud.cls.php:906
283
  msgid "Cloud Error"
284
  msgstr ""
285
 
286
- #: src/cloud.cls.php:406
287
  msgid "No available Cloud Node."
288
  msgstr ""
289
 
290
- #: src/cloud.cls.php:431
291
  msgid "No available Cloud Node after checked server load."
292
  msgstr ""
293
 
294
- #: src/cloud.cls.php:550
295
  msgid "Please try after %1$s for service %2$s."
296
  msgstr ""
297
 
298
- #: src/cloud.cls.php:633 src/cloud.cls.php:649
299
  msgid "Failed to request via WordPress"
300
  msgstr ""
301
 
302
- #: src/cloud.cls.php:664
303
  msgid "Redetected node"
304
  msgstr ""
305
 
306
- #: src/cloud.cls.php:672
307
  msgid ""
308
  "We are working hard to improve your online service experience. The service "
309
  "will be unavailable while we work. We apologize for any inconvenience."
310
  msgstr ""
311
 
312
- #: src/cloud.cls.php:685 src/cloud.cls.php:693 src/cloud.cls.php:942
313
  msgid "Message from QUIC.cloud server"
314
  msgstr ""
315
 
316
- #: src/cloud.cls.php:701
317
  msgid "Good news from QUIC.cloud server"
318
  msgstr ""
319
 
320
- #: src/cloud.cls.php:710
321
  msgid "%1$s plugin version %2$s required for this action."
322
  msgstr ""
323
 
324
- #: src/cloud.cls.php:753 src/cloud.cls.php:931
325
  msgid "Failed to communicate with QUIC.cloud server"
326
  msgstr ""
327
 
328
- #: src/cloud.cls.php:761
329
  msgid ""
330
  "Site not recognized. Domain Key has been automatically removed. Please "
331
  "request a new one."
332
  msgstr ""
333
 
334
- #: src/cloud.cls.php:762 src/error.cls.php:48
335
  msgid "Click here to set."
336
  msgstr ""
337
 
338
- #: src/cloud.cls.php:950
339
  msgid ""
340
  "Applied for Domain Key successfully. Please wait for result. Domain Key will "
341
  "be automatically sent to your WordPress."
342
  msgstr ""
343
 
344
- #: src/cloud.cls.php:1001
345
  msgid ""
346
  "Congratulations, your Domain Key has been approved! The setting has been "
347
  "updated accordingly."
348
  msgstr ""
349
 
350
- #: src/cloud.cls.php:1072
351
  msgid "Domain Key hash mismatch"
352
  msgstr ""
353
 
354
- #: src/cloud.cls.php:1183
355
  msgid "Sync credit allowance with Cloud Server successfully."
356
  msgstr ""
357
 
358
- #: src/conf.cls.php:693
359
  msgid "Changed setting successfully."
360
  msgstr ""
361
 
@@ -379,27 +380,31 @@ msgstr ""
379
  msgid "Sitemap created successfully: %d items"
380
  msgstr ""
381
 
382
- #: src/crawler.cls.php:771
 
 
 
 
383
  msgid "Guest"
384
  msgstr ""
385
 
386
- #: src/crawler.cls.php:923
387
  msgid "Manually added to blacklist"
388
  msgstr ""
389
 
390
- #: src/crawler.cls.php:926
391
  msgid "Previously existed in blacklist"
392
  msgstr ""
393
 
394
- #: src/css.cls.php:60 src/root.cls.php:128
395
  msgid "Queue cleared successfully."
396
  msgstr ""
397
 
398
- #: src/css.cls.php:554
399
  msgid "%1$s %2$s files left in queue"
400
  msgstr ""
401
 
402
- #: src/css.cls.php:555
403
  msgid "Cancel"
404
  msgstr ""
405
 
@@ -417,7 +422,7 @@ msgid ""
417
  "errors."
418
  msgstr ""
419
 
420
- #: src/data.upgrade.func.php:83 src/lang.cls.php:114
421
  msgid "JS Combine"
422
  msgstr ""
423
 
@@ -473,7 +478,11 @@ msgstr ""
473
  msgid "Converted to InnoDB successfully."
474
  msgstr ""
475
 
476
- #: src/doc.cls.php:24
 
 
 
 
477
  msgid ""
478
  "This site utilizes caching in order to facilitate a faster response time and "
479
  "better user experience. Caching potentially stores a duplicate copy of every "
@@ -485,39 +494,39 @@ msgid ""
485
  "services to process & cache your data temporarily."
486
  msgstr ""
487
 
488
- #: src/doc.cls.php:25
489
  msgid "Please see %s for more details."
490
  msgstr ""
491
 
492
- #: src/doc.cls.php:41 src/doc.cls.php:93 tpl/cdn/manage.tpl.php:66
493
  #: tpl/dash/dashboard.tpl.php:49 tpl/img_optm/summary.tpl.php:62
494
  #: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
495
  msgid "Learn More"
496
  msgstr ""
497
 
498
- #: src/doc.cls.php:77
499
  msgid "Both full and partial strings can be used."
500
  msgstr ""
501
 
502
- #: src/doc.cls.php:80
503
  msgid "Both full URLs and partial strings can be used."
504
  msgstr ""
505
 
506
- #: src/doc.cls.php:92
507
  msgid "This setting will edit the .htaccess file."
508
  msgstr ""
509
 
510
- #: src/doc.cls.php:105
511
  msgid ""
512
  "For online services to work correctly, you must whitelist all %s server IPs."
513
  msgstr ""
514
 
515
- #: src/doc.cls.php:106
516
  msgid ""
517
  "Before generating key, please verify all IPs on this list are whitelisted"
518
  msgstr ""
519
 
520
- #: src/doc.cls.php:107 tpl/general/settings.tpl.php:86
521
  msgid "Current Online Server IPs"
522
  msgstr ""
523
 
@@ -758,7 +767,7 @@ msgstr ""
758
  msgid "LQIP Cache"
759
  msgstr ""
760
 
761
- #: src/gui.cls.php:536 src/gui.cls.php:687 src/lang.cls.php:142
762
  #: tpl/toolbox/purge.tpl.php:97
763
  msgid "Gravatar Cache"
764
  msgstr ""
@@ -852,71 +861,71 @@ msgstr ""
852
  msgid "Pull Cron is running"
853
  msgstr ""
854
 
855
- #: src/img-optm.cls.php:946
856
  msgid "Some optimized image file(s) has expired and was cleared."
857
  msgstr ""
858
 
859
- #: src/img-optm.cls.php:963
860
  msgid "One or more pulled images does not match with the notified image md5"
861
  msgstr ""
862
 
863
- #: src/img-optm.cls.php:1007
864
  msgid "Optimized WebP file expired and was cleared."
865
  msgstr ""
866
 
867
- #: src/img-optm.cls.php:1024
868
  msgid "Pulled WebP image md5 does not match the notified WebP image md5."
869
  msgstr ""
870
 
871
- #: src/img-optm.cls.php:1084
872
  msgid "Pulled %d image(s)"
873
  msgstr ""
874
 
875
- #: src/img-optm.cls.php:1171
876
  msgid "Cleaned up unfinished data successfully."
877
  msgstr ""
878
 
879
- #: src/img-optm.cls.php:1242
880
  msgid "Destroy all optimization data successfully."
881
  msgstr ""
882
 
883
- #: src/img-optm.cls.php:1274 src/img-optm.cls.php:1339
884
  msgid "Rescaned successfully."
885
  msgstr ""
886
 
887
- #: src/img-optm.cls.php:1339
888
  msgid "Rescaned %d images successfully."
889
  msgstr ""
890
 
891
- #: src/img-optm.cls.php:1398
892
  msgid "Calculated backups successfully."
893
  msgstr ""
894
 
895
- #: src/img-optm.cls.php:1460
896
  msgid "Removed backups successfully."
897
  msgstr ""
898
 
899
- #: src/img-optm.cls.php:1657
900
  msgid "Switched images successfully."
901
  msgstr ""
902
 
903
- #: src/img-optm.cls.php:1685
904
  msgid "Disabled WebP file successfully."
905
  msgstr ""
906
 
907
- #: src/img-optm.cls.php:1691
908
  msgid "Enabled WebP file successfully."
909
  msgstr ""
910
 
911
- #: src/img-optm.cls.php:1707
912
  msgid "Restored original file successfully."
913
  msgstr ""
914
 
915
- #: src/img-optm.cls.php:1714
916
  msgid "Switched to optimized file successfully."
917
  msgstr ""
918
 
919
- #: src/img-optm.cls.php:1777
920
  msgid "Reset the optimized data successfully."
921
  msgstr ""
922
 
@@ -1068,11 +1077,11 @@ msgstr ""
1068
  msgid "Cache PHP Resources"
1069
  msgstr ""
1070
 
1071
- #: src/lang.cls.php:77 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1072
  msgid "Cache Mobile"
1073
  msgstr ""
1074
 
1075
- #: src/lang.cls.php:78 tpl/cache/settings_inc.cache_mobile.tpl.php:70
1076
  msgid "List of Mobile User Agents"
1077
  msgstr ""
1078
 
@@ -1193,463 +1202,471 @@ msgid "Generate UCSS"
1193
  msgstr ""
1194
 
1195
  #: src/lang.cls.php:111
1196
- msgid "UCSS Whitelist"
1197
  msgstr ""
1198
 
1199
  #: src/lang.cls.php:112
1200
- msgid "CSS HTTP/2 Push"
1201
  msgstr ""
1202
 
1203
  #: src/lang.cls.php:113
1204
- msgid "JS Minify"
 
 
 
 
1205
  msgstr ""
1206
 
1207
  #: src/lang.cls.php:115
 
 
 
 
1208
  msgid "JS Combine External and Inline"
1209
  msgstr ""
1210
 
1211
- #: src/lang.cls.php:116
1212
  msgid "JS HTTP/2 Push"
1213
  msgstr ""
1214
 
1215
- #: src/lang.cls.php:117
1216
  msgid "HTML Minify"
1217
  msgstr ""
1218
 
1219
- #: src/lang.cls.php:118
1220
  msgid "HTML Lazy Load Selectors"
1221
  msgstr ""
1222
 
1223
- #: src/lang.cls.php:119 tpl/page_optm/settings_tuning.tpl.php:126
1224
  msgid "Load CSS Asynchronously"
1225
  msgstr ""
1226
 
1227
- #: src/lang.cls.php:120
1228
  msgid "CCSS Per URL"
1229
  msgstr ""
1230
 
1231
- #: src/lang.cls.php:121
1232
  msgid "Inline CSS Async Lib"
1233
  msgstr ""
1234
 
1235
- #: src/lang.cls.php:122
1236
  msgid "Font Display Optimization"
1237
  msgstr ""
1238
 
1239
- #: src/lang.cls.php:123
1240
  msgid "Load JS Deferred"
1241
  msgstr ""
1242
 
1243
- #: src/lang.cls.php:124
1244
  msgid "DNS Prefetch"
1245
  msgstr ""
1246
 
1247
- #: src/lang.cls.php:125
1248
  msgid "DNS Prefetch Control"
1249
  msgstr ""
1250
 
1251
- #: src/lang.cls.php:126
1252
  msgid "CSS Excludes"
1253
  msgstr ""
1254
 
1255
- #: src/lang.cls.php:127
1256
  msgid "JS Excludes"
1257
  msgstr ""
1258
 
1259
- #: src/lang.cls.php:128
1260
  msgid "Remove Query Strings"
1261
  msgstr ""
1262
 
1263
- #: src/lang.cls.php:129
1264
  msgid "Load Google Fonts Asynchronously"
1265
  msgstr ""
1266
 
1267
- #: src/lang.cls.php:130
1268
  msgid "Remove Google Fonts"
1269
  msgstr ""
1270
 
1271
- #: src/lang.cls.php:131
1272
  msgid "Critical CSS Rules"
1273
  msgstr ""
1274
 
1275
- #: src/lang.cls.php:132
1276
  msgid "Separate CCSS Cache Post Types"
1277
  msgstr ""
1278
 
1279
- #: src/lang.cls.php:133
1280
  msgid "Separate CCSS Cache URIs"
1281
  msgstr ""
1282
 
1283
- #: src/lang.cls.php:134
1284
  msgid "JS Deferred Excludes"
1285
  msgstr ""
1286
 
1287
- #: src/lang.cls.php:135
1288
  msgid "Guest Mode JS Excludes"
1289
  msgstr ""
1290
 
1291
- #: src/lang.cls.php:136
1292
  msgid "Remove WordPress Emoji"
1293
  msgstr ""
1294
 
1295
- #: src/lang.cls.php:137
1296
  msgid "Remove Noscript Tags"
1297
  msgstr ""
1298
 
1299
- #: src/lang.cls.php:138
1300
  msgid "URI Excludes"
1301
  msgstr ""
1302
 
1303
- #: src/lang.cls.php:139
1304
  msgid "Optimize for Guests Only"
1305
  msgstr ""
1306
 
1307
- #: src/lang.cls.php:140
1308
  msgid "Role Excludes"
1309
  msgstr ""
1310
 
1311
- #: src/lang.cls.php:143
1312
  msgid "Gravatar Cache Cron"
1313
  msgstr ""
1314
 
1315
- #: src/lang.cls.php:144
1316
  msgid "Gravatar Cache TTL"
1317
  msgstr ""
1318
 
1319
- #: src/lang.cls.php:146
1320
  msgid "Lazy Load Images"
1321
  msgstr ""
1322
 
1323
- #: src/lang.cls.php:147
1324
  msgid "Lazy Load Image Excludes"
1325
  msgstr ""
1326
 
1327
- #: src/lang.cls.php:148
1328
  msgid "Lazy Load Image Class Name Excludes"
1329
  msgstr ""
1330
 
1331
- #: src/lang.cls.php:149
1332
  msgid "Lazy Load Image Parent Class Name Excludes"
1333
  msgstr ""
1334
 
1335
- #: src/lang.cls.php:150
1336
  msgid "Lazy Load Iframe Class Name Excludes"
1337
  msgstr ""
1338
 
1339
- #: src/lang.cls.php:151
1340
  msgid "Lazy Load Iframe Parent Class Name Excludes"
1341
  msgstr ""
1342
 
1343
- #: src/lang.cls.php:152
1344
  msgid "Lazy Load URI Excludes"
1345
  msgstr ""
1346
 
1347
- #: src/lang.cls.php:153
1348
  msgid "LQIP Excludes"
1349
  msgstr ""
1350
 
1351
- #: src/lang.cls.php:154
1352
  msgid "Basic Image Placeholder"
1353
  msgstr ""
1354
 
1355
- #: src/lang.cls.php:155
1356
  msgid "Responsive Placeholder"
1357
  msgstr ""
1358
 
1359
- #: src/lang.cls.php:156
1360
  msgid "Responsive Placeholder Color"
1361
  msgstr ""
1362
 
1363
- #: src/lang.cls.php:157
1364
  msgid "Responsive Placeholder SVG"
1365
  msgstr ""
1366
 
1367
- #: src/lang.cls.php:158
1368
  msgid "LQIP Cloud Generator"
1369
  msgstr ""
1370
 
1371
- #: src/lang.cls.php:159
1372
  msgid "LQIP Quality"
1373
  msgstr ""
1374
 
1375
- #: src/lang.cls.php:160
1376
  msgid "LQIP Minimum Dimensions"
1377
  msgstr ""
1378
 
1379
- #: src/lang.cls.php:162
1380
  msgid "Generate LQIP In Background"
1381
  msgstr ""
1382
 
1383
- #: src/lang.cls.php:163
1384
  msgid "Lazy Load Iframes"
1385
  msgstr ""
1386
 
1387
- #: src/lang.cls.php:164
1388
  msgid "Add Missing Sizes"
1389
  msgstr ""
1390
 
1391
- #: src/lang.cls.php:165
1392
  msgid "Inline Lazy Load Images Library"
1393
  msgstr ""
1394
 
1395
- #: src/lang.cls.php:166
1396
  msgid "Auto Request Cron"
1397
  msgstr ""
1398
 
1399
- #: src/lang.cls.php:167
1400
  msgid "Auto Pull Cron"
1401
  msgstr ""
1402
 
1403
- #: src/lang.cls.php:168
1404
  msgid "Optimize Original Images"
1405
  msgstr ""
1406
 
1407
- #: src/lang.cls.php:169
1408
  msgid "Remove Original Backups"
1409
  msgstr ""
1410
 
1411
- #: src/lang.cls.php:170
1412
  msgid "Create WebP Versions"
1413
  msgstr ""
1414
 
1415
- #: src/lang.cls.php:171
1416
  msgid "Optimize Losslessly"
1417
  msgstr ""
1418
 
1419
- #: src/lang.cls.php:172
1420
  msgid "Preserve EXIF/XMP data"
1421
  msgstr ""
1422
 
1423
- #: src/lang.cls.php:173
1424
  msgid "WebP Attribute To Replace"
1425
  msgstr ""
1426
 
1427
- #: src/lang.cls.php:174
1428
  msgid "WebP For Extra srcset"
1429
  msgstr ""
1430
 
1431
- #: src/lang.cls.php:175
1432
  msgid "WordPress Image Quality Control"
1433
  msgstr ""
1434
 
1435
- #: src/lang.cls.php:176 tpl/esi_widget_edit.php:36
1436
  msgid "Enable ESI"
1437
  msgstr ""
1438
 
1439
- #: src/lang.cls.php:177
1440
  msgid "Cache Admin Bar"
1441
  msgstr ""
1442
 
1443
- #: src/lang.cls.php:178
1444
  msgid "Cache Comment Form"
1445
  msgstr ""
1446
 
1447
- #: src/lang.cls.php:179
1448
  msgid "ESI Nonces"
1449
  msgstr ""
1450
 
1451
- #: src/lang.cls.php:180 tpl/page_optm/settings_css.tpl.php:102
1452
- #: tpl/page_optm/settings_css.tpl.php:203
1453
  msgid "Vary Group"
1454
  msgstr ""
1455
 
1456
- #: src/lang.cls.php:181
1457
  msgid "Purge All Hooks"
1458
  msgstr ""
1459
 
1460
- #: src/lang.cls.php:182
1461
  msgid "Improve HTTP/HTTPS Compatibility"
1462
  msgstr ""
1463
 
1464
- #: src/lang.cls.php:183
1465
  msgid "Instant Click"
1466
  msgstr ""
1467
 
1468
- #: src/lang.cls.php:184
1469
  msgid "Do Not Cache Cookies"
1470
  msgstr ""
1471
 
1472
- #: src/lang.cls.php:185
1473
  msgid "Do Not Cache User Agents"
1474
  msgstr ""
1475
 
1476
- #: src/lang.cls.php:186
1477
  msgid "Login Cookie"
1478
  msgstr ""
1479
 
1480
- #: src/lang.cls.php:187
1481
  msgid "Image WebP Replacement"
1482
  msgstr ""
1483
 
1484
- #: src/lang.cls.php:189
1485
  msgid "Frontend .htaccess Path"
1486
  msgstr ""
1487
 
1488
- #: src/lang.cls.php:190
1489
  msgid "Backend .htaccess Path"
1490
  msgstr ""
1491
 
1492
- #: src/lang.cls.php:191
1493
  msgid "Frontend Heartbeat Control"
1494
  msgstr ""
1495
 
1496
- #: src/lang.cls.php:192
1497
  msgid "Frontend Heartbeat TTL"
1498
  msgstr ""
1499
 
1500
- #: src/lang.cls.php:193
1501
  msgid "Backend Heartbeat Control"
1502
  msgstr ""
1503
 
1504
- #: src/lang.cls.php:194
1505
  msgid "Backend Heartbeat TTL"
1506
  msgstr ""
1507
 
1508
- #: src/lang.cls.php:195
1509
  msgid "Editor Heartbeat"
1510
  msgstr ""
1511
 
1512
- #: src/lang.cls.php:196
1513
  msgid "Editor Heartbeat TTL"
1514
  msgstr ""
1515
 
1516
- #: src/lang.cls.php:198
1517
  msgid "QUIC.cloud CDN"
1518
  msgstr ""
1519
 
1520
- #: src/lang.cls.php:199
1521
  msgid "Use CDN Mapping"
1522
  msgstr ""
1523
 
1524
- #: src/lang.cls.php:200
1525
  msgid "CDN URL"
1526
  msgstr ""
1527
 
1528
- #: src/lang.cls.php:201
1529
  msgid "Include Images"
1530
  msgstr ""
1531
 
1532
- #: src/lang.cls.php:202
1533
  msgid "Include CSS"
1534
  msgstr ""
1535
 
1536
- #: src/lang.cls.php:203
1537
  msgid "Include JS"
1538
  msgstr ""
1539
 
1540
- #: src/lang.cls.php:204 tpl/cdn/settings.tpl.php:102
1541
  msgid "Include File Types"
1542
  msgstr ""
1543
 
1544
- #: src/lang.cls.php:205
1545
  msgid "HTML Attribute To Replace"
1546
  msgstr ""
1547
 
1548
- #: src/lang.cls.php:206
1549
  msgid "Original URLs"
1550
  msgstr ""
1551
 
1552
- #: src/lang.cls.php:207
1553
  msgid "Included Directories"
1554
  msgstr ""
1555
 
1556
- #: src/lang.cls.php:208
1557
  msgid "Exclude Path"
1558
  msgstr ""
1559
 
1560
- #: src/lang.cls.php:209
1561
  msgid "Cloudflare API"
1562
  msgstr ""
1563
 
1564
- #: src/lang.cls.php:212
1565
  msgid "Delay"
1566
  msgstr ""
1567
 
1568
- #: src/lang.cls.php:213
1569
  msgid "Run Duration"
1570
  msgstr ""
1571
 
1572
- #: src/lang.cls.php:214
1573
  msgid "Interval Between Runs"
1574
  msgstr ""
1575
 
1576
- #: src/lang.cls.php:215
1577
  msgid "Crawl Interval"
1578
  msgstr ""
1579
 
1580
- #: src/lang.cls.php:216
1581
  msgid "Threads"
1582
  msgstr ""
1583
 
1584
- #: src/lang.cls.php:217
1585
  msgid "Timeout"
1586
  msgstr ""
1587
 
1588
- #: src/lang.cls.php:218
1589
  msgid "Server Load Limit"
1590
  msgstr ""
1591
 
1592
- #: src/lang.cls.php:219
1593
  msgid "Role Simulation"
1594
  msgstr ""
1595
 
1596
- #: src/lang.cls.php:220
1597
  msgid "Cookie Simulation"
1598
  msgstr ""
1599
 
1600
- #: src/lang.cls.php:221
1601
  msgid "Custom Sitemap"
1602
  msgstr ""
1603
 
1604
- #: src/lang.cls.php:222
1605
  msgid "Drop Domain from Sitemap"
1606
  msgstr ""
1607
 
1608
- #: src/lang.cls.php:223
1609
  msgid "Sitemap Timeout"
1610
  msgstr ""
1611
 
1612
- #: src/lang.cls.php:225 tpl/inc/disabled_all.php:5
1613
  msgid "Disable All Features"
1614
  msgstr ""
1615
 
1616
- #: src/lang.cls.php:226 tpl/toolbox/log_viewer.tpl.php:7
1617
  msgid "Debug Log"
1618
  msgstr ""
1619
 
1620
- #: src/lang.cls.php:227
1621
  msgid "Admin IPs"
1622
  msgstr ""
1623
 
1624
- #: src/lang.cls.php:228
1625
  msgid "Debug Level"
1626
  msgstr ""
1627
 
1628
- #: src/lang.cls.php:229
1629
  msgid "Log File Size Limit"
1630
  msgstr ""
1631
 
1632
- #: src/lang.cls.php:230
1633
  msgid "Log Cookies"
1634
  msgstr ""
1635
 
1636
- #: src/lang.cls.php:231
1637
  msgid "Collapse Query Strings"
1638
  msgstr ""
1639
 
1640
- #: src/lang.cls.php:232
1641
  msgid "Debug URI Includes"
1642
  msgstr ""
1643
 
1644
- #: src/lang.cls.php:233
1645
  msgid "Debug URI Excludes"
1646
  msgstr ""
1647
 
1648
- #: src/lang.cls.php:235
1649
  msgid "Revisions Max Number"
1650
  msgstr ""
1651
 
1652
- #: src/lang.cls.php:236
1653
  msgid "Revisions Max Age"
1654
  msgstr ""
1655
 
@@ -1838,14 +1855,6 @@ msgstr ""
1838
  msgid " %s ago"
1839
  msgstr ""
1840
 
1841
- #: src/utility.cls.php:876
1842
- msgid "&laquo;"
1843
- msgstr ""
1844
-
1845
- #: src/utility.cls.php:877
1846
- msgid "&raquo;"
1847
- msgstr ""
1848
-
1849
  #: thirdparty/woocommerce.content.tpl.php:16
1850
  msgid "WooCommerce Settings"
1851
  msgstr ""
@@ -1970,7 +1979,7 @@ msgstr ""
1970
  msgid "Dismiss this notice"
1971
  msgstr ""
1972
 
1973
- #. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 4.3) #-#-#-#-#
1974
  #. Plugin Name of the plugin/theme
1975
  #: tpl/banner/new_version.php:59 tpl/banner/new_version_dev.tpl.php:12
1976
  #: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
@@ -1986,7 +1995,7 @@ msgid "New release %s is available now."
1986
  msgstr ""
1987
 
1988
  #: tpl/banner/new_version.php:71 tpl/banner/new_version_dev.tpl.php:24
1989
- #: tpl/toolbox/beta_test.tpl.php:52
1990
  msgid "Upgrade"
1991
  msgstr ""
1992
 
@@ -2292,7 +2301,7 @@ msgstr ""
2292
  #: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
2293
  #: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
2294
  #: tpl/inc/check_if_network_disable_all.php:18
2295
- #: tpl/page_optm/settings_css.tpl.php:59 tpl/page_optm/settings_css.tpl.php:154
2296
  #: tpl/page_optm/settings_localization.tpl.php:11
2297
  msgid "WARNING"
2298
  msgstr ""
@@ -2331,8 +2340,9 @@ msgstr ""
2331
  #: tpl/page_optm/settings_media_exc.tpl.php:27
2332
  #: tpl/page_optm/settings_tuning.tpl.php:36
2333
  #: tpl/page_optm/settings_tuning.tpl.php:57
2334
- #: tpl/page_optm/settings_tuning.tpl.php:144
2335
- #: tpl/page_optm/settings_tuning.tpl.php:165
 
2336
  msgid "Filter %s is supported."
2337
  msgstr ""
2338
 
@@ -2614,15 +2624,15 @@ msgstr ""
2614
  msgid "Serve a separate cache copy for mobile visitors."
2615
  msgstr ""
2616
 
2617
- #: tpl/cache/settings_inc.cache_mobile.tpl.php:42
2618
  msgid "Htaccess did not match configuration option."
2619
  msgstr ""
2620
 
2621
- #: tpl/cache/settings_inc.cache_mobile.tpl.php:43
2622
  msgid "Htaccess rule is: %s"
2623
  msgstr ""
2624
 
2625
- #: tpl/cache/settings_inc.cache_mobile.tpl.php:70
2626
  msgid "If %1$s is %2$s, then %3$s must be populated!"
2627
  msgstr ""
2628
 
@@ -3044,7 +3054,7 @@ msgid "Blacklisted due to not cacheable"
3044
  msgstr ""
3045
 
3046
  #: tpl/crawler/blacklist.tpl.php:57 tpl/crawler/map.tpl.php:70
3047
- #: tpl/crawler/summary.tpl.php:159 tpl/crawler/summary.tpl.php:180
3048
  msgid "Blacklisted"
3049
  msgstr ""
3050
 
@@ -3300,66 +3310,70 @@ msgid "Run Frequency"
3300
  msgstr ""
3301
 
3302
  #: tpl/crawler/summary.tpl.php:125
 
 
 
 
3303
  msgid "Running"
3304
  msgstr ""
3305
 
3306
- #: tpl/crawler/summary.tpl.php:156
3307
  msgid "Waiting"
3308
  msgstr ""
3309
 
3310
- #: tpl/crawler/summary.tpl.php:157
3311
  msgid "Hit"
3312
  msgstr ""
3313
 
3314
- #: tpl/crawler/summary.tpl.php:158
3315
  msgid "Miss"
3316
  msgstr ""
3317
 
3318
- #: tpl/crawler/summary.tpl.php:166
3319
  msgid "running"
3320
  msgstr ""
3321
 
3322
- #: tpl/crawler/summary.tpl.php:177
3323
  msgid "Waiting to be Crawled"
3324
  msgstr ""
3325
 
3326
- #: tpl/crawler/summary.tpl.php:178
3327
  msgid "Already Cached"
3328
  msgstr ""
3329
 
3330
- #: tpl/crawler/summary.tpl.php:179
3331
  msgid "Successfully Crawled"
3332
  msgstr ""
3333
 
3334
- #: tpl/crawler/summary.tpl.php:184
3335
  msgid "Run frequency is set by the Interval Between Runs setting."
3336
  msgstr ""
3337
 
3338
- #: tpl/crawler/summary.tpl.php:185
3339
  msgid "Crawlers cannot run concurrently."
3340
  msgstr ""
3341
 
3342
- #: tpl/crawler/summary.tpl.php:186
3343
  msgid ""
3344
  "&nbsp;If both the cron and a manual run start at similar times, the first to "
3345
  "be started will take precedence."
3346
  msgstr ""
3347
 
3348
- #: tpl/crawler/summary.tpl.php:187
3349
  msgid ""
3350
  "Please see <a %s>Hooking WP-Cron Into the System Task Scheduler</a> to learn "
3351
  "how to create the system cron task."
3352
  msgstr ""
3353
 
3354
- #: tpl/crawler/summary.tpl.php:192
3355
  msgid "Watch Crawler Status"
3356
  msgstr ""
3357
 
3358
- #: tpl/crawler/summary.tpl.php:199
3359
  msgid "Show crawler status"
3360
  msgstr ""
3361
 
3362
- #: tpl/crawler/summary.tpl.php:217
3363
  msgid "No crawler meta file generated yet"
3364
  msgstr ""
3365
 
@@ -3430,7 +3444,7 @@ msgid "Current closest Cloud server is %s.&#10;Click to redetect."
3430
  msgstr ""
3431
 
3432
  #: tpl/dash/dashboard.tpl.php:227 tpl/img_optm/summary.tpl.php:57
3433
- #: tpl/page_optm/settings_css.tpl.php:83 tpl/page_optm/settings_css.tpl.php:184
3434
  #: tpl/page_optm/settings_media.tpl.php:176
3435
  msgid ""
3436
  "Are you sure you want to redetect the closest cloud server for this service?"
@@ -3487,8 +3501,8 @@ msgid "Critical CSS"
3487
  msgstr ""
3488
 
3489
  #: tpl/dash/dashboard.tpl.php:437 tpl/dash/dashboard.tpl.php:470
3490
- #: tpl/dash/dashboard.tpl.php:503 tpl/page_optm/settings_css.tpl.php:74
3491
- #: tpl/page_optm/settings_css.tpl.php:175
3492
  #: tpl/page_optm/settings_media.tpl.php:170
3493
  msgid "Last generated"
3494
  msgstr ""
@@ -3906,7 +3920,7 @@ msgid ""
3906
  "or tablet visitors."
3907
  msgstr ""
3908
 
3909
- #: tpl/general/settings_inc.guest.tpl.php:29
3910
  msgid "Your %1s quota on %2s will still be in use."
3911
  msgstr ""
3912
 
@@ -4003,8 +4017,8 @@ msgstr ""
4003
  msgid "The image compression quality setting of WordPress out of 100."
4004
  msgstr ""
4005
 
4006
- #: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:83
4007
- #: tpl/page_optm/settings_css.tpl.php:184
4008
  #: tpl/page_optm/settings_media.tpl.php:176
4009
  msgid "Current closest Cloud server is %s.&#10; Click to redetect."
4010
  msgstr ""
@@ -4264,6 +4278,12 @@ msgid ""
4264
  "page."
4265
  msgstr ""
4266
 
 
 
 
 
 
 
4267
  #: tpl/inc/show_display_installed.php:5
4268
  msgid "LiteSpeed Cache plugin is installed!"
4269
  msgstr ""
@@ -4403,37 +4423,52 @@ msgid ""
4403
  "queue."
4404
  msgstr ""
4405
 
4406
- #: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:178
 
 
 
 
4407
  msgid "Last requested cost"
4408
  msgstr ""
4409
 
4410
- #: tpl/page_optm/settings_css.tpl.php:89 tpl/page_optm/settings_css.tpl.php:190
4411
  msgid "URL list in %s queue waiting for cron"
4412
  msgstr ""
4413
 
4414
- #: tpl/page_optm/settings_css.tpl.php:110
4415
- #: tpl/page_optm/settings_css.tpl.php:211
4416
  msgid "Run %s Queue Manually"
4417
  msgstr ""
4418
 
4419
- #: tpl/page_optm/settings_css.tpl.php:126
 
 
 
 
 
 
 
 
 
 
 
4420
  msgid ""
4421
  "Include external CSS and inline CSS in combined file when %1$s is also "
4422
  "enabled. This option helps maintain the priorities of CSS, which should "
4423
  "minimize potential errors caused by CSS Combine."
4424
  msgstr ""
4425
 
4426
- #: tpl/page_optm/settings_css.tpl.php:139
4427
  msgid ""
4428
  "Pre-send internal CSS files to the browser before they are requested. "
4429
  "(Requires the HTTP/2 protocol)"
4430
  msgstr ""
4431
 
4432
- #: tpl/page_optm/settings_css.tpl.php:158
4433
  msgid "Optimize CSS delivery."
4434
  msgstr ""
4435
 
4436
- #: tpl/page_optm/settings_css.tpl.php:159
4437
  #: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:80
4438
  #: tpl/page_optm/settings_media.tpl.php:243
4439
  msgid ""
@@ -4441,53 +4476,57 @@ msgid ""
4441
  "PageSpeed."
4442
  msgstr ""
4443
 
4444
- #: tpl/page_optm/settings_css.tpl.php:160
4445
  msgid ""
4446
  "Use QUIC.cloud online service to generate critical CSS and load remaining "
4447
  "CSS asynchronously."
4448
  msgstr ""
4449
 
4450
- #: tpl/page_optm/settings_css.tpl.php:162
4451
  msgid ""
4452
  "Automatic generation of critical CSS is in the background via a cron-based "
4453
  "queue."
4454
  msgstr ""
4455
 
4456
- #: tpl/page_optm/settings_css.tpl.php:163
4457
  msgid ""
4458
  "When this option is turned %s, it will also load Google Fonts asynchronously."
4459
  msgstr ""
4460
 
4461
- #: tpl/page_optm/settings_css.tpl.php:166
4462
  msgid "Elements with attribute %s in HTML code will be excluded."
4463
  msgstr ""
4464
 
4465
- #: tpl/page_optm/settings_css.tpl.php:226
 
 
 
 
4466
  msgid ""
4467
  "Disable this option to generate CCSS per Post Type instead of per page. This "
4468
  "can save significant CCSS quota, however it may result in incorrect CSS "
4469
  "styling if your site uses a page builder."
4470
  msgstr ""
4471
 
4472
- #: tpl/page_optm/settings_css.tpl.php:239
4473
  msgid "This will inline the asynchronous CSS library to avoid render blocking."
4474
  msgstr ""
4475
 
4476
- #: tpl/page_optm/settings_css.tpl.php:250
4477
  msgid "Default"
4478
  msgstr ""
4479
 
4480
- #: tpl/page_optm/settings_css.tpl.php:252
4481
  msgid ""
4482
  "Set this to append %1$s to all %2$s rules before caching CSS to specify how "
4483
  "fonts should be displayed while being downloaded."
4484
  msgstr ""
4485
 
4486
- #: tpl/page_optm/settings_css.tpl.php:253
4487
  msgid "%s is recommended."
4488
  msgstr ""
4489
 
4490
- #: tpl/page_optm/settings_css.tpl.php:253
4491
  msgid "Swap"
4492
  msgstr ""
4493
 
@@ -4789,8 +4828,8 @@ msgstr ""
4789
  #: tpl/page_optm/settings_media_exc.tpl.php:28
4790
  #: tpl/page_optm/settings_tuning.tpl.php:37
4791
  #: tpl/page_optm/settings_tuning.tpl.php:58
4792
- #: tpl/page_optm/settings_tuning.tpl.php:145
4793
- #: tpl/page_optm/settings_tuning.tpl.php:166
4794
  msgid "Elements with attribute %s in html code will be excluded."
4795
  msgstr ""
4796
 
@@ -4825,7 +4864,7 @@ msgstr ""
4825
  #: tpl/page_optm/settings_tuning.tpl.php:38
4826
  #: tpl/page_optm/settings_tuning.tpl.php:59
4827
  #: tpl/page_optm/settings_tuning.tpl.php:83
4828
- #: tpl/page_optm/settings_tuning.tpl.php:146
4829
  msgid "Predefined list will also be combined w/ the above settings"
4830
  msgstr ""
4831
 
@@ -4852,102 +4891,106 @@ msgid ""
4852
  msgstr ""
4853
 
4854
  #: tpl/page_optm/settings_tuning.tpl.php:97
 
 
 
 
4855
  msgid ""
4856
  "List post types where each item of that type should have its own CCSS "
4857
  "generated."
4858
  msgstr ""
4859
 
4860
- #: tpl/page_optm/settings_tuning.tpl.php:98
4861
  msgid ""
4862
  "For example, if every Page on the site has different formatting, enter %s in "
4863
  "the box. Separate critical CSS files will be stored for every Page on the "
4864
  "site."
4865
  msgstr ""
4866
 
4867
- #: tpl/page_optm/settings_tuning.tpl.php:112
4868
  msgid ""
4869
  "Separate critical CSS files will be generated for paths containing these "
4870
  "strings."
4871
  msgstr ""
4872
 
4873
- #: tpl/page_optm/settings_tuning.tpl.php:126
4874
  msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
4875
  msgstr ""
4876
 
4877
- #: tpl/page_optm/settings_tuning.tpl.php:139
4878
  msgid "Listed JS files or inline JS code will not be deferred."
4879
  msgstr ""
4880
 
4881
- #: tpl/page_optm/settings_tuning.tpl.php:160
4882
  msgid "Listed JS files or inline JS code will not be optimized by %s."
4883
  msgstr ""
4884
 
4885
- #: tpl/page_optm/settings_tuning.tpl.php:180
4886
  msgid "Prevent any optimization of listed pages."
4887
  msgstr ""
4888
 
4889
- #: tpl/page_optm/settings_tuning.tpl.php:194
4890
  msgid ""
4891
  "Only optimize pages for guest (not logged in) visitors. If turned this OFF, "
4892
  "CSS/JS/CCSS files will be doubled by each user group."
4893
  msgstr ""
4894
 
4895
- #: tpl/page_optm/settings_tuning.tpl.php:206
4896
  msgid "Selected roles will be excluded from all optimizations."
4897
  msgstr ""
4898
 
4899
- #: tpl/toolbox/beta_test.tpl.php:15
4900
  msgid "Try GitHub Version"
4901
  msgstr ""
4902
 
4903
- #: tpl/toolbox/beta_test.tpl.php:19
4904
  msgid ""
4905
  "Use this section to switch plugin versions. To beta test a GitHub commit, "
4906
  "enter the commit URL in the field below."
4907
  msgstr ""
4908
 
4909
- #: tpl/toolbox/beta_test.tpl.php:20
4910
  msgid "Example"
4911
  msgstr ""
4912
 
4913
- #: tpl/toolbox/beta_test.tpl.php:24
4914
  msgid "Use latest GitHub Dev commit"
4915
  msgstr ""
4916
 
4917
- #: tpl/toolbox/beta_test.tpl.php:26
4918
  msgid "Use latest GitHub Master commit"
4919
  msgstr ""
4920
 
4921
- #: tpl/toolbox/beta_test.tpl.php:28 tpl/toolbox/beta_test.tpl.php:44
4922
  msgid "Use latest WordPress release version"
4923
  msgstr ""
4924
 
4925
- #: tpl/toolbox/beta_test.tpl.php:28
4926
  msgid "OR"
4927
  msgstr ""
4928
 
4929
- #: tpl/toolbox/beta_test.tpl.php:39
4930
  msgid ""
4931
  "Downgrade not recommended. May cause fatal error due to refactored code."
4932
  msgstr ""
4933
 
4934
- #: tpl/toolbox/beta_test.tpl.php:43
4935
  msgid ""
4936
  "Press the %s button to use the most recent GitHub commit. Master is for "
4937
  "release candidate & Dev is for experimental testing."
4938
  msgstr ""
4939
 
4940
- #: tpl/toolbox/beta_test.tpl.php:43
4941
  msgid "Use latest GitHub Dev/Master commit"
4942
  msgstr ""
4943
 
4944
- #: tpl/toolbox/beta_test.tpl.php:44
4945
  msgid ""
4946
  "Press the %s button to stop beta testing and go back to the current release "
4947
  "from the WordPress Plugin Directory."
4948
  msgstr ""
4949
 
4950
- #: tpl/toolbox/beta_test.tpl.php:49
4951
  msgid ""
4952
  "In order to avoid an upgrade error, you must be using %1$s or later before "
4953
  "you can upgrade to %2$s versions."
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.4\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
7
+ "POT-Creation-Date: 2021-08-31 18:21:39+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
66
  msgid "Database"
67
  msgstr ""
68
 
69
+ #: src/admin-display.cls.php:129 src/lang.cls.php:213
70
  msgid "Crawler"
71
  msgstr ""
72
 
102
  msgid "Add new CDN URL"
103
  msgstr ""
104
 
105
+ #: src/admin-display.cls.php:232 src/admin-display.cls.php:826
106
+ #: src/admin-display.cls.php:855 src/admin-display.cls.php:906
107
  #: tpl/cache/settings-cache.tpl.php:19
108
+ #: tpl/cache/settings_inc.cache_mobile.tpl.php:71 tpl/cdn/settings.tpl.php:49
109
+ #: tpl/page_optm/settings_css.tpl.php:186
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 ""
115
 
116
+ #: src/admin-display.cls.php:233 src/admin-display.cls.php:827
117
+ #: src/admin-display.cls.php:854 src/admin-display.cls.php:906
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_css.tpl.php:71 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:281 src/gui.cls.php:584
127
  msgid "Settings"
128
  msgstr ""
129
 
130
+ #: src/admin-display.cls.php:450
131
  msgid "Dismiss"
132
  msgstr ""
133
 
134
+ #: src/admin-display.cls.php:695 src/admin-display.cls.php:700
135
  msgid "Save Changes"
136
  msgstr ""
137
 
138
+ #: src/admin-display.cls.php:918
139
  msgid "This setting is overwritten by the PHP constant %s"
140
  msgstr ""
141
 
142
+ #: src/admin-display.cls.php:921
143
  msgid "This setting is overwritten by the primary site setting"
144
  msgstr ""
145
 
146
+ #: src/admin-display.cls.php:924
147
  msgid "This setting is overwritten by the Network setting"
148
  msgstr ""
149
 
150
+ #: src/admin-display.cls.php:928
151
  msgid "currently set to %s"
152
  msgstr ""
153
 
154
+ #: src/admin-display.cls.php:938 tpl/cache/settings_inc.object.tpl.php:103
155
  #: tpl/crawler/settings-general.tpl.php:60
156
  #: tpl/crawler/settings-general.tpl.php:74
157
  #: tpl/crawler/settings-general.tpl.php:89 tpl/esi_widget_edit.php:70
158
  msgid "seconds"
159
  msgstr ""
160
 
161
+ #: src/admin-display.cls.php:969 src/admin-display.cls.php:974
162
  #: tpl/cdn/settings.tpl.php:99
163
  msgid "Default value"
164
  msgstr ""
165
 
166
+ #: src/admin-display.cls.php:998
167
  msgid "Invalid rewrite rule"
168
  msgstr ""
169
 
170
+ #: src/admin-display.cls.php:1015
171
  msgid "Path must end with %s"
172
  msgstr ""
173
 
174
+ #: src/admin-display.cls.php:1033
175
  msgid "Minimum value"
176
  msgstr ""
177
 
178
+ #: src/admin-display.cls.php:1036
179
  msgid "Maximum value"
180
  msgstr ""
181
 
182
+ #: src/admin-display.cls.php:1048
183
  msgid "Zero, or"
184
  msgstr ""
185
 
186
+ #: src/admin-display.cls.php:1055
187
  msgid "Larger than"
188
  msgstr ""
189
 
190
+ #: src/admin-display.cls.php:1058
191
  msgid "Smaller than"
192
  msgstr ""
193
 
194
+ #: src/admin-display.cls.php:1061
195
  msgid "Value range"
196
  msgstr ""
197
 
198
+ #: src/admin-display.cls.php:1086
199
  msgid "Invalid IP"
200
  msgstr ""
201
 
202
+ #: src/admin-display.cls.php:1106 tpl/cache/settings-esi.tpl.php:95
203
+ #: tpl/page_optm/settings_css.tpl.php:188
204
  #: tpl/page_optm/settings_html.tpl.php:85
205
  #: tpl/page_optm/settings_media_exc.tpl.php:26
206
  #: tpl/page_optm/settings_tuning.tpl.php:35
207
  #: tpl/page_optm/settings_tuning.tpl.php:56
208
+ #: tpl/page_optm/settings_tuning.tpl.php:101
209
+ #: tpl/page_optm/settings_tuning.tpl.php:162
210
+ #: tpl/page_optm/settings_tuning.tpl.php:183
211
  msgid "API"
212
  msgstr ""
213
 
214
+ #: src/admin-display.cls.php:1107
215
  msgid "Server variable(s) %s available to override this setting."
216
  msgstr ""
217
 
218
+ #: src/admin-display.cls.php:1119
219
  msgid "The URLs will be compared to the REQUEST_URI server variable."
220
  msgstr ""
221
 
222
+ #: src/admin-display.cls.php:1120
223
  msgid "For example, for %s, %s can be used here."
224
  msgstr ""
225
 
226
+ #: src/admin-display.cls.php:1122
227
  msgid "To match the beginning, add %s to the beginning of the item."
228
  msgstr ""
229
 
230
+ #: src/admin-display.cls.php:1123
231
  msgid "To do an exact match, add %s to the end of the URL."
232
  msgstr ""
233
 
234
+ #: src/admin-display.cls.php:1124 src/doc.cls.php:74
235
  msgid "One per line."
236
  msgstr ""
237
 
238
+ #: src/admin-display.cls.php:1138
239
  msgid "%s groups"
240
  msgstr ""
241
 
242
+ #: src/admin-display.cls.php:1141
243
  msgid "%s images"
244
  msgstr ""
245
 
246
+ #: src/admin-display.cls.php:1151
247
  msgid "%s group"
248
  msgstr ""
249
 
250
+ #: src/admin-display.cls.php:1154
251
  msgid "%s image"
252
  msgstr ""
253
 
279
  msgid "Failed to communicate with Cloudflare"
280
  msgstr ""
281
 
282
+ #: src/cloud.cls.php:359 src/cloud.cls.php:372 src/cloud.cls.php:407
283
+ #: src/cloud.cls.php:432 src/cloud.cls.php:551 src/cloud.cls.php:907
284
  msgid "Cloud Error"
285
  msgstr ""
286
 
287
+ #: src/cloud.cls.php:407
288
  msgid "No available Cloud Node."
289
  msgstr ""
290
 
291
+ #: src/cloud.cls.php:432
292
  msgid "No available Cloud Node after checked server load."
293
  msgstr ""
294
 
295
+ #: src/cloud.cls.php:551
296
  msgid "Please try after %1$s for service %2$s."
297
  msgstr ""
298
 
299
+ #: src/cloud.cls.php:634 src/cloud.cls.php:650
300
  msgid "Failed to request via WordPress"
301
  msgstr ""
302
 
303
+ #: src/cloud.cls.php:665
304
  msgid "Redetected node"
305
  msgstr ""
306
 
307
+ #: src/cloud.cls.php:673
308
  msgid ""
309
  "We are working hard to improve your online service experience. The service "
310
  "will be unavailable while we work. We apologize for any inconvenience."
311
  msgstr ""
312
 
313
+ #: src/cloud.cls.php:686 src/cloud.cls.php:694 src/cloud.cls.php:943
314
  msgid "Message from QUIC.cloud server"
315
  msgstr ""
316
 
317
+ #: src/cloud.cls.php:702
318
  msgid "Good news from QUIC.cloud server"
319
  msgstr ""
320
 
321
+ #: src/cloud.cls.php:711
322
  msgid "%1$s plugin version %2$s required for this action."
323
  msgstr ""
324
 
325
+ #: src/cloud.cls.php:754 src/cloud.cls.php:932
326
  msgid "Failed to communicate with QUIC.cloud server"
327
  msgstr ""
328
 
329
+ #: src/cloud.cls.php:762
330
  msgid ""
331
  "Site not recognized. Domain Key has been automatically removed. Please "
332
  "request a new one."
333
  msgstr ""
334
 
335
+ #: src/cloud.cls.php:763 src/error.cls.php:48
336
  msgid "Click here to set."
337
  msgstr ""
338
 
339
+ #: src/cloud.cls.php:951
340
  msgid ""
341
  "Applied for Domain Key successfully. Please wait for result. Domain Key will "
342
  "be automatically sent to your WordPress."
343
  msgstr ""
344
 
345
+ #: src/cloud.cls.php:1002
346
  msgid ""
347
  "Congratulations, your Domain Key has been approved! The setting has been "
348
  "updated accordingly."
349
  msgstr ""
350
 
351
+ #: src/cloud.cls.php:1073
352
  msgid "Domain Key hash mismatch"
353
  msgstr ""
354
 
355
+ #: src/cloud.cls.php:1184
356
  msgid "Sync credit allowance with Cloud Server successfully."
357
  msgstr ""
358
 
359
+ #: src/conf.cls.php:701
360
  msgid "Changed setting successfully."
361
  msgstr ""
362
 
380
  msgid "Sitemap created successfully: %d items"
381
  msgstr ""
382
 
383
+ #: src/crawler.cls.php:99
384
+ msgid "Crawler disabled list is cleared! All crawlers are set to active! "
385
+ msgstr ""
386
+
387
+ #: src/crawler.cls.php:826
388
  msgid "Guest"
389
  msgstr ""
390
 
391
+ #: src/crawler.cls.php:978
392
  msgid "Manually added to blacklist"
393
  msgstr ""
394
 
395
+ #: src/crawler.cls.php:981
396
  msgid "Previously existed in blacklist"
397
  msgstr ""
398
 
399
+ #: src/css.cls.php:60 src/root.cls.php:163
400
  msgid "Queue cleared successfully."
401
  msgstr ""
402
 
403
+ #: src/css.cls.php:577
404
  msgid "%1$s %2$s files left in queue"
405
  msgstr ""
406
 
407
+ #: src/css.cls.php:578
408
  msgid "Cancel"
409
  msgstr ""
410
 
422
  "errors."
423
  msgstr ""
424
 
425
+ #: src/data.upgrade.func.php:83 src/lang.cls.php:116
426
  msgid "JS Combine"
427
  msgstr ""
428
 
478
  msgid "Converted to InnoDB successfully."
479
  msgstr ""
480
 
481
+ #: src/doc.cls.php:25
482
+ msgid "This setting will regenerate crawler list and clear the disabled list!"
483
+ msgstr ""
484
+
485
+ #: src/doc.cls.php:36
486
  msgid ""
487
  "This site utilizes caching in order to facilitate a faster response time and "
488
  "better user experience. Caching potentially stores a duplicate copy of every "
494
  "services to process & cache your data temporarily."
495
  msgstr ""
496
 
497
+ #: src/doc.cls.php:37
498
  msgid "Please see %s for more details."
499
  msgstr ""
500
 
501
+ #: src/doc.cls.php:53 src/doc.cls.php:105 tpl/cdn/manage.tpl.php:66
502
  #: tpl/dash/dashboard.tpl.php:49 tpl/img_optm/summary.tpl.php:62
503
  #: tpl/img_optm/summary.tpl.php:102 tpl/inc/check_cache_disabled.php:42
504
  msgid "Learn More"
505
  msgstr ""
506
 
507
+ #: src/doc.cls.php:89
508
  msgid "Both full and partial strings can be used."
509
  msgstr ""
510
 
511
+ #: src/doc.cls.php:92
512
  msgid "Both full URLs and partial strings can be used."
513
  msgstr ""
514
 
515
+ #: src/doc.cls.php:104
516
  msgid "This setting will edit the .htaccess file."
517
  msgstr ""
518
 
519
+ #: src/doc.cls.php:117
520
  msgid ""
521
  "For online services to work correctly, you must whitelist all %s server IPs."
522
  msgstr ""
523
 
524
+ #: src/doc.cls.php:118
525
  msgid ""
526
  "Before generating key, please verify all IPs on this list are whitelisted"
527
  msgstr ""
528
 
529
+ #: src/doc.cls.php:119 tpl/general/settings.tpl.php:86
530
  msgid "Current Online Server IPs"
531
  msgstr ""
532
 
767
  msgid "LQIP Cache"
768
  msgstr ""
769
 
770
+ #: src/gui.cls.php:536 src/gui.cls.php:687 src/lang.cls.php:144
771
  #: tpl/toolbox/purge.tpl.php:97
772
  msgid "Gravatar Cache"
773
  msgstr ""
861
  msgid "Pull Cron is running"
862
  msgstr ""
863
 
864
+ #: src/img-optm.cls.php:948
865
  msgid "Some optimized image file(s) has expired and was cleared."
866
  msgstr ""
867
 
868
+ #: src/img-optm.cls.php:965
869
  msgid "One or more pulled images does not match with the notified image md5"
870
  msgstr ""
871
 
872
+ #: src/img-optm.cls.php:1009
873
  msgid "Optimized WebP file expired and was cleared."
874
  msgstr ""
875
 
876
+ #: src/img-optm.cls.php:1026
877
  msgid "Pulled WebP image md5 does not match the notified WebP image md5."
878
  msgstr ""
879
 
880
+ #: src/img-optm.cls.php:1086
881
  msgid "Pulled %d image(s)"
882
  msgstr ""
883
 
884
+ #: src/img-optm.cls.php:1173
885
  msgid "Cleaned up unfinished data successfully."
886
  msgstr ""
887
 
888
+ #: src/img-optm.cls.php:1244
889
  msgid "Destroy all optimization data successfully."
890
  msgstr ""
891
 
892
+ #: src/img-optm.cls.php:1276 src/img-optm.cls.php:1341
893
  msgid "Rescaned successfully."
894
  msgstr ""
895
 
896
+ #: src/img-optm.cls.php:1341
897
  msgid "Rescaned %d images successfully."
898
  msgstr ""
899
 
900
+ #: src/img-optm.cls.php:1400
901
  msgid "Calculated backups successfully."
902
  msgstr ""
903
 
904
+ #: src/img-optm.cls.php:1462
905
  msgid "Removed backups successfully."
906
  msgstr ""
907
 
908
+ #: src/img-optm.cls.php:1659
909
  msgid "Switched images successfully."
910
  msgstr ""
911
 
912
+ #: src/img-optm.cls.php:1687
913
  msgid "Disabled WebP file successfully."
914
  msgstr ""
915
 
916
+ #: src/img-optm.cls.php:1693
917
  msgid "Enabled WebP file successfully."
918
  msgstr ""
919
 
920
+ #: src/img-optm.cls.php:1709
921
  msgid "Restored original file successfully."
922
  msgstr ""
923
 
924
+ #: src/img-optm.cls.php:1716
925
  msgid "Switched to optimized file successfully."
926
  msgstr ""
927
 
928
+ #: src/img-optm.cls.php:1779
929
  msgid "Reset the optimized data successfully."
930
  msgstr ""
931
 
1077
  msgid "Cache PHP Resources"
1078
  msgstr ""
1079
 
1080
+ #: src/lang.cls.php:77 tpl/cache/settings_inc.cache_mobile.tpl.php:71
1081
  msgid "Cache Mobile"
1082
  msgstr ""
1083
 
1084
+ #: src/lang.cls.php:78 tpl/cache/settings_inc.cache_mobile.tpl.php:71
1085
  msgid "List of Mobile User Agents"
1086
  msgstr ""
1087
 
1202
  msgstr ""
1203
 
1204
  #: src/lang.cls.php:111
1205
+ msgid "UCSS Inline"
1206
  msgstr ""
1207
 
1208
  #: src/lang.cls.php:112
1209
+ msgid "UCSS Whitelist"
1210
  msgstr ""
1211
 
1212
  #: src/lang.cls.php:113
1213
+ msgid "UCSS URI Excludes"
1214
+ msgstr ""
1215
+
1216
+ #: src/lang.cls.php:114
1217
+ msgid "CSS HTTP/2 Push"
1218
  msgstr ""
1219
 
1220
  #: src/lang.cls.php:115
1221
+ msgid "JS Minify"
1222
+ msgstr ""
1223
+
1224
+ #: src/lang.cls.php:117
1225
  msgid "JS Combine External and Inline"
1226
  msgstr ""
1227
 
1228
+ #: src/lang.cls.php:118
1229
  msgid "JS HTTP/2 Push"
1230
  msgstr ""
1231
 
1232
+ #: src/lang.cls.php:119
1233
  msgid "HTML Minify"
1234
  msgstr ""
1235
 
1236
+ #: src/lang.cls.php:120
1237
  msgid "HTML Lazy Load Selectors"
1238
  msgstr ""
1239
 
1240
+ #: src/lang.cls.php:121 tpl/page_optm/settings_tuning.tpl.php:145
1241
  msgid "Load CSS Asynchronously"
1242
  msgstr ""
1243
 
1244
+ #: src/lang.cls.php:122
1245
  msgid "CCSS Per URL"
1246
  msgstr ""
1247
 
1248
+ #: src/lang.cls.php:123
1249
  msgid "Inline CSS Async Lib"
1250
  msgstr ""
1251
 
1252
+ #: src/lang.cls.php:124
1253
  msgid "Font Display Optimization"
1254
  msgstr ""
1255
 
1256
+ #: src/lang.cls.php:125
1257
  msgid "Load JS Deferred"
1258
  msgstr ""
1259
 
1260
+ #: src/lang.cls.php:126
1261
  msgid "DNS Prefetch"
1262
  msgstr ""
1263
 
1264
+ #: src/lang.cls.php:127
1265
  msgid "DNS Prefetch Control"
1266
  msgstr ""
1267
 
1268
+ #: src/lang.cls.php:128
1269
  msgid "CSS Excludes"
1270
  msgstr ""
1271
 
1272
+ #: src/lang.cls.php:129
1273
  msgid "JS Excludes"
1274
  msgstr ""
1275
 
1276
+ #: src/lang.cls.php:130
1277
  msgid "Remove Query Strings"
1278
  msgstr ""
1279
 
1280
+ #: src/lang.cls.php:131
1281
  msgid "Load Google Fonts Asynchronously"
1282
  msgstr ""
1283
 
1284
+ #: src/lang.cls.php:132
1285
  msgid "Remove Google Fonts"
1286
  msgstr ""
1287
 
1288
+ #: src/lang.cls.php:133
1289
  msgid "Critical CSS Rules"
1290
  msgstr ""
1291
 
1292
+ #: src/lang.cls.php:134
1293
  msgid "Separate CCSS Cache Post Types"
1294
  msgstr ""
1295
 
1296
+ #: src/lang.cls.php:135
1297
  msgid "Separate CCSS Cache URIs"
1298
  msgstr ""
1299
 
1300
+ #: src/lang.cls.php:136
1301
  msgid "JS Deferred Excludes"
1302
  msgstr ""
1303
 
1304
+ #: src/lang.cls.php:137
1305
  msgid "Guest Mode JS Excludes"
1306
  msgstr ""
1307
 
1308
+ #: src/lang.cls.php:138
1309
  msgid "Remove WordPress Emoji"
1310
  msgstr ""
1311
 
1312
+ #: src/lang.cls.php:139
1313
  msgid "Remove Noscript Tags"
1314
  msgstr ""
1315
 
1316
+ #: src/lang.cls.php:140
1317
  msgid "URI Excludes"
1318
  msgstr ""
1319
 
1320
+ #: src/lang.cls.php:141
1321
  msgid "Optimize for Guests Only"
1322
  msgstr ""
1323
 
1324
+ #: src/lang.cls.php:142
1325
  msgid "Role Excludes"
1326
  msgstr ""
1327
 
1328
+ #: src/lang.cls.php:145
1329
  msgid "Gravatar Cache Cron"
1330
  msgstr ""
1331
 
1332
+ #: src/lang.cls.php:146
1333
  msgid "Gravatar Cache TTL"
1334
  msgstr ""
1335
 
1336
+ #: src/lang.cls.php:148
1337
  msgid "Lazy Load Images"
1338
  msgstr ""
1339
 
1340
+ #: src/lang.cls.php:149
1341
  msgid "Lazy Load Image Excludes"
1342
  msgstr ""
1343
 
1344
+ #: src/lang.cls.php:150
1345
  msgid "Lazy Load Image Class Name Excludes"
1346
  msgstr ""
1347
 
1348
+ #: src/lang.cls.php:151
1349
  msgid "Lazy Load Image Parent Class Name Excludes"
1350
  msgstr ""
1351
 
1352
+ #: src/lang.cls.php:152
1353
  msgid "Lazy Load Iframe Class Name Excludes"
1354
  msgstr ""
1355
 
1356
+ #: src/lang.cls.php:153
1357
  msgid "Lazy Load Iframe Parent Class Name Excludes"
1358
  msgstr ""
1359
 
1360
+ #: src/lang.cls.php:154
1361
  msgid "Lazy Load URI Excludes"
1362
  msgstr ""
1363
 
1364
+ #: src/lang.cls.php:155
1365
  msgid "LQIP Excludes"
1366
  msgstr ""
1367
 
1368
+ #: src/lang.cls.php:156
1369
  msgid "Basic Image Placeholder"
1370
  msgstr ""
1371
 
1372
+ #: src/lang.cls.php:157
1373
  msgid "Responsive Placeholder"
1374
  msgstr ""
1375
 
1376
+ #: src/lang.cls.php:158
1377
  msgid "Responsive Placeholder Color"
1378
  msgstr ""
1379
 
1380
+ #: src/lang.cls.php:159
1381
  msgid "Responsive Placeholder SVG"
1382
  msgstr ""
1383
 
1384
+ #: src/lang.cls.php:160
1385
  msgid "LQIP Cloud Generator"
1386
  msgstr ""
1387
 
1388
+ #: src/lang.cls.php:161
1389
  msgid "LQIP Quality"
1390
  msgstr ""
1391
 
1392
+ #: src/lang.cls.php:162
1393
  msgid "LQIP Minimum Dimensions"
1394
  msgstr ""
1395
 
1396
+ #: src/lang.cls.php:164
1397
  msgid "Generate LQIP In Background"
1398
  msgstr ""
1399
 
1400
+ #: src/lang.cls.php:165
1401
  msgid "Lazy Load Iframes"
1402
  msgstr ""
1403
 
1404
+ #: src/lang.cls.php:166
1405
  msgid "Add Missing Sizes"
1406
  msgstr ""
1407
 
1408
+ #: src/lang.cls.php:167
1409
  msgid "Inline Lazy Load Images Library"
1410
  msgstr ""
1411
 
1412
+ #: src/lang.cls.php:168
1413
  msgid "Auto Request Cron"
1414
  msgstr ""
1415
 
1416
+ #: src/lang.cls.php:169
1417
  msgid "Auto Pull Cron"
1418
  msgstr ""
1419
 
1420
+ #: src/lang.cls.php:170
1421
  msgid "Optimize Original Images"
1422
  msgstr ""
1423
 
1424
+ #: src/lang.cls.php:171
1425
  msgid "Remove Original Backups"
1426
  msgstr ""
1427
 
1428
+ #: src/lang.cls.php:172
1429
  msgid "Create WebP Versions"
1430
  msgstr ""
1431
 
1432
+ #: src/lang.cls.php:173
1433
  msgid "Optimize Losslessly"
1434
  msgstr ""
1435
 
1436
+ #: src/lang.cls.php:174
1437
  msgid "Preserve EXIF/XMP data"
1438
  msgstr ""
1439
 
1440
+ #: src/lang.cls.php:175
1441
  msgid "WebP Attribute To Replace"
1442
  msgstr ""
1443
 
1444
+ #: src/lang.cls.php:176
1445
  msgid "WebP For Extra srcset"
1446
  msgstr ""
1447
 
1448
+ #: src/lang.cls.php:177
1449
  msgid "WordPress Image Quality Control"
1450
  msgstr ""
1451
 
1452
+ #: src/lang.cls.php:178 tpl/esi_widget_edit.php:36
1453
  msgid "Enable ESI"
1454
  msgstr ""
1455
 
1456
+ #: src/lang.cls.php:179
1457
  msgid "Cache Admin Bar"
1458
  msgstr ""
1459
 
1460
+ #: src/lang.cls.php:180
1461
  msgid "Cache Comment Form"
1462
  msgstr ""
1463
 
1464
+ #: src/lang.cls.php:181
1465
  msgid "ESI Nonces"
1466
  msgstr ""
1467
 
1468
+ #: src/lang.cls.php:182 tpl/page_optm/settings_css.tpl.php:109
1469
+ #: tpl/page_optm/settings_css.tpl.php:232
1470
  msgid "Vary Group"
1471
  msgstr ""
1472
 
1473
+ #: src/lang.cls.php:183
1474
  msgid "Purge All Hooks"
1475
  msgstr ""
1476
 
1477
+ #: src/lang.cls.php:184
1478
  msgid "Improve HTTP/HTTPS Compatibility"
1479
  msgstr ""
1480
 
1481
+ #: src/lang.cls.php:185
1482
  msgid "Instant Click"
1483
  msgstr ""
1484
 
1485
+ #: src/lang.cls.php:186
1486
  msgid "Do Not Cache Cookies"
1487
  msgstr ""
1488
 
1489
+ #: src/lang.cls.php:187
1490
  msgid "Do Not Cache User Agents"
1491
  msgstr ""
1492
 
1493
+ #: src/lang.cls.php:188
1494
  msgid "Login Cookie"
1495
  msgstr ""
1496
 
1497
+ #: src/lang.cls.php:189
1498
  msgid "Image WebP Replacement"
1499
  msgstr ""
1500
 
1501
+ #: src/lang.cls.php:191
1502
  msgid "Frontend .htaccess Path"
1503
  msgstr ""
1504
 
1505
+ #: src/lang.cls.php:192
1506
  msgid "Backend .htaccess Path"
1507
  msgstr ""
1508
 
1509
+ #: src/lang.cls.php:193
1510
  msgid "Frontend Heartbeat Control"
1511
  msgstr ""
1512
 
1513
+ #: src/lang.cls.php:194
1514
  msgid "Frontend Heartbeat TTL"
1515
  msgstr ""
1516
 
1517
+ #: src/lang.cls.php:195
1518
  msgid "Backend Heartbeat Control"
1519
  msgstr ""
1520
 
1521
+ #: src/lang.cls.php:196
1522
  msgid "Backend Heartbeat TTL"
1523
  msgstr ""
1524
 
1525
+ #: src/lang.cls.php:197
1526
  msgid "Editor Heartbeat"
1527
  msgstr ""
1528
 
1529
+ #: src/lang.cls.php:198
1530
  msgid "Editor Heartbeat TTL"
1531
  msgstr ""
1532
 
1533
+ #: src/lang.cls.php:200
1534
  msgid "QUIC.cloud CDN"
1535
  msgstr ""
1536
 
1537
+ #: src/lang.cls.php:201
1538
  msgid "Use CDN Mapping"
1539
  msgstr ""
1540
 
1541
+ #: src/lang.cls.php:202
1542
  msgid "CDN URL"
1543
  msgstr ""
1544
 
1545
+ #: src/lang.cls.php:203
1546
  msgid "Include Images"
1547
  msgstr ""
1548
 
1549
+ #: src/lang.cls.php:204
1550
  msgid "Include CSS"
1551
  msgstr ""
1552
 
1553
+ #: src/lang.cls.php:205
1554
  msgid "Include JS"
1555
  msgstr ""
1556
 
1557
+ #: src/lang.cls.php:206 tpl/cdn/settings.tpl.php:102
1558
  msgid "Include File Types"
1559
  msgstr ""
1560
 
1561
+ #: src/lang.cls.php:207
1562
  msgid "HTML Attribute To Replace"
1563
  msgstr ""
1564
 
1565
+ #: src/lang.cls.php:208
1566
  msgid "Original URLs"
1567
  msgstr ""
1568
 
1569
+ #: src/lang.cls.php:209
1570
  msgid "Included Directories"
1571
  msgstr ""
1572
 
1573
+ #: src/lang.cls.php:210
1574
  msgid "Exclude Path"
1575
  msgstr ""
1576
 
1577
+ #: src/lang.cls.php:211
1578
  msgid "Cloudflare API"
1579
  msgstr ""
1580
 
1581
+ #: src/lang.cls.php:214
1582
  msgid "Delay"
1583
  msgstr ""
1584
 
1585
+ #: src/lang.cls.php:215
1586
  msgid "Run Duration"
1587
  msgstr ""
1588
 
1589
+ #: src/lang.cls.php:216
1590
  msgid "Interval Between Runs"
1591
  msgstr ""
1592
 
1593
+ #: src/lang.cls.php:217
1594
  msgid "Crawl Interval"
1595
  msgstr ""
1596
 
1597
+ #: src/lang.cls.php:218
1598
  msgid "Threads"
1599
  msgstr ""
1600
 
1601
+ #: src/lang.cls.php:219
1602
  msgid "Timeout"
1603
  msgstr ""
1604
 
1605
+ #: src/lang.cls.php:220
1606
  msgid "Server Load Limit"
1607
  msgstr ""
1608
 
1609
+ #: src/lang.cls.php:221
1610
  msgid "Role Simulation"
1611
  msgstr ""
1612
 
1613
+ #: src/lang.cls.php:222
1614
  msgid "Cookie Simulation"
1615
  msgstr ""
1616
 
1617
+ #: src/lang.cls.php:223
1618
  msgid "Custom Sitemap"
1619
  msgstr ""
1620
 
1621
+ #: src/lang.cls.php:224
1622
  msgid "Drop Domain from Sitemap"
1623
  msgstr ""
1624
 
1625
+ #: src/lang.cls.php:225
1626
  msgid "Sitemap Timeout"
1627
  msgstr ""
1628
 
1629
+ #: src/lang.cls.php:227 tpl/inc/disabled_all.php:5
1630
  msgid "Disable All Features"
1631
  msgstr ""
1632
 
1633
+ #: src/lang.cls.php:228 tpl/toolbox/log_viewer.tpl.php:7
1634
  msgid "Debug Log"
1635
  msgstr ""
1636
 
1637
+ #: src/lang.cls.php:229
1638
  msgid "Admin IPs"
1639
  msgstr ""
1640
 
1641
+ #: src/lang.cls.php:230
1642
  msgid "Debug Level"
1643
  msgstr ""
1644
 
1645
+ #: src/lang.cls.php:231
1646
  msgid "Log File Size Limit"
1647
  msgstr ""
1648
 
1649
+ #: src/lang.cls.php:232
1650
  msgid "Log Cookies"
1651
  msgstr ""
1652
 
1653
+ #: src/lang.cls.php:233
1654
  msgid "Collapse Query Strings"
1655
  msgstr ""
1656
 
1657
+ #: src/lang.cls.php:234
1658
  msgid "Debug URI Includes"
1659
  msgstr ""
1660
 
1661
+ #: src/lang.cls.php:235
1662
  msgid "Debug URI Excludes"
1663
  msgstr ""
1664
 
1665
+ #: src/lang.cls.php:237
1666
  msgid "Revisions Max Number"
1667
  msgstr ""
1668
 
1669
+ #: src/lang.cls.php:238
1670
  msgid "Revisions Max Age"
1671
  msgstr ""
1672
 
1855
  msgid " %s ago"
1856
  msgstr ""
1857
 
 
 
 
 
 
 
 
 
1858
  #: thirdparty/woocommerce.content.tpl.php:16
1859
  msgid "WooCommerce Settings"
1860
  msgstr ""
1979
  msgid "Dismiss this notice"
1980
  msgstr ""
1981
 
1982
+ #. #-#-#-#-# litespeed-cache.pot (LiteSpeed Cache 4.4) #-#-#-#-#
1983
  #. Plugin Name of the plugin/theme
1984
  #: tpl/banner/new_version.php:59 tpl/banner/new_version_dev.tpl.php:12
1985
  #: tpl/cache/more_settings_tip.tpl.php:15 tpl/inc/admin_footer.php:8
1995
  msgstr ""
1996
 
1997
  #: tpl/banner/new_version.php:71 tpl/banner/new_version_dev.tpl.php:24
1998
+ #: tpl/toolbox/beta_test.tpl.php:54
1999
  msgid "Upgrade"
2000
  msgstr ""
2001
 
2301
  #: tpl/cache/settings-esi.tpl.php:35 tpl/cdn/manage.tpl.php:21
2302
  #: tpl/crawler/summary.tpl.php:48 tpl/inc/check_cache_disabled.php:31
2303
  #: tpl/inc/check_if_network_disable_all.php:18
2304
+ #: tpl/page_optm/settings_css.tpl.php:59 tpl/page_optm/settings_css.tpl.php:177
2305
  #: tpl/page_optm/settings_localization.tpl.php:11
2306
  msgid "WARNING"
2307
  msgstr ""
2340
  #: tpl/page_optm/settings_media_exc.tpl.php:27
2341
  #: tpl/page_optm/settings_tuning.tpl.php:36
2342
  #: tpl/page_optm/settings_tuning.tpl.php:57
2343
+ #: tpl/page_optm/settings_tuning.tpl.php:102
2344
+ #: tpl/page_optm/settings_tuning.tpl.php:163
2345
+ #: tpl/page_optm/settings_tuning.tpl.php:184
2346
  msgid "Filter %s is supported."
2347
  msgstr ""
2348
 
2624
  msgid "Serve a separate cache copy for mobile visitors."
2625
  msgstr ""
2626
 
2627
+ #: tpl/cache/settings_inc.cache_mobile.tpl.php:43
2628
  msgid "Htaccess did not match configuration option."
2629
  msgstr ""
2630
 
2631
+ #: tpl/cache/settings_inc.cache_mobile.tpl.php:44
2632
  msgid "Htaccess rule is: %s"
2633
  msgstr ""
2634
 
2635
+ #: tpl/cache/settings_inc.cache_mobile.tpl.php:71
2636
  msgid "If %1$s is %2$s, then %3$s must be populated!"
2637
  msgstr ""
2638
 
3054
  msgstr ""
3055
 
3056
  #: tpl/crawler/blacklist.tpl.php:57 tpl/crawler/map.tpl.php:70
3057
+ #: tpl/crawler/summary.tpl.php:160 tpl/crawler/summary.tpl.php:184
3058
  msgid "Blacklisted"
3059
  msgstr ""
3060
 
3310
  msgstr ""
3311
 
3312
  #: tpl/crawler/summary.tpl.php:125
3313
+ msgid "Activate"
3314
+ msgstr ""
3315
+
3316
+ #: tpl/crawler/summary.tpl.php:126
3317
  msgid "Running"
3318
  msgstr ""
3319
 
3320
+ #: tpl/crawler/summary.tpl.php:157
3321
  msgid "Waiting"
3322
  msgstr ""
3323
 
3324
+ #: tpl/crawler/summary.tpl.php:158
3325
  msgid "Hit"
3326
  msgstr ""
3327
 
3328
+ #: tpl/crawler/summary.tpl.php:159
3329
  msgid "Miss"
3330
  msgstr ""
3331
 
3332
+ #: tpl/crawler/summary.tpl.php:170
3333
  msgid "running"
3334
  msgstr ""
3335
 
3336
+ #: tpl/crawler/summary.tpl.php:181
3337
  msgid "Waiting to be Crawled"
3338
  msgstr ""
3339
 
3340
+ #: tpl/crawler/summary.tpl.php:182
3341
  msgid "Already Cached"
3342
  msgstr ""
3343
 
3344
+ #: tpl/crawler/summary.tpl.php:183
3345
  msgid "Successfully Crawled"
3346
  msgstr ""
3347
 
3348
+ #: tpl/crawler/summary.tpl.php:188
3349
  msgid "Run frequency is set by the Interval Between Runs setting."
3350
  msgstr ""
3351
 
3352
+ #: tpl/crawler/summary.tpl.php:189
3353
  msgid "Crawlers cannot run concurrently."
3354
  msgstr ""
3355
 
3356
+ #: tpl/crawler/summary.tpl.php:190
3357
  msgid ""
3358
  "&nbsp;If both the cron and a manual run start at similar times, the first to "
3359
  "be started will take precedence."
3360
  msgstr ""
3361
 
3362
+ #: tpl/crawler/summary.tpl.php:191
3363
  msgid ""
3364
  "Please see <a %s>Hooking WP-Cron Into the System Task Scheduler</a> to learn "
3365
  "how to create the system cron task."
3366
  msgstr ""
3367
 
3368
+ #: tpl/crawler/summary.tpl.php:196
3369
  msgid "Watch Crawler Status"
3370
  msgstr ""
3371
 
3372
+ #: tpl/crawler/summary.tpl.php:203
3373
  msgid "Show crawler status"
3374
  msgstr ""
3375
 
3376
+ #: tpl/crawler/summary.tpl.php:221
3377
  msgid "No crawler meta file generated yet"
3378
  msgstr ""
3379
 
3444
  msgstr ""
3445
 
3446
  #: tpl/dash/dashboard.tpl.php:227 tpl/img_optm/summary.tpl.php:57
3447
+ #: tpl/page_optm/settings_css.tpl.php:90 tpl/page_optm/settings_css.tpl.php:213
3448
  #: tpl/page_optm/settings_media.tpl.php:176
3449
  msgid ""
3450
  "Are you sure you want to redetect the closest cloud server for this service?"
3501
  msgstr ""
3502
 
3503
  #: tpl/dash/dashboard.tpl.php:437 tpl/dash/dashboard.tpl.php:470
3504
+ #: tpl/dash/dashboard.tpl.php:503 tpl/page_optm/settings_css.tpl.php:81
3505
+ #: tpl/page_optm/settings_css.tpl.php:204
3506
  #: tpl/page_optm/settings_media.tpl.php:170
3507
  msgid "Last generated"
3508
  msgstr ""
3920
  "or tablet visitors."
3921
  msgstr ""
3922
 
3923
+ #: tpl/general/settings_inc.guest.tpl.php:30
3924
  msgid "Your %1s quota on %2s will still be in use."
3925
  msgstr ""
3926
 
4017
  msgid "The image compression quality setting of WordPress out of 100."
4018
  msgstr ""
4019
 
4020
+ #: tpl/img_optm/summary.tpl.php:57 tpl/page_optm/settings_css.tpl.php:90
4021
+ #: tpl/page_optm/settings_css.tpl.php:213
4022
  #: tpl/page_optm/settings_media.tpl.php:176
4023
  msgid "Current closest Cloud server is %s.&#10; Click to redetect."
4024
  msgstr ""
4278
  "page."
4279
  msgstr ""
4280
 
4281
+ #: tpl/inc/in_upgrading.php:5
4282
+ msgid ""
4283
+ "LiteSpeed cache plugin upgraded. Please refresh the page to complete the "
4284
+ "configuration data upgrade."
4285
+ msgstr ""
4286
+
4287
  #: tpl/inc/show_display_installed.php:5
4288
  msgid "LiteSpeed Cache plugin is installed!"
4289
  msgstr ""
4423
  "queue."
4424
  msgstr ""
4425
 
4426
+ #: tpl/page_optm/settings_css.tpl.php:71
4427
+ msgid "This option is bypassed because %1$s option is %2$s."
4428
+ msgstr ""
4429
+
4430
+ #: tpl/page_optm/settings_css.tpl.php:84 tpl/page_optm/settings_css.tpl.php:207
4431
  msgid "Last requested cost"
4432
  msgstr ""
4433
 
4434
+ #: tpl/page_optm/settings_css.tpl.php:96 tpl/page_optm/settings_css.tpl.php:219
4435
  msgid "URL list in %s queue waiting for cron"
4436
  msgstr ""
4437
 
4438
+ #: tpl/page_optm/settings_css.tpl.php:117
4439
+ #: tpl/page_optm/settings_css.tpl.php:240
4440
  msgid "Run %s Queue Manually"
4441
  msgstr ""
4442
 
4443
+ #: tpl/page_optm/settings_css.tpl.php:133
4444
+ msgid ""
4445
+ "Inline UCSS to reduce the extra CSS file loading. This option will not be "
4446
+ "automatically turned on for %1$s pages. To use it on %1$s pages, please set "
4447
+ "it to ON."
4448
+ msgstr ""
4449
+
4450
+ #: tpl/page_optm/settings_css.tpl.php:135
4451
+ msgid "This option will automatically bypass %s option."
4452
+ msgstr ""
4453
+
4454
+ #: tpl/page_optm/settings_css.tpl.php:149
4455
  msgid ""
4456
  "Include external CSS and inline CSS in combined file when %1$s is also "
4457
  "enabled. This option helps maintain the priorities of CSS, which should "
4458
  "minimize potential errors caused by CSS Combine."
4459
  msgstr ""
4460
 
4461
+ #: tpl/page_optm/settings_css.tpl.php:162
4462
  msgid ""
4463
  "Pre-send internal CSS files to the browser before they are requested. "
4464
  "(Requires the HTTP/2 protocol)"
4465
  msgstr ""
4466
 
4467
+ #: tpl/page_optm/settings_css.tpl.php:181
4468
  msgid "Optimize CSS delivery."
4469
  msgstr ""
4470
 
4471
+ #: tpl/page_optm/settings_css.tpl.php:182
4472
  #: tpl/page_optm/settings_html.tpl.php:129 tpl/page_optm/settings_js.tpl.php:80
4473
  #: tpl/page_optm/settings_media.tpl.php:243
4474
  msgid ""
4476
  "PageSpeed."
4477
  msgstr ""
4478
 
4479
+ #: tpl/page_optm/settings_css.tpl.php:183
4480
  msgid ""
4481
  "Use QUIC.cloud online service to generate critical CSS and load remaining "
4482
  "CSS asynchronously."
4483
  msgstr ""
4484
 
4485
+ #: tpl/page_optm/settings_css.tpl.php:185
4486
  msgid ""
4487
  "Automatic generation of critical CSS is in the background via a cron-based "
4488
  "queue."
4489
  msgstr ""
4490
 
4491
+ #: tpl/page_optm/settings_css.tpl.php:186
4492
  msgid ""
4493
  "When this option is turned %s, it will also load Google Fonts asynchronously."
4494
  msgstr ""
4495
 
4496
+ #: tpl/page_optm/settings_css.tpl.php:189
4497
  msgid "Elements with attribute %s in HTML code will be excluded."
4498
  msgstr ""
4499
 
4500
+ #: tpl/page_optm/settings_css.tpl.php:194
4501
+ msgid "This option is bypassed due to %s option."
4502
+ msgstr ""
4503
+
4504
+ #: tpl/page_optm/settings_css.tpl.php:255
4505
  msgid ""
4506
  "Disable this option to generate CCSS per Post Type instead of per page. This "
4507
  "can save significant CCSS quota, however it may result in incorrect CSS "
4508
  "styling if your site uses a page builder."
4509
  msgstr ""
4510
 
4511
+ #: tpl/page_optm/settings_css.tpl.php:268
4512
  msgid "This will inline the asynchronous CSS library to avoid render blocking."
4513
  msgstr ""
4514
 
4515
+ #: tpl/page_optm/settings_css.tpl.php:279
4516
  msgid "Default"
4517
  msgstr ""
4518
 
4519
+ #: tpl/page_optm/settings_css.tpl.php:281
4520
  msgid ""
4521
  "Set this to append %1$s to all %2$s rules before caching CSS to specify how "
4522
  "fonts should be displayed while being downloaded."
4523
  msgstr ""
4524
 
4525
+ #: tpl/page_optm/settings_css.tpl.php:282
4526
  msgid "%s is recommended."
4527
  msgstr ""
4528
 
4529
+ #: tpl/page_optm/settings_css.tpl.php:282
4530
  msgid "Swap"
4531
  msgstr ""
4532
 
4828
  #: tpl/page_optm/settings_media_exc.tpl.php:28
4829
  #: tpl/page_optm/settings_tuning.tpl.php:37
4830
  #: tpl/page_optm/settings_tuning.tpl.php:58
4831
+ #: tpl/page_optm/settings_tuning.tpl.php:164
4832
+ #: tpl/page_optm/settings_tuning.tpl.php:185
4833
  msgid "Elements with attribute %s in html code will be excluded."
4834
  msgstr ""
4835
 
4864
  #: tpl/page_optm/settings_tuning.tpl.php:38
4865
  #: tpl/page_optm/settings_tuning.tpl.php:59
4866
  #: tpl/page_optm/settings_tuning.tpl.php:83
4867
+ #: tpl/page_optm/settings_tuning.tpl.php:165
4868
  msgid "Predefined list will also be combined w/ the above settings"
4869
  msgstr ""
4870
 
4891
  msgstr ""
4892
 
4893
  #: tpl/page_optm/settings_tuning.tpl.php:97
4894
+ msgid "Listed URI will not generate UCSS."
4895
+ msgstr ""
4896
+
4897
+ #: tpl/page_optm/settings_tuning.tpl.php:116
4898
  msgid ""
4899
  "List post types where each item of that type should have its own CCSS "
4900
  "generated."
4901
  msgstr ""
4902
 
4903
+ #: tpl/page_optm/settings_tuning.tpl.php:117
4904
  msgid ""
4905
  "For example, if every Page on the site has different formatting, enter %s in "
4906
  "the box. Separate critical CSS files will be stored for every Page on the "
4907
  "site."
4908
  msgstr ""
4909
 
4910
+ #: tpl/page_optm/settings_tuning.tpl.php:131
4911
  msgid ""
4912
  "Separate critical CSS files will be generated for paths containing these "
4913
  "strings."
4914
  msgstr ""
4915
 
4916
+ #: tpl/page_optm/settings_tuning.tpl.php:145
4917
  msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
4918
  msgstr ""
4919
 
4920
+ #: tpl/page_optm/settings_tuning.tpl.php:158
4921
  msgid "Listed JS files or inline JS code will not be deferred."
4922
  msgstr ""
4923
 
4924
+ #: tpl/page_optm/settings_tuning.tpl.php:179
4925
  msgid "Listed JS files or inline JS code will not be optimized by %s."
4926
  msgstr ""
4927
 
4928
+ #: tpl/page_optm/settings_tuning.tpl.php:199
4929
  msgid "Prevent any optimization of listed pages."
4930
  msgstr ""
4931
 
4932
+ #: tpl/page_optm/settings_tuning.tpl.php:213
4933
  msgid ""
4934
  "Only optimize pages for guest (not logged in) visitors. If turned this OFF, "
4935
  "CSS/JS/CCSS files will be doubled by each user group."
4936
  msgstr ""
4937
 
4938
+ #: tpl/page_optm/settings_tuning.tpl.php:225
4939
  msgid "Selected roles will be excluded from all optimizations."
4940
  msgstr ""
4941
 
4942
+ #: tpl/toolbox/beta_test.tpl.php:17
4943
  msgid "Try GitHub Version"
4944
  msgstr ""
4945
 
4946
+ #: tpl/toolbox/beta_test.tpl.php:21
4947
  msgid ""
4948
  "Use this section to switch plugin versions. To beta test a GitHub commit, "
4949
  "enter the commit URL in the field below."
4950
  msgstr ""
4951
 
4952
+ #: tpl/toolbox/beta_test.tpl.php:22
4953
  msgid "Example"
4954
  msgstr ""
4955
 
4956
+ #: tpl/toolbox/beta_test.tpl.php:26
4957
  msgid "Use latest GitHub Dev commit"
4958
  msgstr ""
4959
 
4960
+ #: tpl/toolbox/beta_test.tpl.php:28
4961
  msgid "Use latest GitHub Master commit"
4962
  msgstr ""
4963
 
4964
+ #: tpl/toolbox/beta_test.tpl.php:30 tpl/toolbox/beta_test.tpl.php:46
4965
  msgid "Use latest WordPress release version"
4966
  msgstr ""
4967
 
4968
+ #: tpl/toolbox/beta_test.tpl.php:30
4969
  msgid "OR"
4970
  msgstr ""
4971
 
4972
+ #: tpl/toolbox/beta_test.tpl.php:41
4973
  msgid ""
4974
  "Downgrade not recommended. May cause fatal error due to refactored code."
4975
  msgstr ""
4976
 
4977
+ #: tpl/toolbox/beta_test.tpl.php:45
4978
  msgid ""
4979
  "Press the %s button to use the most recent GitHub commit. Master is for "
4980
  "release candidate & Dev is for experimental testing."
4981
  msgstr ""
4982
 
4983
+ #: tpl/toolbox/beta_test.tpl.php:45
4984
  msgid "Use latest GitHub Dev/Master commit"
4985
  msgstr ""
4986
 
4987
+ #: tpl/toolbox/beta_test.tpl.php:46
4988
  msgid ""
4989
  "Press the %s button to stop beta testing and go back to the current release "
4990
  "from the WordPress Plugin Directory."
4991
  msgstr ""
4992
 
4993
+ #: tpl/toolbox/beta_test.tpl.php:51
4994
  msgid ""
4995
  "In order to avoid an upgrade error, you must be using %1$s or later before "
4996
  "you can upgrade to %2$s versions."
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.3
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.3' );
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.4
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.4' );
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
@@ -3,7 +3,7 @@ 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: 4.3
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl.html
9
 
@@ -249,6 +249,23 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
249
 
250
  == Changelog ==
251
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  = 4.3 - Aug 16 2021 =
253
  * **UCSS** Separated UCSS Purge from CCSS Purge. (⭐ Contributed by Alice Tang #PR388)
254
  * 🐞**Cloud** Fixed an issue where CCSS/UCSS quota data failed to update locally.
@@ -258,27 +275,27 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
258
  * **Cloud** CCSS/UCSS/LQIP queue now exits immediately when quota is depleted.
259
  * **Cloud** Replaced separate `d/regionnodes` with a single `d/nodes` in the node list API for image optimization.
260
  * **LQIP** Fixed an issue with LQIP network compatibility. (⭐ Contributed by Alice Tang #PR387)
261
- * **GUEST** JS no longer preloads for Guest Optimization. (@Ankit)
262
- * 🐞**Data** Fixed an issue where deleting the `cssjs` data folder causes a failure in the upgrade process. (@Joshua #PR391)
263
- * **GUI** Fixed a potential dashboard PHP warning when no queue existed. (@jrmora)
264
  * **GUI** Added daily quota on dashboard.
265
  * **GUI** Added downgrade warning to Toolbox -> Beta Test.
266
  * **GUI** Tuned `.litespeed-desc` class to full width in CSS.
267
- * **Conf** `Preserve EXIF/XMP data` now defaults to ON due to copyright concerns. (@Tobolo)
268
- * 🐞**3rd** Fixed a PHP warning when using Google AMP w/ /amp as structure. (@thanhstran98)
269
 
270
  = 4.2 - Jul 29 2021 =
271
  * **Cloud** Auto redirect to a new node if the current node is not available anymore.
272
  * **Cloud** Combined CCSS/UCSS to sub services of Page Optimization.
273
  * **Cloud** Added a daily quota rate limit to help mitigate the heavy service load at the beginning of the month.
274
- * **Cloud** Cached the node IP list in order to speed up security check. (@Lucas)
275
- * 🐞**GUEST** Fixed an issue where Guest Mode remained enabled even when the UA setting is empty. (@Stars)
276
  * **GUEST** Guest Mode will no longer cache POST requests.
277
  * **UCSS** Purging CSS/JS now purges the UCSS queue as well, to avoid failure when generating UCSS.
278
  * **UCSS** Separated service entry `UCSS` from `CCSS`.
279
  * **CCSS** Simplified `load_queue/save_queue/build_filepath_prefix` functions. (⭐ Contributed by Alice Tang #PR373)
280
  * **CCSS** If CCSS request fails, details are now saved in the CSS file.
281
- * **CCSS** Renamed CCSS ID in inline HTML from `litespeed-optm-css-rules` to `litespeed-ccss`. (@Alice)
282
  * **Page Optimize** CCSS/UCSS now supports Cloud queue/notify for asynchronous generation.
283
  * **Page Optimize** Simplified CCSS/UCSS generation function.
284
  * **Page Optimize** Added the ability to cancel CCSS/UCSS Cloud requests.
@@ -290,44 +307,44 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
290
  * **API** Renamed `LITESPEED_BYPASS_OPTM` to `LITESPEED_NO_OPTM` for Page Optimization.
291
  * **Toolbox** Dropped v3.6.4- versions in Beta Test as they will cause a fatal error in downgrade.
292
  * **GUI** Added shortcut links to each section on the Dashboard.
293
- * **GUI** Added UCSS whitelist usage description. (@wyb)
294
  * **GUI** Showed the default recommended values for Guest Mode UA/IPs.
295
  * **3rd** Fixed AMP plugin compatibility. (⭐ Contributed by Alice Tang #PR368)
296
  * **3rd** Bypassed all page optimization including CDN/WebP for AMP pages.
297
- * **3rd** Improved compatibility with All in One SEO plugin sitemap. (@arnaudbroes @flschaves Issue#372)
298
- * **3rd** Added wsform nonce. (#365 @cstrouse)
299
- * **3rd** Added Easy Digital Download (EDD) & WP Menu Cart nonce. (#PR366 @AkramiPro)
300
- * **3rd** Improved compatibility w/ Restrict Content Pro. (@Abe #PR370)
301
- * **3rd** Improved compatibility w/ Gravity Forms. (@Ruikai #371)
302
 
303
  = 4.1 - Jun 25 2021 =
304
  * 🌱**UCSS/CCSS/LQIP** Moved queue storage to file system from database wp-options table to lessen the IO load. (#633504)
305
- * 🌱**3rd** Added an option to disable ESI for the WooCommerce Cart. (#358 @Anna Feng @Astrid Wang)
306
- * **ESI** Fixed an ESI nonce issue introduced in v4.0. (@Andrew Choi)
307
  * **Object** Used new `.litespeed_conf.dat` instead of `.object-cache.ini` for object cache configuration storage.
308
  * **Conf** Now updating related files after plugin upgrade and not just after activation.
309
- * 🌱**Guest** Added a Guest Mode JS Excludes option. (@Ankit @Mamac @Rcverma)
310
  * **Guest** Guest Mode now uses a lightweight script to update guest vary for reduced server load.
311
  * **Guest** Guest Mode now adds missing image dimensions.
312
  * **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.
313
  * **Guest** Guest vary update request will no longer be sent if `lscache_vary` is already set.
314
  * **Guest** Added a Configurable Guest Mode UA/IP under the Tuning tab in the General menu.
315
- * **Guest** Guest Mode now allows cron to be hooked, even when UCSS/CCSS options are off. (#338437 @Stars)
316
  * **Guest** Simplified the vary generation process under Guest Mode.
317
- * **Guest** Added a Guest Mode HTML comment for easier debugging. (@Ruikai)
318
  * **Guest** Guest vary update ajax now bypasses potential POST cache.
319
- * **CCSS** Added back the options `Separate CCSS Cache Post Types` and `Separate CCSS Cache URIs`. (@Joshua @Ankit)
320
  * **CCSS** CCSS/UCSS queue is now limited to a maximum of 500 entries.
321
  * **Control** The cache control constant `LSCACHE_NO_CACHE` will now have a higher priority than the Forced Public Cache setting.
322
  * **Crawler** The Crawler can now crawl Guest Mode pages.
323
  * **Crawler** Fixed a potential XSS vulnerability in the Crawler settings. (#927355)
324
- * **Crawler** The Crawler now supports a cookie value of `_null`. (@Tobolo)
325
  * **Media** Updated the default value for the Responsive Placeholder SVG to be transparent.
326
  * **Media** WebP images in the background may now be served in Guest Mode.
327
  * **Media** WebP images in CSS may now be bypassed if the requesting Guest Mode client doesn't support WebP.
328
  * **Media** Fixed empty default image placeholder under Guest Mode.
329
- * 🐞**Image Optimize** Changed the missing `$_POST` to `$post_data` so the database status is properly updated. (#345 @Lucas)
330
- * **Import** Export file is now readable to allow importing of partial configurations. (@Ryan D @Joshua)
331
  * **Page Optimize** Fixed W3 validator errors in Guest Mode. (#61393817)
332
  * **3rd** A fatal WooCommerce error is no longer triggered by a custom theme reusing a previous LSCWP cache detection tag.
333
  * **3rd** AMP may now bypass Guest Mode automatically.
@@ -336,53 +353,53 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
336
  * **Lang** Corrected a missing language folder.
337
  * **GUI** Added a CCSS/UCSS loading page visualization. (⭐ Contributed by Astrid Wang & Anna Feng #PR360)
338
  * **GUI** Added a warning to indicate when Guest Mode CCSS/UCSS quota is in use. (Contributed by Astrid Wang & Anna Feng #PR361)
339
- * **GUI** Added a `litespeed-info` text color. (@Astrid Wang)
340
- * **GUI** Implemented various UI/UX improvements. (@Joshua @Lisa)
341
- * **GUI** Duplicate cloud service messages with the same content will only display once now. (@Marc Dahl)
342
  * **GUI** Added a WebP replacement warning for Guest Mode Optimization if WebP replacement is off.
343
- * **Misc** Dropped `wp_assets` from distribution to reduce the package size. (@lowwebtech)
344
  * **Misc** Increased the new version and score detection intervals.
345
- * **Misc** Optimized WP Assets images. (#352 @lowwebtech)
346
  * **Debug** Dropped the redundant error_log debug info.
347
 
348
  = 4.0 - Apr 30 2021 =
349
  * 🌱🌱🌱**Guest** Introduced `Guest Mode` for instantly cacheable content on the first visit.
350
  * 🌱**UCSS** Added a new service: `Unique CSS`, to drop unused CSS from elements from combined CSS
351
- * 🌱**CCSS** Added `HTML Lazyload` option. (@Ankit)
352
  * 🌱**CCSS** Added `CCSS Per URL` option to allow Critical CSS to be generated for each page instead of for each Post Type.
353
- * 🌱**Media** Added `Add Missing Sizes` setting for improving Cumulative Layout Shift. (@Fahim)
354
- * 🌱**JS** Switched to new JS minification library for better compression and compatibility w/ template literals. (@LuminSol)
355
  * **Media** WebP may now be replaced in CSS.
356
- * **Media** Can now drop image tags in noscript to avoid lazyload. (@Abe #314 @mattthomas-photography)
357
  * **Media** Bypass optimization if a page is not cacheable.
358
- * **Image Optimize** Auto hook to `wp_update_attachment_metadata` to automate image gathering process, and to handle the new thumbnail generation after images are uploaded. (@smerriman).
359
  * **Image Optimize** Repeated image thumbnails won't be gathered anymore.
360
  * **Image Optimize** Simplified the rescan/gather/upload_hook for existing image detection.
361
- * **Image Optimize** Fixed the duplicated optimize size records in the postmeta table. (@Abe #315)
362
- * **Image Optimize** Allow either JSON POST request or normal form request in `notify_img`. (@Lucas #313)
363
- * **Image Optimize** Optimized SQL query for better efficiency. (@lucas @lauren)
364
  * **Image Optimize** Fixed issue where rescan mass created duplicate images. (#954399)
365
  * **Image Optimize** Image optimization pie will not show 100% anymore if there is still a small amount in the unfinished queue.
366
  * **Image Optimize** WebP generation defaults to ON for Guest Mode.
367
  * **Image Optimize** `Priority Line` package now can have smaller request interval.
368
- * **ESI** Disable ESI when page is not cacheable. (@titsmaker)
369
- * **ESI** Fixed an issue where Divi was disabling all in edit mode, but couldn't disable ESI. (@Abe)
370
  * **ESI** ESI init moved under `init` hook from `plugin_loaded` hook.
371
- * **CDN** Add basic support for CloudFlare API Tokens (@Abe #320)
372
  * **CSS** Simplified `Font Display Optimization` option.
373
- * **CSS** Fixed manual cron timeout issue. (@jesse Distad)
374
- * **CSS** Inline CSS may now use `data-no-optimize` to be excluded from optimization. (@popaionut)
375
  * **JS** Combined `Load JS Defer` and `Load Inline JS Defer` options.
376
  * **JS** Forced async to defer.
377
  * **JS** Moved Google Analytics JS from constant default to setting default for removal.
378
- * **JS** Fixed potential JS parsing issue caused by JS src being changed to data-src by other plugins. (@ankit)
379
- * **JS** Excluded spotlight from JS optimize. (@tobolo)
380
  * **CCSS** Fixed CCSS/UCSS manual cron timeout issue.
381
  * **CCSS** Only 10 items will be kept for CCSS history.
382
  * **CCSS** The appearance of CCSS Purge in the topbar menu will be determined by the existance of CCSS cache, and not the setting only.
383
  * **CCSS** To avoid stuck queues when the current request keeps failing, the CCSS queue will always drop once requested.
384
  * **CCSS** CCSS will no longer hide adminbar.
385
- * **CCSS** CCSS may now be separate for network subsites. (@Joshua)
386
  * **CCSS** Gave CCSS a unique filename per URL per user role per subsite.
387
  * **CCSS** Dropped `Separate CCSS Cache Post Types` option.
388
  * **CCSS** Dropped `Separate CCSS Cache URIs` option.
@@ -406,7 +423,7 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
406
  * **Vary** 3rd party vary cookies will not append into .htaccess anymore but only present in response vary header if in use.
407
  * **Vary** Dropped function `append()`.
408
  * **Vary** Commenter cookie is now considered cacheable.
409
- * **Crawler** Minor update to crawler user agent to accommodate mobile_detect.php (@Abe #304)
410
  * **Data** Added a table truncate function.
411
  * **Data** Added new tables url & url_file.
412
  * **Data** Dropped cssjs table.
@@ -419,14 +436,14 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
419
  * **Page Optimize** Bypass optimization if page not cacheable.
420
  * **Page Optimize** Purge CSS/JS will purge the `url_file` table too.
421
  * **Page Optimize** Optionally store a vary with a shorter value.
422
- * **Page Optimize** Removing query strings will no longer affect external assets. (@ankit)
423
  * **Page Optimize** Better regex for optimization parsing.
424
- * **Page Optimize** Eliminated w3 validator for DNS prefetch and duplicated ID errors. (@sumit Pandey)
425
  * **Page Optimize** New Optimization for Guest Only option under Tuning.
426
  * **Page Optimize** Now forbidding external link redirection for localization.
427
  * **Debug** Implemented a better debug format for the 2nd parameter in the log.
428
- * **GUI** Bypass page score banner when score is not detected (both 0). (@ankit)
429
- * **GUI** Fixed deprecated JQuery function warning in WP-Admin. (@krzxsiek)
430
 
431
  = 3.6.4 - Mar 15 2021 =
432
  * **Toolbox** Fixed Beta Test upgrade error when upgrading to v3.7+.
@@ -439,14 +456,14 @@ The vast majority of plugins and themes are compatible with LiteSpeed Cache. The
439
  * **Page Optimize** Fixed an issue where network purge CSS/JS caused 404 errors for subsites.
440
  * **Page Optimize** Fixed an issue where purge CSS/JS only caused 404 errors.
441
  * **Page Optimize** Added a notice for CSS/JS data detection and potential random string issue.
442
- * **Page Optimize** Limited localization resources to specified .js only. (@closte #292 @ormonk)
443
- * **JS** Data src may now be bypassed from JS Combine. (@ankit)
444
- * **CLI** Fixed a message typo in Purge. (@flixwatchsupport)
445
- * **Browser** Added font/otf to Browser Cache expire list. (@ruikai)
446
  * **Data** Updated data files to accept PR from dev branch only.
447
- * **3rd** Add data-view-breakpoint-pointer to js_excludes.txt for the Events Calendar plugin. (@therealgilles)
448
  * **Cloud** Bypassed invalid requests.
449
- * **Doc** CDN Mapping description improvement. (@mihai A.)
450
 
451
  = 3.6.1 - Dec 21 2020 =
452
  * **WP** Tested up to WP v5.6.
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: 4.4
7
  License: GPLv3
8
  License URI: http://www.gnu.org/licenses/gpl.html
9
 
249
 
250
  == Changelog ==
251
 
252
+ = 4.4 - Sep 8 2021 =
253
+ * 🌱**Crawler** Added the ability to enable or disable specific crawlers. (⭐ Contributed by Astrid Wang #PR390)
254
+ * 🌱**UCSS** Added `UCSS Inline` option. (Ankit).
255
+ * 🌱**UCSS** Added `UCSS URI Excludes` option. (RC Verma).
256
+ * 🐞**Page Optimize** Fixed an issue where combined CSS/JS files would potentially return 404 errors after a Purge All. (Special thanks to Abe & Ruikai)
257
+ * **Page Optimize** Minimized the potential for 404 errors by query string when Purging All.
258
+ * **Page Optimize** Dropped redundant query strings for minified CSS/JS files.
259
+ * **Conf** Ugrade configuration safely to avoid the issue of new functions not being found in old codebase.
260
+ * **Conf** Configuration upgrade process now adds a notification to admin pages and disables configuration save until upgrade is complete. (Lisa)
261
+ * **JS** Fixed an issue where JS Defer caused a `litespeed_var_1_ is not defined` error when enabled w/ ESI options. (Tobolo)
262
+ * 🐞**JS** Fixed an issue where `JS Delay` doesn't work for combined JS when `JS Combine` is enabled. (Special thanks to Joshua & Ankit)
263
+ * **JS** `JS Delay` now will continue loading JS, even if there is an error in the current JS loading process.
264
+ * 🐞**CCSS** If CCSS fails to generate, Load CSS Asynchronously will now be disabled. (Stars #54074166)
265
+ * 🐞**UCSS** If UCSS generation fails the generated error will no longer be served inside the file. (Ryan D)
266
+ * **Log** Updated the Debug log to use less code for prefix.
267
+ * **3rd** Always respect `DONOTCACHEPAGE` constant defination to fix DIVI dynamic css calculation process.
268
+
269
  = 4.3 - Aug 16 2021 =
270
  * **UCSS** Separated UCSS Purge from CCSS Purge. (⭐ Contributed by Alice Tang #PR388)
271
  * 🐞**Cloud** Fixed an issue where CCSS/UCSS quota data failed to update locally.
275
  * **Cloud** CCSS/UCSS/LQIP queue now exits immediately when quota is depleted.
276
  * **Cloud** Replaced separate `d/regionnodes` with a single `d/nodes` in the node list API for image optimization.
277
  * **LQIP** Fixed an issue with LQIP network compatibility. (⭐ Contributed by Alice Tang #PR387)
278
+ * **GUEST** JS no longer preloads for Guest Optimization. (Ankit)
279
+ * 🐞**Data** Fixed an issue where deleting the `cssjs` data folder causes a failure in the upgrade process. (Joshua #PR391)
280
+ * **GUI** Fixed a potential dashboard PHP warning when no queue existed. (jrmora)
281
  * **GUI** Added daily quota on dashboard.
282
  * **GUI** Added downgrade warning to Toolbox -> Beta Test.
283
  * **GUI** Tuned `.litespeed-desc` class to full width in CSS.
284
+ * **Conf** `Preserve EXIF/XMP data` now defaults to ON due to copyright concerns. (Tobolo)
285
+ * 🐞**3rd** Fixed a PHP warning when using Google AMP w/ /amp as structure. (thanhstran98)
286
 
287
  = 4.2 - Jul 29 2021 =
288
  * **Cloud** Auto redirect to a new node if the current node is not available anymore.
289
  * **Cloud** Combined CCSS/UCSS to sub services of Page Optimization.
290
  * **Cloud** Added a daily quota rate limit to help mitigate the heavy service load at the beginning of the month.
291
+ * **Cloud** Cached the node IP list in order to speed up security check. (Lucas)
292
+ * 🐞**GUEST** Fixed an issue where Guest Mode remained enabled even when the UA setting is empty. (Stars)
293
  * **GUEST** Guest Mode will no longer cache POST requests.
294
  * **UCSS** Purging CSS/JS now purges the UCSS queue as well, to avoid failure when generating UCSS.
295
  * **UCSS** Separated service entry `UCSS` from `CCSS`.
296
  * **CCSS** Simplified `load_queue/save_queue/build_filepath_prefix` functions. (⭐ Contributed by Alice Tang #PR373)
297
  * **CCSS** If CCSS request fails, details are now saved in the CSS file.
298
+ * **CCSS** Renamed CCSS ID in inline HTML from `litespeed-optm-css-rules` to `litespeed-ccss`. (Alice)
299
  * **Page Optimize** CCSS/UCSS now supports Cloud queue/notify for asynchronous generation.
300
  * **Page Optimize** Simplified CCSS/UCSS generation function.
301
  * **Page Optimize** Added the ability to cancel CCSS/UCSS Cloud requests.
307
  * **API** Renamed `LITESPEED_BYPASS_OPTM` to `LITESPEED_NO_OPTM` for Page Optimization.
308
  * **Toolbox** Dropped v3.6.4- versions in Beta Test as they will cause a fatal error in downgrade.
309
  * **GUI** Added shortcut links to each section on the Dashboard.
310
+ * **GUI** Added UCSS whitelist usage description. (wyb)
311
  * **GUI** Showed the default recommended values for Guest Mode UA/IPs.
312
  * **3rd** Fixed AMP plugin compatibility. (⭐ Contributed by Alice Tang #PR368)
313
  * **3rd** Bypassed all page optimization including CDN/WebP for AMP pages.
314
+ * **3rd** Improved compatibility with All in One SEO plugin sitemap. (arnaudbroes/flschaves Issue#372)
315
+ * **3rd** Added wsform nonce. (#365 cstrouse)
316
+ * **3rd** Added Easy Digital Download (EDD) & WP Menu Cart nonce. (#PR366 AkramiPro)
317
+ * **3rd** Improved compatibility w/ Restrict Content Pro. (Abe #PR370)
318
+ * **3rd** Improved compatibility w/ Gravity Forms. (Ruikai #371)
319
 
320
  = 4.1 - Jun 25 2021 =
321
  * 🌱**UCSS/CCSS/LQIP** Moved queue storage to file system from database wp-options table to lessen the IO load. (#633504)
322
+ * 🌱**3rd** Added an option to disable ESI for the WooCommerce Cart. (#358 Anna Feng/Astrid Wang)
323
+ * **ESI** Fixed an ESI nonce issue introduced in v4.0. (Andrew Choi)
324
  * **Object** Used new `.litespeed_conf.dat` instead of `.object-cache.ini` for object cache configuration storage.
325
  * **Conf** Now updating related files after plugin upgrade and not just after activation.
326
+ * 🌱**Guest** Added a Guest Mode JS Excludes option. (Ankit/Mamac/Rcverma)
327
  * **Guest** Guest Mode now uses a lightweight script to update guest vary for reduced server load.
328
  * **Guest** Guest Mode now adds missing image dimensions.
329
  * **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.
330
  * **Guest** Guest vary update request will no longer be sent if `lscache_vary` is already set.
331
  * **Guest** Added a Configurable Guest Mode UA/IP under the Tuning tab in the General menu.
332
+ * **Guest** Guest Mode now allows cron to be hooked, even when UCSS/CCSS options are off. (#338437 Stars)
333
  * **Guest** Simplified the vary generation process under Guest Mode.
334
+ * **Guest** Added a Guest Mode HTML comment for easier debugging. (Ruikai)
335
  * **Guest** Guest vary update ajax now bypasses potential POST cache.
336
+ * **CCSS** Added back the options `Separate CCSS Cache Post Types` and `Separate CCSS Cache URIs`. (Joshua/Ankit)
337
  * **CCSS** CCSS/UCSS queue is now limited to a maximum of 500 entries.
338
  * **Control** The cache control constant `LSCACHE_NO_CACHE` will now have a higher priority than the Forced Public Cache setting.
339
  * **Crawler** The Crawler can now crawl Guest Mode pages.
340
  * **Crawler** Fixed a potential XSS vulnerability in the Crawler settings. (#927355)
341
+ * **Crawler** The Crawler now supports a cookie value of `_null`. (Tobolo)
342
  * **Media** Updated the default value for the Responsive Placeholder SVG to be transparent.
343
  * **Media** WebP images in the background may now be served in Guest Mode.
344
  * **Media** WebP images in CSS may now be bypassed if the requesting Guest Mode client doesn't support WebP.
345
  * **Media** Fixed empty default image placeholder under Guest Mode.
346
+ * 🐞**Image Optimize** Changed the missing `$_POST` to `$post_data` so the database status is properly updated. (#345 Lucas)
347
+ * **Import** Export file is now readable to allow importing of partial configurations. (Ryan D/Joshua)
348
  * **Page Optimize** Fixed W3 validator errors in Guest Mode. (#61393817)
349
  * **3rd** A fatal WooCommerce error is no longer triggered by a custom theme reusing a previous LSCWP cache detection tag.
350
  * **3rd** AMP may now bypass Guest Mode automatically.
353
  * **Lang** Corrected a missing language folder.
354
  * **GUI** Added a CCSS/UCSS loading page visualization. (⭐ Contributed by Astrid Wang & Anna Feng #PR360)
355
  * **GUI** Added a warning to indicate when Guest Mode CCSS/UCSS quota is in use. (Contributed by Astrid Wang & Anna Feng #PR361)
356
+ * **GUI** Added a `litespeed-info` text color. (Astrid Wang)
357
+ * **GUI** Implemented various UI/UX improvements. (Joshua/Lisa)
358
+ * **GUI** Duplicate cloud service messages with the same content will only display once now. (Marc Dahl)
359
  * **GUI** Added a WebP replacement warning for Guest Mode Optimization if WebP replacement is off.
360
+ * **Misc** Dropped `wp_assets` from distribution to reduce the package size. (lowwebtech)
361
  * **Misc** Increased the new version and score detection intervals.
362
+ * **Misc** Optimized WP Assets images. (#352 lowwebtech)
363
  * **Debug** Dropped the redundant error_log debug info.
364
 
365
  = 4.0 - Apr 30 2021 =
366
  * 🌱🌱🌱**Guest** Introduced `Guest Mode` for instantly cacheable content on the first visit.
367
  * 🌱**UCSS** Added a new service: `Unique CSS`, to drop unused CSS from elements from combined CSS
368
+ * 🌱**CCSS** Added `HTML Lazyload` option. (Ankit)
369
  * 🌱**CCSS** Added `CCSS Per URL` option to allow Critical CSS to be generated for each page instead of for each Post Type.
370
+ * 🌱**Media** Added `Add Missing Sizes` setting for improving Cumulative Layout Shift. (Fahim)
371
+ * 🌱**JS** Switched to new JS minification library for better compression and compatibility w/ template literals. (LuminSol)
372
  * **Media** WebP may now be replaced in CSS.
373
+ * **Media** Can now drop image tags in noscript to avoid lazyload. (Abe #314 /mattthomas-photography)
374
  * **Media** Bypass optimization if a page is not cacheable.
375
+ * **Image Optimize** Auto hook to `wp_update_attachment_metadata` to automate image gathering process, and to handle the new thumbnail generation after images are uploaded. (smerriman).
376
  * **Image Optimize** Repeated image thumbnails won't be gathered anymore.
377
  * **Image Optimize** Simplified the rescan/gather/upload_hook for existing image detection.
378
+ * **Image Optimize** Fixed the duplicated optimize size records in the postmeta table. (Abe #315)
379
+ * **Image Optimize** Allow either JSON POST request or normal form request in `notify_img`. (Lucas #313)
380
+ * **Image Optimize** Optimized SQL query for better efficiency. (lucas/Lauren)
381
  * **Image Optimize** Fixed issue where rescan mass created duplicate images. (#954399)
382
  * **Image Optimize** Image optimization pie will not show 100% anymore if there is still a small amount in the unfinished queue.
383
  * **Image Optimize** WebP generation defaults to ON for Guest Mode.
384
  * **Image Optimize** `Priority Line` package now can have smaller request interval.
385
+ * **ESI** Disable ESI when page is not cacheable. (titsmaker)
386
+ * **ESI** Fixed an issue where Divi was disabling all in edit mode, but couldn't disable ESI. (Abe)
387
  * **ESI** ESI init moved under `init` hook from `plugin_loaded` hook.
388
+ * **CDN** Add basic support for CloudFlare API Tokens (Abe #320)
389
  * **CSS** Simplified `Font Display Optimization` option.
390
+ * **CSS** Fixed manual cron timeout issue. (jesse Distad)
391
+ * **CSS** Inline CSS may now use `data-no-optimize` to be excluded from optimization. (popaionut)
392
  * **JS** Combined `Load JS Defer` and `Load Inline JS Defer` options.
393
  * **JS** Forced async to defer.
394
  * **JS** Moved Google Analytics JS from constant default to setting default for removal.
395
+ * **JS** Fixed potential JS parsing issue caused by JS src being changed to data-src by other plugins. (ankit)
396
+ * **JS** Excluded spotlight from JS optimize. (tobolo)
397
  * **CCSS** Fixed CCSS/UCSS manual cron timeout issue.
398
  * **CCSS** Only 10 items will be kept for CCSS history.
399
  * **CCSS** The appearance of CCSS Purge in the topbar menu will be determined by the existance of CCSS cache, and not the setting only.
400
  * **CCSS** To avoid stuck queues when the current request keeps failing, the CCSS queue will always drop once requested.
401
  * **CCSS** CCSS will no longer hide adminbar.
402
+ * **CCSS** CCSS may now be separate for network subsites. (Joshua)
403
  * **CCSS** Gave CCSS a unique filename per URL per user role per subsite.
404
  * **CCSS** Dropped `Separate CCSS Cache Post Types` option.
405
  * **CCSS** Dropped `Separate CCSS Cache URIs` option.
423
  * **Vary** 3rd party vary cookies will not append into .htaccess anymore but only present in response vary header if in use.
424
  * **Vary** Dropped function `append()`.
425
  * **Vary** Commenter cookie is now considered cacheable.
426
+ * **Crawler** Minor update to crawler user agent to accommodate mobile_detect.php (Abe #304)
427
  * **Data** Added a table truncate function.
428
  * **Data** Added new tables url & url_file.
429
  * **Data** Dropped cssjs table.
436
  * **Page Optimize** Bypass optimization if page not cacheable.
437
  * **Page Optimize** Purge CSS/JS will purge the `url_file` table too.
438
  * **Page Optimize** Optionally store a vary with a shorter value.
439
+ * **Page Optimize** Removing query strings will no longer affect external assets. (ankit)
440
  * **Page Optimize** Better regex for optimization parsing.
441
+ * **Page Optimize** Eliminated w3 validator for DNS prefetch and duplicated ID errors. (sumit Pandey)
442
  * **Page Optimize** New Optimization for Guest Only option under Tuning.
443
  * **Page Optimize** Now forbidding external link redirection for localization.
444
  * **Debug** Implemented a better debug format for the 2nd parameter in the log.
445
+ * **GUI** Bypass page score banner when score is not detected (both 0). (ankit)
446
+ * **GUI** Fixed deprecated JQuery function warning in WP-Admin. (krzxsiek)
447
 
448
  = 3.6.4 - Mar 15 2021 =
449
  * **Toolbox** Fixed Beta Test upgrade error when upgrading to v3.7+.
456
  * **Page Optimize** Fixed an issue where network purge CSS/JS caused 404 errors for subsites.
457
  * **Page Optimize** Fixed an issue where purge CSS/JS only caused 404 errors.
458
  * **Page Optimize** Added a notice for CSS/JS data detection and potential random string issue.
459
+ * **Page Optimize** Limited localization resources to specified .js only. (closte #292/ormonk)
460
+ * **JS** Data src may now be bypassed from JS Combine. (ankit)
461
+ * **CLI** Fixed a message typo in Purge. (flixwatchsupport)
462
+ * **Browser** Added font/otf to Browser Cache expire list. (ruikai)
463
  * **Data** Updated data files to accept PR from dev branch only.
464
+ * **3rd** Add data-view-breakpoint-pointer to js_excludes.txt for the Events Calendar plugin. (therealgilles)
465
  * **Cloud** Bypassed invalid requests.
466
+ * **Doc** CDN Mapping description improvement. (mihai A.)
467
 
468
  = 3.6.1 - Dec 21 2020 =
469
  * **WP** Tested up to WP v5.6.
src/admin-display.cls.php CHANGED
@@ -240,6 +240,12 @@ class Admin_Display extends Base {
240
  $localize_data[ 'ajax_url_getIP' ] = function_exists( 'get_rest_url' ) ? get_rest_url( null, 'litespeed/v1/tool/check_ip' ) : '/';
241
  $localize_data[ 'nonce' ] = wp_create_nonce( 'wp_rest' );
242
  }
 
 
 
 
 
 
243
  }
244
 
245
  if ( $localize_data ) {
@@ -400,6 +406,10 @@ class Admin_Display extends Base {
400
  * @access public
401
  */
402
  public function display_messages() {
 
 
 
 
403
  if ( GUI::has_whm_msg() ) {
404
  $this->show_display_installed();
405
  }
@@ -635,6 +645,16 @@ class Admin_Display extends Base {
635
  include LSCWP_DIR . "tpl/inc/check_cache_disabled.php";
636
  }
637
 
 
 
 
 
 
 
 
 
 
 
638
  /**
639
  * Output litespeed form info
640
  *
@@ -648,7 +668,12 @@ class Admin_Display extends Base {
648
 
649
  $has_upload = $has_upload ? 'enctype="multipart/form-data"' : '';
650
 
651
- echo '<form method="post" action="' . wp_unslash( $_SERVER[ 'REQUEST_URI' ] ) . '" class="litespeed-relative" ' . $has_upload . '>';
 
 
 
 
 
652
 
653
  echo '<input type="hidden" name="' . Router::ACTION . '" value="' . $action . '" />';
654
  if ( $type ) {
@@ -665,9 +690,18 @@ class Admin_Display extends Base {
665
  */
666
  public function form_end( $disable_reset = false ) {
667
  echo "<div class='litespeed-top20'></div>";
668
- submit_button( __( 'Save Changes', 'litespeed-cache' ), 'primary litespeed-duplicate-float', 'litespeed-submit', true, array( 'id' => 'litespeed-submit-' . $this->_btn_i++ ) );
669
 
670
- echo '</form>';
 
 
 
 
 
 
 
 
 
 
671
  }
672
 
673
  /**
@@ -788,17 +822,12 @@ class Admin_Display extends Base {
788
  if ( $checked === null && $this->conf( $id, true ) ) {
789
  $checked = true;
790
  }
791
-
792
  if ( $title_on === null ) {
793
  $title_on = __( 'ON', 'litespeed-cache' );
794
  $title_off = __( 'OFF', 'litespeed-cache' );
795
  }
796
-
797
  $cls = $checked ? 'primary' : 'default litespeed-toggleoff';
798
-
799
- $this->enroll( $id );
800
-
801
- echo "<div class='litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-$cls' data-litespeed-toggle-on='primary' data-litespeed-toggle-off='default'>
802
  <input name='$id' type='hidden' value='$checked' />
803
  <div class='litespeed-toggle-group'>
804
  <label class='litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on'>$title_on</label>
@@ -806,8 +835,6 @@ class Admin_Display extends Base {
806
  <span class='litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default'></span>
807
  </div>
808
  </div>";
809
-
810
- $this->_check_overwritten( $id );
811
  }
812
 
813
  /**
240
  $localize_data[ 'ajax_url_getIP' ] = function_exists( 'get_rest_url' ) ? get_rest_url( null, 'litespeed/v1/tool/check_ip' ) : '/';
241
  $localize_data[ 'nonce' ] = wp_create_nonce( 'wp_rest' );
242
  }
243
+
244
+ // Activate or deactivate a specific crawler
245
+ if ( $_GET[ 'page' ] == 'litespeed-crawler' ) {
246
+ $localize_data[ 'ajax_url_crawler_switch' ] = function_exists( 'get_rest_url' ) ? get_rest_url( null, 'litespeed/v1/toggle_crawler_state' ) : '/';
247
+ $localize_data[ 'nonce' ] = wp_create_nonce( 'wp_rest' );
248
+ }
249
  }
250
 
251
  if ( $localize_data ) {
406
  * @access public
407
  */
408
  public function display_messages() {
409
+ if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
410
+ $this->_in_upgrading();
411
+ }
412
+
413
  if ( GUI::has_whm_msg() ) {
414
  $this->show_display_installed();
415
  }
645
  include LSCWP_DIR . "tpl/inc/check_cache_disabled.php";
646
  }
647
 
648
+ /**
649
+ * Display conf data upgrading banner
650
+ *
651
+ * @since 2.1
652
+ * @access private
653
+ */
654
+ private function _in_upgrading() {
655
+ include LSCWP_DIR . "tpl/inc/in_upgrading.php";
656
+ }
657
+
658
  /**
659
  * Output litespeed form info
660
  *
668
 
669
  $has_upload = $has_upload ? 'enctype="multipart/form-data"' : '';
670
 
671
+ if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
672
+ echo '<div class="litespeed-relative"';
673
+ }
674
+ else {
675
+ echo '<form method="post" action="' . wp_unslash( $_SERVER[ 'REQUEST_URI' ] ) . '" class="litespeed-relative" ' . $has_upload . '>';
676
+ }
677
 
678
  echo '<input type="hidden" name="' . Router::ACTION . '" value="' . $action . '" />';
679
  if ( $type ) {
690
  */
691
  public function form_end( $disable_reset = false ) {
692
  echo "<div class='litespeed-top20'></div>";
 
693
 
694
+ if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
695
+ submit_button( __( 'Save Changes', 'litespeed-cache' ), 'secondary litespeed-duplicate-float', 'litespeed-submit', true, array( 'disabled' => 'disabled' ) );
696
+
697
+ echo '</div>';
698
+ }
699
+ else {
700
+ submit_button( __( 'Save Changes', 'litespeed-cache' ), 'primary litespeed-duplicate-float', 'litespeed-submit', true, array( 'id' => 'litespeed-submit-' . $this->_btn_i++ ) );
701
+
702
+ echo '</form>';
703
+ }
704
+
705
  }
706
 
707
  /**
822
  if ( $checked === null && $this->conf( $id, true ) ) {
823
  $checked = true;
824
  }
 
825
  if ( $title_on === null ) {
826
  $title_on = __( 'ON', 'litespeed-cache' );
827
  $title_off = __( 'OFF', 'litespeed-cache' );
828
  }
 
829
  $cls = $checked ? 'primary' : 'default litespeed-toggleoff';
830
+ echo "<div class='litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-$cls' data-litespeed-toggle-on='primary' data-litespeed-toggle-off='default' data-litespeed_crawler_id='$id' >
 
 
 
831
  <input name='$id' type='hidden' value='$checked' />
832
  <div class='litespeed-toggle-group'>
833
  <label class='litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on'>$title_on</label>
835
  <span class='litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default'></span>
836
  </div>
837
  </div>";
 
 
838
  }
839
 
840
  /**
src/base.cls.php CHANGED
@@ -123,7 +123,9 @@ class Base extends Root {
123
  const O_OPTM_CSS_COMB = 'optm-css_comb';
124
  const O_OPTM_CSS_COMB_EXT_INL = 'optm-css_comb_ext_inl';
125
  const O_OPTM_UCSS = 'optm-ucss';
 
126
  const O_OPTM_UCSS_WHITELIST = 'optm-ucss_whitelist';
 
127
  const O_OPTM_CSS_HTTP2 = 'optm-css_http2';
128
  const O_OPTM_CSS_EXC = 'optm-css_exc';
129
  const O_OPTM_JS_MIN = 'optm-js_min';
@@ -405,7 +407,9 @@ class Base extends Root {
405
  self::O_OPTM_CSS_COMB => false,
406
  self::O_OPTM_CSS_COMB_EXT_INL => false,
407
  self::O_OPTM_UCSS => false,
 
408
  self::O_OPTM_UCSS_WHITELIST => array(),
 
409
  self::O_OPTM_CSS_HTTP2 => false,
410
  self::O_OPTM_CSS_EXC => array(),
411
  self::O_OPTM_JS_MIN => false,
123
  const O_OPTM_CSS_COMB = 'optm-css_comb';
124
  const O_OPTM_CSS_COMB_EXT_INL = 'optm-css_comb_ext_inl';
125
  const O_OPTM_UCSS = 'optm-ucss';
126
+ const O_OPTM_UCSS_INLINE = 'optm-ucss_inline';
127
  const O_OPTM_UCSS_WHITELIST = 'optm-ucss_whitelist';
128
+ const O_OPTM_UCSS_EXC = 'optm-ucss_exc';
129
  const O_OPTM_CSS_HTTP2 = 'optm-css_http2';
130
  const O_OPTM_CSS_EXC = 'optm-css_exc';
131
  const O_OPTM_JS_MIN = 'optm-js_min';
407
  self::O_OPTM_CSS_COMB => false,
408
  self::O_OPTM_CSS_COMB_EXT_INL => false,
409
  self::O_OPTM_UCSS => false,
410
+ self::O_OPTM_UCSS_INLINE => false,
411
  self::O_OPTM_UCSS_WHITELIST => array(),
412
+ self::O_OPTM_UCSS_EXC => array(),
413
  self::O_OPTM_CSS_HTTP2 => false,
414
  self::O_OPTM_CSS_EXC => array(),
415
  self::O_OPTM_JS_MIN => false,
src/cloud.cls.php CHANGED
@@ -8,6 +8,7 @@ namespace LiteSpeed;
8
  defined( 'WPINC' ) || exit;
9
 
10
  class Cloud extends Base {
 
11
  const CLOUD_SERVER = 'https://api.quic.cloud';
12
  const CLOUD_IPS = 'https://quic.cloud/ips';
13
  const CLOUD_SERVER_DASH = 'https://my.quic.cloud';
@@ -126,7 +127,7 @@ class Cloud extends Base {
126
  return;
127
  }
128
 
129
- Debug2::debug( '❄️ Latest dev version ' . $this->_summary[ 'version.dev' ] );
130
 
131
  if ( version_compare( $this->_summary[ 'version.dev' ], Core::VER, '<=' ) ) {
132
  return;
@@ -301,7 +302,7 @@ class Cloud extends Base {
301
  return;
302
  }
303
 
304
- Debug2::debug( '❄️ sync_usage ' . json_encode( $usage ) );
305
 
306
  foreach ( self::$SERVICES as $v ) {
307
  $this->_summary[ 'usage.' . $v ] = ! empty( $usage[ $v ] ) ? $usage[ $v ] : false;
@@ -329,7 +330,7 @@ class Cloud extends Base {
329
  }
330
  self::save_summary();
331
 
332
- Debug2::debug( '❄️ Cleared all local service node caches' );
333
  }
334
 
335
  /**
@@ -365,7 +366,7 @@ class Cloud extends Base {
365
 
366
  // Check if get list correctly
367
  if ( empty( $json[ 'list' ] ) || ! is_array( $json[ 'list' ] ) ) {
368
- Debug2::debug( '❄️ request cloud list failed: ', $json );
369
 
370
  if ( $json ) {
371
  $msg = __( 'Cloud Error', 'litespeed-cache' ) . ": [Service] $service [Info] " . json_encode( $json );
@@ -384,7 +385,7 @@ class Cloud extends Base {
384
  $min = min( $speed_list );
385
 
386
  if ( $min == 99999 ) {
387
- Debug2::debug( '❄️ failed to ping all clouds' );
388
  return false;
389
  }
390
 
@@ -397,7 +398,7 @@ class Cloud extends Base {
397
  $valid_clouds[] = $node;
398
  }
399
  // Append the lower speed ones
400
- else if ( $speed < $min * 2 ) {
401
  $valid_clouds[] = $node;
402
  }
403
  }
@@ -408,7 +409,7 @@ class Cloud extends Base {
408
  return false;
409
  }
410
 
411
- Debug2::debug( '❄️ Closest nodes list', $valid_clouds );
412
 
413
  // Check server load
414
  if ( in_array( $service, self::$SERVICES_LOAD_CHECK ) ) {
@@ -417,7 +418,7 @@ class Cloud extends Base {
417
  $response = wp_remote_get( $v, array( 'timeout' => 5, 'sslverify' => true ) );
418
  if ( is_wp_error( $response ) ) {
419
  $error_message = $response->get_error_message();
420
- Debug2::debug( '❄️ failed to do load checker: ' . $error_message );
421
  continue;
422
  }
423
 
@@ -433,7 +434,7 @@ class Cloud extends Base {
433
  return false;
434
  }
435
 
436
- Debug2::debug( '❄️ Closest nodes list after load check', $valid_cloud_loads );
437
 
438
  $qualified_list = array_keys( $valid_cloud_loads, min( $valid_cloud_loads ) );
439
  }
@@ -443,7 +444,7 @@ class Cloud extends Base {
443
 
444
  $closest = $qualified_list[ array_rand( $qualified_list ) ];
445
 
446
- Debug2::debug( '❄️ Chose node: ' . $closest );
447
 
448
  // store data into option locally
449
  $this->_summary[ 'server.' . $service ] = $closest;
@@ -499,7 +500,7 @@ class Cloud extends Base {
499
 
500
  $url .= '?' . http_build_query( $param );
501
 
502
- Debug2::debug( '❄️ getting from : ' . $url );
503
 
504
  $this->_summary[ 'curr_request.' . $service_tag ] = time();
505
  self::save_summary();
@@ -544,7 +545,7 @@ class Cloud extends Base {
544
  if ( ! empty( $this->_summary[ $timestamp_tag . $service_tag ] ) ) {
545
  $expired = $this->_summary[ $timestamp_tag . $service_tag ] + $expiration_req - time();
546
  if ( $expired > 0 ) {
547
- Debug2::debug( "[Cloud] ❌ try [$service_tag] after $expired seconds" );
548
 
549
  if ( $service_tag !== self::API_VER ) {
550
  $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>' );
@@ -601,7 +602,7 @@ class Cloud extends Base {
601
 
602
  $url = $server . '/' . $service;
603
 
604
- Debug2::debug( '❄️ posting to : ' . $url );
605
 
606
  $param = array(
607
  'site_url' => home_url(),
@@ -627,14 +628,14 @@ class Cloud extends Base {
627
  private function _parse_response( $response, $service, $service_tag, $server ) {
628
  if ( is_wp_error( $response ) ) {
629
  $error_message = $response->get_error_message();
630
- Debug2::debug( '❄️ failed to request: ' . $error_message );
631
 
632
  if ( $service !== self::API_VER ) {
633
  $msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $error_message . " [server] $server [service] $service";
634
  Admin_Display::error( $msg );
635
 
636
  // Force redetect node
637
- Debug2::debug( '❄️ Node error, redetecting node [svc] ' . $service );
638
  $this->detect_cloud( $service, true );
639
  }
640
  return;
@@ -643,14 +644,14 @@ class Cloud extends Base {
643
  $json = json_decode( $response[ 'body' ], true );
644
 
645
  if ( ! is_array( $json ) ) {
646
- Debug2::debug( '❄️ failed to decode response json: ' . $response[ 'body' ] );
647
 
648
  if ( $service !== self::API_VER ) {
649
  $msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $response[ 'body' ] . " [server] $server [service] $service";
650
  Admin_Display::error( $msg );
651
 
652
  // Force redetect node
653
- Debug2::debug( '❄️ Node error, redetecting node [svc] ' . $service );
654
  $this->detect_cloud( $service, true );
655
  }
656
 
@@ -660,28 +661,28 @@ class Cloud extends Base {
660
  if ( ! empty( $json[ '_code' ] ) ) {
661
  if ( $json[ '_code' ] == 'heavy_load' || $json[ '_code' ] == 'redetect_node' ) {
662
  // Force redetect node
663
- Debug2::debug( '❄️ Node redetecting node [svc] ' . $service );
664
  Admin_Display::info( __( 'Redetected node', 'litespeed-cache' ) . ': ' . Error::msg( $json[ '_code' ] ) );
665
  $this->detect_cloud( $service, true );
666
  }
667
  }
668
 
669
  if ( ! empty( $json[ '_503' ] ) ) {
670
- Debug2::debug( '❄️ service 503 unavailable temporarily. ' . $json[ '_503' ] );
671
 
672
  $msg = __( 'We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.', 'litespeed-cache' );
673
  $msg .= ' ' . $json[ '_503' ] . " [server] $server [service] $service";
674
  Admin_Display::error( $msg );
675
 
676
  // Force redetect node
677
- Debug2::debug( '❄️ Node error, redetecting node [svc] ' . $service );
678
  $this->detect_cloud( $service, true );
679
 
680
  return;
681
  }
682
 
683
  if ( ! empty( $json[ '_info' ] ) ) {
684
- Debug2::debug( '❄️ _info: ' . $json[ '_info' ] );
685
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_info' ];
686
  $msg .= $this->_parse_link( $json );
687
  Admin_Display::info( $msg );
@@ -689,7 +690,7 @@ class Cloud extends Base {
689
  }
690
 
691
  if ( ! empty( $json[ '_note' ] ) ) {
692
- Debug2::debug( '❄️ _note: ' . $json[ '_note' ] );
693
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_note' ];
694
  $msg .= $this->_parse_link( $json );
695
  Admin_Display::note( $msg );
@@ -697,7 +698,7 @@ class Cloud extends Base {
697
  }
698
 
699
  if ( ! empty( $json[ '_success' ] ) ) {
700
- Debug2::debug( '❄️ _success: ' . $json[ '_success' ] );
701
  $msg = __( 'Good news from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_success' ];
702
  $msg .= $this->_parse_link( $json );
703
  Admin_Display::succeed( $msg );
@@ -706,7 +707,7 @@ class Cloud extends Base {
706
 
707
  // Upgrade is required
708
  if ( ! empty( $json[ '_err_req_v' ] ) ) {
709
- Debug2::debug( '❄️ _err_req_v: ' . $json[ '_err_req_v' ] );
710
  $msg = sprintf( __( '%1$s plugin version %2$s required for this action.', 'litespeed-cache' ), Core::NAME, 'v' . $json[ '_err_req_v' ] . '+' ) . " [server] $server [service] $service";
711
 
712
  // Append upgrade link
@@ -719,7 +720,7 @@ class Cloud extends Base {
719
 
720
  // Parse _carry_on info
721
  if ( ! empty( $json[ '_carry_on' ] ) ) {
722
- Debug2::debug( '❄️ Carry_on usage', $json[ '_carry_on' ] );
723
  // Store generic info
724
  foreach ( array( 'usage', 'promo' ) as $v ) {
725
  if ( ! empty( $json[ '_carry_on' ][ $v ] ) ) {
@@ -748,7 +749,7 @@ class Cloud extends Base {
748
  // Parse general error msg
749
  if ( empty( $json[ '_res' ] ) || $json[ '_res' ] !== 'ok' ) {
750
  $json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
751
- Debug2::debug( '❄️ ❌ _err: ' . $json_msg );
752
 
753
  $msg = __( 'Failed to communicate with QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json_msg ) . " [server] $server [service] $service";
754
  $msg .= $this->_parse_link( $json );
@@ -777,10 +778,10 @@ class Cloud extends Base {
777
  self::save_summary();
778
 
779
  if ( $json ) {
780
- Debug2::debug2( '[Cloud] response ok', $json );
781
  }
782
  else {
783
- Debug2::debug2( '[Cloud] response ok' );
784
  }
785
 
786
  // Only successful request return Array
@@ -850,18 +851,18 @@ class Cloud extends Base {
850
  */
851
  public function ip_validate() {
852
  if ( empty( $_POST[ 'hash' ] ) ) {
853
- Debug2::debug( '❄️ Lack of hash param' );
854
  return self::err( 'lack_of_param' );
855
  }
856
 
857
  if ( empty( $this->_api_key ) ) {
858
- Debug2::debug( '❄️ Lack of API key' );
859
  return self::err( 'lack_of_api_key' );
860
  }
861
 
862
  $to_validate = substr( $this->_api_key, 0, 4 );
863
  if ( $_POST[ 'hash' ] !== md5( $to_validate ) ) {
864
- Debug2::debug( '❄️ __callback IP request hash wrong: md5(' . $to_validate . ') !== ' . $_POST[ 'hash' ] );
865
  return self::err( 'err_hash' );
866
  }
867
 
@@ -869,7 +870,7 @@ class Cloud extends Base {
869
 
870
  $res_hash = substr( $this->_api_key, 2, 4 );
871
 
872
- Debug2::debug( '❄️ __callback IP request hash: md5(' . $res_hash . ')' );
873
 
874
  return self::ok( array( 'hash' => md5( $res_hash ) ) );
875
  }
@@ -902,7 +903,7 @@ class Cloud extends Base {
902
  $response = wp_remote_get( self::CLOUD_SERVER . '/d/req_key?data=' . Utility::arr2str( $data ) );
903
  if ( is_wp_error( $response ) ) {
904
  $error_message = $response->get_error_message();
905
- Debug2::debug( '[Cloud] failed to gen_key: ' . $error_message );
906
  Admin_Display::error( __( 'Cloud Error', 'litespeed-cache' ) . ': ' . $error_message );
907
  return;
908
  }
@@ -926,7 +927,7 @@ class Cloud extends Base {
926
  self::save_summary();
927
 
928
  $json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
929
- Debug2::debug( '❄️ ❌ _err: ' . $json_msg );
930
 
931
  $msg = __( 'Failed to communicate with QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json_msg );
932
  $msg .= $this->_parse_link( $json );
@@ -937,7 +938,7 @@ class Cloud extends Base {
937
 
938
  // This is a ok msg
939
  if ( ! empty( $json[ '_msg' ] ) ) {
940
- Debug2::debug( '❄️ _msg: ' . $json[ '_msg' ] );
941
 
942
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json[ '_msg' ] );
943
  $msg .= $this->_parse_link( $json );
@@ -945,7 +946,7 @@ class Cloud extends Base {
945
  return;
946
  }
947
 
948
- Debug2::debug( '❄️ ✅ send request for key successfully.' );
949
 
950
  Admin_Display::succeed( __( 'Applied for Domain Key successfully. Please wait for result. Domain Key will be automatically sent to your WordPress.', 'litespeed-cache' ) );
951
  }
@@ -965,7 +966,7 @@ class Cloud extends Base {
965
 
966
  Control::set_nocache( 'Cloud token validation' );
967
 
968
- Debug2::debug( '❄️ ✅ __callback token validation passed' );
969
 
970
  return self::ok( array( 'hash' => md5( substr( $this->_summary[ 'token' ], 3, 8 ) ) ) );
971
  }
@@ -997,7 +998,7 @@ class Cloud extends Base {
997
  unset( $this->_summary[ 'token' ] );
998
  self::save_summary();
999
 
1000
- Debug2::debug( '❄️ ✅ saved auth_key' );
1001
  Admin_Display::succeed( '🎊 ' . __( 'Congratulations, your Domain Key has been approved! The setting has been updated accordingly.', 'litespeed-cache' ) );
1002
 
1003
  return self::ok();
@@ -1010,17 +1011,17 @@ class Cloud extends Base {
1010
  */
1011
  private function _validate_hash( $offset = 0 ) {
1012
  if ( empty( $_POST[ 'hash' ] ) ) {
1013
- Debug2::debug( '❄️ Lack of hash param' );
1014
  throw new \Exception( 'lack_of_param' );
1015
  }
1016
 
1017
  if ( empty( $this->_summary[ 'token' ] ) ) {
1018
- Debug2::debug( '❄️ token validate failed: token not exist' );
1019
  throw new \Exception( 'lack_of_local_token' );
1020
  }
1021
 
1022
  if ( $_POST[ 'hash' ] !== md5( substr( $this->_summary[ 'token' ], $offset, 8 ) ) ) {
1023
- Debug2::debug( '❄️ token validate failed: token mismatch hash !== ' . $_POST[ 'hash' ] );
1024
  throw new \Exception( 'mismatch' );
1025
  }
1026
  }
@@ -1092,13 +1093,13 @@ class Cloud extends Base {
1092
 
1093
  $res = $this->cls( 'Router' )->ip_access( $this->_summary[ 'ips' ] );
1094
  if ( ! $res ) {
1095
- Debug2::debug( '❄️ ❌ Not our cloud IP' );
1096
 
1097
  // Refresh IP list for future detection
1098
  $this->_update_ips();
1099
  }
1100
  else {
1101
- Debug2::debug( '❄️ ✅ Passed Cloud IP verification' );
1102
  }
1103
 
1104
  return $res;
@@ -1110,12 +1111,12 @@ class Cloud extends Base {
1110
  * @since 4.2
1111
  */
1112
  private function _update_ips() {
1113
- Debug2::debug( '❄️ Load remote Cloud IP list from ' . self::CLOUD_IPS );
1114
 
1115
  $response = wp_remote_get( self::CLOUD_IPS . '?json' );
1116
  if ( is_wp_error( $response ) ) {
1117
  $error_message = $response->get_error_message();
1118
- Debug2::debug( '[CLoud] failed to get ip whitelist: ' . $error_message );
1119
  throw new \Exception( 'Failed to fetch QUIC.cloud whitelist ' . $error_message );
1120
  }
1121
 
8
  defined( 'WPINC' ) || exit;
9
 
10
  class Cloud extends Base {
11
+ const LOG_TAG = '❄️';
12
  const CLOUD_SERVER = 'https://api.quic.cloud';
13
  const CLOUD_IPS = 'https://quic.cloud/ips';
14
  const CLOUD_SERVER_DASH = 'https://my.quic.cloud';
127
  return;
128
  }
129
 
130
+ self::debug( 'Latest dev version ' . $this->_summary[ 'version.dev' ] );
131
 
132
  if ( version_compare( $this->_summary[ 'version.dev' ], Core::VER, '<=' ) ) {
133
  return;
302
  return;
303
  }
304
 
305
+ self::debug( 'sync_usage ' . json_encode( $usage ) );
306
 
307
  foreach ( self::$SERVICES as $v ) {
308
  $this->_summary[ 'usage.' . $v ] = ! empty( $usage[ $v ] ) ? $usage[ $v ] : false;
330
  }
331
  self::save_summary();
332
 
333
+ self::debug( 'Cleared all local service node caches' );
334
  }
335
 
336
  /**
366
 
367
  // Check if get list correctly
368
  if ( empty( $json[ 'list' ] ) || ! is_array( $json[ 'list' ] ) ) {
369
+ self::debug( 'request cloud list failed: ', $json );
370
 
371
  if ( $json ) {
372
  $msg = __( 'Cloud Error', 'litespeed-cache' ) . ": [Service] $service [Info] " . json_encode( $json );
385
  $min = min( $speed_list );
386
 
387
  if ( $min == 99999 ) {
388
+ self::debug( 'failed to ping all clouds' );
389
  return false;
390
  }
391
 
398
  $valid_clouds[] = $node;
399
  }
400
  // Append the lower speed ones
401
+ else if ( $speed < $min * 4 ) {
402
  $valid_clouds[] = $node;
403
  }
404
  }
409
  return false;
410
  }
411
 
412
+ self::debug( 'Closest nodes list', $valid_clouds );
413
 
414
  // Check server load
415
  if ( in_array( $service, self::$SERVICES_LOAD_CHECK ) ) {
418
  $response = wp_remote_get( $v, array( 'timeout' => 5, 'sslverify' => true ) );
419
  if ( is_wp_error( $response ) ) {
420
  $error_message = $response->get_error_message();
421
+ self::debug( 'failed to do load checker: ' . $error_message );
422
  continue;
423
  }
424
 
434
  return false;
435
  }
436
 
437
+ self::debug( 'Closest nodes list after load check', $valid_cloud_loads );
438
 
439
  $qualified_list = array_keys( $valid_cloud_loads, min( $valid_cloud_loads ) );
440
  }
444
 
445
  $closest = $qualified_list[ array_rand( $qualified_list ) ];
446
 
447
+ self::debug( 'Chose node: ' . $closest );
448
 
449
  // store data into option locally
450
  $this->_summary[ 'server.' . $service ] = $closest;
500
 
501
  $url .= '?' . http_build_query( $param );
502
 
503
+ self::debug( 'getting from : ' . $url );
504
 
505
  $this->_summary[ 'curr_request.' . $service_tag ] = time();
506
  self::save_summary();
545
  if ( ! empty( $this->_summary[ $timestamp_tag . $service_tag ] ) ) {
546
  $expired = $this->_summary[ $timestamp_tag . $service_tag ] + $expiration_req - time();
547
  if ( $expired > 0 ) {
548
+ self::debug( "❌ try [$service_tag] after $expired seconds" );
549
 
550
  if ( $service_tag !== self::API_VER ) {
551
  $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>' );
602
 
603
  $url = $server . '/' . $service;
604
 
605
+ self::debug( 'posting to : ' . $url );
606
 
607
  $param = array(
608
  'site_url' => home_url(),
628
  private function _parse_response( $response, $service, $service_tag, $server ) {
629
  if ( is_wp_error( $response ) ) {
630
  $error_message = $response->get_error_message();
631
+ self::debug( 'failed to request: ' . $error_message );
632
 
633
  if ( $service !== self::API_VER ) {
634
  $msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $error_message . " [server] $server [service] $service";
635
  Admin_Display::error( $msg );
636
 
637
  // Force redetect node
638
+ self::debug( 'Node error, redetecting node [svc] ' . $service );
639
  $this->detect_cloud( $service, true );
640
  }
641
  return;
644
  $json = json_decode( $response[ 'body' ], true );
645
 
646
  if ( ! is_array( $json ) ) {
647
+ self::debug( 'failed to decode response json: ' . $response[ 'body' ] );
648
 
649
  if ( $service !== self::API_VER ) {
650
  $msg = __( 'Failed to request via WordPress', 'litespeed-cache' ) . ': ' . $response[ 'body' ] . " [server] $server [service] $service";
651
  Admin_Display::error( $msg );
652
 
653
  // Force redetect node
654
+ self::debug( 'Node error, redetecting node [svc] ' . $service );
655
  $this->detect_cloud( $service, true );
656
  }
657
 
661
  if ( ! empty( $json[ '_code' ] ) ) {
662
  if ( $json[ '_code' ] == 'heavy_load' || $json[ '_code' ] == 'redetect_node' ) {
663
  // Force redetect node
664
+ self::debug( 'Node redetecting node [svc] ' . $service );
665
  Admin_Display::info( __( 'Redetected node', 'litespeed-cache' ) . ': ' . Error::msg( $json[ '_code' ] ) );
666
  $this->detect_cloud( $service, true );
667
  }
668
  }
669
 
670
  if ( ! empty( $json[ '_503' ] ) ) {
671
+ self::debug( 'service 503 unavailable temporarily. ' . $json[ '_503' ] );
672
 
673
  $msg = __( 'We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.', 'litespeed-cache' );
674
  $msg .= ' ' . $json[ '_503' ] . " [server] $server [service] $service";
675
  Admin_Display::error( $msg );
676
 
677
  // Force redetect node
678
+ self::debug( 'Node error, redetecting node [svc] ' . $service );
679
  $this->detect_cloud( $service, true );
680
 
681
  return;
682
  }
683
 
684
  if ( ! empty( $json[ '_info' ] ) ) {
685
+ self::debug( '_info: ' . $json[ '_info' ] );
686
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_info' ];
687
  $msg .= $this->_parse_link( $json );
688
  Admin_Display::info( $msg );
690
  }
691
 
692
  if ( ! empty( $json[ '_note' ] ) ) {
693
+ self::debug( '_note: ' . $json[ '_note' ] );
694
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_note' ];
695
  $msg .= $this->_parse_link( $json );
696
  Admin_Display::note( $msg );
698
  }
699
 
700
  if ( ! empty( $json[ '_success' ] ) ) {
701
+ self::debug( '_success: ' . $json[ '_success' ] );
702
  $msg = __( 'Good news from QUIC.cloud server', 'litespeed-cache' ) . ': ' . $json[ '_success' ];
703
  $msg .= $this->_parse_link( $json );
704
  Admin_Display::succeed( $msg );
707
 
708
  // Upgrade is required
709
  if ( ! empty( $json[ '_err_req_v' ] ) ) {
710
+ self::debug( '_err_req_v: ' . $json[ '_err_req_v' ] );
711
  $msg = sprintf( __( '%1$s plugin version %2$s required for this action.', 'litespeed-cache' ), Core::NAME, 'v' . $json[ '_err_req_v' ] . '+' ) . " [server] $server [service] $service";
712
 
713
  // Append upgrade link
720
 
721
  // Parse _carry_on info
722
  if ( ! empty( $json[ '_carry_on' ] ) ) {
723
+ self::debug( 'Carry_on usage', $json[ '_carry_on' ] );
724
  // Store generic info
725
  foreach ( array( 'usage', 'promo' ) as $v ) {
726
  if ( ! empty( $json[ '_carry_on' ][ $v ] ) ) {
749
  // Parse general error msg
750
  if ( empty( $json[ '_res' ] ) || $json[ '_res' ] !== 'ok' ) {
751
  $json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
752
+ self::debug( '❌ _err: ' . $json_msg );
753
 
754
  $msg = __( 'Failed to communicate with QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json_msg ) . " [server] $server [service] $service";
755
  $msg .= $this->_parse_link( $json );
778
  self::save_summary();
779
 
780
  if ( $json ) {
781
+ self::debug2( 'response ok', $json );
782
  }
783
  else {
784
+ self::debug2( 'response ok' );
785
  }
786
 
787
  // Only successful request return Array
851
  */
852
  public function ip_validate() {
853
  if ( empty( $_POST[ 'hash' ] ) ) {
854
+ self::debug( 'Lack of hash param' );
855
  return self::err( 'lack_of_param' );
856
  }
857
 
858
  if ( empty( $this->_api_key ) ) {
859
+ self::debug( 'Lack of API key' );
860
  return self::err( 'lack_of_api_key' );
861
  }
862
 
863
  $to_validate = substr( $this->_api_key, 0, 4 );
864
  if ( $_POST[ 'hash' ] !== md5( $to_validate ) ) {
865
+ self::debug( '__callback IP request hash wrong: md5(' . $to_validate . ') !== ' . $_POST[ 'hash' ] );
866
  return self::err( 'err_hash' );
867
  }
868
 
870
 
871
  $res_hash = substr( $this->_api_key, 2, 4 );
872
 
873
+ self::debug( '__callback IP request hash: md5(' . $res_hash . ')' );
874
 
875
  return self::ok( array( 'hash' => md5( $res_hash ) ) );
876
  }
903
  $response = wp_remote_get( self::CLOUD_SERVER . '/d/req_key?data=' . Utility::arr2str( $data ) );
904
  if ( is_wp_error( $response ) ) {
905
  $error_message = $response->get_error_message();
906
+ self::debug( 'failed to gen_key: ' . $error_message );
907
  Admin_Display::error( __( 'Cloud Error', 'litespeed-cache' ) . ': ' . $error_message );
908
  return;
909
  }
927
  self::save_summary();
928
 
929
  $json_msg = ! empty( $json[ '_msg' ] ) ? $json[ '_msg' ] : 'unknown';
930
+ self::debug( '❌ _err: ' . $json_msg );
931
 
932
  $msg = __( 'Failed to communicate with QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json_msg );
933
  $msg .= $this->_parse_link( $json );
938
 
939
  // This is a ok msg
940
  if ( ! empty( $json[ '_msg' ] ) ) {
941
+ self::debug( '_msg: ' . $json[ '_msg' ] );
942
 
943
  $msg = __( 'Message from QUIC.cloud server', 'litespeed-cache' ) . ': ' . Error::msg( $json[ '_msg' ] );
944
  $msg .= $this->_parse_link( $json );
946
  return;
947
  }
948
 
949
+ self::debug( '✅ send request for key successfully.' );
950
 
951
  Admin_Display::succeed( __( 'Applied for Domain Key successfully. Please wait for result. Domain Key will be automatically sent to your WordPress.', 'litespeed-cache' ) );
952
  }
966
 
967
  Control::set_nocache( 'Cloud token validation' );
968
 
969
+ self::debug( '✅ __callback token validation passed' );
970
 
971
  return self::ok( array( 'hash' => md5( substr( $this->_summary[ 'token' ], 3, 8 ) ) ) );
972
  }
998
  unset( $this->_summary[ 'token' ] );
999
  self::save_summary();
1000
 
1001
+ self::debug( '✅ saved auth_key' );
1002
  Admin_Display::succeed( '🎊 ' . __( 'Congratulations, your Domain Key has been approved! The setting has been updated accordingly.', 'litespeed-cache' ) );
1003
 
1004
  return self::ok();
1011
  */
1012
  private function _validate_hash( $offset = 0 ) {
1013
  if ( empty( $_POST[ 'hash' ] ) ) {
1014
+ self::debug( 'Lack of hash param' );
1015
  throw new \Exception( 'lack_of_param' );
1016
  }
1017
 
1018
  if ( empty( $this->_summary[ 'token' ] ) ) {
1019
+ self::debug( 'token validate failed: token not exist' );
1020
  throw new \Exception( 'lack_of_local_token' );
1021
  }
1022
 
1023
  if ( $_POST[ 'hash' ] !== md5( substr( $this->_summary[ 'token' ], $offset, 8 ) ) ) {
1024
+ self::debug( 'token validate failed: token mismatch hash !== ' . $_POST[ 'hash' ] );
1025
  throw new \Exception( 'mismatch' );
1026
  }
1027
  }
1093
 
1094
  $res = $this->cls( 'Router' )->ip_access( $this->_summary[ 'ips' ] );
1095
  if ( ! $res ) {
1096
+ self::debug( '❌ Not our cloud IP' );
1097
 
1098
  // Refresh IP list for future detection
1099
  $this->_update_ips();
1100
  }
1101
  else {
1102
+ self::debug( '✅ Passed Cloud IP verification' );
1103
  }
1104
 
1105
  return $res;
1111
  * @since 4.2
1112
  */
1113
  private function _update_ips() {
1114
+ self::debug( 'Load remote Cloud IP list from ' . self::CLOUD_IPS );
1115
 
1116
  $response = wp_remote_get( self::CLOUD_IPS . '?json' );
1117
  if ( is_wp_error( $response ) ) {
1118
  $error_message = $response->get_error_message();
1119
+ self::debug( 'failed to get ip whitelist: ' . $error_message );
1120
  throw new \Exception( 'Failed to fetch QUIC.cloud whitelist ' . $error_message );
1121
  }
1122
 
src/conf.cls.php CHANGED
@@ -63,17 +63,20 @@ class Conf extends Base {
63
  $ver = $this->conf( self::_VER );
64
 
65
  /**
66
- * Don't upgrade or run new installations other than from backend visit
67
  * In this case, just use default conf
68
  */
 
69
  if ( ! $ver || $ver != Core::VER ) {
70
- if ( ! is_admin() && ! defined( 'LITESPEED_CLI' ) ) {
 
 
71
  $this->set_conf( $this->load_default_vals() );
72
  $this->_try_load_site_options();
73
 
74
  // Disable new installation auto upgrade to avoid overwritten to customized data.ini
75
  if ( ! $ver ) {
76
- ! defined( 'LITESPEED_BYPASS_AUTO_V' ) && define( 'LITESPEED_BYPASS_AUTO_V', true );
77
  }
78
  return;
79
  }
@@ -87,7 +90,7 @@ class Conf extends Base {
87
  Data::cls()->try_upgrade_conf_3_0();
88
  }
89
  else {
90
- ! defined( 'LSCWP_CUR_V' ) && define( 'LSCWP_CUR_V', $ver );
91
 
92
  /**
93
  * Upgrade conf
@@ -125,14 +128,14 @@ class Conf extends Base {
125
  $this->_try_load_site_options();
126
 
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 : '' ) );
138
 
@@ -477,6 +480,11 @@ class Conf extends Base {
477
  if ( $this->_conf_cron( $id ) ) {
478
  $this->cls( 'Task' )->try_clean( $id );
479
  }
 
 
 
 
 
480
  }
481
  }
482
 
63
  $ver = $this->conf( self::_VER );
64
 
65
  /**
66
+ * Don't upgrade or run new installations other than from backend visit at the 2nd time (delay the update)
67
  * In this case, just use default conf
68
  */
69
+ $has_delay_conf_tag = self::get_option( '__activation' );
70
  if ( ! $ver || $ver != Core::VER ) {
71
+ if ( ( ! is_admin() && ! defined( 'LITESPEED_CLI' ) ) || ! $has_delay_conf_tag ) { // Reuse __activation to control the delay conf update
72
+ $has_delay_conf_tag || self::update_option( '__activation', Core::VER );
73
+
74
  $this->set_conf( $this->load_default_vals() );
75
  $this->_try_load_site_options();
76
 
77
  // Disable new installation auto upgrade to avoid overwritten to customized data.ini
78
  if ( ! $ver ) {
79
+ defined( 'LITESPEED_BYPASS_AUTO_V' ) || define( 'LITESPEED_BYPASS_AUTO_V', true );
80
  }
81
  return;
82
  }
90
  Data::cls()->try_upgrade_conf_3_0();
91
  }
92
  else {
93
+ defined( 'LSCWP_CUR_V' ) || define( 'LSCWP_CUR_V', $ver );
94
 
95
  /**
96
  * Upgrade conf
128
  $this->_try_load_site_options();
129
 
130
  // Mark as conf loaded
131
+ defined( 'LITESPEED_CONF_LOADED' ) || define( 'LITESPEED_CONF_LOADED', true );
132
 
133
  /**
134
  * Activation delayed file update
135
  * Pros: This is to avoid file correction script changed in new versions
136
  * Cons: Conf upgrade won't get file correction if there is new values that are used in file
137
  */
138
+ if ( $has_delay_conf_tag ) {
139
  // Check new version @since 2.9.3
140
  Cloud::version_check( 'activate' . ( defined( 'LSCWP_REF' ) ? '_' . LSCWP_REF : '' ) );
141
 
480
  if ( $this->_conf_cron( $id ) ) {
481
  $this->cls( 'Task' )->try_clean( $id );
482
  }
483
+
484
+ // Reset crawler bypassed list when any of the options WebP replace, guest mode, or cache mobile got changed
485
+ if ( $id == self::O_IMG_OPTM_WEBP_REPLACE || $id == self::O_GUEST || $id == self::O_CACHE_MOBILE ) {
486
+ $this->cls( 'Crawler' )->clear_disabled_list();
487
+ }
488
  }
489
  }
490
 
src/control.cls.php CHANGED
@@ -532,6 +532,11 @@ class Control extends Root {
532
  public function output() {
533
  $hdr = self::X_HEADER . ': ';
534
 
 
 
 
 
 
535
  // Guest mode directly return cacheable result
536
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
537
  // If is POST, no cache
532
  public function output() {
533
  $hdr = self::X_HEADER . ': ';
534
 
535
+ if ( defined( 'DONOTCACHEPAGE' ) && DONOTCACHEPAGE ) {
536
+ $hdr .= 'no-cache';
537
+ return $hdr;
538
+ }
539
+
540
  // Guest mode directly return cacheable result
541
  if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
542
  // If is POST, no cache
src/crawler.cls.php CHANGED
@@ -58,6 +58,50 @@ class Crawler extends Root {
58
  Debug2::debug( '🐞 Init' );
59
  }
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  /**
62
  * Overwride get_summary to init elements
63
  *
@@ -166,6 +210,17 @@ class Crawler extends Root {
166
 
167
  $this->list_crawlers();
168
 
 
 
 
 
 
 
 
 
 
 
 
169
  // In case crawlers are all done but not reload, reload it
170
  if ( empty( $this->_summary[ 'curr_crawler' ] ) || empty( $this->_crawlers[ $this->_summary[ 'curr_crawler' ] ] ) ) {
171
  $this->_summary[ 'curr_crawler' ] = 0;
58
  Debug2::debug( '🐞 Init' );
59
  }
60
 
61
+ /**
62
+ * Check whether the current crawler is active/runable/useable/enabled/want it to work or not
63
+ *
64
+ * @since 4.3
65
+ */
66
+ public function is_active( $curr ){
67
+ $bypass_list = self::get_option( 'bypass_list' , array() );
68
+ return ! in_array( $curr, $bypass_list );
69
+ }
70
+
71
+ /**
72
+ * Toggle the current crawler's activeness state, i.e., runable/useable/enabled/want it to work or not, and return the updated state
73
+ *
74
+ * @since 4.3
75
+ */
76
+ public function toggle_activeness( $curr ) { // param type: int
77
+ $bypass_list = self::get_option( 'bypass_list' , array() );
78
+ if ( in_array( $curr, $bypass_list ) ) { // when the ith opt was off / in the bypassed list, turn it on / remove it from the list
79
+ unset( $bypass_list[ array_search( $curr, $bypass_list ) ] );
80
+ $bypass_list = array_values( $bypass_list );
81
+ self::update_option( 'bypass_list' , $bypass_list );
82
+ return true;
83
+ } else { // when the ith opt was on / not in the bypassed list, turn it off / add it to the list
84
+ $bypass_list[] = ( int ) $curr;
85
+ self::update_option( 'bypass_list' , $bypass_list );
86
+ return false;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Clear bypassed list
92
+ *
93
+ * @since 4.3
94
+ * @access public
95
+ */
96
+ public function clear_disabled_list() {
97
+ self::delete_option( 'bypass_list' );
98
+
99
+ $msg = __( 'Crawler disabled list is cleared! All crawlers are set to active! ', 'litespeed-cache' );
100
+ Admin_Display::note( $msg );
101
+
102
+ Debug2::debug( '🐞 All crawlers are set to active...... ' );
103
+ }
104
+
105
  /**
106
  * Overwride get_summary to init elements
107
  *
210
 
211
  $this->list_crawlers();
212
 
213
+ // Skip the crawlers that in bypassed list
214
+ while ( ! $this->is_active( $this->_summary[ 'curr_crawler' ] ) && $this->_summary[ 'curr_crawler' ] < count( $this->_crawlers ) ) {
215
+ Debug2::debug( '🐞 Skipped the Crawler #' . $this->_summary[ 'curr_crawler' ] . ' ......' );
216
+ $this->_summary[ 'curr_crawler' ]++;
217
+ }
218
+ if ( $this->_summary[ 'curr_crawler' ] >= count( $this->_crawlers ) ) {
219
+ $this->_end_reason = 'end';
220
+ $this->_terminate_running();
221
+ return;
222
+ }
223
+
224
  // In case crawlers are all done but not reload, reload it
225
  if ( empty( $this->_summary[ 'curr_crawler' ] ) || empty( $this->_crawlers[ $this->_summary[ 'curr_crawler' ] ] ) ) {
226
  $this->_summary[ 'curr_crawler' ] = 0;
src/css.cls.php CHANGED
@@ -83,10 +83,15 @@ class CSS extends Base {
83
  return null;
84
  }
85
 
 
 
 
 
 
86
  // Append default critical css
87
  $rules .= $this->conf( self::O_OPTM_CCSS_CON );
88
 
89
- return '<style id="litespeed-ccss">' . $rules . '</style>';
90
  }
91
 
92
  /**
@@ -194,7 +199,14 @@ class CSS extends Base {
194
  *
195
  * @since 4.0
196
  */
197
- public function load_ucss( $request_url ) {
 
 
 
 
 
 
 
198
  $filepath_prefix = $this->_build_filepath_prefix( 'ucss' );
199
  $url_tag = is_404() ? '404' : $request_url;
200
 
@@ -205,10 +217,21 @@ class CSS extends Base {
205
 
206
  if ( file_exists( $static_file ) ) {
207
  Debug2::debug2( '[UCSS] existing ucss ' . $static_file );
 
 
 
 
 
 
 
208
  return $filepath_prefix . $filename . '.css';
209
  }
210
  }
211
 
 
 
 
 
212
  $uid = get_current_user_id();
213
 
214
  $ua = ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
83
  return null;
84
  }
85
 
86
+ $error_tag = '';
87
+ if ( substr( $rules, 0, 2 ) == '/*' && substr( $rules, -2 ) == '*/' ) {
88
+ $error_tag = ' data-error="failed to generate"';
89
+ }
90
+
91
  // Append default critical css
92
  $rules .= $this->conf( self::O_OPTM_CCSS_CON );
93
 
94
+ return '<style id="litespeed-ccss"' . $error_tag . '>' . $rules . '</style>';
95
  }
96
 
97
  /**
199
  *
200
  * @since 4.0
201
  */
202
+ public function load_ucss( $request_url, $dry_run = false ) {
203
+ // Check UCSS URI excludes
204
+ $ucss_exc = apply_filters( 'litespeed_ucss_exc', $this->conf( self::O_OPTM_UCSS_EXC ) );
205
+ if ( $ucss_exc && $hit = Utility::str_hit_array( $request_url, $ucss_exc ) ) {
206
+ Debug2::debug( '[CSS] UCSS bypassed due to UCSS URI Exclude setting: ' . $hit );
207
+ return false;
208
+ }
209
+
210
  $filepath_prefix = $this->_build_filepath_prefix( 'ucss' );
211
  $url_tag = is_404() ? '404' : $request_url;
212
 
217
 
218
  if ( file_exists( $static_file ) ) {
219
  Debug2::debug2( '[UCSS] existing ucss ' . $static_file );
220
+ // Check if is error comment inside only
221
+ $tmp = File::read( $static_file );
222
+ if ( substr( $tmp, 0, 2 ) == '/*' && substr( $tmp, -2 ) == '*/' ) {
223
+ Debug2::debug2( '[UCSS] existing ucss is error only: ' . $tmp );
224
+ return false;
225
+ }
226
+
227
  return $filepath_prefix . $filename . '.css';
228
  }
229
  }
230
 
231
+ if ( $dry_run ) {
232
+ return false;
233
+ }
234
+
235
  $uid = get_current_user_id();
236
 
237
  $ua = ! empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
src/data.cls.php CHANGED
@@ -210,7 +210,7 @@ class Data extends Root {
210
  return;
211
  }
212
 
213
- Admin_Display::info( sprintf( __( 'The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.' ), '<code>' . Utility::readable_time( $is_upgrading ) . '</code>' ) . ' [LiteSpeed]', true );
214
  }
215
 
216
  /**
@@ -459,7 +459,8 @@ class Data extends Root {
459
  $url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A );
460
  if ( ! $url_row ) {
461
  $q = "INSERT INTO `$tb_url` SET url=%s";
462
- $url_id = $wpdb->query( $wpdb->prepare( $q, $request_url ) );
 
463
  }
464
  else {
465
  $url_id = $url_row[ 'id' ];
210
  return;
211
  }
212
 
213
+ Admin_Display::info( sprintf( __( 'The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.', 'litespeed-cache' ), '<code>' . Utility::readable_time( $is_upgrading ) . '</code>' ) . ' [LiteSpeed]', true );
214
  }
215
 
216
  /**
459
  $url_row = $wpdb->get_row( $wpdb->prepare( $q, $request_url ), ARRAY_A );
460
  if ( ! $url_row ) {
461
  $q = "INSERT INTO `$tb_url` SET url=%s";
462
+ $wpdb->query( $wpdb->prepare( $q, $request_url ) );
463
+ $url_id = $wpdb->insert_id;
464
  }
465
  else {
466
  $url_id = $url_row[ 'id' ];
src/doc.cls.php CHANGED
@@ -14,6 +14,18 @@ defined( 'WPINC' ) || exit;
14
  class Doc {
15
  // protected static $_instance;
16
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  /**
18
  * Privacy policy
19
  *
14
  class Doc {
15
  // protected static $_instance;
16
 
17
+ /**
18
+ * Changes affect crawler list warning
19
+ *
20
+ * @since 4.3
21
+ * @access public
22
+ */
23
+ public static function crawler_affected() {
24
+ echo '<font class="litespeed-primary">';
25
+ echo '⚠️ ' . __( 'This setting will regenerate crawler list and clear the disabled list!' , 'litespeed-cache' );
26
+ echo '</font>';
27
+ }
28
+
29
  /**
30
  * Privacy policy
31
  *
src/gui.cls.php CHANGED
@@ -722,8 +722,8 @@ class GUI extends Base {
722
  esc_url( $url ),
723
  esc_attr( $name ),
724
  esc_attr( $title ),
725
- esc_attr( sprintf( __( 'Install %s' ), $title ) ),
726
- __( 'Install Now' )
727
  );
728
 
729
  return $action;
@@ -742,15 +742,15 @@ class GUI extends Base {
742
  $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $name . '&section=changelog&TB_iframe=true&width=600&height=800' );
743
  $file = $name . '/' . $name . '.php';
744
 
745
- $msg = sprintf( __( '<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.' ),
746
  esc_url( $details_url ),
747
  sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"',
748
- esc_attr( sprintf( __( 'View %1$s version %2$s details' ), $title, $v ) )
749
  ),
750
  $v,
751
  wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ),
752
  sprintf( 'class="update-link" aria-label="%s"',
753
- esc_attr( sprintf( __( 'Update %s now' ), $title ) )
754
  )
755
  );
756
 
722
  esc_url( $url ),
723
  esc_attr( $name ),
724
  esc_attr( $title ),
725
+ esc_attr( sprintf( __( 'Install %s', 'litespeed-cache' ), $title ) ),
726
+ __( 'Install Now', 'litespeed-cache' )
727
  );
728
 
729
  return $action;
742
  $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $name . '&section=changelog&TB_iframe=true&width=600&height=800' );
743
  $file = $name . '/' . $name . '.php';
744
 
745
+ $msg = sprintf( __( '<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.', 'litespeed-cache' ),
746
  esc_url( $details_url ),
747
  sprintf( 'class="thickbox open-plugin-details-modal" aria-label="%s"',
748
+ esc_attr( sprintf( __( 'View %1$s version %2$s details', 'litespeed-cache' ), $title, $v ) )
749
  ),
750
  $v,
751
  wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file, 'upgrade-plugin_' . $file ),
752
  sprintf( 'class="update-link" aria-label="%s"',
753
+ esc_attr( sprintf( __( 'Update %s now', 'litespeed-cache' ), $title ) )
754
  )
755
  );
756
 
src/img-optm.cls.php CHANGED
@@ -933,7 +933,9 @@ class Img_Optm extends Base {
933
  * Use wp orignal get func to avoid allow_url_open off issue
934
  * @since 1.6.5
935
  */
936
- $response = wp_remote_get( $server_info[ 'server' ] . '/' . $server_info[ 'ori' ], array( 'timeout' => 60 ) );
 
 
937
  if ( is_wp_error( $response ) ) {
938
  $error_message = $response->get_error_message();
939
  Debug2::debug( '[Img_Optm] ❌ failed to pull image: ' . $error_message );
933
  * Use wp orignal get func to avoid allow_url_open off issue
934
  * @since 1.6.5
935
  */
936
+ $image_url = $server_info[ 'server' ] . '/' . $server_info[ 'ori' ];
937
+ Debug2::debug( '[Img_Optm] Pulling image: ' . $image_url );
938
+ $response = wp_remote_get( $image_url, array( 'timeout' => 60 ) );
939
  if ( is_wp_error( $response ) ) {
940
  $error_message = $response->get_error_message();
941
  Debug2::debug( '[Img_Optm] ❌ failed to pull image: ' . $error_message );
src/lang.cls.php CHANGED
@@ -108,7 +108,9 @@ class Lang extends Base {
108
  self::O_OPTM_CSS_COMB => __( 'CSS Combine', 'litespeed-cache' ),
109
  self::O_OPTM_CSS_COMB_EXT_INL => __( 'CSS Combine External and Inline', 'litespeed-cache' ),
110
  self::O_OPTM_UCSS => __( 'Generate UCSS', 'litespeed-cache' ),
 
111
  self::O_OPTM_UCSS_WHITELIST => __( 'UCSS Whitelist', 'litespeed-cache' ),
 
112
  self::O_OPTM_CSS_HTTP2 => __( 'CSS HTTP/2 Push', 'litespeed-cache' ),
113
  self::O_OPTM_JS_MIN => __( 'JS Minify', 'litespeed-cache' ),
114
  self::O_OPTM_JS_COMB => __( 'JS Combine', 'litespeed-cache' ),
108
  self::O_OPTM_CSS_COMB => __( 'CSS Combine', 'litespeed-cache' ),
109
  self::O_OPTM_CSS_COMB_EXT_INL => __( 'CSS Combine External and Inline', 'litespeed-cache' ),
110
  self::O_OPTM_UCSS => __( 'Generate UCSS', 'litespeed-cache' ),
111
+ self::O_OPTM_UCSS_INLINE => __( 'UCSS Inline', 'litespeed-cache' ),
112
  self::O_OPTM_UCSS_WHITELIST => __( 'UCSS Whitelist', 'litespeed-cache' ),
113
+ self::O_OPTM_UCSS_EXC => __( 'UCSS URI Excludes', 'litespeed-cache' ),
114
  self::O_OPTM_CSS_HTTP2 => __( 'CSS HTTP/2 Push', 'litespeed-cache' ),
115
  self::O_OPTM_JS_MIN => __( 'JS Minify', 'litespeed-cache' ),
116
  self::O_OPTM_JS_COMB => __( 'JS Combine', 'litespeed-cache' ),
src/optimize.cls.php CHANGED
@@ -35,6 +35,7 @@ class Optimize extends Base {
35
  private $dns_prefetch;
36
  private $_ggfonts_urls = array();
37
  private $_ccss;
 
38
 
39
  private $__optimizer;
40
 
@@ -43,6 +44,7 @@ class Optimize extends Base {
43
 
44
  private static $_var_i = 0;
45
  private $_var_preserve_js = array();
 
46
 
47
  private $i2 = 0;
48
 
@@ -65,7 +67,11 @@ class Optimize extends Base {
65
  $this->cfg_css_async = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_ASYNC );
66
  if ( $this->cfg_css_async ) {
67
  if ( ! $this->conf( self::O_API_KEY ) ) {
68
- Debug2::debug( '[Optm] ❌ CCSS set to OFF due to lack of domain key' );
 
 
 
 
69
  $this->cfg_css_async = false;
70
  }
71
  }
@@ -236,6 +242,9 @@ class Optimize extends Base {
236
  * @access private
237
  */
238
  private function _optimize() {
 
 
 
239
  $this->cfg_http2_css = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_HTTP2 );
240
  $this->cfg_http2_js = ! defined( 'LITESPEED_GUEST_OPTM' ) && $this->conf( self::O_OPTM_JS_HTTP2 );
241
  $this->cfg_css_min = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_MIN );
@@ -257,6 +266,10 @@ class Optimize extends Base {
257
  Debug2::debug( '[Optm] ❌ CCSS set to OFF due to CCSS not generated yet' );
258
  $this->cfg_css_async = false;
259
  }
 
 
 
 
260
  }
261
 
262
  do_action( 'litespeed_optm' );
@@ -274,21 +287,35 @@ class Optimize extends Base {
274
  if ( $src_list ) {
275
  // IF combine
276
  if ( $this->cfg_css_comb ) {
277
- $url = $this->_build_hash_url( $src_list );
278
- if ( $url ) {
279
- // Handle css async load
280
- if ( $this->cfg_css_async ) {
281
- $this->html_head .= '<link rel="preload" data-asynced="1" data-optimized="2" as="style" onload="this.onload=null;this.rel=\'stylesheet\'" href="' . $url . '" />'; // todo: How to use " in attr wrapper "
282
- }
283
- else {
284
- $this->html_head .= '<link data-optimized="2" rel="stylesheet" href="' . $url . '" />';// use 2 as combined
285
  }
 
286
 
287
- // Move all css to top
288
- $this->content = str_replace( $html_list, '', $this->content );
289
 
290
- // Add to HTTP2
291
- $this->append_http2( $url );
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  }
293
  }
294
  // Only minify
@@ -376,8 +403,9 @@ class Optimize extends Base {
376
  }
377
 
378
  // Append JS inline var for preserved ESI
 
379
  if ( $this->_var_preserve_js ) {
380
- $this->html_head .= $this->_build_js_inline( 'var ' . implode( ',', $this->_var_preserve_js ) . ';' );
381
  Debug2::debug2( '[Optm] Inline JS defer vars', $this->_var_preserve_js );
382
  }
383
 
@@ -416,6 +444,11 @@ class Optimize extends Base {
416
  $this->html_head = $this->cls( 'CSS' )->prepare_html_lazy() . $this->html_head;
417
  }
418
 
 
 
 
 
 
419
  // Check if there is any critical css rules setting
420
  if ( $this->cfg_css_async && $this->_ccss ) {
421
  $this->html_head = $this->_ccss . $this->html_head;
@@ -461,7 +494,7 @@ class Optimize extends Base {
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 ) {
@@ -724,8 +757,10 @@ class Optimize extends Base {
724
  $static_file = LITESPEED_STATIC_DIR . '/' . $filename;
725
  File::save( $static_file, $content, true );
726
 
727
- $qs_hash = substr( md5( $src ), -5 );
728
- return LITESPEED_STATIC_URL . "/$filename?ver=$qs_hash";
 
 
729
  }
730
 
731
  /**
@@ -736,8 +771,6 @@ class Optimize extends Base {
736
  */
737
  private function _build_hash_url( $src_list, $file_type = 'css' ) {
738
  // $url_sensitive = $this->conf( self::O_OPTM_CSS_UNIQUE ) && $file_type == 'css'; // If need to keep unique CSS per URI
739
- global $wp;
740
- $request_url = home_url( $wp->request );
741
 
742
  // Replace preserved ESI (before generating hash)
743
  if ( $file_type == 'js' ) {
@@ -750,15 +783,15 @@ class Optimize extends Base {
750
  }
751
 
752
  $minify = $file_type === 'css' ? $this->cfg_css_min : $this->cfg_js_min;
753
- $file_path = $this->__optimizer->serve( $request_url, $file_type, $minify, $src_list );
754
 
755
  if ( ! $file_path ) {
756
  return false; // Failed to generate
757
  }
758
 
759
- // $qs_hash = substr( md5( self::get_option( self::ITEM_TIMESTAMP_PURGE_CSS ) ), -5 );
760
  // As filename is alreay realted to filecon md5, no need QS anymore
761
- return LITESPEED_STATIC_URL . $file_path;
762
  }
763
 
764
  /**
@@ -907,8 +940,7 @@ class Optimize extends Base {
907
  if ( strpos( $attrs, ' type=' ) !== false ) {
908
  $attrs = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $attrs );
909
  }
910
- $this->i2++;
911
- return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . $this->i2 . '">' . $con . '</script>';
912
  // return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . $this->i2 . '" src="data:text/javascript;base64,' . base64_encode( $con ) . '"></script>';
913
  // return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
914
  }
@@ -932,6 +964,7 @@ class Optimize extends Base {
932
  $con = str_replace( $esi_placeholder, $js_var, $con );
933
  $this->_var_preserve_js[] = $js_var . '=' . $esi_placeholder;
934
  }
 
935
  return $con;
936
  }
937
 
@@ -1144,8 +1177,7 @@ class Optimize extends Base {
1144
  if ( strpos( $ori, ' type=' ) !== false ) {
1145
  $ori = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $ori );
1146
  }
1147
- $this->i2++;
1148
- return str_replace( ' src=', ' type="litespeed/javascript" data-i="' . $this->i2 . '" data-src=', $ori );
1149
  }
1150
 
1151
  return str_replace( '></script>', ' defer data-deferred="1"></script>', $ori );
35
  private $dns_prefetch;
36
  private $_ggfonts_urls = array();
37
  private $_ccss;
38
+ private $_ucss = false;
39
 
40
  private $__optimizer;
41
 
44
 
45
  private static $_var_i = 0;
46
  private $_var_preserve_js = array();
47
+ private $_request_url;
48
 
49
  private $i2 = 0;
50
 
67
  $this->cfg_css_async = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_ASYNC );
68
  if ( $this->cfg_css_async ) {
69
  if ( ! $this->conf( self::O_API_KEY ) ) {
70
+ Debug2::debug( '[Optm] ❌ CCSS set to OFF due to missing domain key' );
71
+ $this->cfg_css_async = false;
72
+ }
73
+ if ( ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_UCSS ) ) && $this->conf( self::O_OPTM_UCSS_INLINE ) ) {
74
+ Debug2::debug( '[Optm] ❌ CCSS set to OFF due to UCSS Inline' );
75
  $this->cfg_css_async = false;
76
  }
77
  }
242
  * @access private
243
  */
244
  private function _optimize() {
245
+ global $wp;
246
+ $this->_request_url = home_url( $wp->request );
247
+
248
  $this->cfg_http2_css = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_HTTP2 );
249
  $this->cfg_http2_js = ! defined( 'LITESPEED_GUEST_OPTM' ) && $this->conf( self::O_OPTM_JS_HTTP2 );
250
  $this->cfg_css_min = defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_CSS_MIN );
266
  Debug2::debug( '[Optm] ❌ CCSS set to OFF due to CCSS not generated yet' );
267
  $this->cfg_css_async = false;
268
  }
269
+ else if ( strpos( $this->_ccss, '<style id="litespeed-ccss" data-error' ) === 0 ) {
270
+ Debug2::debug( '[Optm] ❌ CCSS set to OFF due to CCSS failed to generate' );
271
+ $this->cfg_css_async = false;
272
+ }
273
  }
274
 
275
  do_action( 'litespeed_optm' );
287
  if ( $src_list ) {
288
  // IF combine
289
  if ( $this->cfg_css_comb ) {
290
+ // Check if has inline UCSS enabled or not
291
+ if ( ( defined( 'LITESPEED_GUEST_OPTM' ) || $this->conf( self::O_OPTM_UCSS ) ) && $this->conf( self::O_OPTM_UCSS_INLINE ) ) {
292
+ $final_file_path = $this->cls( 'CSS' )->load_ucss( $this->_request_url, true );
293
+ if ( $final_file_path ) {
294
+ $this->_ucss = File::read( LITESPEED_STATIC_DIR . $final_file_path );
295
+
296
+ // Drop all css
297
+ $this->content = str_replace( $html_list, '', $this->content );
298
  }
299
+ }
300
 
301
+ if ( ! $this->_ucss ) {
302
+ $url = $this->_build_hash_url( $src_list );
303
 
304
+ if ( $url ) {
305
+ // Handle css async load
306
+ if ( $this->cfg_css_async ) {
307
+ $this->html_head .= '<link rel="preload" data-asynced="1" data-optimized="2" as="style" onload="this.onload=null;this.rel=\'stylesheet\'" href="' . $url . '" />'; // todo: How to use " in attr wrapper "
308
+ }
309
+ else {
310
+ $this->html_head .= '<link data-optimized="2" rel="stylesheet" href="' . $url . '" />';// use 2 as combined
311
+ }
312
+
313
+ // Move all css to top
314
+ $this->content = str_replace( $html_list, '', $this->content );
315
+
316
+ // Add to HTTP2
317
+ $this->append_http2( $url );
318
+ }
319
  }
320
  }
321
  // Only minify
403
  }
404
 
405
  // Append JS inline var for preserved ESI
406
+ // Shouldn't give any optm (defer/delay) @since 4.4
407
  if ( $this->_var_preserve_js ) {
408
+ $this->html_head .= '<script>var ' . implode( ',', $this->_var_preserve_js ) . ';</script>';
409
  Debug2::debug2( '[Optm] Inline JS defer vars', $this->_var_preserve_js );
410
  }
411
 
444
  $this->html_head = $this->cls( 'CSS' )->prepare_html_lazy() . $this->html_head;
445
  }
446
 
447
+ // Maybe prepend inline UCSS
448
+ if ( $this->_ucss ) {
449
+ $this->html_head = '<style id="litespeed-ucss">' . $this->_ucss . '</style>' . $this->html_head;
450
+ }
451
+
452
  // Check if there is any critical css rules setting
453
  if ( $this->cfg_css_async && $this->_ccss ) {
454
  $this->html_head = $this->_ccss . $this->html_head;
494
  */
495
  private function _build_js_tag( $src ) {
496
  if ( $this->cfg_js_defer === 2 ) {
497
+ return '<script data-optimized="1" type="litespeed/javascript" data-i="' . ++$this->i2 . '" data-src="' . $src . '"></script>';
498
  }
499
 
500
  if ( $this->cfg_js_defer ) {
757
  $static_file = LITESPEED_STATIC_DIR . '/' . $filename;
758
  File::save( $static_file, $content, true );
759
 
760
+ // $qs_hash = substr( md5( $src ), -5 );
761
+ // return LITESPEED_STATIC_URL . "/$filename?ver=$qs_hash";
762
+ // $qs_hash is from src, same as $filename, redundant
763
+ return LITESPEED_STATIC_URL . "/$filename";
764
  }
765
 
766
  /**
771
  */
772
  private function _build_hash_url( $src_list, $file_type = 'css' ) {
773
  // $url_sensitive = $this->conf( self::O_OPTM_CSS_UNIQUE ) && $file_type == 'css'; // If need to keep unique CSS per URI
 
 
774
 
775
  // Replace preserved ESI (before generating hash)
776
  if ( $file_type == 'js' ) {
783
  }
784
 
785
  $minify = $file_type === 'css' ? $this->cfg_css_min : $this->cfg_js_min;
786
+ $file_path = $this->__optimizer->serve( $this->_request_url, $file_type, $minify, $src_list );
787
 
788
  if ( ! $file_path ) {
789
  return false; // Failed to generate
790
  }
791
 
792
+ $qs_hash = substr( md5( self::get_option( self::ITEM_TIMESTAMP_PURGE_CSS ) ), -5 );
793
  // As filename is alreay realted to filecon md5, no need QS anymore
794
+ return LITESPEED_STATIC_URL . $file_path . '?ver=' . $qs_hash;
795
  }
796
 
797
  /**
940
  if ( strpos( $attrs, ' type=' ) !== false ) {
941
  $attrs = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $attrs );
942
  }
943
+ return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . ++$this->i2 . '">' . $con . '</script>';
 
944
  // return '<script' . $attrs . ' type="litespeed/javascript" data-i="' . $this->i2 . '" src="data:text/javascript;base64,' . base64_encode( $con ) . '"></script>';
945
  // return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
946
  }
964
  $con = str_replace( $esi_placeholder, $js_var, $con );
965
  $this->_var_preserve_js[] = $js_var . '=' . $esi_placeholder;
966
  }
967
+
968
  return $con;
969
  }
970
 
1177
  if ( strpos( $ori, ' type=' ) !== false ) {
1178
  $ori = preg_replace( '# type=([\'"])([^\1]+)\1#isU', '', $ori );
1179
  }
1180
+ return str_replace( ' src=', ' type="litespeed/javascript" data-i="' . ++$this->i2 . '" data-src=', $ori );
 
1181
  }
1182
 
1183
  return str_replace( '></script>', ' defer data-deferred="1"></script>', $ori );
src/rest.cls.php CHANGED
@@ -31,6 +31,13 @@ class REST extends Root {
31
  * @access public
32
  */
33
  public function rest_api_init() {
 
 
 
 
 
 
 
34
  register_rest_route( 'litespeed/v1', '/tool/check_ip', array(
35
  'methods' => 'GET',
36
  'callback' => array( $this, 'check_ip' ),
@@ -112,6 +119,17 @@ class REST extends Root {
112
 
113
  }
114
 
 
 
 
 
 
 
 
 
 
 
 
115
  /**
116
  * Check if the request is from cloud nodes
117
  *
31
  * @access public
32
  */
33
  public function rest_api_init() {
34
+ // Activate or deactivate a specific crawler callback
35
+ register_rest_route( 'litespeed/v1', '/toggle_crawler_state', array(
36
+ 'methods' => 'POST',
37
+ 'callback' => array( $this, 'toggle_crawler_state' ),
38
+ 'permission_callback' => '__return_true',
39
+ ) );
40
+
41
  register_rest_route( 'litespeed/v1', '/tool/check_ip', array(
42
  'methods' => 'GET',
43
  'callback' => array( $this, 'check_ip' ),
119
 
120
  }
121
 
122
+ /**
123
+ * Call to freeze or melt the crawler clicked
124
+ *
125
+ * @since 4.3
126
+ */
127
+ public function toggle_crawler_state() {
128
+ if( isset( $_POST[ 'crawler_id' ] ) ) {
129
+ return $this->cls( 'Crawler' )->toggle_activeness( $_POST[ 'crawler_id' ] ) ? 1 : 0;
130
+ }
131
+ }
132
+
133
  /**
134
  * Check if the request is from cloud nodes
135
  *
src/root.cls.php CHANGED
@@ -18,6 +18,41 @@ abstract class Root {
18
  private static $_primary_options = array();
19
  private static $_network_options = array();
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * Check if there is cache folder for that type
23
  *
18
  private static $_primary_options = array();
19
  private static $_network_options = array();
20
 
21
+ /**
22
+ * Log a debug message.
23
+ *
24
+ * @since 4.4
25
+ * @access public
26
+ */
27
+ public static function debug( $msg, $backtrace_limit = false ) {
28
+ if ( ! defined( 'LSCWP_LOG' ) ) {
29
+ return;
30
+ }
31
+
32
+ if ( defined( 'static::LOG_TAG' )) {
33
+ $msg = static::LOG_TAG . ' ' . $msg;
34
+ }
35
+
36
+ Debug2::debug( $msg, $backtrace_limit );
37
+ }
38
+
39
+ /**
40
+ * Log an advanced debug message.
41
+ *
42
+ * @since 4.4
43
+ * @access public
44
+ */
45
+ public static function debug2( $msg, $backtrace_limit = false ) {
46
+ if ( ! defined( 'LSCWP_LOG_MORE' ) ) {
47
+ return;
48
+ }
49
+
50
+ if ( defined( 'static::LOG_TAG' )) {
51
+ $msg = static::LOG_TAG . ' ' . $msg;
52
+ }
53
+ Debug2::debug2( $msg, $backtrace_limit );
54
+ }
55
+
56
  /**
57
  * Check if there is cache folder for that type
58
  *
src/utility.cls.php CHANGED
@@ -873,8 +873,8 @@ class Utility extends Root {
873
  $page_links = paginate_links( array(
874
  'base' => add_query_arg( 'pagenum', '%#%' ),
875
  'format' => '',
876
- 'prev_text' => __( '&laquo;', 'text-domain' ),
877
- 'next_text' => __( '&raquo;', 'text-domain' ),
878
  'total' => $num_of_pages,
879
  'current' => $pagenum,
880
  ) );
873
  $page_links = paginate_links( array(
874
  'base' => add_query_arg( 'pagenum', '%#%' ),
875
  'format' => '',
876
+ 'prev_text' => '&laquo;',
877
+ 'next_text' => '&raquo;',
878
  'total' => $num_of_pages,
879
  'current' => $pagenum,
880
  ) );
thirdparty/woocommerce.cls.php CHANGED
@@ -36,7 +36,7 @@ class WooCommerce extends Base {
36
  const ESI_PARAM_LOCATED = 'wc_located' ;
37
 
38
  private $cache_cart ;
39
- private $esi_eanbled ;
40
 
41
  /**
42
  * Detects if WooCommerce is installed.
@@ -65,7 +65,7 @@ class WooCommerce extends Base {
65
  $this->_option_append() ;
66
 
67
  $this->cache_cart = apply_filters( 'litespeed_conf', self::O_WOO_CACHE_CART ) ;
68
- $this->esi_eanbled = apply_filters( 'litespeed_esi_status', false );
69
 
70
  add_action( 'litespeed_control_finalize', array( $this, 'set_control' ) );
71
  add_action( 'litespeed_tag_finalize', array( $this, 'set_tag' ) );
@@ -76,7 +76,7 @@ class WooCommerce extends Base {
76
 
77
  add_action( 'comment_post', array( $this, 'add_review' ), 10, 3 ) ;
78
 
79
- if ( $this->esi_eanbled ) {
80
  if ( function_exists( 'is_shop' ) && ! is_shop() ) {
81
  add_action( 'litespeed_tpl_normal', array( $this, 'set_block_template' ) );
82
  // No need for add-to-cart button
@@ -121,7 +121,7 @@ class WooCommerce extends Base {
121
  'woocommerce_checkout_order_processed',
122
  ) ;
123
  foreach ( $hooks_to_purge as $v ) {
124
- if ( $this->esi_eanbled ) {
125
  add_action( $v, array( $this, 'purge_esi' ) ) ;
126
  }
127
  else {
@@ -581,7 +581,7 @@ class WooCommerce extends Base {
581
  elseif ( is_null($woocom->cart) ) {
582
  $err = 'null cart' ;
583
  }
584
- elseif ( ! $this->esi_eanbled && $woocom->cart->get_cart_contents_count() !== 0 ) {
585
  if ( $this->cache_cart ) {
586
  do_action( 'litespeed_control_set_private', 'cache cart' );
587
  /**
36
  const ESI_PARAM_LOCATED = 'wc_located' ;
37
 
38
  private $cache_cart ;
39
+ private $esi_enabled ;
40
 
41
  /**
42
  * Detects if WooCommerce is installed.
65
  $this->_option_append() ;
66
 
67
  $this->cache_cart = apply_filters( 'litespeed_conf', self::O_WOO_CACHE_CART ) ;
68
+ $this->esi_enabled = apply_filters( 'litespeed_esi_status', false );
69
 
70
  add_action( 'litespeed_control_finalize', array( $this, 'set_control' ) );
71
  add_action( 'litespeed_tag_finalize', array( $this, 'set_tag' ) );
76
 
77
  add_action( 'comment_post', array( $this, 'add_review' ), 10, 3 ) ;
78
 
79
+ if ( $this->esi_enabled ) {
80
  if ( function_exists( 'is_shop' ) && ! is_shop() ) {
81
  add_action( 'litespeed_tpl_normal', array( $this, 'set_block_template' ) );
82
  // No need for add-to-cart button
121
  'woocommerce_checkout_order_processed',
122
  ) ;
123
  foreach ( $hooks_to_purge as $v ) {
124
+ if ( $this->esi_enabled ) {
125
  add_action( $v, array( $this, 'purge_esi' ) ) ;
126
  }
127
  else {
581
  elseif ( is_null($woocom->cart) ) {
582
  $err = 'null cart' ;
583
  }
584
+ elseif ( ! $this->esi_enabled && $woocom->cart->get_cart_contents_count() !== 0 ) {
585
  if ( $this->cache_cart ) {
586
  do_action( 'litespeed_control_set_private', 'cache cart' );
587
  /**
tpl/cache/settings_inc.cache_mobile.tpl.php CHANGED
@@ -18,6 +18,7 @@ defined( 'WPINC' ) || exit;
18
  <?php echo __( 'Serve a separate cache copy for mobile visitors.', 'litespeed-cache' ); ?>
19
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#cache-mobile', 'Learn more about when this is needed' ); ?>
20
  <br /><?php Doc::notice_htaccess(); ?>
 
21
  </div>
22
  </td>
23
  </tr>
18
  <?php echo __( 'Serve a separate cache copy for mobile visitors.', 'litespeed-cache' ); ?>
19
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#cache-mobile', 'Learn more about when this is needed' ); ?>
20
  <br /><?php Doc::notice_htaccess(); ?>
21
+ <br /><?php Doc::crawler_affected(); ?>
22
  </div>
23
  </td>
24
  </tr>
tpl/cdn/settings.tpl.php CHANGED
@@ -75,7 +75,7 @@ $this->form_action();
75
  </script>
76
 
77
  <div class="litespeed-warning">
78
- <?php echo __('NOTE', 'litespeed-cache'); ?>:
79
  <?php echo __( 'To randomize CDN hostname, define multiple hostnames for the same resources.', 'litespeed-cache' ); ?>
80
  </div>
81
 
@@ -99,7 +99,7 @@ $this->form_action();
99
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types', __( 'Default value', 'litespeed-cache' ) ); ?>
100
 
101
  <br />
102
- <?php echo sprintf( __( 'If you turn any of the above settings OFF, please remove the related file types from the %s box.' ), '<b>' . __( 'Include File Types', 'litespeed-cache' ) . '</b>' ); ?>
103
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types' ); ?>
104
  </div>
105
 
75
  </script>
76
 
77
  <div class="litespeed-warning">
78
+ <?php echo __( 'NOTE', 'litespeed-cache' ); ?>:
79
  <?php echo __( 'To randomize CDN hostname, define multiple hostnames for the same resources.', 'litespeed-cache' ); ?>
80
  </div>
81
 
99
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types', __( 'Default value', 'litespeed-cache' ) ); ?>
100
 
101
  <br />
102
+ <?php echo sprintf( __( 'If you turn any of the above settings OFF, please remove the related file types from the %s box.', 'litespeed-cache' ), '<b>' . __( 'Include File Types', 'litespeed-cache' ) . '</b>' ); ?>
103
  <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types' ); ?>
104
  </div>
105
 
tpl/crawler/summary.tpl.php CHANGED
@@ -122,6 +122,7 @@ if($seconds > 0):
122
  <th scope="col"><?php echo __('Cron Name', 'litespeed-cache'); ?></th>
123
  <th scope="col"><?php echo __('Run Frequency', 'litespeed-cache'); ?></th>
124
  <th scope="col"><?php echo __( 'Status', 'litespeed-cache' ); ?></th>
 
125
  <th scope="col"><?php echo __( 'Running', 'litespeed-cache' ); ?></th>
126
  </tr></thead>
127
  <tbody>
@@ -158,6 +159,9 @@ if($seconds > 0):
158
  <?php echo '<i class="litespeed-badge litespeed-bg-primary" data-balloon-pos="up" aria-label="' . __( 'Miss', 'litespeed-cache' ) . '">' . ( $miss ?: '-' ) . '</i> '; ?>
159
  <?php echo '<i class="litespeed-badge litespeed-bg-danger" data-balloon-pos="up" aria-label="' . __( 'Blacklisted', 'litespeed-cache' ) . '">' . ( $blacklisted ?: '-' ) . '</i> '; ?>
160
  </td>
 
 
 
161
  <td>
162
  <?php
163
  if ( $i == $summary[ 'curr_crawler' ] ) {
122
  <th scope="col"><?php echo __('Cron Name', 'litespeed-cache'); ?></th>
123
  <th scope="col"><?php echo __('Run Frequency', 'litespeed-cache'); ?></th>
124
  <th scope="col"><?php echo __( 'Status', 'litespeed-cache' ); ?></th>
125
+ <th scope="col"><?php echo __( 'Activate', 'litespeed-cache' ); ?></th>
126
  <th scope="col"><?php echo __( 'Running', 'litespeed-cache' ); ?></th>
127
  </tr></thead>
128
  <tbody>
159
  <?php echo '<i class="litespeed-badge litespeed-bg-primary" data-balloon-pos="up" aria-label="' . __( 'Miss', 'litespeed-cache' ) . '">' . ( $miss ?: '-' ) . '</i> '; ?>
160
  <?php echo '<i class="litespeed-badge litespeed-bg-danger" data-balloon-pos="up" aria-label="' . __( 'Blacklisted', 'litespeed-cache' ) . '">' . ( $blacklisted ?: '-' ) . '</i> '; ?>
161
  </td>
162
+ <td>
163
+ <?php $this->build_toggle( 'litespeed-crawler-'.$i , $__crawler->is_active( $i ) ); ?>
164
+ </td>
165
  <td>
166
  <?php
167
  if ( $i == $summary[ 'curr_crawler' ] ) {
tpl/dash/dashboard.tpl.php CHANGED
@@ -288,7 +288,7 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
288
 
289
  <?php if ( ! empty( $cloud_summary[ 'last_request.health-score' ] ) ) : ?>
290
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
291
- <?php echo __( 'Last requested' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.health-score' ] ) ?>
292
  </div>
293
  <?php endif; ?>
294
  </div>
@@ -453,7 +453,7 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
453
 
454
  <?php if ( ! empty( $cloud_summary[ 'last_request.ccss' ] ) ) : ?>
455
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
456
- <?php echo __( 'Last requested' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.ccss' ] ) ?>
457
  </div>
458
  <?php endif; ?>
459
  </div>
@@ -486,7 +486,7 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
486
 
487
  <?php if ( ! empty( $cloud_summary[ 'last_request.ccss' ] ) ) : ?>
488
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
489
- <?php echo __( 'Last requested' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.ccss' ] ) ?>
490
  </div>
491
  <?php endif; ?>
492
  </div>
@@ -518,7 +518,7 @@ $placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
518
 
519
  <?php if ( ! empty( $cloud_summary[ 'last_request.lqip' ] ) ) : ?>
520
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
521
- <?php echo __( 'Last requested' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.lqip' ] ) ?>
522
  </div>
523
  <?php endif; ?>
524
  </div>
288
 
289
  <?php if ( ! empty( $cloud_summary[ 'last_request.health-score' ] ) ) : ?>
290
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
291
+ <?php echo __( 'Last requested', 'litespeed-cache' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.health-score' ] ) ?>
292
  </div>
293
  <?php endif; ?>
294
  </div>
453
 
454
  <?php if ( ! empty( $cloud_summary[ 'last_request.ccss' ] ) ) : ?>
455
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
456
+ <?php echo __( 'Last requested', 'litespeed-cache' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.ccss' ] ) ?>
457
  </div>
458
  <?php endif; ?>
459
  </div>
486
 
487
  <?php if ( ! empty( $cloud_summary[ 'last_request.ccss' ] ) ) : ?>
488
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
489
+ <?php echo __( 'Last requested', 'litespeed-cache' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.ccss' ] ) ?>
490
  </div>
491
  <?php endif; ?>
492
  </div>
518
 
519
  <?php if ( ! empty( $cloud_summary[ 'last_request.lqip' ] ) ) : ?>
520
  <div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
521
+ <?php echo __( 'Last requested', 'litespeed-cache' ) . ': ' . Utility::readable_time( $cloud_summary[ 'last_request.lqip' ] ) ?>
522
  </div>
523
  <?php endif; ?>
524
  </div>
tpl/general/settings_inc.guest.tpl.php CHANGED
@@ -14,6 +14,7 @@ defined( 'WPINC' ) || exit;
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 ) ) {
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
+ <br /><?php Doc::crawler_affected(); ?>
18
  <?php
19
  $typeList = array();
20
  if ( $this->conf( Base::O_GUEST ) && ! $this->conf( Base::O_OPTM_UCSS ) ) {
tpl/img_optm/settings.media_webp.tpl.php CHANGED
@@ -13,6 +13,7 @@ defined( 'WPINC' ) || exit;
13
  <div class="litespeed-desc">
14
  <?php echo sprintf( __( 'Significantly improve load time by replacing images with their optimized %s versions.', 'litespeed-cache' ), '.webp' ); ?>
15
  <br /><?php Doc::notice_htaccess(); ?>
 
16
  </div>
17
  </td>
18
  </tr>
13
  <div class="litespeed-desc">
14
  <?php echo sprintf( __( 'Significantly improve load time by replacing images with their optimized %s versions.', 'litespeed-cache' ), '.webp' ); ?>
15
  <br /><?php Doc::notice_htaccess(); ?>
16
+ <br /><?php Doc::crawler_affected(); ?>
17
  </div>
18
  </td>
19
  </tr>
tpl/img_optm/summary.tpl.php CHANGED
@@ -68,7 +68,7 @@ if ( ! empty( $img_count[ 'img.' . Img_Optm::STATUS_ERR_FETCH ] ) ) {
68
 
69
  <?php if ( $wet_limit ) : ?>
70
  <p class="litespeed-desc">
71
- <?php echo __( 'To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of images allowed in a single request is limited.' ); ?>
72
  <?php echo __( 'Current limit is', 'litespeed-cache' ) . ': <strong>' . $wet_limit . '</strong>'; ?>
73
  </p>
74
  <?php endif; ?>
68
 
69
  <?php if ( $wet_limit ) : ?>
70
  <p class="litespeed-desc">
71
+ <?php echo __( 'To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of images allowed in a single request is limited.', 'litespeed-cache' ); ?>
72
  <?php echo __( 'Current limit is', 'litespeed-cache' ) . ': <strong>' . $wet_limit . '</strong>'; ?>
73
  </p>
74
  <?php endif; ?>
tpl/inc/in_upgrading.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace LiteSpeed;
3
+ defined( 'WPINC' ) || exit;
4
+
5
+ $msg = __( 'LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.', 'litespeed-cache' );
6
+
7
+ echo self::build_notice( self::NOTICE_BLUE, $msg );
8
+
tpl/page_optm/settings_css.tpl.php CHANGED
@@ -46,7 +46,7 @@ $ucss_queue = $this->load_queue( 'ucss' );
46
  </td>
47
  </tr>
48
 
49
- <tr class="litespeed-hide2">
50
  <th class="litespeed-padding-left">
51
  <?php $id = Base::O_OPTM_UCSS; ?>
52
  <?php $this->title( $id ); ?>
@@ -65,6 +65,13 @@ $ucss_queue = $this->load_queue( 'ucss' );
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 unique CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?>
 
 
 
 
 
 
 
68
  </div>
69
 
70
  <div class="litespeed-desc litespeed-left20">
@@ -115,6 +122,22 @@ $ucss_queue = $this->load_queue( 'ucss' );
115
  </td>
116
  </tr>
117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  <tr>
119
  <th>
120
  <?php $id = Base::O_OPTM_CSS_COMB_EXT_INL; ?>
@@ -166,6 +189,12 @@ $ucss_queue = $this->load_queue( 'ucss' );
166
  <?php echo sprintf( __( 'Elements with attribute %s in HTML code will be excluded.', 'litespeed-cache' ), '<code>data-no-async="1"</code>' ); ?>
167
  </font>
168
 
 
 
 
 
 
 
169
  </div>
170
 
171
  <div class="litespeed-desc litespeed-left20">
46
  </td>
47
  </tr>
48
 
49
+ <tr>
50
  <th class="litespeed-padding-left">
51
  <?php $id = Base::O_OPTM_UCSS; ?>
52
  <?php $this->title( $id ); ?>
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 unique CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?>
68
+
69
+ <?php if ( $this->conf( Base::O_OPTM_UCSS ) && ! $this->conf( Base::O_OPTM_CSS_COMB ) ) : ?>
70
+ <br /><font class="litespeed-warning">
71
+ <?php echo sprintf( __( 'This option is bypassed because %1$s option is %2$s.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_OPTM_CSS_COMB ) . '</code>', '<code>' . __( 'OFF', 'litespeed-cache' ) . '</code>' ); ?>
72
+ </font>
73
+ <?php endif; ?>
74
+
75
  </div>
76
 
77
  <div class="litespeed-desc litespeed-left20">
122
  </td>
123
  </tr>
124
 
125
+ <tr>
126
+ <th class="litespeed-padding-left">
127
+ <?php $id = Base::O_OPTM_UCSS_INLINE; ?>
128
+ <?php $this->title( $id ); ?>
129
+ </th>
130
+ <td>
131
+ <?php $this->build_switch( $id ); ?>
132
+ <div class="litespeed-desc">
133
+ <?php echo sprintf( __( 'Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_GUEST ) . '</code>' ); ?>
134
+ <br /><font class="litespeed-info">
135
+ <?php echo sprintf( __( 'This option will automatically bypass %s option.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_OPTM_CSS_ASYNC ) . '</code>' ); ?>
136
+ </font>
137
+ </div>
138
+ </td>
139
+ </tr>
140
+
141
  <tr>
142
  <th>
143
  <?php $id = Base::O_OPTM_CSS_COMB_EXT_INL; ?>
189
  <?php echo sprintf( __( 'Elements with attribute %s in HTML code will be excluded.', 'litespeed-cache' ), '<code>data-no-async="1"</code>' ); ?>
190
  </font>
191
 
192
+ <?php if ( $this->conf( Base::O_OPTM_CSS_ASYNC ) && $this->conf( Base::O_OPTM_CSS_COMB ) && $this->conf( Base::O_OPTM_UCSS ) && $this->conf( Base::O_OPTM_UCSS_INLINE ) ) : ?>
193
+ <br /><font class="litespeed-warning">
194
+ <?php echo sprintf( __( 'This option is bypassed due to %s option.', 'litespeed-cache' ), '<code>' . Lang::title( Base::O_OPTM_UCSS_INLINE ) . '</code>' ); ?>
195
+ </font>
196
+ <?php endif; ?>
197
+
198
  </div>
199
 
200
  <div class="litespeed-desc litespeed-left20">
tpl/page_optm/settings_tuning.tpl.php CHANGED
@@ -86,6 +86,25 @@ ksort( $roles );
86
  </td>
87
  </tr>
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  <tr>
90
  <th>
91
  <?php $id = Base::O_OPTM_CCSS_SEP_POSTTYPE; ?>
86
  </td>
87
  </tr>
88
 
89
+ <tr>
90
+ <th>
91
+ <?php $id = Base::O_OPTM_UCSS_EXC; ?>
92
+ <?php $this->title( $id ); ?>
93
+ </th>
94
+ <td>
95
+ <?php $this->build_textarea( $id ); ?>
96
+ <div class="litespeed-desc">
97
+ <?php echo __( 'Listed URI will not generate UCSS.', 'litespeed-cache' ); ?>
98
+ <?php Doc::full_or_partial_url(); ?>
99
+ <?php Doc::one_per_line(); ?>
100
+ <br /><span class="litespeed-success">
101
+ <?php echo __( 'API', 'litespeed-cache' ); ?>:
102
+ <?php echo sprintf( __( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_ucss_exc</code>' ); ?>
103
+ </span>
104
+ </div>
105
+ </td>
106
+ </tr>
107
+
108
  <tr>
109
  <th>
110
  <?php $id = Base::O_OPTM_CCSS_SEP_POSTTYPE; ?>
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.3',
8
  '4.2',
9
  '4.1',
4
 
5
  // Existing public version list
6
  $v_list = array(
7
+ '4.4',
8
  '4.3',
9
  '4.2',
10
  '4.1',