Plugin Directory

Changeset 3281183


Ignore:
Timestamp:
04/24/2025 05:30:14 PM (11 months ago)
Author:
LiteSpeedTech
Message:

Release v7.1

Location:
litespeed-cache
Files:
342 added
47 edited

Legend:

Unmodified
Added
Removed
  • litespeed-cache/trunk/assets/js/litespeed-cache-admin.js

    r3009052 r3281183  
    212212         */
    213213        $('#litespeed_get_ip').on('click', function (e) {
     214            console.log('[litespeed] get server IP');
    214215            $.ajax({
    215216                url: litespeed_data.ajax_url_getIP,
     
    217218                beforeSend: function (xhr) {
    218219                    xhr.setRequestHeader('X-WP-Nonce', litespeed_data.nonce);
     220                    $('#litespeed_server_ip').html('Detecting...');
    219221                },
    220222                success: function (data) {
     223                    $('#litespeed_server_ip').html('Done');
    221224                    console.log('[litespeed] get server IP response: ' + data);
    222225                    $('#litespeed_server_ip').html(data);
     226                },
     227                error: function (xhr, error) {
     228                    console.log('[litespeed] get server IP error', error);
     229                    $('#litespeed_server_ip').html('Failed to detect IP');
     230                },
     231                complete: function (xhr, status) {
     232                    console.log('[litespeed] AJAX complete', status, xhr);
    223233                },
    224234            });
     
    582592    return i;
    583593}
     594
     595function litespeed_copy_to_clipboard(elementId) {
     596    var range = document.createRange();
     597    range.selectNode(document.getElementById(elementId));
     598    window.getSelection().removeAllRanges();
     599    window.getSelection().addRange(range);
     600    document.execCommand('copy');
     601    window.getSelection().removeAllRanges();
     602}
  • litespeed-cache/trunk/changelog.txt

    r3123399 r3281183  
    17371737* [UPDATE] Improved debug log formatting.
    17381738* [INTEGRATION] Compatibility with MainWP plugin.
    1739 * [BUGFIX] Fixed Woocommerce order not purging product stock quantity.
    1740 * [BUGFIX] Fixed Woocommerce scheduled sale price not updating issue.
     1739* [BUGFIX] Fixed WooCommerce order not purging product stock quantity.
     1740* [BUGFIX] Fixed WooCommerce scheduled sale price not updating issue.
    17411741* [REFACTOR] Combined cache_enable functions into a single function.
    17421742
  • litespeed-cache/trunk/cli/crawler.cls.php

    r3261732 r3281183  
    8585        $list = array();
    8686        foreach ($crawler_list as $i => $v) {
    87             $hit = !empty($summary['crawler_stats'][$i]['H']) ? $summary['crawler_stats'][$i]['H'] : 0;
    88             $miss = !empty($summary['crawler_stats'][$i]['M']) ? $summary['crawler_stats'][$i]['M'] : 0;
    89 
    90             $blacklisted = !empty($summary['crawler_stats'][$i]['B']) ? $summary['crawler_stats'][$i]['B'] : 0;
    91             $blacklisted += !empty($summary['crawler_stats'][$i]['N']) ? $summary['crawler_stats'][$i]['N'] : 0;
    92 
    93             if (isset($summary['crawler_stats'][$i]['W'])) {
    94                 $waiting = $summary['crawler_stats'][$i]['W'] ?: 0;
     87            $hit = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_HIT]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_HIT] : 0;
     88            $miss = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_MISS]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_MISS] : 0;
     89
     90            $blacklisted = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_BLACKLIST]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_BLACKLIST] : 0;
     91            $blacklisted += !empty($summary['crawler_stats'][$i][Crawler2::STATUS_NOCACHE]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_NOCACHE] : 0;
     92
     93            if (isset($summary['crawler_stats'][$i][Crawler2::STATUS_WAIT])) {
     94                $waiting = $summary['crawler_stats'][$i][Crawler2::STATUS_WAIT] ?: 0;
    9595            } else {
    9696                $waiting = $summary['list_size'] - $hit - $miss - $blacklisted;
  • litespeed-cache/trunk/data/const.default.json

    r3261732 r3281183  
    8888    "optm-css_async": "",
    8989    "optm-ccss_per_url": "",
     90    "optm-ccss_whitelist": "",
    9091    "optm-css_async_inline": "1",
    9192    "optm-css_font_display": "",
  • litespeed-cache/trunk/lang/litespeed-cache.pot

    r3269138 r3281183  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: LiteSpeed Cache 7.0.1\n"
     5"Project-Id-Version: LiteSpeed Cache 7.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-04-08T18:55:51+00:00\n"
     12"POT-Creation-Date: 2025-04-24T13:13:02+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.11.0\n"
     
    8080msgstr ""
    8181
    82 #: src/activation.cls.php:506
    83 #: src/activation.cls.php:511
     82#: src/activation.cls.php:505
     83#: src/activation.cls.php:510
    8484msgid "Failed to upgrade."
    8585msgstr ""
    8686
    87 #: src/activation.cls.php:515
     87#: src/activation.cls.php:514
    8888msgid "Upgraded successfully."
    8989msgstr ""
    9090
    91 #: src/admin-display.cls.php:122
     91#: src/admin-display.cls.php:125
    9292#: tpl/dash/entry.tpl.php:6
    9393msgid "Dashboard"
    9494msgstr ""
    9595
    96 #: src/admin-display.cls.php:124
     96#: src/admin-display.cls.php:127
    9797msgid "Presets"
    9898msgstr ""
    9999
    100 #: src/admin-display.cls.php:126
     100#: src/admin-display.cls.php:129
    101101msgid "General"
    102102msgstr ""
    103103
    104 #: src/admin-display.cls.php:128
     104#: src/admin-display.cls.php:131
    105105#: tpl/cache/entry.tpl.php:6
    106106#: tpl/cache/entry_network.tpl.php:6
     
    108108msgstr ""
    109109
    110 #: src/admin-display.cls.php:130
    111 #: tpl/cdn/cf.tpl.php:26
     110#: src/admin-display.cls.php:133
    112111msgid "CDN"
    113112msgstr ""
    114113
    115 #: src/admin-display.cls.php:132
     114#: src/admin-display.cls.php:135
    116115#: src/gui.cls.php:638
    117 #: tpl/dash/dashboard.tpl.php:181
     116#: tpl/dash/dashboard.tpl.php:188
    118117#: tpl/dash/network_dash.tpl.php:27
    119118#: tpl/general/online.tpl.php:121
     
    123122msgstr ""
    124123
    125 #: src/admin-display.cls.php:134
    126 #: tpl/dash/dashboard.tpl.php:182
     124#: src/admin-display.cls.php:137
     125#: tpl/dash/dashboard.tpl.php:189
    127126#: tpl/dash/network_dash.tpl.php:28
    128127#: tpl/general/online.tpl.php:120
     
    131130msgstr ""
    132131
    133 #: src/admin-display.cls.php:136
     132#: src/admin-display.cls.php:139
    134133msgid "Database"
    135134msgstr ""
    136135
    137 #: src/admin-display.cls.php:138
    138 #: src/lang.cls.php:250
     136#: src/admin-display.cls.php:141
     137#: src/lang.cls.php:251
    139138msgid "Crawler"
    140139msgstr ""
    141140
    142 #: src/admin-display.cls.php:140
     141#: src/admin-display.cls.php:143
    143142msgid "Toolbox"
    144143msgstr ""
    145144
    146 #: src/admin-display.cls.php:217
     145#: src/admin-display.cls.php:220
    147146msgid "Cookie Name"
    148147msgstr ""
    149148
    150 #: src/admin-display.cls.php:218
     149#: src/admin-display.cls.php:221
    151150#: tpl/crawler/settings.tpl.php:143
    152151msgid "Cookie Values"
    153152msgstr ""
    154153
    155 #: src/admin-display.cls.php:220
     154#: src/admin-display.cls.php:223
    156155msgid "Remove cookie simulation"
    157156msgstr ""
    158157
    159 #: src/admin-display.cls.php:221
     158#: src/admin-display.cls.php:224
    160159msgid "Add new cookie to simulate"
    161160msgstr ""
    162161
    163 #: src/admin-display.cls.php:240
     162#: src/admin-display.cls.php:243
    164163msgid "CDN URL to be used. For example, %s"
    165164msgstr ""
    166165
    167 #: src/admin-display.cls.php:242
     166#: src/admin-display.cls.php:245
    168167msgid "Remove CDN URL"
    169168msgstr ""
    170169
    171 #: src/admin-display.cls.php:243
     170#: src/admin-display.cls.php:246
    172171msgid "Add new CDN URL"
    173172msgstr ""
    174173
    175 #: src/admin-display.cls.php:244
    176 #: src/admin-display.cls.php:978
    177 #: src/admin-display.cls.php:1006
    178 #: src/admin-display.cls.php:1057
     174#: src/admin-display.cls.php:247
     175#: src/admin-display.cls.php:983
     176#: src/admin-display.cls.php:1011
     177#: src/admin-display.cls.php:1062
    179178#: src/doc.cls.php:41
    180179#: tpl/cache/settings-cache.tpl.php:22
     
    182181#: tpl/cdn/other.tpl.php:34
    183182#: tpl/crawler/settings.tpl.php:113
    184 #: tpl/page_optm/settings_css.tpl.php:191
     183#: tpl/page_optm/settings_css.tpl.php:201
    185184#: tpl/page_optm/settings_media.tpl.php:165
    186185#: tpl/toolbox/settings-debug.tpl.php:49
     
    188187msgstr ""
    189188
    190 #: src/admin-display.cls.php:245
    191 #: src/admin-display.cls.php:979
    192 #: src/admin-display.cls.php:1006
    193 #: src/admin-display.cls.php:1057
     189#: src/admin-display.cls.php:248
     190#: src/admin-display.cls.php:984
     191#: src/admin-display.cls.php:1011
     192#: src/admin-display.cls.php:1062
    194193#: tpl/cache/settings-cache.tpl.php:22
    195194#: tpl/cache/settings_inc.object.tpl.php:213
    196195#: tpl/cdn/other.tpl.php:39
    197196#: tpl/img_optm/settings.media_webp.tpl.php:14
    198 #: tpl/page_optm/settings_css.tpl.php:84
     197#: tpl/page_optm/settings_css.tpl.php:87
    199198#: tpl/page_optm/settings_js.tpl.php:69
    200199#: tpl/page_optm/settings_media.tpl.php:168
     
    203202msgstr ""
    204203
    205 #: src/admin-display.cls.php:295
     204#: src/admin-display.cls.php:298
    206205#: src/gui.cls.php:629
    207206#: tpl/crawler/entry.tpl.php:11
     
    209208msgstr ""
    210209
    211 #: src/admin-display.cls.php:532
     210#: src/admin-display.cls.php:535
    212211#: tpl/banner/slack.php:33
    213212msgid "Dismiss"
    214213msgstr ""
    215214
    216 #: src/admin-display.cls.php:843
    217 #: src/admin-display.cls.php:847
     215#: src/admin-display.cls.php:848
     216#: src/admin-display.cls.php:852
    218217msgid "Save Changes"
    219218msgstr ""
    220219
    221 #: src/admin-display.cls.php:1068
     220#: src/admin-display.cls.php:1073
    222221msgid "This setting is overwritten by the PHP constant %s"
    223222msgstr ""
    224223
    225 #: src/admin-display.cls.php:1071
     224#: src/admin-display.cls.php:1076
    226225msgid "This setting is overwritten by the primary site setting"
    227226msgstr ""
    228227
    229 #: src/admin-display.cls.php:1073
     228#: src/admin-display.cls.php:1078
    230229msgid "This setting is overwritten by the Network setting"
    231230msgstr ""
    232231
    233 #: src/admin-display.cls.php:1077
     232#: src/admin-display.cls.php:1082
    234233msgid "currently set to %s"
    235234msgstr ""
    236235
    237 #: src/admin-display.cls.php:1088
     236#: src/admin-display.cls.php:1093
    238237#: tpl/cache/settings_inc.object.tpl.php:106
    239238#: tpl/crawler/settings.tpl.php:37
     
    242241msgstr ""
    243242
    244 #: src/admin-display.cls.php:1120
    245 #: src/admin-display.cls.php:1124
     243#: src/admin-display.cls.php:1125
     244#: src/admin-display.cls.php:1129
    246245#: tpl/cdn/other.tpl.php:84
    247246msgid "Default value"
    248247msgstr ""
    249248
    250 #: src/admin-display.cls.php:1149
     249#: src/admin-display.cls.php:1154
    251250msgid "Invalid rewrite rule"
    252251msgstr ""
    253252
    254 #: src/admin-display.cls.php:1167
     253#: src/admin-display.cls.php:1172
    255254msgid "Path must end with %s"
    256255msgstr ""
    257256
    258 #: src/admin-display.cls.php:1186
     257#: src/admin-display.cls.php:1191
    259258msgid "Minimum value"
    260259msgstr ""
    261260
    262 #: src/admin-display.cls.php:1189
     261#: src/admin-display.cls.php:1194
    263262msgid "Maximum value"
    264263msgstr ""
    265264
    266 #: src/admin-display.cls.php:1201
     265#: src/admin-display.cls.php:1206
    267266msgid "Zero, or"
    268267msgstr ""
    269268
    270 #: src/admin-display.cls.php:1207
     269#: src/admin-display.cls.php:1212
    271270msgid "Larger than"
    272271msgstr ""
    273272
    274 #: src/admin-display.cls.php:1209
     273#: src/admin-display.cls.php:1214
    275274msgid "Smaller than"
    276275msgstr ""
    277276
    278 #: src/admin-display.cls.php:1212
     277#: src/admin-display.cls.php:1217
    279278msgid "Value range"
    280279msgstr ""
    281280
    282 #: src/admin-display.cls.php:1238
     281#: src/admin-display.cls.php:1243
    283282msgid "Invalid IP"
    284283msgstr ""
    285284
    286 #: src/admin-display.cls.php:1259
     285#: src/admin-display.cls.php:1264
    287286#: tpl/cache/settings-esi.tpl.php:95
    288 #: tpl/page_optm/settings_css.tpl.php:194
     287#: tpl/page_optm/settings_css.tpl.php:204
    289288#: tpl/page_optm/settings_html.tpl.php:123
    290289#: tpl/page_optm/settings_media.tpl.php:245
     
    296295#: tpl/page_optm/settings_tuning.tpl.php:120
    297296#: tpl/page_optm/settings_tuning_css.tpl.php:24
    298 #: tpl/page_optm/settings_tuning_css.tpl.php:84
     297#: tpl/page_optm/settings_tuning_css.tpl.php:85
    299298#: tpl/toolbox/edit_htaccess.tpl.php:58
    300299#: tpl/toolbox/edit_htaccess.tpl.php:76
     
    302301msgstr ""
    303302
    304 #: src/admin-display.cls.php:1261
     303#: src/admin-display.cls.php:1266
    305304msgid "Server variable(s) %s available to override this setting."
    306305msgstr ""
    307306
    308 #: src/admin-display.cls.php:1274
     307#: src/admin-display.cls.php:1279
    309308msgid "The URLs will be compared to the REQUEST_URI server variable."
    310309msgstr ""
    311310
    312 #: src/admin-display.cls.php:1275
     311#: src/admin-display.cls.php:1280
    313312msgid "For example, for %s, %s can be used here."
    314313msgstr ""
    315314
    316 #: src/admin-display.cls.php:1277
     315#: src/admin-display.cls.php:1282
    317316msgid "To match the beginning, add %s to the beginning of the item."
    318317msgstr ""
    319318
    320 #: src/admin-display.cls.php:1278
     319#: src/admin-display.cls.php:1283
    321320msgid "To do an exact match, add %s to the end of the URL."
    322321msgstr ""
    323322
    324 #: src/admin-display.cls.php:1279
     323#: src/admin-display.cls.php:1284
    325324#: src/doc.cls.php:114
    326325msgid "One per line."
    327326msgstr ""
    328327
    329 #: src/admin-display.cls.php:1294
     328#: src/admin-display.cls.php:1299
    330329msgid "%s groups"
    331330msgstr ""
    332331
    333 #: src/admin-display.cls.php:1297
     332#: src/admin-display.cls.php:1302
    334333msgid "%s images"
    335334msgstr ""
    336335
    337 #: src/admin-display.cls.php:1306
     336#: src/admin-display.cls.php:1311
    338337msgid "%s group"
    339338msgstr ""
    340339
    341 #: src/admin-display.cls.php:1309
     340#: src/admin-display.cls.php:1314
    342341msgid "%s image"
    343342msgstr ""
     
    383382
    384383#: src/cloud.cls.php:180
    385 #: src/cloud.cls.php:264
     384#: src/cloud.cls.php:265
    386385msgid "Failed to get echo data from WPAPI"
    387386msgstr ""
    388387
    389388#: src/cloud.cls.php:240
    390 #: src/cloud.cls.php:295
     389#: src/cloud.cls.php:296
    391390msgid "You need to set the %1$s first. Please use the command %2$s to set."
    392391msgstr ""
    393392
    394393#: src/cloud.cls.php:241
    395 #: src/cloud.cls.php:296
     394#: src/cloud.cls.php:297
    396395#: src/lang.cls.php:89
    397396msgid "Server IP"
    398397msgstr ""
    399398
    400 #: src/cloud.cls.php:287
    401 #: src/cloud.cls.php:334
    402 #: src/cloud.cls.php:362
    403 #: src/cloud.cls.php:379
    404 #: src/cloud.cls.php:399
    405 #: src/cloud.cls.php:418
     399#: src/cloud.cls.php:288
     400#: src/cloud.cls.php:335
     401#: src/cloud.cls.php:363
     402#: src/cloud.cls.php:380
     403#: src/cloud.cls.php:400
     404#: src/cloud.cls.php:419
    406405msgid "You need to activate QC first."
    407406msgstr ""
    408407
    409 #: src/cloud.cls.php:305
     408#: src/cloud.cls.php:306
    410409msgid "Cert or key file does not exist."
    411410msgstr ""
    412411
    413 #: src/cloud.cls.php:574
     412#: src/cloud.cls.php:575
    414413msgid "Failed to validate %s activation data."
    415414msgstr ""
    416415
    417 #: src/cloud.cls.php:581
     416#: src/cloud.cls.php:582
    418417msgid "Failed to parse %s activation status."
    419418msgstr ""
    420419
    421 #: src/cloud.cls.php:588
     420#: src/cloud.cls.php:589
    422421msgid "%s activation data expired."
    423422msgstr ""
    424423
    425 #: src/cloud.cls.php:611
     424#: src/cloud.cls.php:612
    426425msgid "Congratulations, %s successfully set this domain up for the anonymous online services."
    427426msgstr ""
    428427
    429 #: src/cloud.cls.php:613
     428#: src/cloud.cls.php:614
    430429msgid "Congratulations, %s successfully set this domain up for the online services."
    431430msgstr ""
    432431
    433 #: src/cloud.cls.php:618
    434 #: src/cloud.cls.php:658
    435 #: src/cloud.cls.php:699
     432#: src/cloud.cls.php:619
     433#: src/cloud.cls.php:659
     434#: src/cloud.cls.php:700
    436435msgid "Congratulations, %s successfully set this domain up for the online services with CDN service."
    437436msgstr ""
    438437
    439 #: src/cloud.cls.php:728
     438#: src/cloud.cls.php:729
    440439msgid "Reset %s activation successfully."
    441440msgstr ""
    442441
    443 #: src/cloud.cls.php:1002
    444 #: src/cloud.cls.php:1015
    445 #: src/cloud.cls.php:1053
    446 #: src/cloud.cls.php:1119
    447 #: src/cloud.cls.php:1256
     442#: src/cloud.cls.php:1003
     443#: src/cloud.cls.php:1016
     444#: src/cloud.cls.php:1054
     445#: src/cloud.cls.php:1120
     446#: src/cloud.cls.php:1267
    448447msgid "Cloud Error"
    449448msgstr ""
    450449
    451 #: src/cloud.cls.php:1053
     450#: src/cloud.cls.php:1054
    452451msgid "No available Cloud Node after checked server load."
    453452msgstr ""
    454453
    455 #: src/cloud.cls.php:1119
     454#: src/cloud.cls.php:1120
    456455msgid "No available Cloud Node."
    457456msgstr ""
    458457
    459 #: src/cloud.cls.php:1216
     458#: src/cloud.cls.php:1218
    460459msgid "In order to use QC services, need a real domain name, cannot use an IP."
    461460msgstr ""
    462461
    463 #: src/cloud.cls.php:1258
     462#: src/cloud.cls.php:1269
    464463msgid "Please try after %1$s for service %2$s."
    465464msgstr ""
    466465
    467 #: src/cloud.cls.php:1389
    468 #: src/cloud.cls.php:1412
     466#: src/cloud.cls.php:1420
     467#: src/cloud.cls.php:1443
    469468msgid "Failed to request via WordPress"
    470469msgstr ""
    471470
    472 #: src/cloud.cls.php:1433
     471#: src/cloud.cls.php:1475
    473472msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
    474473msgstr ""
    475474
    476 #: src/cloud.cls.php:1438
     475#: src/cloud.cls.php:1480
    477476msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
    478477msgstr ""
    479478
    480 #: src/cloud.cls.php:1445
     479#: src/cloud.cls.php:1487
    481480msgid "Cloud server refused the current request due to rate limiting. Please try again later."
    482481msgstr ""
    483482
    484 #: src/cloud.cls.php:1453
     483#: src/cloud.cls.php:1495
    485484msgid "Redetected node"
    486485msgstr ""
    487486
    488 #: src/cloud.cls.php:1461
     487#: src/cloud.cls.php:1503
    489488msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
    490489msgstr ""
    491490
    492 #: src/cloud.cls.php:1503
    493 #: src/cloud.cls.php:1511
     491#: src/cloud.cls.php:1545
     492#: src/cloud.cls.php:1553
    494493msgid "Message from QUIC.cloud server"
    495494msgstr ""
    496495
    497 #: src/cloud.cls.php:1519
     496#: src/cloud.cls.php:1561
    498497msgid "Good news from QUIC.cloud server"
    499498msgstr ""
    500499
    501 #: src/cloud.cls.php:1529
     500#: src/cloud.cls.php:1571
    502501msgid "%1$s plugin version %2$s required for this action."
    503502msgstr ""
    504503
    505 #: src/cloud.cls.php:1596
     504#: src/cloud.cls.php:1638
    506505msgid "Failed to communicate with QUIC.cloud server"
    507506msgstr ""
    508507
    509 #: src/cloud.cls.php:1650
     508#: src/cloud.cls.php:1692
    510509msgid "Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account."
    511510msgstr ""
    512511
    513 #: src/cloud.cls.php:1651
     512#: src/cloud.cls.php:1693
    514513msgid "Click here to proceed."
    515514msgstr ""
    516515
    517 #: src/cloud.cls.php:1919
     516#: src/cloud.cls.php:1961
    518517msgid "Linked to QUIC.cloud preview environment, for testing purpose only."
    519518msgstr ""
    520519
    521 #: src/cloud.cls.php:1972
     520#: src/cloud.cls.php:2014
    522521msgid "Sync QUIC.cloud status successfully."
    523522msgstr ""
    524523
    525 #: src/cloud.cls.php:1979
     524#: src/cloud.cls.php:2021
    526525msgid "Sync credit allowance with Cloud Server successfully."
    527526msgstr ""
    528527
    529 #: src/conf.cls.php:519
     528#: src/conf.cls.php:523
    530529msgid "Saving option failed. IPv4 only for %s."
    531530msgstr ""
    532531
    533 #: src/conf.cls.php:696
     532#: src/conf.cls.php:700
    534533msgid "Changed setting successfully."
    535534msgstr ""
     
    543542msgstr ""
    544543
    545 #: src/crawler-map.cls.php:278
     544#: src/crawler-map.cls.php:287
    546545msgid "Sitemap cleaned successfully"
    547546msgstr ""
    548547
    549 #: src/crawler-map.cls.php:373
     548#: src/crawler-map.cls.php:382
    550549msgid "No valid sitemap parsed for crawler."
    551550msgstr ""
    552551
    553 #: src/crawler-map.cls.php:378
     552#: src/crawler-map.cls.php:387
    554553msgid "Sitemap created successfully: %d items"
    555554msgstr ""
    556555
    557 #: src/crawler.cls.php:142
     556#: src/crawler.cls.php:148
    558557msgid "Crawler disabled list is cleared! All crawlers are set to active! "
    559558msgstr ""
    560559
    561 #: src/crawler.cls.php:231
     560#: src/crawler.cls.php:237
    562561msgid "Started async crawling"
    563562msgstr ""
    564563
    565 #: src/crawler.cls.php:1228
     564#: src/crawler.cls.php:1234
    566565msgid "Guest"
    567566msgstr ""
    568567
    569 #: src/crawler.cls.php:1395
     568#: src/crawler.cls.php:1404
    570569msgid "Manually added to blocklist"
    571570msgstr ""
    572571
    573 #: src/crawler.cls.php:1398
     572#: src/crawler.cls.php:1407
    574573msgid "Previously existed in blocklist"
    575574msgstr ""
     
    662661#: src/doc.cls.php:92
    663662#: src/doc.cls.php:147
    664 #: tpl/cdn/cf.tpl.php:128
    665 #: tpl/dash/dashboard.tpl.php:175
    666 #: tpl/dash/dashboard.tpl.php:779
     663#: tpl/cdn/cf.tpl.php:127
     664#: tpl/dash/dashboard.tpl.php:177
     665#: tpl/dash/dashboard.tpl.php:786
    667666#: tpl/general/online.tpl.php:67
    668667#: tpl/general/online.tpl.php:79
    669668#: tpl/general/online.tpl.php:95
    670 #: tpl/img_optm/summary.tpl.php:48
     669#: tpl/img_optm/summary.tpl.php:49
    671670#: tpl/inc/check_cache_disabled.php:42
    672671msgid "Learn More"
     
    962961#: src/gui.cls.php:512
    963962#: src/gui.cls.php:672
    964 #: tpl/cdn/cf.tpl.php:80
     963#: tpl/cdn/cf.tpl.php:79
    965964#: tpl/cdn/entry.tpl.php:9
    966965msgid "Cloudflare"
     
    971970#: src/lang.cls.php:117
    972971#: tpl/dash/dashboard.tpl.php:54
    973 #: tpl/dash/dashboard.tpl.php:585
     972#: tpl/dash/dashboard.tpl.php:592
    974973#: tpl/toolbox/purge.tpl.php:44
    975974msgid "Object Cache"
     
    997996#: src/gui.cls.php:581
    998997#: src/gui.cls.php:741
    999 #: src/lang.cls.php:183
     998#: src/lang.cls.php:184
    1000999#: tpl/presets/standard.tpl.php:42
    10011000#: tpl/toolbox/purge.tpl.php:98
     
    10081007
    10091008#: src/gui.cls.php:621
    1010 #: tpl/cdn/cf.tpl.php:26
    10111009#: tpl/db_optm/entry.tpl.php:6
    10121010msgid "Manage"
     
    10141012
    10151013#: src/gui.cls.php:761
    1016 #: tpl/img_optm/summary.tpl.php:141
     1014#: tpl/img_optm/summary.tpl.php:149
    10171015msgid "Remove all previous unfinished image optimization requests."
    10181016msgstr ""
    10191017
    10201018#: src/gui.cls.php:762
    1021 #: tpl/img_optm/summary.tpl.php:143
     1019#: tpl/img_optm/summary.tpl.php:151
    10221020msgid "Clean Up Unfinished Data"
    10231021msgstr ""
     
    11751173
    11761174#: src/lang.cls.php:28
    1177 #: tpl/dash/dashboard.tpl.php:527
     1175#: tpl/dash/dashboard.tpl.php:534
    11781176msgid "Images requested"
    11791177msgstr ""
    11801178
    11811179#: src/lang.cls.php:29
    1182 #: tpl/dash/dashboard.tpl.php:537
     1180#: tpl/dash/dashboard.tpl.php:544
    11831181msgid "Images notified to pull"
    11841182msgstr ""
     
    12141212#: src/lang.cls.php:94
    12151213#: tpl/dash/dashboard.tpl.php:55
    1216 #: tpl/dash/dashboard.tpl.php:586
     1214#: tpl/dash/dashboard.tpl.php:593
    12171215#: tpl/presets/standard.tpl.php:12
    12181216msgid "Browser Cache"
     
    14521450
    14531451#: src/lang.cls.php:156
    1454 #: tpl/page_optm/settings_tuning_css.tpl.php:131
     1452#: tpl/page_optm/settings_tuning_css.tpl.php:157
    14551453msgid "Load CSS Asynchronously"
    14561454msgstr ""
     
    15301528
    15311529#: src/lang.cls.php:175
     1530msgid "CCSS Selector Allowlist"
     1531msgstr ""
     1532
     1533#: src/lang.cls.php:176
    15321534msgid "JS Deferred / Delayed Excludes"
    15331535msgstr ""
    15341536
    1535 #: src/lang.cls.php:176
     1537#: src/lang.cls.php:177
    15361538msgid "Guest Mode JS Excludes"
    15371539msgstr ""
    15381540
    1539 #: src/lang.cls.php:177
     1541#: src/lang.cls.php:178
    15401542#: tpl/presets/standard.tpl.php:44
    15411543msgid "Remove WordPress Emoji"
    15421544msgstr ""
    15431545
    1544 #: src/lang.cls.php:178
     1546#: src/lang.cls.php:179
    15451547#: tpl/presets/standard.tpl.php:45
    15461548msgid "Remove Noscript Tags"
    15471549msgstr ""
    15481550
    1549 #: src/lang.cls.php:179
     1551#: src/lang.cls.php:180
    15501552msgid "URI Excludes"
    15511553msgstr ""
    15521554
    1553 #: src/lang.cls.php:180
     1555#: src/lang.cls.php:181
    15541556msgid "Optimize for Guests Only"
    15551557msgstr ""
    15561558
    1557 #: src/lang.cls.php:181
     1559#: src/lang.cls.php:182
    15581560msgid "Role Excludes"
    15591561msgstr ""
    15601562
    1561 #: src/lang.cls.php:184
     1563#: src/lang.cls.php:185
    15621564msgid "Gravatar Cache Cron"
    15631565msgstr ""
    15641566
    1565 #: src/lang.cls.php:185
     1567#: src/lang.cls.php:186
    15661568msgid "Gravatar Cache TTL"
    15671569msgstr ""
    15681570
    1569 #: src/lang.cls.php:187
     1571#: src/lang.cls.php:188
    15701572msgid "Lazy Load Images"
    15711573msgstr ""
    15721574
    1573 #: src/lang.cls.php:188
     1575#: src/lang.cls.php:189
    15741576msgid "Lazy Load Image Excludes"
    15751577msgstr ""
    15761578
    1577 #: src/lang.cls.php:189
     1579#: src/lang.cls.php:190
    15781580msgid "Lazy Load Image Class Name Excludes"
    15791581msgstr ""
    15801582
    1581 #: src/lang.cls.php:190
     1583#: src/lang.cls.php:191
    15821584msgid "Lazy Load Image Parent Class Name Excludes"
    15831585msgstr ""
    15841586
    1585 #: src/lang.cls.php:191
     1587#: src/lang.cls.php:192
    15861588msgid "Lazy Load Iframe Class Name Excludes"
    15871589msgstr ""
    15881590
    1589 #: src/lang.cls.php:192
     1591#: src/lang.cls.php:193
    15901592msgid "Lazy Load Iframe Parent Class Name Excludes"
    15911593msgstr ""
    15921594
    1593 #: src/lang.cls.php:193
     1595#: src/lang.cls.php:194
    15941596msgid "Lazy Load URI Excludes"
    15951597msgstr ""
    15961598
    1597 #: src/lang.cls.php:194
     1599#: src/lang.cls.php:195
    15981600msgid "LQIP Excludes"
    15991601msgstr ""
    16001602
    1601 #: src/lang.cls.php:195
     1603#: src/lang.cls.php:196
    16021604msgid "Basic Image Placeholder"
    16031605msgstr ""
    16041606
    1605 #: src/lang.cls.php:196
     1607#: src/lang.cls.php:197
    16061608msgid "Responsive Placeholder"
    16071609msgstr ""
    16081610
    1609 #: src/lang.cls.php:197
     1611#: src/lang.cls.php:198
    16101612msgid "Responsive Placeholder Color"
    16111613msgstr ""
    16121614
    1613 #: src/lang.cls.php:198
     1615#: src/lang.cls.php:199
    16141616msgid "Responsive Placeholder SVG"
    16151617msgstr ""
    16161618
    1617 #: src/lang.cls.php:199
     1619#: src/lang.cls.php:200
    16181620msgid "LQIP Cloud Generator"
    16191621msgstr ""
    16201622
    1621 #: src/lang.cls.php:200
     1623#: src/lang.cls.php:201
    16221624msgid "LQIP Quality"
    16231625msgstr ""
    16241626
    1625 #: src/lang.cls.php:201
     1627#: src/lang.cls.php:202
    16261628msgid "LQIP Minimum Dimensions"
    16271629msgstr ""
    16281630
    1629 #: src/lang.cls.php:203
     1631#: src/lang.cls.php:204
    16301632msgid "Generate LQIP In Background"
    16311633msgstr ""
    16321634
    1633 #: src/lang.cls.php:204
     1635#: src/lang.cls.php:205
    16341636msgid "Lazy Load Iframes"
    16351637msgstr ""
    16361638
    1637 #: src/lang.cls.php:205
     1639#: src/lang.cls.php:206
    16381640msgid "Add Missing Sizes"
    16391641msgstr ""
    16401642
    1641 #: src/lang.cls.php:206
     1643#: src/lang.cls.php:207
    16421644#: src/metabox.cls.php:33
    16431645#: src/metabox.cls.php:34
    1644 #: tpl/page_optm/settings_vpi.tpl.php:12
     1646#: tpl/page_optm/settings_vpi.tpl.php:15
    16451647msgid "Viewport Images"
    16461648msgstr ""
    16471649
    1648 #: src/lang.cls.php:207
     1650#: src/lang.cls.php:208
    16491651msgid "Viewport Images Cron"
    16501652msgstr ""
    16511653
    1652 #: src/lang.cls.php:209
     1654#: src/lang.cls.php:210
    16531655msgid "Auto Request Cron"
    16541656msgstr ""
    16551657
    1656 #: src/lang.cls.php:210
     1658#: src/lang.cls.php:211
    16571659msgid "Optimize Original Images"
    16581660msgstr ""
    16591661
    1660 #: src/lang.cls.php:211
     1662#: src/lang.cls.php:212
    16611663msgid "Remove Original Backups"
    16621664msgstr ""
    16631665
    1664 #: src/lang.cls.php:212
     1666#: src/lang.cls.php:213
    16651667msgid "Next-Gen Image Format"
    16661668msgstr ""
    16671669
    1668 #: src/lang.cls.php:213
     1670#: src/lang.cls.php:214
    16691671msgid "Optimize Losslessly"
    16701672msgstr ""
    16711673
    1672 #: src/lang.cls.php:214
     1674#: src/lang.cls.php:215
    16731675msgid "Preserve EXIF/XMP data"
    16741676msgstr ""
    16751677
    1676 #: src/lang.cls.php:215
     1678#: src/lang.cls.php:216
    16771679msgid "WebP/AVIF Attribute To Replace"
    16781680msgstr ""
    16791681
    1680 #: src/lang.cls.php:216
     1682#: src/lang.cls.php:217
    16811683msgid "WebP/AVIF For Extra srcset"
    16821684msgstr ""
    16831685
    1684 #: src/lang.cls.php:217
     1686#: src/lang.cls.php:218
    16851687msgid "WordPress Image Quality Control"
    16861688msgstr ""
    16871689
    1688 #: src/lang.cls.php:218
     1690#: src/lang.cls.php:219
    16891691#: tpl/esi_widget_edit.php:36
    16901692msgid "Enable ESI"
    16911693msgstr ""
    16921694
    1693 #: src/lang.cls.php:219
     1695#: src/lang.cls.php:220
    16941696msgid "Cache Admin Bar"
    16951697msgstr ""
    16961698
    1697 #: src/lang.cls.php:220
     1699#: src/lang.cls.php:221
    16981700msgid "Cache Comment Form"
    16991701msgstr ""
    17001702
    1701 #: src/lang.cls.php:221
     1703#: src/lang.cls.php:222
    17021704msgid "ESI Nonces"
    17031705msgstr ""
    17041706
    1705 #: src/lang.cls.php:222
    1706 #: tpl/page_optm/settings_css.tpl.php:123
    1707 #: tpl/page_optm/settings_css.tpl.php:240
    1708 #: tpl/page_optm/settings_vpi.tpl.php:67
     1707#: src/lang.cls.php:223
     1708#: tpl/page_optm/settings_css.tpl.php:126
     1709#: tpl/page_optm/settings_css.tpl.php:250
     1710#: tpl/page_optm/settings_vpi.tpl.php:73
    17091711msgid "Vary Group"
    17101712msgstr ""
    17111713
    1712 #: src/lang.cls.php:223
     1714#: src/lang.cls.php:224
    17131715msgid "Purge All Hooks"
    17141716msgstr ""
    17151717
    1716 #: src/lang.cls.php:224
     1718#: src/lang.cls.php:225
    17171719msgid "Improve HTTP/HTTPS Compatibility"
    17181720msgstr ""
    17191721
    1720 #: src/lang.cls.php:225
     1722#: src/lang.cls.php:226
    17211723msgid "Instant Click"
    17221724msgstr ""
    17231725
    1724 #: src/lang.cls.php:226
     1726#: src/lang.cls.php:227
    17251727msgid "Do Not Cache Cookies"
    17261728msgstr ""
    17271729
    1728 #: src/lang.cls.php:227
     1730#: src/lang.cls.php:228
    17291731msgid "Do Not Cache User Agents"
    17301732msgstr ""
    17311733
    1732 #: src/lang.cls.php:228
     1734#: src/lang.cls.php:229
    17331735msgid "Login Cookie"
    17341736msgstr ""
    17351737
    1736 #: src/lang.cls.php:229
     1738#: src/lang.cls.php:230
    17371739msgid "Vary Cookies"
    17381740msgstr ""
    17391741
    1740 #: src/lang.cls.php:231
     1742#: src/lang.cls.php:232
    17411743msgid "Frontend Heartbeat Control"
    17421744msgstr ""
    17431745
    1744 #: src/lang.cls.php:232
     1746#: src/lang.cls.php:233
    17451747msgid "Frontend Heartbeat TTL"
    17461748msgstr ""
    17471749
    1748 #: src/lang.cls.php:233
     1750#: src/lang.cls.php:234
    17491751msgid "Backend Heartbeat Control"
    17501752msgstr ""
    17511753
    1752 #: src/lang.cls.php:234
     1754#: src/lang.cls.php:235
    17531755msgid "Backend Heartbeat TTL"
    17541756msgstr ""
    17551757
    1756 #: src/lang.cls.php:235
     1758#: src/lang.cls.php:236
    17571759msgid "Editor Heartbeat"
    17581760msgstr ""
    17591761
    1760 #: src/lang.cls.php:236
     1762#: src/lang.cls.php:237
    17611763msgid "Editor Heartbeat TTL"
    17621764msgstr ""
    17631765
    1764 #: src/lang.cls.php:238
     1766#: src/lang.cls.php:239
    17651767msgid "Use CDN Mapping"
    17661768msgstr ""
    17671769
    1768 #: src/lang.cls.php:239
     1770#: src/lang.cls.php:240
    17691771msgid "CDN URL"
    17701772msgstr ""
    17711773
    1772 #: src/lang.cls.php:240
     1774#: src/lang.cls.php:241
    17731775msgid "Include Images"
    17741776msgstr ""
    17751777
    1776 #: src/lang.cls.php:241
     1778#: src/lang.cls.php:242
    17771779msgid "Include CSS"
    17781780msgstr ""
    17791781
    1780 #: src/lang.cls.php:242
     1782#: src/lang.cls.php:243
    17811783msgid "Include JS"
    17821784msgstr ""
    17831785
    1784 #: src/lang.cls.php:243
     1786#: src/lang.cls.php:244
    17851787#: tpl/cdn/other.tpl.php:87
    17861788msgid "Include File Types"
    17871789msgstr ""
    17881790
    1789 #: src/lang.cls.php:244
     1791#: src/lang.cls.php:245
    17901792msgid "HTML Attribute To Replace"
    17911793msgstr ""
    17921794
    1793 #: src/lang.cls.php:245
     1795#: src/lang.cls.php:246
    17941796msgid "Original URLs"
    17951797msgstr ""
    17961798
    1797 #: src/lang.cls.php:246
     1799#: src/lang.cls.php:247
    17981800msgid "Included Directories"
    17991801msgstr ""
    18001802
    1801 #: src/lang.cls.php:247
     1803#: src/lang.cls.php:248
    18021804msgid "Exclude Path"
    18031805msgstr ""
    18041806
    1805 #: src/lang.cls.php:248
     1807#: src/lang.cls.php:249
    18061808msgid "Cloudflare API"
    18071809msgstr ""
    18081810
    1809 #: src/lang.cls.php:251
     1811#: src/lang.cls.php:252
    18101812msgid "Crawl Interval"
    18111813msgstr ""
    18121814
    1813 #: src/lang.cls.php:252
     1815#: src/lang.cls.php:253
    18141816msgid "Server Load Limit"
    18151817msgstr ""
    18161818
    1817 #: src/lang.cls.php:253
     1819#: src/lang.cls.php:254
    18181820msgid "Role Simulation"
    18191821msgstr ""
    18201822
    1821 #: src/lang.cls.php:254
     1823#: src/lang.cls.php:255
    18221824msgid "Cookie Simulation"
    18231825msgstr ""
    18241826
    1825 #: src/lang.cls.php:255
     1827#: src/lang.cls.php:256
    18261828msgid "Custom Sitemap"
    18271829msgstr ""
    18281830
    1829 #: src/lang.cls.php:257
     1831#: src/lang.cls.php:258
    18301832#: tpl/inc/disabled_all.php:5
    18311833msgid "Disable All Features"
    18321834msgstr ""
    18331835
    1834 #: src/lang.cls.php:258
     1836#: src/lang.cls.php:259
    18351837#: tpl/toolbox/log_viewer.tpl.php:11
    18361838msgid "Debug Log"
    18371839msgstr ""
    18381840
    1839 #: src/lang.cls.php:259
     1841#: src/lang.cls.php:260
    18401842msgid "Admin IPs"
    18411843msgstr ""
    18421844
    1843 #: src/lang.cls.php:260
     1845#: src/lang.cls.php:261
    18441846msgid "Debug Level"
    18451847msgstr ""
    18461848
    1847 #: src/lang.cls.php:261
     1849#: src/lang.cls.php:262
    18481850msgid "Log File Size Limit"
    18491851msgstr ""
    18501852
    1851 #: src/lang.cls.php:262
     1853#: src/lang.cls.php:263
    18521854msgid "Collapse Query Strings"
    18531855msgstr ""
    18541856
    1855 #: src/lang.cls.php:263
     1857#: src/lang.cls.php:264
    18561858msgid "Debug URI Includes"
    18571859msgstr ""
    18581860
    1859 #: src/lang.cls.php:264
     1861#: src/lang.cls.php:265
    18601862msgid "Debug URI Excludes"
    18611863msgstr ""
    18621864
    1863 #: src/lang.cls.php:265
     1865#: src/lang.cls.php:266
    18641866msgid "Debug String Excludes"
    18651867msgstr ""
    18661868
    1867 #: src/lang.cls.php:267
     1869#: src/lang.cls.php:268
    18681870msgid "Revisions Max Number"
    18691871msgstr ""
    18701872
    1871 #: src/lang.cls.php:268
     1873#: src/lang.cls.php:269
    18721874msgid "Revisions Max Age"
    18731875msgstr ""
     
    21002102msgstr ""
    21012103
     2104#: src/tool.cls.php:37
     2105#: src/tool.cls.php:48
     2106msgid "Failed to detect IP"
     2107msgstr ""
     2108
    21022109#: src/utility.cls.php:235
    21032110msgid "right now"
     
    21092116
    21102117#: src/utility.cls.php:238
    2111 #: tpl/dash/dashboard.tpl.php:414
    2112 #: tpl/dash/dashboard.tpl.php:483
     2118#: tpl/dash/dashboard.tpl.php:421
     2119#: tpl/dash/dashboard.tpl.php:490
    21132120msgid " %s ago"
    21142121msgstr ""
     
    22092216
    22102217#: tpl/banner/cloud_promo.tpl.php:30
     2218#: tpl/page_optm/settings_tuning_css.tpl.php:58
     2219#: tpl/page_optm/settings_tuning_css.tpl.php:134
    22112220msgid "Learn more"
    22122221msgstr ""
     
    22342243#: tpl/banner/new_version.php:71
    22352244#: tpl/banner/new_version_dev.tpl.php:24
    2236 #: tpl/toolbox/beta_test.tpl.php:63
     2245#: tpl/toolbox/beta_test.tpl.php:59
    22372246msgid "Upgrade"
    22382247msgstr ""
     
    22632272
    22642273#: tpl/banner/score.php:28
    2265 #: tpl/dash/dashboard.tpl.php:353
     2274#: tpl/dash/dashboard.tpl.php:360
    22662275msgid "Page Load Time"
    22672276msgstr ""
     
    22692278#: tpl/banner/score.php:34
    22702279#: tpl/banner/score.php:74
    2271 #: tpl/dash/dashboard.tpl.php:369
    2272 #: tpl/dash/dashboard.tpl.php:450
     2280#: tpl/dash/dashboard.tpl.php:376
     2281#: tpl/dash/dashboard.tpl.php:457
    22732282msgid "Before"
    22742283msgstr ""
     
    22762285#: tpl/banner/score.php:45
    22772286#: tpl/banner/score.php:84
    2278 #: tpl/dash/dashboard.tpl.php:378
    2279 #: tpl/dash/dashboard.tpl.php:458
     2287#: tpl/dash/dashboard.tpl.php:385
     2288#: tpl/dash/dashboard.tpl.php:465
    22802289msgid "After"
    22812290msgstr ""
     
    22832292#: tpl/banner/score.php:55
    22842293#: tpl/banner/score.php:94
    2285 #: tpl/dash/dashboard.tpl.php:386
    2286 #: tpl/dash/dashboard.tpl.php:466
     2294#: tpl/dash/dashboard.tpl.php:393
     2295#: tpl/dash/dashboard.tpl.php:473
    22872296msgid "Improved by"
    22882297msgstr ""
    22892298
    22902299#: tpl/banner/score.php:68
    2291 #: tpl/dash/dashboard.tpl.php:430
     2300#: tpl/dash/dashboard.tpl.php:437
    22922301msgid "PageSpeed Score"
    22932302msgstr ""
     
    25382547
    25392548#: tpl/cache/settings-esi.tpl.php:35
    2540 #: tpl/cdn/cf.tpl.php:84
     2549#: tpl/cdn/cf.tpl.php:83
    25412550#: tpl/crawler/summary.tpl.php:53
    25422551#: tpl/inc/check_cache_disabled.php:31
    25432552#: tpl/inc/check_if_network_disable_all.php:18
    2544 #: tpl/page_optm/settings_css.tpl.php:69
    2545 #: tpl/page_optm/settings_css.tpl.php:182
     2553#: tpl/page_optm/settings_css.tpl.php:72
     2554#: tpl/page_optm/settings_css.tpl.php:192
    25462555#: tpl/page_optm/settings_localization.tpl.php:11
    25472556msgid "WARNING"
     
    25802589#: tpl/page_optm/settings_tuning.tpl.php:121
    25812590#: tpl/page_optm/settings_tuning_css.tpl.php:25
    2582 #: tpl/page_optm/settings_tuning_css.tpl.php:85
     2591#: tpl/page_optm/settings_tuning_css.tpl.php:86
    25832592msgid "Filter %s is supported."
    25842593msgstr ""
     
    26102619#: tpl/page_optm/settings_tuning.tpl.php:83
    26112620#: tpl/page_optm/settings_tuning_css.tpl.php:27
    2612 #: tpl/page_optm/settings_tuning_css.tpl.php:66
     2621#: tpl/page_optm/settings_tuning_css.tpl.php:67
     2622#: tpl/page_optm/settings_tuning_css.tpl.php:143
    26132623msgid "Predefined list will also be combined w/ the above settings"
    26142624msgstr ""
     
    27122722#: tpl/cache/settings-purge.tpl.php:89
    27132723#: tpl/cache/settings-purge.tpl.php:113
    2714 #: tpl/page_optm/settings_tuning_css.tpl.php:60
     2724#: tpl/page_optm/settings_tuning_css.tpl.php:61
     2725#: tpl/page_optm/settings_tuning_css.tpl.php:137
    27152726msgid "Note"
    27162727msgstr ""
     
    30193030
    30203031#: tpl/cdn/cf.tpl.php:11
     3032msgid "Cloudflare Settings"
     3033msgstr ""
     3034
     3035#: tpl/cdn/cf.tpl.php:25
     3036msgid "Use %s API functionality."
     3037msgstr ""
     3038
     3039#: tpl/cdn/cf.tpl.php:29
     3040msgid "Global API Key / API Token"
     3041msgstr ""
     3042
     3043#: tpl/cdn/cf.tpl.php:33
     3044msgid "Your API key / token is used to access %s APIs."
     3045msgstr ""
     3046
     3047#: tpl/cdn/cf.tpl.php:34
     3048msgid "Get it from <a %1$s>%2$s</a>."
     3049msgstr ""
     3050
     3051#: tpl/cdn/cf.tpl.php:35
     3052msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
     3053msgstr ""
     3054
     3055#: tpl/cdn/cf.tpl.php:40
     3056msgid "Email Address"
     3057msgstr ""
     3058
     3059#: tpl/cdn/cf.tpl.php:44
     3060msgid "Your Email address on %s."
     3061msgstr ""
     3062
     3063#: tpl/cdn/cf.tpl.php:45
     3064msgid "Optional when API token used."
     3065msgstr ""
     3066
     3067#: tpl/cdn/cf.tpl.php:50
     3068msgid "Domain"
     3069msgstr ""
     3070
     3071#: tpl/cdn/cf.tpl.php:58
     3072msgid "You can just type part of the domain."
     3073msgstr ""
     3074
     3075#: tpl/cdn/cf.tpl.php:59
     3076msgid "Once saved, it will be matched with the current list and completed automatically."
     3077msgstr ""
     3078
     3079#: tpl/cdn/cf.tpl.php:85
     3080msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
     3081msgstr ""
     3082
     3083#: tpl/cdn/cf.tpl.php:90
     3084msgid "Cloudflare Domain"
     3085msgstr ""
     3086
     3087#: tpl/cdn/cf.tpl.php:91
     3088msgid "Cloudflare Zone"
     3089msgstr ""
     3090
     3091#: tpl/cdn/cf.tpl.php:94
     3092msgid "Development Mode"
     3093msgstr ""
     3094
     3095#: tpl/cdn/cf.tpl.php:96
     3096msgid "Turn ON"
     3097msgstr ""
     3098
     3099#: tpl/cdn/cf.tpl.php:99
     3100msgid "Turn OFF"
     3101msgstr ""
     3102
     3103#: tpl/cdn/cf.tpl.php:102
     3104msgid "Check Status"
     3105msgstr ""
     3106
     3107#: tpl/cdn/cf.tpl.php:111
     3108msgid "Current status is %1$s since %2$s."
     3109msgstr ""
     3110
     3111#: tpl/cdn/cf.tpl.php:116
     3112msgid "Current status is %s."
     3113msgstr ""
     3114
     3115#: tpl/cdn/cf.tpl.php:117
     3116msgid "Development mode will be automatically turned off in %s."
     3117msgstr ""
     3118
     3119#: tpl/cdn/cf.tpl.php:125
     3120msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
     3121msgstr ""
     3122
     3123#: tpl/cdn/cf.tpl.php:126
     3124msgid "Development Mode will be turned off automatically after three hours."
     3125msgstr ""
     3126
     3127#: tpl/cdn/cf.tpl.php:132
     3128msgid "Cloudflare Cache"
     3129msgstr ""
     3130
     3131#: tpl/cdn/cf.tpl.php:138
     3132msgid "Purge Everything"
     3133msgstr ""
     3134
     3135#: tpl/cdn/entry.tpl.php:8
     3136msgid "QUIC.cloud"
     3137msgstr ""
     3138
     3139#: tpl/cdn/entry.tpl.php:10
     3140msgid "Other Static CDN"
     3141msgstr ""
     3142
     3143#: tpl/cdn/entry.tpl.php:17
     3144msgid "LiteSpeed Cache CDN"
     3145msgstr ""
     3146
    30213147#: tpl/cdn/other.tpl.php:20
    30223148msgid "CDN Settings"
    3023 msgstr ""
    3024 
    3025 #: tpl/cdn/cf.tpl.php:25
    3026 msgid "Use %s API functionality."
    3027 msgstr ""
    3028 
    3029 #: tpl/cdn/cf.tpl.php:26
    3030 msgid "This can be managed from %1$s%2$s tab."
    3031 msgstr ""
    3032 
    3033 #: tpl/cdn/cf.tpl.php:30
    3034 msgid "Global API Key / API Token"
    3035 msgstr ""
    3036 
    3037 #: tpl/cdn/cf.tpl.php:34
    3038 msgid "Your API key / token is used to access %s APIs."
    3039 msgstr ""
    3040 
    3041 #: tpl/cdn/cf.tpl.php:35
    3042 msgid "Get it from <a %1$s>%2$s</a>."
    3043 msgstr ""
    3044 
    3045 #: tpl/cdn/cf.tpl.php:36
    3046 msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
    3047 msgstr ""
    3048 
    3049 #: tpl/cdn/cf.tpl.php:41
    3050 msgid "Email Address"
    3051 msgstr ""
    3052 
    3053 #: tpl/cdn/cf.tpl.php:45
    3054 msgid "Your Email address on %s."
    3055 msgstr ""
    3056 
    3057 #: tpl/cdn/cf.tpl.php:46
    3058 msgid "Optional when API token used."
    3059 msgstr ""
    3060 
    3061 #: tpl/cdn/cf.tpl.php:51
    3062 msgid "Domain"
    3063 msgstr ""
    3064 
    3065 #: tpl/cdn/cf.tpl.php:59
    3066 msgid "You can just type part of the domain."
    3067 msgstr ""
    3068 
    3069 #: tpl/cdn/cf.tpl.php:60
    3070 msgid "Once saved, it will be matched with the current list and completed automatically."
    3071 msgstr ""
    3072 
    3073 #: tpl/cdn/cf.tpl.php:86
    3074 msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
    3075 msgstr ""
    3076 
    3077 #: tpl/cdn/cf.tpl.php:91
    3078 msgid "Cloudflare Domain"
    3079 msgstr ""
    3080 
    3081 #: tpl/cdn/cf.tpl.php:92
    3082 msgid "Cloudflare Zone"
    3083 msgstr ""
    3084 
    3085 #: tpl/cdn/cf.tpl.php:95
    3086 msgid "Development Mode"
    3087 msgstr ""
    3088 
    3089 #: tpl/cdn/cf.tpl.php:97
    3090 msgid "Turn ON"
    3091 msgstr ""
    3092 
    3093 #: tpl/cdn/cf.tpl.php:100
    3094 msgid "Turn OFF"
    3095 msgstr ""
    3096 
    3097 #: tpl/cdn/cf.tpl.php:103
    3098 msgid "Check Status"
    3099 msgstr ""
    3100 
    3101 #: tpl/cdn/cf.tpl.php:112
    3102 msgid "Current status is %1$s since %2$s."
    3103 msgstr ""
    3104 
    3105 #: tpl/cdn/cf.tpl.php:117
    3106 msgid "Current status is %s."
    3107 msgstr ""
    3108 
    3109 #: tpl/cdn/cf.tpl.php:118
    3110 msgid "Development mode will be automatically turned off in %s."
    3111 msgstr ""
    3112 
    3113 #: tpl/cdn/cf.tpl.php:126
    3114 msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
    3115 msgstr ""
    3116 
    3117 #: tpl/cdn/cf.tpl.php:127
    3118 msgid "Development Mode will be turned off automatically after three hours."
    3119 msgstr ""
    3120 
    3121 #: tpl/cdn/cf.tpl.php:133
    3122 msgid "Cloudflare Cache"
    3123 msgstr ""
    3124 
    3125 #: tpl/cdn/cf.tpl.php:139
    3126 msgid "Purge Everything"
    3127 msgstr ""
    3128 
    3129 #: tpl/cdn/entry.tpl.php:8
    3130 msgid "QUIC.cloud"
    3131 msgstr ""
    3132 
    3133 #: tpl/cdn/entry.tpl.php:10
    3134 msgid "Other Static CDN"
    3135 msgstr ""
    3136 
    3137 #: tpl/cdn/entry.tpl.php:17
    3138 msgid "LiteSpeed Cache CDN"
    31393149msgstr ""
    31403150
     
    32023212
    32033213#: tpl/cdn/qc.tpl.php:20
    3204 #: tpl/dash/dashboard.tpl.php:811
     3214#: tpl/dash/dashboard.tpl.php:818
    32053215msgid "Refresh Status"
    32063216msgstr ""
     
    32253235
    32263236#: tpl/cdn/qc.tpl.php:32
    3227 #: tpl/dash/dashboard.tpl.php:145
    32283237#: tpl/general/online.tpl.php:46
    32293238#: tpl/general/online.tpl.php:132
     
    32393248
    32403249#: tpl/cdn/qc.tpl.php:35
    3241 #: tpl/dash/dashboard.tpl.php:154
     3250#: tpl/dash/dashboard.tpl.php:156
    32423251#: tpl/general/online.tpl.php:19
    32433252msgid "QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud."
     
    32453254
    32463255#: tpl/cdn/qc.tpl.php:36
    3247 #: tpl/dash/dashboard.tpl.php:156
     3256#: tpl/dash/dashboard.tpl.php:158
    32483257msgid "Learn More about QUIC.cloud"
    32493258msgstr ""
     
    32623271
    32633272#: tpl/cdn/qc.tpl.php:51
    3264 #: tpl/dash/dashboard.tpl.php:789
     3273#: tpl/dash/dashboard.tpl.php:796
    32653274msgid "Enable QUIC.cloud CDN"
    32663275msgstr ""
     
    32973306#: tpl/cdn/qc.tpl.php:103
    32983307#: tpl/cdn/qc.tpl.php:106
    3299 #: tpl/dash/dashboard.tpl.php:338
     3308#: tpl/dash/dashboard.tpl.php:345
    33003309#: tpl/general/online.tpl.php:140
    33013310msgid "Link to QUIC.cloud"
     
    33253334
    33263335#: tpl/crawler/blacklist.tpl.php:25
    3327 #: tpl/img_optm/summary.tpl.php:166
     3336#: tpl/img_optm/summary.tpl.php:174
    33283337msgid "Total"
    33293338msgstr ""
     
    34133422#: tpl/crawler/map.tpl.php:68
    34143423#: tpl/dash/dashboard.tpl.php:74
    3415 #: tpl/dash/dashboard.tpl.php:733
     3424#: tpl/dash/dashboard.tpl.php:740
    34163425msgid "Crawler Status"
    34173426msgstr ""
     
    35093518#: tpl/crawler/summary.tpl.php:90
    35103519#: tpl/dash/dashboard.tpl.php:87
    3511 #: tpl/dash/dashboard.tpl.php:746
     3520#: tpl/dash/dashboard.tpl.php:753
    35123521msgid "Current crawler started at"
    35133522msgstr ""
     
    35193528#: tpl/crawler/summary.tpl.php:102
    35203529#: tpl/dash/dashboard.tpl.php:94
    3521 #: tpl/dash/dashboard.tpl.php:753
     3530#: tpl/dash/dashboard.tpl.php:760
    35223531msgid "Last interval"
    35233532msgstr ""
     
    35253534#: tpl/crawler/summary.tpl.php:109
    35263535#: tpl/dash/dashboard.tpl.php:101
    3527 #: tpl/dash/dashboard.tpl.php:760
     3536#: tpl/dash/dashboard.tpl.php:767
    35283537msgid "Ended reason"
    35293538msgstr ""
     
    36143623
    36153624#: tpl/dash/dashboard.tpl.php:46
    3616 #: tpl/dash/dashboard.tpl.php:577
     3625#: tpl/dash/dashboard.tpl.php:584
    36173626msgid "Cache Status"
    36183627msgstr ""
     
    36203629#: tpl/dash/dashboard.tpl.php:47
    36213630#: tpl/dash/dashboard.tpl.php:75
    3622 #: tpl/dash/dashboard.tpl.php:499
    3623 #: tpl/dash/dashboard.tpl.php:578
    3624 #: tpl/dash/dashboard.tpl.php:606
    3625 #: tpl/dash/dashboard.tpl.php:638
    3626 #: tpl/dash/dashboard.tpl.php:670
    3627 #: tpl/dash/dashboard.tpl.php:702
    3628 #: tpl/dash/dashboard.tpl.php:734
    3629 #: tpl/dash/dashboard.tpl.php:781
     3631#: tpl/dash/dashboard.tpl.php:506
     3632#: tpl/dash/dashboard.tpl.php:585
     3633#: tpl/dash/dashboard.tpl.php:613
     3634#: tpl/dash/dashboard.tpl.php:645
     3635#: tpl/dash/dashboard.tpl.php:677
     3636#: tpl/dash/dashboard.tpl.php:709
     3637#: tpl/dash/dashboard.tpl.php:741
     3638#: tpl/dash/dashboard.tpl.php:788
    36303639msgid "More"
    36313640msgstr ""
    36323641
    36333642#: tpl/dash/dashboard.tpl.php:52
    3634 #: tpl/dash/dashboard.tpl.php:583
     3643#: tpl/dash/dashboard.tpl.php:590
    36353644msgid "Public Cache"
    36363645msgstr ""
    36373646
    36383647#: tpl/dash/dashboard.tpl.php:53
    3639 #: tpl/dash/dashboard.tpl.php:584
     3648#: tpl/dash/dashboard.tpl.php:591
    36403649msgid "Private Cache"
    36413650msgstr ""
    36423651
    36433652#: tpl/dash/dashboard.tpl.php:79
    3644 #: tpl/dash/dashboard.tpl.php:738
     3653#: tpl/dash/dashboard.tpl.php:745
    36453654msgid "Crawler(s)"
    36463655msgstr ""
    36473656
    36483657#: tpl/dash/dashboard.tpl.php:82
    3649 #: tpl/dash/dashboard.tpl.php:741
     3658#: tpl/dash/dashboard.tpl.php:748
    36503659msgid "Currently active crawler"
    36513660msgstr ""
    36523661
    36533662#: tpl/dash/dashboard.tpl.php:108
    3654 #: tpl/dash/dashboard.tpl.php:767
     3663#: tpl/dash/dashboard.tpl.php:774
    36553664msgid "<b>Last crawled:</b> %d item(s)"
    36563665msgstr ""
    36573666
    36583667#: tpl/dash/dashboard.tpl.php:120
    3659 #: tpl/dash/dashboard.tpl.php:829
     3668#: tpl/dash/dashboard.tpl.php:836
    36603669msgid "News"
    36613670msgstr ""
    36623671
    3663 #: tpl/dash/dashboard.tpl.php:168
     3672#: tpl/dash/dashboard.tpl.php:145
     3673msgid "Free monthly quota available. Can also be used anonymously (no email required)."
     3674msgstr ""
     3675
     3676#: tpl/dash/dashboard.tpl.php:152
     3677msgid "Do not show this again"
     3678msgstr ""
     3679
     3680#: tpl/dash/dashboard.tpl.php:170
    36643681msgid "QUIC.cloud Service Usage Statistics"
    36653682msgstr ""
    36663683
    3667 #: tpl/dash/dashboard.tpl.php:170
     3684#: tpl/dash/dashboard.tpl.php:172
    36683685msgid "Refresh Usage"
    36693686msgstr ""
    36703687
    3671 #: tpl/dash/dashboard.tpl.php:171
     3688#: tpl/dash/dashboard.tpl.php:173
    36723689msgid "Sync data from Cloud"
    36733690msgstr ""
    36743691
    3675 #: tpl/dash/dashboard.tpl.php:183
     3692#: tpl/dash/dashboard.tpl.php:181
     3693msgid "The features below are provided by"
     3694msgstr ""
     3695
     3696#: tpl/dash/dashboard.tpl.php:190
    36763697#: tpl/dash/network_dash.tpl.php:29
    36773698msgid "CDN Bandwidth"
    36783699msgstr ""
    36793700
    3680 #: tpl/dash/dashboard.tpl.php:184
    3681 #: tpl/dash/dashboard.tpl.php:669
     3701#: tpl/dash/dashboard.tpl.php:191
     3702#: tpl/dash/dashboard.tpl.php:676
    36823703#: tpl/dash/network_dash.tpl.php:30
    36833704msgid "Low Quality Image Placeholder"
    36843705msgstr ""
    36853706
    3686 #: tpl/dash/dashboard.tpl.php:242
     3707#: tpl/dash/dashboard.tpl.php:249
    36873708#: tpl/dash/network_dash.tpl.php:78
    36883709msgid "Fast Queue Usage"
    36893710msgstr ""
    36903711
    3691 #: tpl/dash/dashboard.tpl.php:242
     3712#: tpl/dash/dashboard.tpl.php:249
    36923713#: tpl/dash/network_dash.tpl.php:78
    36933714msgid "Usage"
    36943715msgstr ""
    36953716
    3696 #: tpl/dash/dashboard.tpl.php:255
     3717#: tpl/dash/dashboard.tpl.php:262
    36973718#: tpl/dash/network_dash.tpl.php:90
    36983719msgid "PAYG Balance"
    36993720msgstr ""
    37003721
    3701 #: tpl/dash/dashboard.tpl.php:256
     3722#: tpl/dash/dashboard.tpl.php:263
    37023723msgid "PAYG used this month"
    37033724msgstr ""
    37043725
    3705 #: tpl/dash/dashboard.tpl.php:256
     3726#: tpl/dash/dashboard.tpl.php:263
    37063727msgid "PAYG balance and usage not included in above quota calculation."
    37073728msgstr ""
    37083729
    3709 #: tpl/dash/dashboard.tpl.php:258
     3730#: tpl/dash/dashboard.tpl.php:265
    37103731#: tpl/dash/network_dash.tpl.php:93
    37113732msgid "Pay as You Go Usage Statistics"
    37123733msgstr ""
    37133734
    3714 #: tpl/dash/dashboard.tpl.php:276
     3735#: tpl/dash/dashboard.tpl.php:283
    37153736#: tpl/dash/network_dash.tpl.php:100
    37163737msgid "Total Usage"
    37173738msgstr ""
    37183739
    3719 #: tpl/dash/dashboard.tpl.php:277
     3740#: tpl/dash/dashboard.tpl.php:284
    37203741#: tpl/dash/network_dash.tpl.php:101
    37213742msgid "Total images optimized in this month"
    37223743msgstr ""
    37233744
    3724 #: tpl/dash/dashboard.tpl.php:286
     3745#: tpl/dash/dashboard.tpl.php:293
    37253746msgid "Remaining Daily Quota"
    37263747msgstr ""
    37273748
    3728 #: tpl/dash/dashboard.tpl.php:297
     3749#: tpl/dash/dashboard.tpl.php:304
    37293750msgid "Partner Benefits Provided by"
    37303751msgstr ""
    37313752
    3732 #: tpl/dash/dashboard.tpl.php:329
    3733 msgid "Activate QUIC.cloud"
    3734 msgstr ""
    3735 
    3736 #: tpl/dash/dashboard.tpl.php:334
     3753#: tpl/dash/dashboard.tpl.php:336
     3754msgid "Enable QUIC.cloud Services"
     3755msgstr ""
     3756
     3757#: tpl/dash/dashboard.tpl.php:341
    37373758#: tpl/general/online.tpl.php:115
    37383759msgid "Go to QUIC.cloud dashboard"
    37393760msgstr ""
    37403761
    3741 #: tpl/dash/dashboard.tpl.php:358
     3762#: tpl/dash/dashboard.tpl.php:365
    37423763msgid "Current closest Cloud server is %s.&#10;Click to redetect."
    37433764msgstr ""
    37443765
    3745 #: tpl/dash/dashboard.tpl.php:358
    3746 #: tpl/img_optm/summary.tpl.php:43
    3747 #: tpl/page_optm/settings_css.tpl.php:103
    3748 #: tpl/page_optm/settings_css.tpl.php:220
     3766#: tpl/dash/dashboard.tpl.php:365
     3767#: tpl/img_optm/summary.tpl.php:44
     3768#: tpl/page_optm/settings_css.tpl.php:106
     3769#: tpl/page_optm/settings_css.tpl.php:230
    37493770#: tpl/page_optm/settings_media.tpl.php:182
    3750 #: tpl/page_optm/settings_vpi.tpl.php:48
     3771#: tpl/page_optm/settings_vpi.tpl.php:53
    37513772msgid "Are you sure you want to redetect the closest cloud server for this service?"
    37523773msgstr ""
    37533774
    3754 #: tpl/dash/dashboard.tpl.php:358
     3775#: tpl/dash/dashboard.tpl.php:365
    37553776#: tpl/general/online.tpl.php:24
    3756 #: tpl/img_optm/summary.tpl.php:43
    3757 #: tpl/img_optm/summary.tpl.php:45
    3758 #: tpl/page_optm/settings_css.tpl.php:103
    3759 #: tpl/page_optm/settings_css.tpl.php:220
     3777#: tpl/img_optm/summary.tpl.php:44
     3778#: tpl/img_optm/summary.tpl.php:46
     3779#: tpl/page_optm/settings_css.tpl.php:106
     3780#: tpl/page_optm/settings_css.tpl.php:230
    37603781#: tpl/page_optm/settings_media.tpl.php:182
    3761 #: tpl/page_optm/settings_vpi.tpl.php:48
     3782#: tpl/page_optm/settings_vpi.tpl.php:53
    37623783msgid "Redetect"
    37633784msgstr ""
    37643785
    3765 #: tpl/dash/dashboard.tpl.php:395
     3786#: tpl/dash/dashboard.tpl.php:402
    37663787msgid "You must be using one of the following products in order to measure Page Load Time:"
    37673788msgstr ""
    37683789
    3769 #: tpl/dash/dashboard.tpl.php:414
    3770 #: tpl/dash/dashboard.tpl.php:483
    3771 #: tpl/dash/dashboard.tpl.php:629
    3772 #: tpl/dash/dashboard.tpl.php:661
    3773 #: tpl/dash/dashboard.tpl.php:693
    3774 #: tpl/dash/dashboard.tpl.php:725
     3790#: tpl/dash/dashboard.tpl.php:421
     3791#: tpl/dash/dashboard.tpl.php:490
     3792#: tpl/dash/dashboard.tpl.php:636
     3793#: tpl/dash/dashboard.tpl.php:668
     3794#: tpl/dash/dashboard.tpl.php:700
     3795#: tpl/dash/dashboard.tpl.php:732
    37753796msgid "Last requested"
    37763797msgstr ""
    37773798
    3778 #: tpl/dash/dashboard.tpl.php:420
    3779 #: tpl/dash/dashboard.tpl.php:488
     3799#: tpl/dash/dashboard.tpl.php:427
     3800#: tpl/dash/dashboard.tpl.php:495
    37803801msgid "Refresh"
    37813802msgstr ""
    37823803
    3783 #: tpl/dash/dashboard.tpl.php:421
     3804#: tpl/dash/dashboard.tpl.php:428
    37843805msgid "Refresh page load time"
    37853806msgstr ""
    37863807
    3787 #: tpl/dash/dashboard.tpl.php:489
     3808#: tpl/dash/dashboard.tpl.php:496
    37883809msgid "Refresh page score"
    37893810msgstr ""
    37903811
    3791 #: tpl/dash/dashboard.tpl.php:498
     3812#: tpl/dash/dashboard.tpl.php:505
    37923813#: tpl/img_optm/entry.tpl.php:8
    37933814msgid "Image Optimization Summary"
    37943815msgstr ""
    37953816
    3796 #: tpl/dash/dashboard.tpl.php:510
    3797 #: tpl/img_optm/summary.tpl.php:64
     3817#: tpl/dash/dashboard.tpl.php:517
     3818#: tpl/img_optm/summary.tpl.php:66
     3819#: tpl/img_optm/summary.tpl.php:71
    37983820msgid "Send Optimization Request"
    37993821msgstr ""
    38003822
    3801 #: tpl/dash/dashboard.tpl.php:516
    3802 #: tpl/img_optm/summary.tpl.php:269
     3823#: tpl/dash/dashboard.tpl.php:523
     3824#: tpl/img_optm/summary.tpl.php:277
    38033825msgid "Total Reduction"
    38043826msgstr ""
    38053827
    3806 #: tpl/dash/dashboard.tpl.php:519
    3807 #: tpl/img_optm/summary.tpl.php:272
     3828#: tpl/dash/dashboard.tpl.php:526
     3829#: tpl/img_optm/summary.tpl.php:280
    38083830msgid "Images Pulled"
    38093831msgstr ""
    38103832
    3811 #: tpl/dash/dashboard.tpl.php:547
    3812 #: tpl/img_optm/summary.tpl.php:275
     3833#: tpl/dash/dashboard.tpl.php:554
     3834#: tpl/img_optm/summary.tpl.php:283
    38133835msgid "Last Request"
    38143836msgstr ""
    38153837
    3816 #: tpl/dash/dashboard.tpl.php:550
     3838#: tpl/dash/dashboard.tpl.php:557
    38173839msgid "Last Pull"
    38183840msgstr ""
    38193841
    3820 #: tpl/dash/dashboard.tpl.php:605
     3842#: tpl/dash/dashboard.tpl.php:612
    38213843#: tpl/toolbox/purge.tpl.php:62
    38223844msgid "Critical CSS"
    38233845msgstr ""
    38243846
    3825 #: tpl/dash/dashboard.tpl.php:611
    3826 #: tpl/dash/dashboard.tpl.php:643
    3827 #: tpl/dash/dashboard.tpl.php:675
    3828 #: tpl/dash/dashboard.tpl.php:707
    3829 #: tpl/page_optm/settings_css.tpl.php:94
    3830 #: tpl/page_optm/settings_css.tpl.php:211
     3847#: tpl/dash/dashboard.tpl.php:618
     3848#: tpl/dash/dashboard.tpl.php:650
     3849#: tpl/dash/dashboard.tpl.php:682
     3850#: tpl/dash/dashboard.tpl.php:714
     3851#: tpl/page_optm/settings_css.tpl.php:97
     3852#: tpl/page_optm/settings_css.tpl.php:221
    38313853#: tpl/page_optm/settings_media.tpl.php:176
    3832 #: tpl/page_optm/settings_vpi.tpl.php:42
     3854#: tpl/page_optm/settings_vpi.tpl.php:47
    38333855msgid "Last generated"
    3834 msgstr ""
    3835 
    3836 #: tpl/dash/dashboard.tpl.php:614
    3837 #: tpl/dash/dashboard.tpl.php:646
    3838 #: tpl/dash/dashboard.tpl.php:678
    3839 #: tpl/dash/dashboard.tpl.php:710
    3840 msgid "Time to execute previous request"
    3841 msgstr ""
    3842 
    3843 #: tpl/dash/dashboard.tpl.php:619
    3844 #: tpl/dash/dashboard.tpl.php:651
    3845 #: tpl/dash/dashboard.tpl.php:683
    3846 #: tpl/dash/dashboard.tpl.php:715
    3847 msgid "Requests in queue"
    38483856msgstr ""
    38493857
     
    38523860#: tpl/dash/dashboard.tpl.php:685
    38533861#: tpl/dash/dashboard.tpl.php:717
     3862msgid "Time to execute previous request"
     3863msgstr ""
     3864
     3865#: tpl/dash/dashboard.tpl.php:626
     3866#: tpl/dash/dashboard.tpl.php:658
     3867#: tpl/dash/dashboard.tpl.php:690
     3868#: tpl/dash/dashboard.tpl.php:722
     3869msgid "Requests in queue"
     3870msgstr ""
     3871
     3872#: tpl/dash/dashboard.tpl.php:628
     3873#: tpl/dash/dashboard.tpl.php:660
     3874#: tpl/dash/dashboard.tpl.php:692
     3875#: tpl/dash/dashboard.tpl.php:724
    38543876msgid "Force cron"
    38553877msgstr ""
    38563878
    3857 #: tpl/dash/dashboard.tpl.php:637
     3879#: tpl/dash/dashboard.tpl.php:644
    38583880#: tpl/toolbox/purge.tpl.php:71
    38593881msgid "Unique CSS"
    38603882msgstr ""
    38613883
    3862 #: tpl/dash/dashboard.tpl.php:701
     3884#: tpl/dash/dashboard.tpl.php:708
    38633885msgid "Viewport Image"
    38643886msgstr ""
    38653887
    3866 #: tpl/dash/dashboard.tpl.php:795
     3888#: tpl/dash/dashboard.tpl.php:802
    38673889msgid "Best available WordPress performance"
    38683890msgstr ""
    38693891
    3870 #: tpl/dash/dashboard.tpl.php:798
     3892#: tpl/dash/dashboard.tpl.php:805
    38713893msgid "Globally fast TTFB, easy setup, and <a %s>more</a>!"
    38723894msgstr ""
    38733895
    3874 #: tpl/dash/dashboard.tpl.php:812
     3896#: tpl/dash/dashboard.tpl.php:819
    38753897msgid "Refresh QUIC.cloud status"
    38763898msgstr ""
     
    42564278#: tpl/general/settings.tpl.php:94
    42574279#: tpl/page_optm/settings_media.tpl.php:240
    4258 #: tpl/page_optm/settings_vpi.tpl.php:32
     4280#: tpl/page_optm/settings_vpi.tpl.php:37
    42594281msgid "Notice"
    42604282msgstr ""
     
    42624284#: tpl/general/settings.tpl.php:63
    42634285#: tpl/page_optm/settings_media.tpl.php:240
    4264 #: tpl/page_optm/settings_vpi.tpl.php:32
     4286#: tpl/page_optm/settings_vpi.tpl.php:37
    42654287msgid "%s must be turned ON for this setting to work."
    42664288msgstr ""
     
    43694391
    43704392#: tpl/img_optm/settings.media_webp.tpl.php:26
    4371 #: tpl/img_optm/summary.tpl.php:319
     4393#: tpl/img_optm/summary.tpl.php:327
    43724394msgid "Destroy All Optimization Data"
    43734395msgstr ""
    43744396
    43754397#: tpl/img_optm/settings.media_webp.tpl.php:26
    4376 #: tpl/img_optm/summary.tpl.php:310
     4398#: tpl/img_optm/summary.tpl.php:318
    43774399msgid "Soft Reset Optimization Counter"
    43784400msgstr ""
     
    43914413
    43924414#: tpl/img_optm/settings.tpl.php:57
    4393 #: tpl/img_optm/summary.tpl.php:196
     4415#: tpl/img_optm/summary.tpl.php:204
    43944416msgid "This is irreversible."
    43954417msgstr ""
    43964418
    43974419#: tpl/img_optm/settings.tpl.php:58
    4398 #: tpl/img_optm/summary.tpl.php:197
     4420#: tpl/img_optm/summary.tpl.php:205
    43994421msgid "You will be unable to Revert Optimization once the backups are deleted!"
    44004422msgstr ""
     
    44244446msgstr ""
    44254447
    4426 #: tpl/img_optm/summary.tpl.php:43
    4427 #: tpl/page_optm/settings_css.tpl.php:103
    4428 #: tpl/page_optm/settings_css.tpl.php:220
     4448#: tpl/img_optm/summary.tpl.php:44
     4449#: tpl/page_optm/settings_css.tpl.php:106
     4450#: tpl/page_optm/settings_css.tpl.php:230
    44294451#: tpl/page_optm/settings_media.tpl.php:182
    4430 #: tpl/page_optm/settings_vpi.tpl.php:48
     4452#: tpl/page_optm/settings_vpi.tpl.php:53
    44314453msgid "Current closest Cloud server is %s.&#10; Click to redetect."
    44324454msgstr ""
    44334455
    4434 #: tpl/img_optm/summary.tpl.php:47
     4456#: tpl/img_optm/summary.tpl.php:48
    44354457msgid "Optimize images with our QUIC.cloud server"
    44364458msgstr ""
    44374459
    4438 #: tpl/img_optm/summary.tpl.php:52
     4460#: tpl/img_optm/summary.tpl.php:53
    44394461msgid "You can request a maximum of %s images at once."
    44404462msgstr ""
    44414463
    4442 #: tpl/img_optm/summary.tpl.php:57
     4464#: tpl/img_optm/summary.tpl.php:58
    44434465msgid "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 image groups allowed in a single request is limited."
    44444466msgstr ""
    44454467
    4446 #: tpl/img_optm/summary.tpl.php:58
     4468#: tpl/img_optm/summary.tpl.php:59
    44474469msgid "Current limit is"
    44484470msgstr ""
    44494471
    44504472#: tpl/img_optm/summary.tpl.php:67
     4473#: tpl/page_optm/settings_css.tpl.php:136
     4474#: tpl/page_optm/settings_css.tpl.php:260
     4475#: tpl/page_optm/settings_vpi.tpl.php:82
     4476msgid "Available after %d second(s)"
     4477msgstr ""
     4478
     4479#: tpl/img_optm/summary.tpl.php:75
    44514480msgid "Only press the button if the pull cron job is disabled."
    44524481msgstr ""
    44534482
    4454 #: tpl/img_optm/summary.tpl.php:67
     4483#: tpl/img_optm/summary.tpl.php:75
    44554484msgid "Images will be pulled automatically if the cron job is running."
    44564485msgstr ""
    44574486
    4458 #: tpl/img_optm/summary.tpl.php:68
     4487#: tpl/img_optm/summary.tpl.php:76
    44594488msgid "Pull Images"
    44604489msgstr ""
    44614490
    4462 #: tpl/img_optm/summary.tpl.php:74
     4491#: tpl/img_optm/summary.tpl.php:82
    44634492msgid "Optimization Status"
    44644493msgstr ""
    44654494
    4466 #: tpl/img_optm/summary.tpl.php:107
     4495#: tpl/img_optm/summary.tpl.php:115
    44674496msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
    44684497msgstr ""
    44694498
    4470 #: tpl/img_optm/summary.tpl.php:108
     4499#: tpl/img_optm/summary.tpl.php:116
    44714500msgid "This process is automatic."
    44724501msgstr ""
    44734502
    4474 #: tpl/img_optm/summary.tpl.php:123
     4503#: tpl/img_optm/summary.tpl.php:131
    44754504msgid "Last pull initiated by cron at %s."
    44764505msgstr ""
    44774506
    4478 #: tpl/img_optm/summary.tpl.php:148
     4507#: tpl/img_optm/summary.tpl.php:156
    44794508msgid "Storage Optimization"
    44804509msgstr ""
    44814510
    4482 #: tpl/img_optm/summary.tpl.php:152
     4511#: tpl/img_optm/summary.tpl.php:160
    44834512msgid "A backup of each image is saved before it is optimized."
    44844513msgstr ""
    44854514
    4486 #: tpl/img_optm/summary.tpl.php:159
     4515#: tpl/img_optm/summary.tpl.php:167
    44874516msgid "Last calculated"
    44884517msgstr ""
    44894518
    4490 #: tpl/img_optm/summary.tpl.php:163
    4491 #: tpl/img_optm/summary.tpl.php:208
     4519#: tpl/img_optm/summary.tpl.php:171
     4520#: tpl/img_optm/summary.tpl.php:216
    44924521msgid "Files"
    44934522msgstr ""
    44944523
    4495 #: tpl/img_optm/summary.tpl.php:174
     4524#: tpl/img_optm/summary.tpl.php:182
    44964525msgid "Calculate Original Image Storage"
    44974526msgstr ""
    44984527
    4499 #: tpl/img_optm/summary.tpl.php:175
     4528#: tpl/img_optm/summary.tpl.php:183
    45004529msgid "Calculate Backups Disk Space"
    45014530msgstr ""
    45024531
    4503 #: tpl/img_optm/summary.tpl.php:182
     4532#: tpl/img_optm/summary.tpl.php:190
    45044533msgid "Image Thumbnail Group Sizes"
    45054534msgstr ""
    45064535
    4507 #: tpl/img_optm/summary.tpl.php:193
     4536#: tpl/img_optm/summary.tpl.php:201
    45084537msgid "Delete all backups of the original images"
    45094538msgstr ""
    45104539
    4511 #: tpl/img_optm/summary.tpl.php:205
     4540#: tpl/img_optm/summary.tpl.php:213
    45124541#: tpl/page_optm/settings_localization.tpl.php:51
    45134542msgid "Last ran"
    45144543msgstr ""
    45154544
    4516 #: tpl/img_optm/summary.tpl.php:211
     4545#: tpl/img_optm/summary.tpl.php:219
    45174546msgid "Saved"
    45184547msgstr ""
    45194548
    4520 #: tpl/img_optm/summary.tpl.php:215
     4549#: tpl/img_optm/summary.tpl.php:223
    45214550msgid "Are you sure you want to remove all image backups?"
    45224551msgstr ""
    45234552
    4524 #: tpl/img_optm/summary.tpl.php:216
     4553#: tpl/img_optm/summary.tpl.php:224
    45254554msgid "Remove Original Image Backups"
    45264555msgstr ""
    45274556
    4528 #: tpl/img_optm/summary.tpl.php:227
     4557#: tpl/img_optm/summary.tpl.php:235
    45294558msgid "Image Information"
    45304559msgstr ""
    45314560
    4532 #: tpl/img_optm/summary.tpl.php:236
     4561#: tpl/img_optm/summary.tpl.php:244
    45334562msgid "Image groups total"
    45344563msgstr ""
    45354564
    4536 #: tpl/img_optm/summary.tpl.php:241
     4565#: tpl/img_optm/summary.tpl.php:249
    45374566msgid "Congratulations, all gathered!"
    45384567msgstr ""
    45394568
    4540 #: tpl/img_optm/summary.tpl.php:244
     4569#: tpl/img_optm/summary.tpl.php:252
    45414570msgid "What is a group?"
    45424571msgstr ""
    45434572
    4544 #: tpl/img_optm/summary.tpl.php:246
     4573#: tpl/img_optm/summary.tpl.php:254
    45454574msgid "What is an image group?"
    45464575msgstr ""
    45474576
    4548 #: tpl/img_optm/summary.tpl.php:250
    4549 #: tpl/img_optm/summary.tpl.php:314
     4577#: tpl/img_optm/summary.tpl.php:258
     4578#: tpl/img_optm/summary.tpl.php:322
    45504579msgid "Current image post id position"
    45514580msgstr ""
    45524581
    4553 #: tpl/img_optm/summary.tpl.php:251
     4582#: tpl/img_optm/summary.tpl.php:259
    45544583msgid "Maximum image post id"
    45554584msgstr ""
    45564585
    4557 #: tpl/img_optm/summary.tpl.php:257
     4586#: tpl/img_optm/summary.tpl.php:265
    45584587msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
    45594588msgstr ""
    45604589
    4561 #: tpl/img_optm/summary.tpl.php:258
     4590#: tpl/img_optm/summary.tpl.php:266
    45624591msgid "Rescan New Thumbnails"
    45634592msgstr ""
    45644593
    4565 #: tpl/img_optm/summary.tpl.php:266
     4594#: tpl/img_optm/summary.tpl.php:274
    45664595msgid "Optimization Summary"
    45674596msgstr ""
    45684597
    4569 #: tpl/img_optm/summary.tpl.php:278
     4598#: tpl/img_optm/summary.tpl.php:286
    45704599msgid "Last Pulled"
    45714600msgstr ""
    45724601
    4573 #: tpl/img_optm/summary.tpl.php:283
     4602#: tpl/img_optm/summary.tpl.php:291
    45744603msgid "Results can be checked in <a %s>Media Library</a>."
    45754604msgstr ""
    45764605
    4577 #: tpl/img_optm/summary.tpl.php:289
     4606#: tpl/img_optm/summary.tpl.php:297
    45784607msgid "Optimization Tools"
    45794608msgstr ""
    45804609
    4581 #: tpl/img_optm/summary.tpl.php:292
     4610#: tpl/img_optm/summary.tpl.php:300
    45824611msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
    45834612msgstr ""
    45844613
    4585 #: tpl/img_optm/summary.tpl.php:297
     4614#: tpl/img_optm/summary.tpl.php:305
    45864615msgid "Use original images (unoptimized) on your site"
    45874616msgstr ""
    45884617
    4589 #: tpl/img_optm/summary.tpl.php:298
     4618#: tpl/img_optm/summary.tpl.php:306
    45904619msgid "Use Original Files"
    45914620msgstr ""
    45924621
    4593 #: tpl/img_optm/summary.tpl.php:301
     4622#: tpl/img_optm/summary.tpl.php:309
    45944623msgid "Switch back to using optimized images on your site"
    45954624msgstr ""
    45964625
    4597 #: tpl/img_optm/summary.tpl.php:302
     4626#: tpl/img_optm/summary.tpl.php:310
    45984627msgid "Use Optimized Files"
    45994628msgstr ""
    46004629
    4601 #: tpl/img_optm/summary.tpl.php:314
     4630#: tpl/img_optm/summary.tpl.php:322
    46024631msgid "This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action."
    46034632msgstr ""
    46044633
    4605 #: tpl/img_optm/summary.tpl.php:318
     4634#: tpl/img_optm/summary.tpl.php:326
    46064635msgid "Are you sure to destroy all optimized images?"
    46074636msgstr ""
    46084637
    4609 #: tpl/img_optm/summary.tpl.php:323
     4638#: tpl/img_optm/summary.tpl.php:331
    46104639msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
    46114640msgstr ""
     
    47164745
    47174746#: tpl/page_optm/entry.tpl.php:6
    4718 #: tpl/page_optm/settings_css.tpl.php:22
     4747#: tpl/page_optm/settings_css.tpl.php:25
    47194748msgid "CSS Settings"
    47204749msgstr ""
     
    47564785msgstr ""
    47574786
    4758 #: tpl/page_optm/settings_css.tpl.php:38
     4787#: tpl/page_optm/settings_css.tpl.php:41
    47594788msgid "Minify CSS files and inline CSS code."
    47604789msgstr ""
    47614790
    4762 #: tpl/page_optm/settings_css.tpl.php:52
     4791#: tpl/page_optm/settings_css.tpl.php:55
    47634792msgid "Combine CSS files and inline CSS code."
    47644793msgstr ""
    47654794
    4766 #: tpl/page_optm/settings_css.tpl.php:53
     4795#: tpl/page_optm/settings_css.tpl.php:56
    47674796#: tpl/page_optm/settings_js.tpl.php:40
    47684797msgid "How to Fix Problems Caused by CSS/JS Optimization."
    47694798msgstr ""
    47704799
    4771 #: tpl/page_optm/settings_css.tpl.php:74
     4800#: tpl/page_optm/settings_css.tpl.php:77
    47724801msgid "Use QUIC.cloud online service to generate unique CSS."
    47734802msgstr ""
    47744803
    4775 #: tpl/page_optm/settings_css.tpl.php:75
     4804#: tpl/page_optm/settings_css.tpl.php:78
    47764805msgid "This will drop the unused CSS on each page from the combined file."
    47774806msgstr ""
    47784807
    4779 #: tpl/page_optm/settings_css.tpl.php:77
     4808#: tpl/page_optm/settings_css.tpl.php:80
    47804809msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
    47814810msgstr ""
    47824811
    4783 #: tpl/page_optm/settings_css.tpl.php:79
     4812#: tpl/page_optm/settings_css.tpl.php:82
    47844813msgid "Filter %s available for UCSS per page type generation."
    47854814msgstr ""
    47864815
    4787 #: tpl/page_optm/settings_css.tpl.php:84
     4816#: tpl/page_optm/settings_css.tpl.php:87
    47884817msgid "This option is bypassed because %1$s option is %2$s."
    47894818msgstr ""
    47904819
    4791 #: tpl/page_optm/settings_css.tpl.php:97
    4792 #: tpl/page_optm/settings_css.tpl.php:214
     4820#: tpl/page_optm/settings_css.tpl.php:100
     4821#: tpl/page_optm/settings_css.tpl.php:224
    47934822msgid "Last requested cost"
    47944823msgstr ""
    47954824
    4796 #: tpl/page_optm/settings_css.tpl.php:109
    4797 #: tpl/page_optm/settings_css.tpl.php:226
    4798 #: tpl/page_optm/settings_vpi.tpl.php:54
     4825#: tpl/page_optm/settings_css.tpl.php:112
     4826#: tpl/page_optm/settings_css.tpl.php:236
     4827#: tpl/page_optm/settings_vpi.tpl.php:59
    47994828msgid "URL list in %s queue waiting for cron"
    48004829msgstr ""
    48014830
    4802 #: tpl/page_optm/settings_css.tpl.php:131
    4803 #: tpl/page_optm/settings_css.tpl.php:248
    4804 #: tpl/page_optm/settings_vpi.tpl.php:74
     4831#: tpl/page_optm/settings_css.tpl.php:135
     4832#: tpl/page_optm/settings_css.tpl.php:140
     4833#: tpl/page_optm/settings_css.tpl.php:259
     4834#: tpl/page_optm/settings_css.tpl.php:264
     4835#: tpl/page_optm/settings_vpi.tpl.php:81
     4836#: tpl/page_optm/settings_vpi.tpl.php:86
    48054837msgid "Run %s Queue Manually"
    48064838msgstr ""
    48074839
    4808 #: tpl/page_optm/settings_css.tpl.php:149
     4840#: tpl/page_optm/settings_css.tpl.php:159
    48094841msgid "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."
    48104842msgstr ""
    48114843
    4812 #: tpl/page_optm/settings_css.tpl.php:152
     4844#: tpl/page_optm/settings_css.tpl.php:162
    48134845msgid "This option will automatically bypass %s option."
    48144846msgstr ""
    48154847
    4816 #: tpl/page_optm/settings_css.tpl.php:166
     4848#: tpl/page_optm/settings_css.tpl.php:176
    48174849msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
    48184850msgstr ""
    48194851
    4820 #: tpl/page_optm/settings_css.tpl.php:186
     4852#: tpl/page_optm/settings_css.tpl.php:196
    48214853msgid "Optimize CSS delivery."
    48224854msgstr ""
    48234855
    4824 #: tpl/page_optm/settings_css.tpl.php:187
     4856#: tpl/page_optm/settings_css.tpl.php:197
    48254857#: tpl/page_optm/settings_html.tpl.php:167
    48264858#: tpl/page_optm/settings_js.tpl.php:73
     
    48284860msgstr ""
    48294861
    4830 #: tpl/page_optm/settings_css.tpl.php:188
     4862#: tpl/page_optm/settings_css.tpl.php:198
    48314863msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
    48324864msgstr ""
    48334865
    4834 #: tpl/page_optm/settings_css.tpl.php:190
     4866#: tpl/page_optm/settings_css.tpl.php:200
    48354867msgid "Automatic generation of critical CSS is in the background via a cron-based queue."
    48364868msgstr ""
    48374869
    4838 #: tpl/page_optm/settings_css.tpl.php:191
     4870#: tpl/page_optm/settings_css.tpl.php:201
    48394871msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
    48404872msgstr ""
    48414873
    4842 #: tpl/page_optm/settings_css.tpl.php:195
     4874#: tpl/page_optm/settings_css.tpl.php:205
    48434875msgid "Elements with attribute %s in HTML code will be excluded."
    48444876msgstr ""
    48454877
    4846 #: tpl/page_optm/settings_css.tpl.php:201
     4878#: tpl/page_optm/settings_css.tpl.php:211
    48474879msgid "This option is bypassed due to %s option."
    48484880msgstr ""
    48494881
    4850 #: tpl/page_optm/settings_css.tpl.php:264
     4882#: tpl/page_optm/settings_css.tpl.php:281
    48514883msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
    48524884msgstr ""
    48534885
    4854 #: tpl/page_optm/settings_css.tpl.php:277
     4886#: tpl/page_optm/settings_css.tpl.php:294
    48554887msgid "This will inline the asynchronous CSS library to avoid render blocking."
    48564888msgstr ""
    48574889
    4858 #: tpl/page_optm/settings_css.tpl.php:288
     4890#: tpl/page_optm/settings_css.tpl.php:305
    48594891msgid "Default"
    48604892msgstr ""
    48614893
    4862 #: tpl/page_optm/settings_css.tpl.php:290
     4894#: tpl/page_optm/settings_css.tpl.php:307
    48634895msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
    48644896msgstr ""
    48654897
    4866 #: tpl/page_optm/settings_css.tpl.php:291
     4898#: tpl/page_optm/settings_css.tpl.php:308
    48674899msgid "%s is recommended."
    48684900msgstr ""
    48694901
    4870 #: tpl/page_optm/settings_css.tpl.php:291
     4902#: tpl/page_optm/settings_css.tpl.php:308
    48714903msgid "Swap"
    48724904msgstr ""
     
    50285060
    50295061#: tpl/page_optm/settings_localization.tpl.php:127
    5030 #: tpl/toolbox/beta_test.tpl.php:31
     5062#: tpl/toolbox/beta_test.tpl.php:27
    50315063msgid "Example"
    50325064msgstr ""
     
    52305262
    52315263#: tpl/page_optm/settings_tuning_css.tpl.php:56
    5232 msgid "List the CSS selector that its style should be always contained in UCSS."
    5233 msgstr ""
    5234 
    5235 #: tpl/page_optm/settings_tuning_css.tpl.php:57
    5236 msgid "How to choose an UCSS allowlist selector?"
    5237 msgstr ""
    5238 
    5239 #: tpl/page_optm/settings_tuning_css.tpl.php:58
     5264msgid "List the CSS selectors whose styles should always be included in UCSS."
     5265msgstr ""
     5266
     5267#: tpl/page_optm/settings_tuning_css.tpl.php:59
     5268#: tpl/page_optm/settings_tuning_css.tpl.php:135
    52405269msgid "Wildcard %s supported."
    52415270msgstr ""
    52425271
    5243 #: tpl/page_optm/settings_tuning_css.tpl.php:62
     5272#: tpl/page_optm/settings_tuning_css.tpl.php:63
    52445273msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
    52455274msgstr ""
    52465275
    5247 #: tpl/page_optm/settings_tuning_css.tpl.php:80
     5276#: tpl/page_optm/settings_tuning_css.tpl.php:81
    52485277msgid "Listed URI will not generate UCSS."
    52495278msgstr ""
    52505279
    5251 #: tpl/page_optm/settings_tuning_css.tpl.php:87
     5280#: tpl/page_optm/settings_tuning_css.tpl.php:88
    52525281msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
    52535282msgstr ""
    52545283
    5255 #: tpl/page_optm/settings_tuning_css.tpl.php:88
     5284#: tpl/page_optm/settings_tuning_css.tpl.php:89
    52565285msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
    52575286msgstr ""
    52585287
    5259 #: tpl/page_optm/settings_tuning_css.tpl.php:102
     5288#: tpl/page_optm/settings_tuning_css.tpl.php:103
    52605289msgid "List post types where each item of that type should have its own CCSS generated."
    52615290msgstr ""
    52625291
    5263 #: tpl/page_optm/settings_tuning_css.tpl.php:103
     5292#: tpl/page_optm/settings_tuning_css.tpl.php:104
    52645293msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
    52655294msgstr ""
    52665295
    5267 #: tpl/page_optm/settings_tuning_css.tpl.php:117
     5296#: tpl/page_optm/settings_tuning_css.tpl.php:118
    52685297msgid "Separate critical CSS files will be generated for paths containing these strings."
    52695298msgstr ""
    52705299
    5271 #: tpl/page_optm/settings_tuning_css.tpl.php:131
     5300#: tpl/page_optm/settings_tuning_css.tpl.php:132
     5301msgid "List the CSS selectors whose styles should always be included in CCSS."
     5302msgstr ""
     5303
     5304#: tpl/page_optm/settings_tuning_css.tpl.php:139
     5305msgid "Selectors must exist in the CSS. Parent classes in the HTML will not work."
     5306msgstr ""
     5307
     5308#: tpl/page_optm/settings_tuning_css.tpl.php:157
    52725309msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
    52735310msgstr ""
    52745311
    5275 #: tpl/page_optm/settings_vpi.tpl.php:26
     5312#: tpl/page_optm/settings_vpi.tpl.php:30
    52765313msgid "When you use Lazy Load, it will delay the loading of all images on a page."
    52775314msgstr ""
    52785315
    5279 #: tpl/page_optm/settings_vpi.tpl.php:27
     5316#: tpl/page_optm/settings_vpi.tpl.php:31
    52805317msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
    52815318msgstr ""
    52825319
    5283 #: tpl/page_optm/settings_vpi.tpl.php:28
     5320#: tpl/page_optm/settings_vpi.tpl.php:32
    52845321msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
    52855322msgstr ""
    52865323
    5287 #: tpl/page_optm/settings_vpi.tpl.php:91
     5324#: tpl/page_optm/settings_vpi.tpl.php:104
    52885325msgid "Enable Viewport Images auto generation cron."
    52895326msgstr ""
     
    54965533msgstr ""
    54975534
     5535#: tpl/toolbox/beta_test.tpl.php:22
     5536msgid "Try GitHub Version"
     5537msgstr ""
     5538
    54985539#: tpl/toolbox/beta_test.tpl.php:26
    5499 msgid "Try GitHub Version"
    5500 msgstr ""
    5501 
    5502 #: tpl/toolbox/beta_test.tpl.php:30
    55035540msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
    55045541msgstr ""
    55055542
     5543#: tpl/toolbox/beta_test.tpl.php:31
     5544msgid "Use latest GitHub Dev commit"
     5545msgstr ""
     5546
     5547#: tpl/toolbox/beta_test.tpl.php:33
     5548msgid "Use latest GitHub Master commit"
     5549msgstr ""
     5550
    55065551#: tpl/toolbox/beta_test.tpl.php:35
    5507 msgid "Use latest GitHub Dev commit"
    5508 msgstr ""
    5509 
    5510 #: tpl/toolbox/beta_test.tpl.php:37
    5511 msgid "Use latest GitHub Master commit"
    5512 msgstr ""
    5513 
    5514 #: tpl/toolbox/beta_test.tpl.php:39
    5515 #: tpl/toolbox/beta_test.tpl.php:55
     5552#: tpl/toolbox/beta_test.tpl.php:51
    55165553msgid "Use latest WordPress release version"
    55175554msgstr ""
    55185555
    5519 #: tpl/toolbox/beta_test.tpl.php:39
     5556#: tpl/toolbox/beta_test.tpl.php:35
    55205557msgid "OR"
    55215558msgstr ""
    55225559
     5560#: tpl/toolbox/beta_test.tpl.php:46
     5561msgid "Downgrade not recommended. May cause fatal error due to refactored code."
     5562msgstr ""
     5563
    55235564#: tpl/toolbox/beta_test.tpl.php:50
    5524 msgid "Downgrade not recommended. May cause fatal error due to refactored code."
    5525 msgstr ""
    5526 
    5527 #: tpl/toolbox/beta_test.tpl.php:54
    55285565msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
    55295566msgstr ""
    55305567
    5531 #: tpl/toolbox/beta_test.tpl.php:54
     5568#: tpl/toolbox/beta_test.tpl.php:50
    55325569msgid "Use latest GitHub Dev/Master commit"
    55335570msgstr ""
    55345571
    5535 #: tpl/toolbox/beta_test.tpl.php:55
     5572#: tpl/toolbox/beta_test.tpl.php:51
    55365573msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
    55375574msgstr ""
    55385575
    5539 #: tpl/toolbox/beta_test.tpl.php:60
     5576#: tpl/toolbox/beta_test.tpl.php:56
    55405577msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
    55415578msgstr ""
     
    57065743msgstr ""
    57075744
    5708 #: tpl/toolbox/log_viewer.tpl.php:62
     5745#: tpl/toolbox/log_viewer.tpl.php:64
    57095746msgid "Clear Logs"
    57105747msgstr ""
    57115748
    5712 #: tpl/toolbox/log_viewer.tpl.php:94
     5749#: tpl/toolbox/log_viewer.tpl.php:81
     5750msgid "Copy Log"
     5751msgstr ""
     5752
     5753#: tpl/toolbox/log_viewer.tpl.php:114
    57135754msgid "LiteSpeed Logs"
    57145755msgstr ""
  • litespeed-cache/trunk/lib/css_js_min/minify/css.cls.php

    r3261732 r3281183  
    2020{
    2121    /**
    22      * @var int maximum inport size in kB
     22     * @var int maximum import size in kB
    2323     */
    2424    protected $maxImportSize = 5;
  • litespeed-cache/trunk/litespeed-cache.php

    r3269130 r3281183  
    55 * Plugin URI:        https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
    66 * Description:       High-performance page caching and site optimization from LiteSpeed
    7  * Version:           7.0.1
     7 * Version:           7.1
    88 * Author:            LiteSpeed Technologies
    99 * Author URI:        https://www.litespeedtech.com
     
    3535}
    3636
    37 !defined('LSCWP_V') && define('LSCWP_V', '7.0.1');
     37!defined('LSCWP_V') && define('LSCWP_V', '7.1');
    3838
    3939!defined('LSCWP_CONTENT_DIR') && define('LSCWP_CONTENT_DIR', WP_CONTENT_DIR);
     
    4747 */
    4848$WP_CONTENT_URL = WP_CONTENT_URL;
    49 $site_url = site_url('/');
    50 if (substr($WP_CONTENT_URL, 0, 5) == 'http:' && substr($site_url, 0, 5) == 'https') {
     49$home_url = home_url('/');
     50if (substr($WP_CONTENT_URL, 0, 5) == 'http:' && substr($home_url, 0, 5) == 'https') {
    5151    $WP_CONTENT_URL = str_replace('http://', 'https://', $WP_CONTENT_URL);
    5252}
    53 !defined('LSCWP_CONTENT_FOLDER') && define('LSCWP_CONTENT_FOLDER', str_replace($site_url, '', $WP_CONTENT_URL)); // `wp-content`
     53!defined('LSCWP_CONTENT_FOLDER') && define('LSCWP_CONTENT_FOLDER', str_replace($home_url, '', $WP_CONTENT_URL)); // `wp-content`
    5454!defined('LSWCP_PLUGIN_URL') && define('LSWCP_PLUGIN_URL', plugin_dir_url(__FILE__)); // Full URL path '//example.com/wp-content/plugins/litespeed-cache/'
    5555
  • litespeed-cache/trunk/readme.txt

    r3269162 r3281183  
    44Requires at least: 5.3
    55Requires PHP: 7.2
    6 Tested up to: 6.7
    7 Stable tag: 7.0.1
     6Tested up to: 6.8
     7Stable tag: 7.1
    88License: GPLv3
    99License URI: http://www.gnu.org/licenses/gpl.html
    1010
    11 All-in-one unbeatable acceleration & PageSpeed improvement: caching, image/CSS/JS optimization and more...
     11All-in-one unbeatable acceleration & PageSpeed improvement: caching, image/CSS/JS optimization...
    1212
    1313== Description ==
     
    256256== Changelog ==
    257257
     258= 7.1 - Apr 24 2025 =
     259* 🌱**Page Optimize** Added allowlist support for CCSS.
     260* **Cloud** CCSS results are now generated asynchronously via QUIC.cloud queue services.
     261* **Cloud** Added TTL control to QUIC.cloud services to make next requests more flexible.
     262* **Crawler** Dropped non-WebP/AVIF crawler if Next Gen Images are being used.
     263* 🐞**Config** Fixed an .htaccess generation bug that occurred when reactivating after previous deactivation. (PR#825)
     264* **GUI** Improved the QC registration notice banner for online services thanks to user feedback.
     265* **GUI** QUIC.cloud management links will be opened in a single dedicated new window to prevent multiple sessions.
     266* **Page Optimization** Enhanced URL fetch validation to avoid exposing possible local info.
     267* **Debug** Added a Click to copy logs button under `Log View` tab.
     268* **CLI** Removed a vary warning log in CLI for QC activation process with a customized login cookie.
     269* **CLI** Removed a log failure in CLI in QC activation process when no existing admin message.
     270* **Misc** Check version only after upgrade to reduce the requests.
     271* **Misc** Switched to CyberPanel.sh to detect public IP for dash tool.
     272
    258273= 7.0.1 - Apr 8 2025 =
    259274* **Page Optimize** Migrate legacy data to append trailing slash for better compatibility with v7.0-optimized UCSS/CCSS data.
    260275
    261 = 7.0.0.1 - Mar 26 2025 =
    262 * **GUI** Resolved a banner message display error that occurred in certain old version cases.
    263 * **GUI** Fixed a continual error banner that appeared when sites weren't using QUIC.cloud.
    264 * **Config** Fixed a continual CDN sync_conf/purge check issue that occured after v7.0 upgrade.
    265 * **3rd** Improved WPML multi language sync_conf compatibility.
     276= 7.0.0.1 - Mar 27 2025 =
     277* **GUI** Resolved a banner message display error in certain old version cases.
     278* **GUI** Fixed a continual error banner when site doesn't use QC.
     279* **Config** Fixed a continual CDN sync_conf/purge check issue after upgraded to v7.0.
     280* **3rd** Improved WPML multi lang sync_conf compatibility.
    266281
    267282= 7.0 - Mar 25 2025 =
     
    505520= 5.7 - Oct 10 2023 =
    506521* 🌱**Page Optimize** New option available: Preconnect. (xguiboy/Mukesh Patel)
    507 * 🌱**3rd** New Vary for Mini Cart option for Woocommerce. (Ruikai)
     522* 🌱**3rd** New Vary for Mini Cart option for WooCommerce. (Ruikai)
    508523* **Cloud** Force syncing the configuration to QUIC.cloud if CDN is reenabled.
    509524* **Cloud** Force syncing the configuration to QUIC.cloud if domain key is readded.
  • litespeed-cache/trunk/src/activation.cls.php

    r3261732 r3281183  
    5555        !defined('LSCWP_LOG_TAG') && define('LSCWP_LOG_TAG', 'Activate_' . get_current_blog_id());
    5656
     57        /* Network file handler */
    5758        if (is_multisite()) {
    5859            $count = self::get_network_count();
     
    6162                set_site_transient(self::NETWORK_TRANSIENT_COUNT, $count, DAY_IN_SECONDS);
    6263            }
    63         }
    64 
    65         /* Network file handler */
    66         if (is_multisite()) {
     64
    6765            if (!is_network_admin()) {
    6866                if ($count === 1) {
     
    7674            }
    7775        }
     76        self::cls()->update_files();
    7877
    7978        if (defined('LSCWP_REF') && LSCWP_REF == 'whm') {
  • litespeed-cache/trunk/src/admin-display.cls.php

    r3262418 r3281183  
    3737    const RULECONFLICT_ON = 'ExpiresDefault_1';
    3838    const RULECONFLICT_DISMISSED = 'ExpiresDefault_0';
     39
     40    const TYPE_QC_HIDE_BANNER = 'qc_hide_banner';
     41    const COOKIE_QC_HIDE_BANNER = 'litespeed_qc_hide_banner';
    3942
    4043    protected $messages = array();
     
    606609        $messages = self::get_option(self::DB_MSG_PIN, array());
    607610        $hit = false;
    608         foreach ($messages as $k => $v) {
    609             if ($v == $content) {
    610                 unset($messages[$k]);
    611                 $hit = true;
    612                 self::debug('✅ pinned msg content hit. Removed');
    613                 break;
     611        if ($messages != -1) {
     612            foreach ($messages as $k => $v) {
     613                if ($v == $content) {
     614                    unset($messages[$k]);
     615                    $hit = true;
     616                    self::debug('✅ pinned msg content hit. Removed');
     617                    break;
     618                }
    614619            }
    615620        }
     
    13431348        return $html;
    13441349    }
     1350
     1351    /**
     1352     * Check if has qc hide banner cookie or not
     1353     * @since 7.1
     1354     */
     1355    public static function has_qc_hide_banner()
     1356    {
     1357        return isset($_COOKIE[self::COOKIE_QC_HIDE_BANNER]);
     1358    }
     1359
     1360    /**
     1361     * Set qc hide banner cookie
     1362     * @since 7.1
     1363     */
     1364    public static function set_qc_hide_banner()
     1365    {
     1366        $expire = time() + 86400 * 365;
     1367        self::debug('Set qc hide banner cookie');
     1368        setcookie(self::COOKIE_QC_HIDE_BANNER, time(), $expire, COOKIEPATH, COOKIE_DOMAIN);
     1369    }
     1370
     1371    /**
     1372     * Handle all request actions from main cls
     1373     *
     1374     * @since  7.1
     1375     * @access public
     1376     */
     1377    public function handler()
     1378    {
     1379        $type = Router::verify_type();
     1380
     1381        switch ($type) {
     1382            case self::TYPE_QC_HIDE_BANNER:
     1383                self::set_qc_hide_banner();
     1384                break;
     1385
     1386            default:
     1387                break;
     1388        }
     1389
     1390        Admin::redirect();
     1391    }
    13451392}
  • litespeed-cache/trunk/src/avatar.cls.php

    r3123399 r3281183  
    11<?php
     2
    23/**
    34 * The avatar cache class
     
    89 * @author      LiteSpeed Technologies <info@litespeedtech.com>
    910 */
     11
    1012namespace LiteSpeed;
    1113
     
    243245        $this->_maybe_mk_cache_folder('avatar');
    244246
    245         $response = wp_remote_get($url, array('timeout' => 180, 'stream' => true, 'filename' => $file));
     247        $response = wp_safe_remote_get($url, array('timeout' => 180, 'stream' => true, 'filename' => $file));
    246248
    247249        Debug2::debug('[Avatar] _generate [url] ' . $url);
  • litespeed-cache/trunk/src/base.cls.php

    r3261732 r3281183  
    150150    const O_OPTM_CCSS_SEP_POSTTYPE = 'optm-ccss_sep_posttype';
    151151    const O_OPTM_CCSS_SEP_URI = 'optm-ccss_sep_uri';
     152    const O_OPTM_CCSS_SELECTOR_WHITELIST = 'optm-ccss_whitelist';
    152153    const O_OPTM_CSS_ASYNC_INLINE = 'optm-css_async_inline';
    153154    const O_OPTM_CSS_FONT_DISPLAY = 'optm-css_font_display';
     
    438439        self::O_OPTM_CCSS_SEP_POSTTYPE => array(),
    439440        self::O_OPTM_CCSS_SEP_URI => array(),
     441        self::O_OPTM_CCSS_SELECTOR_WHITELIST => array(),
    440442        self::O_OPTM_CSS_ASYNC_INLINE => false,
    441443        self::O_OPTM_CSS_FONT_DISPLAY => false,
  • litespeed-cache/trunk/src/cloud.cls.php

    r3262418 r3281183  
    8484    private static $_PUB_SVC_SET = array(self::API_NEWS, self::API_REPORT, self::API_VER, self::API_BETA_TEST, self::API_REST_ECHO, self::SVC_D_V3UPGRADE, self::SVC_D_DASH);
    8585
    86     private static $_QUEUE_SVC_SET = array(self::SVC_UCSS, self::SVC_VPI);
     86    private static $_QUEUE_SVC_SET = array(self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI);
    8787
    8888    public static $SERVICES_LOAD_CHECK = array(
    89         self::SVC_CCSS,
     89        // self::SVC_CCSS,
    9090        // self::SVC_UCSS,
    9191        // self::SVC_VPI,
     
    176176        self::debug('echo succeeded');
    177177
    178         // Load seperate thread echoed data from storage
     178        // Load separate thread echoed data from storage
    179179        if (empty($echobox['wpapi_ts']) || empty($echobox['wpapi_signature_b64'])) {
    180180            Admin_Display::error(__('Failed to get echo data from WPAPI', 'litespeed-cache'));
     
    260260        self::debug('echo succeeded');
    261261
    262         // Load seperate thread echoed data from storage
     262        // Load separate thread echoed data from storage
    263263        if (empty($echobox['wpapi_ts']) || empty($echobox['wpapi_signature_b64'])) {
     264            self::debug('Resp: ', $echobox);
    264265            Admin_Display::error(__('Failed to get echo data from WPAPI', 'litespeed-cache'));
    265266            return;
     
    474475            $server_key_url = self::CLOUD_SERVER_WP . '/' . self::API_SERVER_KEY_SIGN;
    475476        }
    476         $resp = wp_remote_get($server_key_url);
     477        $resp = wp_safe_remote_get($server_key_url);
    477478        if (is_wp_error($resp)) {
    478479            self::debugErr('Failed to load key: ' . $resp->get_error_message());
     
    10371038            $valid_cloud_loads = array();
    10381039            foreach ($valid_clouds as $k => $v) {
    1039                 $response = wp_remote_get($v, array('timeout' => 5));
     1040                $response = wp_safe_remote_get($v, array('timeout' => 5));
    10401041                if (is_wp_error($response)) {
    10411042                    $error_message = $response->get_error_message();
     
    11621163        }
    11631164
    1164         if (!$this->_maybe_cloud($service_tag)) {
    1165             return;
     1165        $maybe_cloud = $this->_maybe_cloud($service_tag);
     1166        if (!$maybe_cloud || $maybe_cloud === 'svc_hot') {
     1167            return $maybe_cloud;
    11661168        }
    11671169
     
    11891191        self::save_summary(array('curr_request.' . $service_tag => time()));
    11901192
    1191         $response = wp_remote_get($url, array(
     1193        $response = wp_safe_remote_get($url, array(
    11921194            'timeout' => 15,
    11931195            'headers' => array('Accept' => 'application/json'),
     
    12331235            self::debug('Skip sync conf as QC not activated yet.');
    12341236            return false;
     1237        }
     1238
     1239        // Check TTL
     1240        if (!empty($this->_summary['ttl.' . $service_tag])) {
     1241            $ttl = $this->_summary['ttl.' . $service_tag] - time();
     1242            if ($ttl > 0) {
     1243                self::debug('❌ TTL limit. [srv] ' . $service_tag . ' [TTL cool down] ' . $ttl . ' seconds');
     1244                return 'svc_hot';
     1245            }
    12351246        }
    12361247
     
    12771288
    12781289    /**
     1290     * Check if a service tag ttl is valid or not
     1291     * @since 7.1
     1292     */
     1293    public function service_hot($service_tag)
     1294    {
     1295        if (empty($this->_summary['ttl.' . $service_tag])) {
     1296            return false;
     1297        }
     1298
     1299        $ttl = $this->_summary['ttl.' . $service_tag] - time();
     1300        if ($ttl <= 0) {
     1301            return false;
     1302        }
     1303
     1304        return $ttl;
     1305    }
     1306
     1307    /**
    12791308     * Check if activated QUIC.cloud service or not
    12801309     *
     
    13251354        }
    13261355
    1327         if (!$this->_maybe_cloud($service_tag)) {
    1328             return;
     1356        $maybe_cloud = $this->_maybe_cloud($service_tag);
     1357        if (!$maybe_cloud || $maybe_cloud === 'svc_hot') {
     1358            self::debug('Maybe cloud failed: ' . var_export($maybe_cloud, true));
     1359            return $maybe_cloud;
    13291360        }
    13301361
     
    13621393        self::save_summary(array('curr_request.' . $service_tag => time()));
    13631394
    1364         $response = wp_remote_post($url, array(
     1395        $response = wp_safe_remote_post($url, array(
    13651396            'body' => $param,
    13661397            'timeout' => $time_out ?: 15,
     
    14261457
    14271458            return false;
     1459        }
     1460
     1461        // Check and save TTL data
     1462        if (!empty($json['_ttl'])) {
     1463            $ttl = intval($json['_ttl']);
     1464            self::debug('Service TTL to save: ' . $ttl);
     1465            if ($ttl > 0 && $ttl < 86400) {
     1466                self::save_summary(array(
     1467                    'ttl.' . $service_tag => $ttl + time(),
     1468                ));
     1469            }
    14281470        }
    14291471
     
    18451887        self::save_summary(array('ips_ts' => time(), 'ips_ts_runner' => time()));
    18461888
    1847         $response = wp_remote_get(self::CLOUD_IPS . '?json');
     1889        $response = wp_safe_remote_get(self::CLOUD_IPS . '?json');
    18481890        if (is_wp_error($response)) {
    18491891            $error_message = $response->get_error_message();
  • litespeed-cache/trunk/src/conf.cls.php

    r3262418 r3281183  
    7676         * Version is less than v3.0, or, is a new installation
    7777         */
     78        $ver_check_tag = '';
    7879        if (!$ver) {
    7980            // Try upgrade first (network will upgrade inside too)
    80             Data::cls()->try_upgrade_conf_3_0();
     81            $ver_check_tag = Data::cls()->try_upgrade_conf_3_0();
    8182        } else {
    8283            defined('LSCWP_CUR_V') || define('LSCWP_CUR_V', $ver);
     
    8889                // Plugin version will be set inside
    8990                // Site plugin upgrade & version change will do in load_site_conf
    90                 Data::cls()->conf_upgrade($ver);
     91                $ver_check_tag = Data::cls()->conf_upgrade($ver);
    9192            }
    9293        }
     
    102103                $this->set_conf(self::$_default_options);
    103104
    104                 // Check new version @since 2.9.3
    105                 Cloud::version_check('activate' . (defined('LSCWP_REF') ? '_' . LSCWP_REF : ''));
     105                $ver_check_tag .= ' activate' . (defined('LSCWP_REF') ? '_' . LSCWP_REF : '');
    106106            }
    107107
     
    115115            // Force correct version in case a rare unexpected case that `_ver` exists but empty
    116116            self::update_option(Base::_VER, Core::VER);
     117
     118            if ($ver_check_tag) {
     119                Cloud::version_check($ver_check_tag);
     120            }
    117121        }
    118122
  • litespeed-cache/trunk/src/core.cls.php

    r3261732 r3281183  
    678678                // Kick off HTTP req
    679679                $url = admin_url('admin-ajax.php');
    680                 $resp = wp_remote_get($url);
     680                $resp = wp_safe_remote_get($url);
    681681                if (is_wp_error($resp)) {
    682682                    $error_message = $resp->get_error_message();
  • litespeed-cache/trunk/src/crawler-map.cls.php

    r3261732 r3281183  
    7272
    7373            // Add blacklist
    74             if ($bit == 'B' || $bit == 'N') {
     74            if ($bit == Crawler::STATUS_BLACKLIST || $bit == Crawler::STATUS_NOCACHE) {
    7575                $q = "SELECT a.id, a.url FROM `$this->_tb_blacklist` a LEFT JOIN `$this->_tb` b ON b.url=a.url WHERE b.id IN ( $id_all )";
    7676                $existing = $wpdb->get_results($q, ARRAY_A);
     
    130130
    131131                // Update blacklist reason
    132                 if ($bit == 'B' || $bit == 'N') {
     132                if ($bit == Crawler::STATUS_BLACKLIST || $bit == Crawler::STATUS_NOCACHE) {
    133133                    $count = $wpdb->query(
    134134                        "UPDATE `$this->_tb_blacklist` a LEFT JOIN `$this->_tb` b ON b.url = a.url SET a.reason=CONCAT(SUBSTRING_INDEX(a.reason, ',', $curr_crawler), '$code', SUBSTRING_INDEX(a.reason, ',', -$right_pos)) WHERE b.id IN (" .
     
    162162        // Build res&reason
    163163        $total_crawler = count(Crawler::cls()->list_crawlers());
    164         $res = str_repeat('B', $total_crawler);
     164        $res = str_repeat(Crawler::STATUS_BLACKLIST, $total_crawler);
    165165        $reason = implode(',', array_fill(0, $total_crawler, 'Man'));
    166166
     
    201201        self::debug('blacklist delete [id] ' . $id);
    202202
    203         $wpdb->query("UPDATE `$this->_tb` SET res=REPLACE(REPLACE(res, 'N', '-'), 'B', '-') WHERE url=(SELECT url FROM `$this->_tb_blacklist` WHERE id='$id')");
     203        $sql = sprintf(
     204            "UPDATE `%s` SET res=REPLACE(REPLACE(res, '%s', '-'), '%s', '-') WHERE url=(SELECT url FROM `%s` WHERE id=%d)",
     205            $this->_tb,
     206            Crawler::STATUS_NOCACHE,
     207            Crawler::STATUS_BLACKLIST,
     208            $this->_tb_blacklist,
     209            $id
     210        );
     211        $wpdb->query($sql);
    204212        $wpdb->query("DELETE FROM `$this->_tb_blacklist` WHERE id='$id'");
    205213    }
     
    220228
    221229        self::debug('Truncate blacklist');
    222         $wpdb->query("UPDATE `$this->_tb` SET res=REPLACE(REPLACE(res, 'N', '-'), 'B', '-')");
     230        $sql = sprintf("UPDATE `%s` SET res=REPLACE(REPLACE(res, '%s', '-'), '%s', '-')", $this->_tb, Crawler::STATUS_NOCACHE, Crawler::STATUS_BLACKLIST);
     231        $wpdb->query($sql);
    223232        $wpdb->query("TRUNCATE `$this->_tb_blacklist`");
    224233    }
     
    305314            $q = "SELECT * FROM `$this->_tb` WHERE url LIKE %s";
    306315            if ($type == 'hit') {
    307                 $q .= " AND res LIKE '%H%'";
     316                $q .= " AND res LIKE '%" . Crawler::STATUS_HIT . "%'";
    308317            }
    309318            if ($type == 'miss') {
    310                 $q .= " AND res LIKE '%M%'";
     319                $q .= " AND res LIKE '%" . Crawler::STATUS_MISS . "%'";
    311320            }
    312321            if ($type == 'blacklisted') {
    313                 $q .= " AND res LIKE '%B%'";
     322                $q .= " AND res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
    314323            }
    315324            $q .= ' ORDER BY id LIMIT %d, %d';
     
    320329        $q = "SELECT * FROM `$this->_tb`";
    321330        if ($type == 'hit') {
    322             $q .= " WHERE res LIKE '%H%'";
     331            $q .= " WHERE res LIKE '%" . Crawler::STATUS_HIT . "%'";
    323332        }
    324333        if ($type == 'miss') {
    325             $q .= " WHERE res LIKE '%M%'";
     334            $q .= " WHERE res LIKE '%" . Crawler::STATUS_MISS . "%'";
    326335        }
    327336        if ($type == 'blacklisted') {
    328             $q .= " WHERE res LIKE '%B%'";
     337            $q .= " WHERE res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
    329338        }
    330339        $q .= ' ORDER BY id LIMIT %d, %d';
     
    348357        $type = Router::verify_type();
    349358        if ($type == 'hit') {
    350             $q .= " WHERE res LIKE '%H%'";
     359            $q .= " WHERE res LIKE '%" . Crawler::STATUS_HIT . "%'";
    351360        }
    352361        if ($type == 'miss') {
    353             $q .= " WHERE res LIKE '%M%'";
     362            $q .= " WHERE res LIKE '%" . Crawler::STATUS_MISS . "%'";
    354363        }
    355364        if ($type == 'blacklisted') {
    356             $q .= " WHERE res LIKE '%B%'";
     365            $q .= " WHERE res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
    357366        }
    358367
     
    517526         * @since  2.2.7
    518527         */
    519         $response = wp_remote_get($sitemap, array('timeout' => $this->_conf_map_timeout, 'sslverify' => false));
     528        $response = wp_safe_remote_get($sitemap, array('timeout' => $this->_conf_map_timeout, 'sslverify' => false));
    520529        if (is_wp_error($response)) {
    521530            $error_message = $response->get_error_message();
  • litespeed-cache/trunk/src/crawler.cls.php

    r3261732 r3281183  
    2626    const FAST_USER_AGENT = 'lscache_runner';
    2727    const CHUNKS = 10000;
     28
     29    const STATUS_WAIT = 'W';
     30    const STATUS_HIT = 'H';
     31    const STATUS_MISS = 'M';
     32    const STATUS_BLACKLIST = 'B';
     33    const STATUS_NOCACHE = 'N';
    2834
    2935    private $_sitemeta = 'meta.data';
     
    301307        if ($this->_summary['done'] === 'touchedEnd') {
    302308            // check whole crawling interval
    303             $last_fnished_at = $this->_summary['last_full_time_cost'] + $this->_summary['this_full_beginning_time'];
    304             if (!$manually_run && time() - $last_fnished_at < $this->conf(Base::O_CRAWLER_CRAWL_INTERVAL)) {
     309            $last_finished_at = $this->_summary['last_full_time_cost'] + $this->_summary['this_full_beginning_time'];
     310            if (!$manually_run && time() - $last_finished_at < $this->conf(Base::O_CRAWLER_CRAWL_INTERVAL)) {
    305311                self::debug('Cron abort: cache warmed already.');
    306312                // if not reach whole crawling interval, exit
     
    496502        // mark running
    497503        $this->_prepare_running();
    498         // run cralwer
     504        // run crawler
    499505        $this->_do_running();
    500506        $this->_terminate_running();
     
    910916        $curls = array();
    911917        foreach ($rows as $row) {
    912             if (substr($row['res'], $this->_summary['curr_crawler'], 1) == 'B') {
     918            if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_BLACKLIST) {
    913919                continue;
    914920            }
    915             if (substr($row['res'], $this->_summary['curr_crawler'], 1) == 'N') {
     921            if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_NOCACHE) {
    916922                continue;
    917923            }
     
    972978        $ret = array();
    973979        foreach ($rows as $row) {
    974             if (substr($row['res'], $this->_summary['curr_crawler'], 1) == 'B') {
     980            if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_BLACKLIST) {
    975981                continue;
    976982            }
    977             if (substr($row['res'], $this->_summary['curr_crawler'], 1) == 'N') {
     983            if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_NOCACHE) {
    978984                continue;
    979985            }
     
    10061012    private function _status2title($status)
    10071013    {
    1008         if ($status == 'H') {
     1014        if ($status == self::STATUS_HIT) {
    10091015            return '✅ Hit';
    10101016        }
    1011         if ($status == 'M') {
     1017        if ($status == self::STATUS_MISS) {
    10121018            return '😊 Miss';
    10131019        }
    1014         if ($status == 'B') {
     1020        if ($status == self::STATUS_BLACKLIST) {
    10151021            return '😅 Blacklisted';
    10161022        }
    1017         if ($status == 'N') {
     1023        if ($status == self::STATUS_NOCACHE) {
    10181024            return '😅 Blacklisted';
    10191025        }
     
    10311037        // self::debug('http status code: ' . $code . ' [headers]', $header);
    10321038        if ($code == 201) {
    1033             return 'H';
     1039            return self::STATUS_HIT;
    10341040        }
    10351041
     
    10371043            // If is from DIVI, taken as miss
    10381044            if (defined('LITESPEED_CRAWLER_IGNORE_NONCACHEABLE') && LITESPEED_CRAWLER_IGNORE_NONCACHEABLE) {
    1039                 return 'M';
     1045                return self::STATUS_MISS;
    10401046            }
    10411047
    10421048            // If blacklist is disabled
    10431049            if ((defined('LITESPEED_CRAWLER_DISABLE_BLOCKLIST') && LITESPEED_CRAWLER_DISABLE_BLOCKLIST) || apply_filters('litespeed_crawler_disable_blocklist', false, $url)) {
    1044                 return 'M';
    1045             }
    1046 
    1047             return 'N'; // Blacklist
     1050                return self::STATUS_MISS;
     1051            }
     1052
     1053            return self::STATUS_NOCACHE; // Blacklist
    10481054        }
    10491055
     
    10531059            if (stripos($header, $_header) !== false) {
    10541060                if (stripos($header, $_header . ': miss') !== false) {
    1055                     return 'M'; // Miss
     1061                    return self::STATUS_MISS; // Miss
    10561062                }
    1057                 return 'H'; // Hit
     1063                return self::STATUS_HIT; // Hit
    10581064            }
    10591065        }
     
    10611067        // If blacklist is disabled
    10621068        if ((defined('LITESPEED_CRAWLER_DISABLE_BLOCKLIST') && LITESPEED_CRAWLER_DISABLE_BLOCKLIST) || apply_filters('litespeed_crawler_disable_blocklist', false, $url)) {
    1063             return 'M';
    1064         }
    1065 
    1066         return 'B'; // Blacklist
     1069            return self::STATUS_MISS;
     1070        }
     1071
     1072        return self::STATUS_BLACKLIST; // Blacklist
    10671073    }
    10681074
     
    11921198            // Current crawler is fully done
    11931199            // $end_reason = sprintf( __( 'Crawler %s reached end of sitemap file.', 'litespeed-cache' ), '#' . ( $this->_summary['curr_crawler'] + 1 ) );
    1194             $this->_summary['curr_crawler']++; // Jump to next cralwer
     1200            $this->_summary['curr_crawler']++; // Jump to next crawler
    11951201            // $this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ] = array(); // reset this at next crawl time
    11961202            $this->_summary['last_pos'] = 0; // reset last position
     
    12301236        // WebP on/off
    12311237        if ($this->conf(Base::O_IMG_OPTM_WEBP)) {
    1232             $crawler_factors['webp'] = array(1 => $this->cls('Media')->next_gen_image_title(), 0 => '');
     1238            $crawler_factors['webp'] = array(1 => $this->cls('Media')->next_gen_image_title());
     1239            if (apply_filters('litespeed_crawler_webp', false)) {
     1240                $crawler_factors['webp'][0] = '';
     1241            }
    12331242        }
    12341243
     
    13811390        $_status_list = array(
    13821391            '-' => 'default',
    1383             'M' => 'primary',
    1384             'H' => 'success',
    1385             'B' => 'danger',
    1386             'N' => 'warning',
     1392            self::STATUS_MISS => 'primary',
     1393            self::STATUS_HIT => 'success',
     1394            self::STATUS_BLACKLIST => 'danger',
     1395            self::STATUS_NOCACHE => 'warning',
    13871396        );
    13881397
  • litespeed-cache/trunk/src/css.cls.php

    r3031822 r3281183  
    1919
    2020    protected $_summary;
     21    private $_ccss_whitelist;
    2122    private $_queue;
    22     private $_endts;
    2323
    2424    /**
     
    3030    {
    3131        $this->_summary = self::get_summary();
     32
     33        add_filter('litespeed_ccss_whitelist', array($this->cls('Data'), 'load_ccss_whitelist'));
    3234    }
    3335
     
    109111    {
    110112        global $wp;
    111         $request_url = home_url($wp->request);
     113        $request_url = get_permalink();
     114        // Backup, in case get_permalink() fails.
     115        if (!$request_url) {
     116            $request_url = home_url($wp->request);
     117        }
    112118
    113119        $filepath_prefix = $this->_build_filepath_prefix('ccss');
     
    207213
    208214        $i = 0;
    209         $timeoutLimit = ini_get('max_execution_time');
    210         $this->_endts = time() + $timeoutLimit;
    211215        foreach ($this->_queue as $k => $v) {
    212216            if (!empty($v['_status'])) {
    213217                continue;
    214             }
    215 
    216             if (function_exists('set_time_limit')) {
    217                 $this->_endts += 120;
    218                 set_time_limit(120);
    219             }
    220             if ($this->_endts - time() < 10) {
    221                 // self::debug("🚨 End loop due to timeout limit reached " . $timeoutLimit . "s");
    222                 // return;
    223218            }
    224219
     
    255250            }
    256251
    257             // Exit queue if out of quota
    258             if ($res === 'out_of_quota') {
     252            // Exit queue if out of quota or service is hot
     253            if ($res === 'out_of_quota' || $res === 'svc_hot') {
    259254                return;
    260255            }
     
    292287        }
    293288
     289        set_time_limit(120);
     290
    294291        // Update css request status
    295292        $this->_summary['curr_request_' . $type] = time();
     
    307304
    308305        if (!$css) {
    309             Debug2::debug('[UCSS] ❌ No combined css');
     306            $type_tag = strtoupper($type);
     307            Debug2::debug('[' . $type_tag . '] ❌ No combined css');
    310308            return false;
    311309        }
     
    321319            'css' => $css,
    322320        );
     321        if (!isset($this->_ccss_whitelist)) {
     322            $this->_ccss_whitelist = $this->_filter_whitelist();
     323        }
     324        $data['whitelist'] = $this->_ccss_whitelist;
    323325
    324326        self::debug('Generating: ', $data);
     
    326328        $json = Cloud::post(Cloud::SVC_CCSS, $data, 30);
    327329        if (!is_array($json)) {
    328             return false;
     330            return $json;
    329331        }
    330332
     
    528530
    529531    /**
     532     * Filter the comment content, add quotes to selector from whitelist. Return the json
     533     *
     534     * @since 7.1
     535     */
     536    private function _filter_whitelist()
     537    {
     538        $whitelist = array();
     539        $list = apply_filters('litespeed_ccss_whitelist', $this->conf(self::O_OPTM_CCSS_SELECTOR_WHITELIST));
     540        foreach ($list as $v) {
     541            if (substr($v, 0, 2) === '//') {
     542                continue;
     543            }
     544            $whitelist[] = $v;
     545        }
     546
     547        return $whitelist;
     548    }
     549
     550    /**
     551     * Notify finished from server
     552     * @since 7.1
     553     */
     554    public function notify()
     555    {
     556        $post_data = \json_decode(file_get_contents('php://input'), true);
     557        if (is_null($post_data)) {
     558            $post_data = $_POST;
     559        }
     560        self::debug('notify() data', $post_data);
     561
     562        $this->_queue = $this->load_queue('ccss');
     563
     564        list($post_data) = $this->cls('Cloud')->extract_msg($post_data, 'ccss');
     565
     566        $notified_data = $post_data['data'];
     567        if (empty($notified_data) || !is_array($notified_data)) {
     568            self::debug('❌ notify exit: no notified data');
     569            return Cloud::err('no notified data');
     570        }
     571
     572        // Check if its in queue or not
     573        $valid_i = 0;
     574        foreach ($notified_data as $v) {
     575            if (empty($v['request_url'])) {
     576                self::debug('❌ notify bypass: no request_url', $v);
     577                continue;
     578            }
     579            if (empty($v['queue_k'])) {
     580                self::debug('❌ notify bypass: no queue_k', $v);
     581                continue;
     582            }
     583
     584            if (empty($this->_queue[$v['queue_k']])) {
     585                self::debug('❌ notify bypass: no this queue [q_k]' . $v['queue_k']);
     586                continue;
     587            }
     588
     589            // Save data
     590            if (!empty($v['data_ccss'])) {
     591                $is_mobile = $this->_queue[$v['queue_k']]['is_mobile'];
     592                $is_webp = $this->_queue[$v['queue_k']]['is_webp'];
     593                $this->_save_con('ccss', $v['data_ccss'], $v['queue_k'], $is_mobile, $is_webp);
     594
     595                $valid_i++;
     596            }
     597
     598            unset($this->_queue[$v['queue_k']]);
     599            self::debug('notify data handled, unset queue [q_k] ' . $v['queue_k']);
     600        }
     601        $this->save_queue('ccss', $this->_queue);
     602
     603        self::debug('notified');
     604
     605        return Cloud::ok(array('count' => $valid_i));
     606    }
     607
     608    /**
    530609     * Handle all request actions from main cls
    531610     *
  • litespeed-cache/trunk/src/data.cls.php

    r3269130 r3281183  
    147147        Purge::purge_all();
    148148
    149         Cloud::version_check('upgrade');
     149        return 'upgrade';
    150150    }
    151151
     
    257257        $previous_options = get_option('litespeed-cache-conf');
    258258        if (!$previous_options) {
    259             Cloud::version_check('new');
    260             return;
     259            return 'new';
    261260        }
    262261
     
    289288        $ver = '3.0';
    290289        if (Core::VER != $ver) {
    291             $this->conf_upgrade($ver);
     290            return $this->conf_upgrade($ver);
    292291        } else {
    293292            // Reload options
     
    299298            Purge::purge_all();
    300299
    301             Cloud::version_check('upgrade');
     300            return 'upgrade';
    302301        }
    303302    }
     
    648647
    649648    /**
     649     * Get list from `data/ccss_whitelist.txt`
     650     *
     651     * @since  7.1
     652     */
     653    public function load_ccss_whitelist($list)
     654    {
     655        $data = $this->_load_per_line('ccss_whitelist.txt');
     656        if ($data) {
     657            $list = array_unique(array_filter(array_merge($list, $data)));
     658        }
     659
     660        return $list;
     661    }
     662
     663    /**
    650664     * Get list from `data/ucss_whitelist.txt`
    651665     *
  • litespeed-cache/trunk/src/doc.cls.php

    r3009052 r3281183  
    175175        $str =
    176176            '<div class="litespeed-desc">' .
    177             esc_html__('The queue is processed asynchronously. It may take time.', 'litespeed-cache') .
     177            __('The queue is processed asynchronously. It may take time.', 'litespeed-cache') .
    178178            self::learn_more('https://docs.litespeedtech.com/lscache/lscwp/troubleshoot/#quiccloud-queue-issues', false, false, false, true) .
    179179            '</div>';
  • litespeed-cache/trunk/src/esi.cls.php

    r3261732 r3281183  
    613613        }
    614614
    615         Debug2::debug2('[ESI] parms', $unencrypted);
     615        Debug2::debug2('[ESI] params', $unencrypted);
    616616        // $unencoded = urldecode($unencrypted); no need to do this as $_GET is already parsed
    617617        $params = \json_decode($unencrypted, true);
  • litespeed-cache/trunk/src/file.cls.php

    r3261732 r3281183  
    2323    public static function is_404($url)
    2424    {
    25         $response = wp_remote_get($url);
     25        $response = wp_safe_remote_get($url);
    2626        $code = wp_remote_retrieve_response_code($response);
    2727        if ($code == 404) {
  • litespeed-cache/trunk/src/img-optm.cls.php

    r3261732 r3281183  
    918918
    919919    /**
    920      * Calculate pull theads
     920     * Calculate pull threads
    921921     *
    922922     * @since  5.8
     
    12361236                } else {
    12371237                    foreach ($requests as $cnt => $req) {
    1238                         $wp_response = wp_remote_get($req['url'], array('timeout' => 60));
     1238                        $wp_response = wp_safe_remote_get($req['url'], array('timeout' => 60));
    12391239                        $request_response = array(
    12401240                            'success' => false,
  • litespeed-cache/trunk/src/lang.cls.php

    r3261732 r3281183  
    173173            self::O_OPTM_CCSS_SEP_POSTTYPE => __('Separate CCSS Cache Post Types', 'litespeed-cache'),
    174174            self::O_OPTM_CCSS_SEP_URI => __('Separate CCSS Cache URIs', 'litespeed-cache'),
     175            self::O_OPTM_CCSS_SELECTOR_WHITELIST => __('CCSS Selector Allowlist', 'litespeed-cache'),
    175176            self::O_OPTM_JS_DEFER_EXC => __('JS Deferred / Delayed Excludes', 'litespeed-cache'),
    176177            self::O_OPTM_GM_JS_EXC => __('Guest Mode JS Excludes', 'litespeed-cache'),
  • litespeed-cache/trunk/src/localization.cls.php

    r3123399 r3281183  
    11<?php
     2
    23/**
    34 * The localization class.
     
    56 * @since       3.3
    67 */
     8
    79namespace LiteSpeed;
    810
     
    9193
    9294        self::debug('localize [url] ' . $url);
    93         $response = wp_remote_get($url, array('timeout' => 180, 'stream' => true, 'filename' => $file));
     95        $response = wp_safe_remote_get($url, array('timeout' => 180, 'stream' => true, 'filename' => $file));
    9496
    9597        // Parse response data
  • litespeed-cache/trunk/src/optimize.cls.php

    r3261732 r3281183  
    7070        if ($this->cfg_css_async) {
    7171            if (!$this->cls('Cloud')->activated()) {
    72                 Debug2::debug('[Optm] ❌ CCSS set to OFF due to missing domain key');
     72                Debug2::debug('[Optm] ❌ CCSS set to OFF due to QC not activated');
    7373                $this->cfg_css_async = false;
    7474            }
  • litespeed-cache/trunk/src/optimizer.cls.php

    r3261732 r3281183  
    11<?php
     2
    23/**
    34 * The optimize4 class.
     
    89 * @author      LiteSpeed Technologies <info@litespeedtech.com>
    910 */
     11
    1012namespace LiteSpeed;
    1113
     
    220222        $to_be_deleted_folder = $folder_name . date('Ymd', strtotime('-2 days'));
    221223        if (file_exists($to_be_deleted_folder)) {
    222             Debug2::debug('[Optimizer] ❌ Clearning folder [name] ' . $to_be_deleted_folder);
     224            Debug2::debug('[Optimizer] ❌ Clearing folder [name] ' . $to_be_deleted_folder);
    223225            File::rrmdir($to_be_deleted_folder);
    224226        }
     
    230232
    231233        // Write file
    232         $res = wp_remote_get($url);
     234        $res = wp_safe_remote_get($url);
    233235        $res_code = wp_remote_retrieve_response_code($res);
    234236        if (is_wp_error($res) || $res_code != 200) {
  • litespeed-cache/trunk/src/rest.cls.php

    r3261732 r3281183  
    8989        ));
    9090
     91        register_rest_route('litespeed/v1', '/notify_ccss', array(
     92            'methods' => 'POST',
     93            'callback' => array($this, 'notify_ccss'),
     94            'permission_callback' => array($this, 'is_from_cloud'),
     95        ));
     96
    9197        register_rest_route('litespeed/v1', '/notify_ucss', array(
    9298            'methods' => 'POST',
     
    198204    {
    199205        return Img_Optm::cls()->notify_img();
     206    }
     207
     208    /**
     209     * @since  7.1
     210     */
     211    public function notify_ccss()
     212    {
     213        self::debug('notify_ccss');
     214        return CSS::cls()->notify();
    200215    }
    201216
  • litespeed-cache/trunk/src/router.cls.php

    r3261732 r3281183  
    4141    const ACTION_DEBUG2 = 'debug2';
    4242    const ACTION_CDN_CLOUDFLARE = 'CDN\Cloudflare';
     43    const ACTION_ADMIN_DISPLAY = 'admin_display';
    4344
    4445    // List all handlers here
    4546    private static $_HANDLERS = array(
     47        self::ACTION_ADMIN_DISPLAY,
    4648        self::ACTION_ACTIVATION,
    4749        self::ACTION_AVATAR,
     
    628630                return;
    629631
     632            case self::ACTION_ADMIN_DISPLAY:
    630633            case self::ACTION_PLACEHOLDER:
    631634            case self::ACTION_AVATAR:
  • litespeed-cache/trunk/src/task.cls.php

    r3261732 r3281183  
    132132        $url = add_query_arg($qs, admin_url('admin-ajax.php'));
    133133        self::debug('async call to ' . $url);
    134         wp_remote_post(esc_url_raw($url), $args);
     134        wp_safe_remote_post(esc_url_raw($url), $args);
    135135    }
    136136
  • litespeed-cache/trunk/src/tool.cls.php

    r3009052 r3281183  
    11<?php
     2
    23/**
    34 * The tools
     
    89 * @author      LiteSpeed Technologies <info@litespeedtech.com>
    910 */
     11
    1012namespace LiteSpeed;
    1113
     
    1416class Tool extends Root
    1517{
     18    const LOG_TAG = '[Tool]';
     19
    1620    /**
    1721     * Get public IP
     
    2226    public function check_ip()
    2327    {
    24         Debug2::debug('[Tool] ✅ check_ip');
     28        self::debug('✅ check_ip');
    2529
    26         $response = wp_remote_get('https://www.doapi.us/ip');
     30        $response = wp_safe_remote_get('https://cyberpanel.sh/?ip', array(
     31            'headers' => array(
     32                'User-Agent' => 'curl/8.7.1',
     33            ),
     34        ));
    2735
    2836        if (is_wp_error($response)) {
    29             return new \WP_Error('remote_get_fail', 'Failed to fetch from https://www.doapi.us/ip', array('status' => 404));
     37            return __('Failed to detect IP', 'litespeed-cache');
    3038        }
    3139
    32         $data = $response['body'];
     40        $ip = trim($response['body']);
    3341
    34         Debug2::debug('[Tool] result [ip] ' . $data);
     42        self::debug('result [ip] ' . $ip);
    3543
    36         return $data;
     44        if (Utility::valid_ipv4($ip)) {
     45            return $ip;
     46        }
     47
     48        return __('Failed to detect IP', 'litespeed-cache');
    3749    }
    3850
  • litespeed-cache/trunk/src/ucss.cls.php

    r3261732 r3281183  
    242242            }
    243243
    244             // Exit queue if out of quota
    245             if ($res === 'out_of_quota') {
     244            // Exit queue if out of quota or service is hot
     245            if ($res === 'out_of_quota' || $res === 'svc_hot') {
    246246                return;
    247247            }
     
    328328        $json = Cloud::post(Cloud::SVC_UCSS, $data, 30);
    329329        if (!is_array($json)) {
    330             return false;
     330            return $json;
    331331        }
    332332
  • litespeed-cache/trunk/src/vary.cls.php

    r3261732 r3281183  
    5555                }
    5656
     57                if (defined('LITESPEED_CLI') || defined('DOING_CRON')) {
     58                    $something_wrong = false;
     59                }
     60
    5761                if ($something_wrong) {
    5862                    // Display cookie error msg to admin
  • litespeed-cache/trunk/src/vpi.cls.php

    r3261732 r3281183  
    206206            }
    207207
    208             // Exit queue if out of quota
    209             if ($res === 'out_of_quota') {
     208            // Exit queue if out of quota or service is hot
     209            if ($res === 'out_of_quota' || $res === 'svc_hot') {
    210210                return;
    211211            }
     
    279279        $json = Cloud::post($svc, $data, 30);
    280280        if (!is_array($json)) {
    281             return false;
     281            return $json;
    282282        }
    283283
  • litespeed-cache/trunk/thirdparty/litespeed-check.cls.php

    r3261732 r3281183  
    7272                    self::$_msg_id .
    7373                    '>' .
    74                     esc_html__('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
     74                    __('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
    7575                    '<p style="color: red; font-weight: 700;">' .
    7676                    'PageSpeed Ninja' .
     
    123123                self::$_msg_id .
    124124                '>' .
    125                 esc_html__('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
     125                __('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
    126126                '<p style="color: red; font-weight: 700;">' .
    127127                implode(', ', $active_incompatible_plugins) .
  • litespeed-cache/trunk/tpl/cdn/cf.tpl.php

    r3261732 r3281183  
    99
    1010<h3 class="litespeed-title-short">
    11     <?php echo __('CDN Settings', 'litespeed-cache'); ?>
     11    <?php echo __('Cloudflare Settings', 'litespeed-cache'); ?>
    1212    <?php Doc::learn_more('https://docs.litespeedtech.com/lscache/lscwp/cdn/'); ?>
    1313</h3>
     
    2424                <div class="litespeed-desc">
    2525                    <?php echo sprintf(__('Use %s API functionality.', 'litespeed-cache'), 'Cloudflare'); ?>
    26                     <?php echo sprintf(__('This can be managed from %1$s%2$s tab.', 'litespeed-cache'), '<b>' . __('CDN', 'litespeed-cache') . '</b> -&gt; <b>', __('Manage', 'litespeed-cache') . '</b>'); ?>
    2726                </div>
    2827                <div class="litespeed-block">
  • litespeed-cache/trunk/tpl/cdn/qc.tpl.php

    r3261732 r3281183  
    104104                    <?php elseif ($cloud_summary['qc_activated'] == 'anonymous') : ?>
    105105                        <p><?php echo __('You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.', 'litespeed-cache'); ?></p>
    106                         <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="_blank" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('Link to QUIC.cloud', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
     106                        <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="qc" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('Link to QUIC.cloud', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
    107107                    <?php elseif ($cloud_summary['qc_activated'] == 'linked') : ?>
    108                         <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="_blank" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('My QUIC.cloud Dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
     108                        <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="qc" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('My QUIC.cloud Dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
    109109                    <?php else : ?>
    110110                        <p><?php echo __('To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.', 'litespeed-cache'); ?></p>
    111                         <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="_blank" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('My QUIC.cloud Dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
     111                        <p class="litespeed-top20"><a href="<?php echo $__cloud->qc_link(); ?>" target="qc" class="button button-<?php echo ((empty($cloud_summary['qc_activated']) || $cloud_summary['qc_activated'] != 'cdn') ? 'secondary' : 'primary'); ?>"><?php echo __('My QUIC.cloud Dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a></p>
    112112                    <?php endif; ?>
    113113                <?php endif; ?>
  • litespeed-cache/trunk/tpl/crawler/summary.tpl.php

    r3261732 r3281183  
    142142                <tbody>
    143143                    <?php foreach ($crawler_list as $i => $v) :
    144                         $hit = !empty($summary['crawler_stats'][$i]['H']) ? $summary['crawler_stats'][$i]['H'] : 0;
    145                         $miss = !empty($summary['crawler_stats'][$i]['M']) ? $summary['crawler_stats'][$i]['M'] : 0;
    146 
    147                         $blacklisted = !empty($summary['crawler_stats'][$i]['B']) ? $summary['crawler_stats'][$i]['B'] : 0;
    148                         $blacklisted += !empty($summary['crawler_stats'][$i]['N']) ? $summary['crawler_stats'][$i]['N'] : 0;
    149 
    150                         if (isset($summary['crawler_stats'][$i]['W'])) {
    151                             $waiting = $summary['crawler_stats'][$i]['W'] ?: 0;
     144                        $hit = !empty($summary['crawler_stats'][$i][Crawler::STATUS_HIT]) ? $summary['crawler_stats'][$i][Crawler::STATUS_HIT] : 0;
     145                        $miss = !empty($summary['crawler_stats'][$i][Crawler::STATUS_MISS]) ? $summary['crawler_stats'][$i][Crawler::STATUS_MISS] : 0;
     146
     147                        $blacklisted = !empty($summary['crawler_stats'][$i][Crawler::STATUS_BLACKLIST]) ? $summary['crawler_stats'][$i][Crawler::STATUS_BLACKLIST] : 0;
     148                        $blacklisted += !empty($summary['crawler_stats'][$i][Crawler::STATUS_NOCACHE]) ? $summary['crawler_stats'][$i][Crawler::STATUS_NOCACHE] : 0;
     149
     150                        if (isset($summary['crawler_stats'][$i][Crawler::STATUS_WAIT])) {
     151                            $waiting = $summary['crawler_stats'][$i][Crawler::STATUS_WAIT] ?: 0;
    152152                        } else {
    153153                            $waiting = $summary['list_size'] - $hit - $miss - $blacklisted;
  • litespeed-cache/trunk/tpl/dash/dashboard.tpl.php

    r3261732 r3281183  
    3737<div class="litespeed-dashboard">
    3838
    39     <?php if (!$__cloud->activated()) : ?>
     39    <?php if (!$__cloud->activated() && !Admin_Display::has_qc_hide_banner()) : ?>
    4040        <div class="litespeed-dashboard-group">
    4141            <div class="litespeed-flex-container">
     
    133133
    134134    <div class="litespeed-dashboard-qc">
    135         <?php if (!$__cloud->activated()) : ?>
     135        <?php if (!$__cloud->activated() && !Admin_Display::has_qc_hide_banner()) : ?>
    136136            <div class="litespeed-dashboard-unlock">
    137137                <div>
     
    143143                    <p class="litespeed-dashboard-unlock-desc"><?php _e('Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.', 'litespeed-cache'); ?></p>
    144144                    <p>
    145                         <?php _e('Free monthly quota available.', 'litespeed-cache'); ?>
     145                        <?php _e('Free monthly quota available. Can also be used anonymously (no email required).', 'litespeed-cache'); ?>
    146146                    </p>
    147147                    <p>
     
    150150                            <?php _e('Enable QUIC.cloud services', 'litespeed-cache'); ?>
    151151                        </a>
     152                        <br><a class="button button-link litespeed-top10" href="<?php echo Utility::build_url(Router::ACTION_ADMIN_DISPLAY, Admin_Display::TYPE_QC_HIDE_BANNER); ?>"><?php _e('Do not show this again', 'litespeed-cache'); ?></a>
     153
    152154                    </p>
    153155                    <p class="litespeed-dashboard-unlock-footer">
     
    175177                <a href="https://docs.litespeedtech.com/lscache/lscwp/dashboard/#usage-statistics" target="_blank" class="litespeed-learn-more"><?php echo __('Learn More', 'litespeed-cache'); ?></a>
    176178            </div>
     179
     180            <?php if (!$__cloud->activated() && Admin_Display::has_qc_hide_banner()) : ?>
     181                <p class="litespeed-desc litespeed-margin-top-remove"><?php echo __('The features below are provided by', 'litespeed-cache'); ?> <a href="<?php echo admin_url('admin.php?page=litespeed-general'); ?>">QUIC.cloud</a></p>
     182            <?php endif; ?>
     183
    177184
    178185            <div class="litespeed-dashboard-stats-wrapper">
     
    327334                        <?php Doc::learn_more(
    328335                            Utility::build_url(Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE),
    329                             __('Activate QUIC.cloud', 'litespeed-cache'),
     336                            __('Enable QUIC.cloud Services', 'litespeed-cache'),
    330337                            true,
    331338                            'button litespeed-btn-warning'
    332339                        ); ?>
    333340                    <?php elseif (!empty($cloud_summary['qc_activated']) && $cloud_summary['qc_activated'] != 'anonymous') : ?>
    334                         <a href="<?php echo $__cloud->qc_link(); ?>" class="litespeed-link-with-icon" target="_blank"><?php echo __('Go to QUIC.cloud dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a>
     341                        <a href="<?php echo $__cloud->qc_link(); ?>" class="litespeed-link-with-icon" target="qc"><?php echo __('Go to QUIC.cloud dashboard', 'litespeed-cache'); ?> <span class="dashicons dashicons-external"></span></a>
    335342                    <?php else : ?>
    336343                        <?php Doc::learn_more(
     
    786793                                    <p class="litespeed-margin-bottom20">
    787794                                        <?php Doc::learn_more(
    788                                             Utility::build_url(Router::ACTION_CLOUD, Cloud::TYPE_ENABLE_CDN),
     795                                            Utility::build_url(Router::ACTION_CLOUD, $__cloud->activated() ? Cloud::TYPE_ENABLE_CDN : Cloud::TYPE_ACTIVATE),
    789796                                            '<span class="dashicons dashicons-saved"></span>' . __('Enable QUIC.cloud CDN', 'litespeed-cache'),
    790797                                            true,
  • litespeed-cache/trunk/tpl/general/settings.tpl.php

    r3261732 r3281183  
    9191                <div class="litespeed-desc">
    9292                    <?php echo __('Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.', 'litespeed-cache'); ?>
    93                     <br /><?php echo __('Your server IP', 'litespeed-cache'); ?>: <code id='litespeed_server_ip'>-</code> <a href="javascript:;" class="button button-link" id="litespeed_get_ip"><?php echo __('Check my public IP from', 'litespeed-cache'); ?> DoAPI.us</a>
     93                    <br /><?php echo __('Your server IP', 'litespeed-cache'); ?>: <code id='litespeed_server_ip'>-</code> <a href="javascript:;" class="button button-link" id="litespeed_get_ip"><?php echo __('Check my public IP from', 'litespeed-cache'); ?> CyberPanel.sh</a>
    9494                    ⚠️ <?php echo __('Notice', 'litespeed-cache'); ?>: <?php echo __('the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.', 'litespeed-cache'); ?>
    9595                    <br /><?php echo __('Please make sure this IP is the correct one for visiting your site.', 'litespeed-cache'); ?>
  • litespeed-cache/trunk/tpl/img_optm/summary.tpl.php

    r3261732 r3281183  
    3434}
    3535
     36$imgoptm_service_hot = $this->cls('Cloud')->service_hot(Cloud::SVC_IMG_OPTM . '-' . Img_Optm::CLOUD_ACTION_NEW_REQ);
    3637?>
    3738<div class="litespeed-flex-container litespeed-column-with-boxes">
     
    6162
    6263            <div class="litespeed-img-optim-actions">
    63                 <a data-litespeed-onlyonce class="button button-primary" <?php if (!empty($img_count['groups_new']) || !empty($img_count['group.' . Img_Optm::STATUS_RAW])) : ?> href="<?php echo Utility::build_url(Router::ACTION_IMG_OPTM, Img_Optm::TYPE_NEW_REQ); ?>" <?php else : ?> href='javascript:;' disabled <?php endif; ?>>
    64                     <span class="dashicons dashicons-images-alt2"></span>&nbsp;<?php echo __('Send Optimization Request', 'litespeed-cache'); ?>
    65                 </a>
     64                <?php if ($imgoptm_service_hot) : ?>
     65                    <button class="button button-secondary" disabled>
     66                        <span class="dashicons dashicons-images-alt2"></span>&nbsp;<?php echo __('Send Optimization Request', 'litespeed-cache'); ?>
     67                        - <?php echo sprintf(__('Available after %d second(s)', 'litespeed-cache'), $imgoptm_service_hot); ?>
     68                    </button>
     69                <?php else : ?>
     70                    <a data-litespeed-onlyonce class="button button-primary" <?php if (!empty($img_count['groups_new']) || !empty($img_count['group.' . Img_Optm::STATUS_RAW])) : ?> href="<?php echo Utility::build_url(Router::ACTION_IMG_OPTM, Img_Optm::TYPE_NEW_REQ); ?>" <?php else : ?> href='javascript:;' disabled <?php endif; ?>>
     71                        <span class="dashicons dashicons-images-alt2"></span>&nbsp;<?php echo __('Send Optimization Request', 'litespeed-cache'); ?>
     72                    </a>
     73                <?php endif; ?>
    6674
    6775                <a data-litespeed-onlyonce class="button button-secondary" data-balloon-length="large" data-balloon-pos="right" aria-label="<?php echo __('Only press the button if the pull cron job is disabled.', 'litespeed-cache'); ?> <?php echo __('Images will be pulled automatically if the cron job is running.', 'litespeed-cache'); ?>" <?php if (!empty($img_count['img.' . Img_Optm::STATUS_NOTIFIED]) && !$is_running) : ?> href="<?php echo Utility::build_url(Router::ACTION_IMG_OPTM, Img_Optm::TYPE_PULL); ?>" <?php else : ?> href='javascript:;' disabled <?php endif; ?>>
  • litespeed-cache/trunk/tpl/page_optm/settings_css.tpl.php

    r3261732 r3281183  
    1717
    1818$next_gen = '<code class="litespeed-success">' . $this->cls('Media')->next_gen_image_title() . '</code>';
     19
     20$ucss_service_hot = $this->cls('Cloud')->service_hot(Cloud::SVC_UCSS);
     21$ccss_service_hot = $this->cls('Cloud')->service_hot(Cloud::SVC_CCSS);
    1922?>
    2023
     
    128131                            </p>
    129132                        </div>
    130                         <a href="<?php echo Utility::build_url(Router::ACTION_UCSS, UCSS::TYPE_GEN); ?>" class="button litespeed-btn-success">
    131                             <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'UCSS'); ?>
    132                         </a>
     133                        <?php if ($ucss_service_hot) : ?>
     134                            <button class="button button-secondary" disabled>
     135                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'UCSS'); ?>
     136                                - <?php echo sprintf(__('Available after %d second(s)', 'litespeed-cache'), $ucss_service_hot); ?>
     137                            </button>
     138                        <?php else : ?>
     139                            <a href="<?php echo Utility::build_url(Router::ACTION_UCSS, UCSS::TYPE_GEN); ?>" class="button litespeed-btn-success">
     140                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'UCSS'); ?>
     141                            </a>
     142                        <?php endif; ?>
    133143                        <?php Doc::queue_issues(); ?>
    134144                    <?php endif; ?>
     
    245255                            </p>
    246256                        </div>
    247                         <a href="<?php echo Utility::build_url(Router::ACTION_CSS, CSS::TYPE_GEN_CCSS); ?>" class="button litespeed-btn-success">
    248                             <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'CCSS'); ?>
    249                         </a>
     257                        <?php if ($ccss_service_hot) : ?>
     258                            <button class="button button-secondary" disabled>
     259                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'CCSS'); ?>
     260                                - <?php echo sprintf(__('Available after %d second(s)', 'litespeed-cache'), $ccss_service_hot); ?>
     261                            </button>
     262                        <?php else : ?>
     263                            <a href="<?php echo Utility::build_url(Router::ACTION_CSS, CSS::TYPE_GEN_CCSS); ?>" class="button litespeed-btn-success">
     264                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'CCSS'); ?>
     265                            </a>
     266                        <?php endif; ?>
    250267                        <?php Doc::queue_issues(); ?>
    251268                    <?php endif; ?>
  • litespeed-cache/trunk/tpl/page_optm/settings_tuning_css.tpl.php

    r2808204 r3281183  
    5454            <?php $this->build_textarea( $id ); ?>
    5555            <div class="litespeed-desc">
    56                 <?php echo __( 'List the CSS selector that its style should be always contained in UCSS.', 'litespeed-cache' ); ?>
    57                 <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#ucss-whitelist', __( 'How to choose an UCSS allowlist selector?', 'litespeed-cache' ) ); ?>
     56                <?php echo __( 'List the CSS selectors whose styles should always be included in UCSS.', 'litespeed-cache' ); ?>
     57                <?php Doc::one_per_line(); ?>
     58                <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#ucss-selector-allowlist', __( 'Learn more', 'litespeed-cache' ) ); ?>.
    5859                <br /><?php echo sprintf( __( 'Wildcard %s supported.', 'litespeed-cache' ), '<code>*</code>' ); ?>
    5960                <div class="litespeed-callout notice notice-warning inline">
     
    123124    <tr>
    124125        <th>
     126            <?php $id = Base::O_OPTM_CCSS_SELECTOR_WHITELIST; ?>
     127            <?php $this->title( $id ); ?>
     128        </th>
     129        <td>
     130            <?php $this->build_textarea( $id ); ?>
     131            <div class="litespeed-desc">
     132                <?php echo __( 'List the CSS selectors whose styles should always be included in CCSS.', 'litespeed-cache' ); ?>
     133                <?php Doc::one_per_line(); ?>
     134                <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#ccss-selector-allowlist', __( 'Learn more', 'litespeed-cache' ) ); ?>.
     135                <br /><?php echo sprintf( __( 'Wildcard %s supported.', 'litespeed-cache' ), '<code>*</code>' ); ?>
     136                <div class="litespeed-callout notice notice-warning inline">
     137                    <h4><?php echo __( 'Note', 'litespeed-cache' ); ?></h4>
     138                    <p>
     139                        <?php echo __( 'Selectors must exist in the CSS. Parent classes in the HTML will not work.', 'litespeed-cache' ); ?>
     140                    </p>
     141                </div>
     142                <font class="litespeed-success">
     143                    <?php echo __( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/ccss_whitelist.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/ccss_whitelist.txt</a>
     144                </font>
     145            </div>
     146        </td>
     147    </tr>
     148
     149    <tr>
     150        <th>
    125151            <?php $id = Base::O_OPTM_CCSS_CON; ?>
    126152            <?php $this->title( $id ); ?>
  • litespeed-cache/trunk/tpl/page_optm/settings_vpi.tpl.php

    r3157755 r3281183  
    11<?php
     2
    23namespace LiteSpeed;
    3 defined( 'WPINC' ) || exit;
     4
     5defined('WPINC') || exit;
    46
    57$summary = VPI::get_summary();
    6 $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_VPI );
     8$closest_server = Cloud::get_summary('server.' . Cloud::SVC_VPI);
    79
    8 $queue = $this->load_queue( 'vpi' );
     10$queue = $this->load_queue('vpi');
     11$vpi_service_hot = $this->cls('Cloud')->service_hot(Cloud::SVC_VPI);
    912?>
    1013
    1114<h3 class="litespeed-title-short">
    12     <?php echo __( 'Viewport Images', 'litespeed-cache' ); ?>
    13     <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#vpi-settings-tab' ); ?>
     15    <?php echo __('Viewport Images', 'litespeed-cache'); ?>
     16    <?php Doc::learn_more('https://docs.litespeedtech.com/lscache/lscwp/pageopt/#vpi-settings-tab'); ?>
    1417</h3>
    1518
    16 <table class="wp-list-table striped litespeed-table"><tbody>
     19<table class="wp-list-table striped litespeed-table">
     20    <tbody>
    1721
    18     <tr>
    19         <th>
    20             <?php $id = Base::O_MEDIA_VPI; ?>
    21             <?php $this->title( $id ); ?>
    22         </th>
    23         <td>
    24             <?php $this->build_switch( $id ); ?>
    25             <div class="litespeed-desc">
    26                 <?php echo __( 'When you use Lazy Load, it will delay the loading of all images on a page.', 'litespeed-cache' ); ?>
    27                 <br /><?php echo __( 'The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.', 'litespeed-cache' ); ?>
    28                 <br /><?php echo __( 'This enables the page\'s initial screenful of imagery to be fully displayed without delay.', 'litespeed-cache' ); ?>
     22        <tr>
     23            <th>
     24                <?php $id = Base::O_MEDIA_VPI; ?>
     25                <?php $this->title($id); ?>
     26            </th>
     27            <td>
     28                <?php $this->build_switch($id); ?>
     29                <div class="litespeed-desc">
     30                    <?php echo __('When you use Lazy Load, it will delay the loading of all images on a page.', 'litespeed-cache'); ?>
     31                    <br /><?php echo __('The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.', 'litespeed-cache'); ?>
     32                    <br /><?php echo __('This enables the page\'s initial screenful of imagery to be fully displayed without delay.', 'litespeed-cache'); ?>
    2933
    30                 <?php if ( ! $this->conf( Base::O_MEDIA_LAZY ) ) : ?>
    31                     <br /><font class="litespeed-warning litespeed-left10">
    32                     ⚠️ <?php echo __( 'Notice', 'litespeed-cache' ); ?>: <?php echo sprintf( __( '%s must be turned ON for this setting to work.', 'litespeed-cache' ),  '<code>' . Lang::title( Base::O_MEDIA_LAZY ) . '</code>' ); ?>
    33                     </font>
    34                 <?php endif; ?>
     34                    <?php if (!$this->conf(Base::O_MEDIA_LAZY)) : ?>
     35                        <br />
     36                        <font class="litespeed-warning litespeed-left10">
     37                            ⚠️ <?php echo __('Notice', 'litespeed-cache'); ?>: <?php echo sprintf(__('%s must be turned ON for this setting to work.', 'litespeed-cache'),  '<code>' . Lang::title(Base::O_MEDIA_LAZY) . '</code>'); ?>
     38                        </font>
     39                    <?php endif; ?>
    3540
    36             </div>
     41                </div>
    3742
    38             <div class="litespeed-desc litespeed-left20">
    39                 <?php if ( $summary ) : ?>
    40                     <?php if ( ! empty( $summary[ 'last_request' ] ) ) : ?>
    41                         <p>
    42                             <?php echo __( 'Last generated', 'litespeed-cache' ) . ': <code>' . Utility::readable_time( $summary[ 'last_request' ] ) . '</code>'; ?>
    43                         </p>
     43                <div class="litespeed-desc litespeed-left20">
     44                    <?php if ($summary) : ?>
     45                        <?php if (!empty($summary['last_request'])) : ?>
     46                            <p>
     47                                <?php echo __('Last generated', 'litespeed-cache') . ': <code>' . Utility::readable_time($summary['last_request']) . '</code>'; ?>
     48                            </p>
     49                        <?php endif; ?>
    4450                    <?php endif; ?>
    45                 <?php endif; ?>
    4651
    47                 <?php if ( $closest_server ) : ?>
    48                     <a class='litespeed-redetect' href="<?php echo Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_VPI ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf( __( 'Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache' ), $closest_server ); ?>' data-litespeed-cfm="<?php echo __( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ) ; ?>"><i class='litespeed-quic-icon'></i> <?php echo __( 'Redetect', 'litespeed-cache' ); ?></a>
    49                 <?php endif; ?>
     52                    <?php if ($closest_server) : ?>
     53                        <a class='litespeed-redetect' href="<?php echo Utility::build_url(Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array('svc' => Cloud::SVC_VPI)); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php echo sprintf(__('Current closest Cloud server is %s.&#10; Click to redetect.', 'litespeed-cache'), $closest_server); ?>' data-litespeed-cfm="<?php echo __('Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache'); ?>"><i class='litespeed-quic-icon'></i> <?php echo __('Redetect', 'litespeed-cache'); ?></a>
     54                    <?php endif; ?>
    5055
    51                 <?php if ( ! empty( $queue ) ) : ?>
    52                     <div class="litespeed-callout notice notice-warning inline">
    53                         <h4>
    54                             <?php echo sprintf( __( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'VPI' ); ?> ( <?php echo count( $queue ); ?> )
    55                             <a href="<?php echo Utility::build_url( Router::ACTION_VPI, VPI::TYPE_CLEAR_Q ); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
    56                         </h4>
    57                         <p>
    58                         <?php $i=0; foreach ( $queue as $k => $v ) : ?>
    59                             <?php if ( $i++ > 20 ) : ?>
    60                                 <?php echo '...'; ?>
    61                                 <?php break; ?>
    62                             <?php endif; ?>
    63                             <?php if ( ! is_array( $v ) ) continue; ?>
    64                             <?php if ( ! empty( $v[ '_status' ] ) ) : ?><span class="litespeed-success"><?php endif; ?>
    65                             <?php echo esc_html( $v[ 'url' ] ); ?>
    66                             <?php if ( ! empty( $v[ '_status' ] ) ) : ?></span><?php endif; ?>
    67                             <?php if ( $pos = strpos( $k, ' ' ) ) echo ' (' . __( 'Vary Group', 'litespeed-cache' ) . ':' . esc_html( substr( $k, 0, $pos ) ) . ')'; ?>
    68                             <?php if ( $v[ 'is_mobile' ] ) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
    69                             <br />
    70                         <?php endforeach; ?>
    71                         </p>
    72                     </div>
    73                     <a href="<?php echo Utility::build_url( Router::ACTION_VPI, VPI::TYPE_GEN ); ?>" class="button litespeed-btn-success">
    74                         <?php echo sprintf( __( 'Run %s Queue Manually', 'litespeed-cache' ), 'VPI' ); ?>
    75                     </a>
    76                     <?php Doc::queue_issues(); ?>
    77                 <?php endif; ?>
    78             </div>
     56                    <?php if (!empty($queue)) : ?>
     57                        <div class="litespeed-callout notice notice-warning inline">
     58                            <h4>
     59                                <?php echo sprintf(__('URL list in %s queue waiting for cron', 'litespeed-cache'), 'VPI'); ?> ( <?php echo count($queue); ?> )
     60                                <a href="<?php echo Utility::build_url(Router::ACTION_VPI, VPI::TYPE_CLEAR_Q); ?>" class="button litespeed-btn-warning litespeed-right">Clear</a>
     61                            </h4>
     62                            <p>
     63                                <?php $i = 0;
     64                                foreach ($queue as $k => $v) : ?>
     65                                    <?php if ($i++ > 20) : ?>
     66                                        <?php echo '...'; ?>
     67                                        <?php break; ?>
     68                                    <?php endif; ?>
     69                                    <?php if (!is_array($v)) continue; ?>
     70                                    <?php if (!empty($v['_status'])) : ?><span class="litespeed-success"><?php endif; ?>
     71                                        <?php echo esc_html($v['url']); ?>
     72                                        <?php if (!empty($v['_status'])) : ?></span><?php endif; ?>
     73                                    <?php if ($pos = strpos($k, ' ')) echo ' (' . __('Vary Group', 'litespeed-cache') . ':' . esc_html(substr($k, 0, $pos)) . ')'; ?>
     74                                    <?php if ($v['is_mobile']) echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>'; ?>
     75                                    <br />
     76                                <?php endforeach; ?>
     77                            </p>
     78                        </div>
     79                        <?php if ($vpi_service_hot) : ?>
     80                            <button class="button button-secondary" disabled>
     81                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'VPI'); ?>
     82                                - <?php echo sprintf(__('Available after %d second(s)', 'litespeed-cache'), $vpi_service_hot); ?>
     83                            </button>
     84                        <?php else : ?>
     85                            <a href="<?php echo Utility::build_url(Router::ACTION_VPI, VPI::TYPE_GEN); ?>" class="button litespeed-btn-success">
     86                                <?php echo sprintf(__('Run %s Queue Manually', 'litespeed-cache'), 'VPI'); ?>
     87                            </a>
     88                        <?php endif; ?>
     89                        <?php Doc::queue_issues(); ?>
     90                    <?php endif; ?>
     91                </div>
    7992
    80         </td>
    81     </tr>
     93            </td>
     94        </tr>
    8295
    83     <tr>
    84         <th>
    85             <?php $id = Base::O_MEDIA_VPI_CRON; ?>
    86             <?php $this->title( $id ); ?>
    87         </th>
    88         <td>
    89             <?php $this->build_switch( $id ); ?>
    90             <div class="litespeed-desc">
    91                 <?php echo __( 'Enable Viewport Images auto generation cron.', 'litespeed-cache' ); ?>
    92             </div>
    93         </td>
    94     </tr>
     96        <tr>
     97            <th>
     98                <?php $id = Base::O_MEDIA_VPI_CRON; ?>
     99                <?php $this->title($id); ?>
     100            </th>
     101            <td>
     102                <?php $this->build_switch($id); ?>
     103                <div class="litespeed-desc">
     104                    <?php echo __('Enable Viewport Images auto generation cron.', 'litespeed-cache'); ?>
     105                </div>
     106            </td>
     107        </tr>
    95108
    96 </tbody></table>
     109    </tbody>
     110</table>
  • litespeed-cache/trunk/tpl/presets/standard.tpl.php

    r2869601 r3281183  
    8585
    8686<h3 class="litespeed-title-short">
    87     <?php esc_html_e( 'LiteSpeed Cache Standard Presets', 'litespeed-cache' ); ?>
     87    <?php _e( 'LiteSpeed Cache Standard Presets', 'litespeed-cache' ); ?>
    8888    <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/presets/#standard-tab' ); ?>
    8989</h3>
    9090
    91 <p><?php esc_html_e( 'Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.', 'litespeed-cache' ); ?></p>
     91<p><?php _e( 'Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.', 'litespeed-cache' ); ?></p>
    9292
    9393<div class="litespeed-comparison-cards">
     
    114114            </div>
    115115            <div class="litespeed-card-footer">
    116                 <h4><?php esc_html_e( 'Who should use this preset?', 'litespeed-cache' ); ?></h4>
     116                <h4><?php _e( 'Who should use this preset?', 'litespeed-cache' ); ?></h4>
    117117                <?php foreach ( $presets[ $name ]['footer'] as $line ) : ?>
    118118                <p><?php echo esc_html( $line ); ?></p>
     
    124124                href="<?php echo Utility::build_url( Router::ACTION_PRESET, Preset::TYPE_APPLY, false, null, array( 'preset' => $name ) ); ?>"
    125125                class="button <?php echo $button_class; ?>"
    126                 data-litespeed-cfm="<?php printf( esc_html__( 'This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?', 'litespeed-cache' ), $title ); ?>"
     126                data-litespeed-cfm="<?php printf( __( 'This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?', 'litespeed-cache' ), $title ); ?>"
    127127            >
    128                 <?php esc_html_e( 'Apply Preset', 'litespeed-cache' ); ?>
     128                <?php _e( 'Apply Preset', 'litespeed-cache' ); ?>
    129129            </a>
    130130        </div>
     
    156156?>
    157157<h3 class="litespeed-title-short">
    158     <?php esc_html_e( 'History', 'litespeed-cache' ); ?>
     158    <?php _e( 'History', 'litespeed-cache' ); ?>
    159159</h3>
    160160<?php endif; ?>
     
    166166    $time = trim( Utility::readable_time( $summary['preset_timestamp'] ) );
    167167    if ( 'error' === $name ) {
    168         printf( esc_html__( 'Error: Failed to apply the settings %1$s', 'litespeed-cache' ), $time );
     168        printf( __( 'Error: Failed to apply the settings %1$s', 'litespeed-cache' ), $time );
    169169    } elseif ( 'backup' === $name ) {
    170         printf( esc_html__( 'Restored backup settings %1$s', 'litespeed-cache' ), $time );
     170        printf( __( 'Restored backup settings %1$s', 'litespeed-cache' ), $time );
    171171    } else {
    172172        printf(
    173             esc_html__( 'Applied the %1$s preset %2$s', 'litespeed-cache' ),
     173            __( 'Applied the %1$s preset %2$s', 'litespeed-cache' ),
    174174            '<strong>' . esc_html( $presets[ $name ]['title'] ) . '</strong>',
    175175            $time
     
    182182<?php foreach ( $backups as $backup ) : ?>
    183183<p>
    184     <?php printf( esc_html__( 'Backup created %1$s before applying the %2$s preset', 'litespeed-cache' ), $backup['time'], $backup['title'] ); ?>
     184    <?php printf( __( 'Backup created %1$s before applying the %2$s preset', 'litespeed-cache' ), $backup['time'], $backup['title'] ); ?>
    185185    <a
    186186        href="<?php echo Utility::build_url( Router::ACTION_PRESET, Preset::TYPE_RESTORE, false, null, array( 'timestamp' => $backup['timestamp'] ) ); ?>"
    187187        class="litespeed-left10"
    188         data-litespeed-cfm="<?php printf( esc_html__( 'This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?', 'litespeed-cache' ), $backup['time'], $backup['title'] ); ?>"
     188        data-litespeed-cfm="<?php printf( __( 'This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?', 'litespeed-cache' ), $backup['time'], $backup['title'] ); ?>"
    189189    >
    190         <?php esc_html_e( 'Restore Settings', 'litespeed-cache' ); ?>
     190        <?php _e( 'Restore Settings', 'litespeed-cache' ); ?>
    191191    </a>
    192192</p>
  • litespeed-cache/trunk/tpl/toolbox/beta_test.tpl.php

    r3269130 r3281183  
    77// Existing public version list
    88$v_list = array(
     9    '7.1',
    910    '7.0.1',
    10     '7.0.0.1',
    1111    '6.5.4',
    12     '6.4.1',
    13     '6.3.0.1',
    14     '6.2.0.1',
    15     '6.1',
    1612    '5.7.0.1',
    1713    '4.6',
  • litespeed-cache/trunk/tpl/toolbox/log_viewer.tpl.php

    r3146657 r3281183  
    99        array(
    1010            'name' => 'debug',
    11             'label' => esc_html__('Debug Log', 'litespeed-cache'),
     11            'label' => __('Debug Log', 'litespeed-cache'),
    1212            'accesskey' => 'A',
    1313        ),
    1414        array(
    1515            'name' => 'purge',
    16             'label' => esc_html__('Purge Log', 'litespeed-cache'),
     16            'label' => __('Purge Log', 'litespeed-cache'),
    1717            'accesskey' => 'B',
    1818        ),
    1919        array(
    2020            'name' => 'crawler',
    21             'label' => esc_html__('Crawler Log', 'litespeed-cache'),
     21            'label' => __('Crawler Log', 'litespeed-cache'),
    2222            'accesskey' => 'C',
    2323        ),
     
    4949    $label = isset($item['label']) ? $item['label'] : $item['name'];
    5050
    51     return "<a href='{$url}' class='{$class}' {$subtab} {$accesskey}>{$label}</a>";
     51    $on_click = isset($item['onClick']) ? ' onClick="' . $item['onClick'].'"' : '';
     52
     53    return "<a href='{$url}' class='{$class}' {$subtab} {$accesskey} {$on_click}>{$label}</a>";
    5254}
    5355
     
    6062    $item =
    6163        array(
    62             'label' => esc_html__('Clear Logs', 'litespeed-cache'),
     64            'label' => __('Clear Logs', 'litespeed-cache'),
    6365            'url' => Utility::build_url(Router::ACTION_DEBUG2, Debug2::TYPE_CLEAR_LOG),
    6466        );
     
    6769    }
    6870    echo subnav_link($item);
     71}
     72
     73/**
     74 * Print a button to copy current log
     75 * @since  7.0
     76 */
     77function copy_logs_link($id_to_copy)
     78{
     79    $item = array(
     80            'name' => 'copy_links',
     81            'label' => __('Copy Log', 'litespeed-cache'),
     82            'cssClass' => 'litespeed-info-button',
     83            'onClick' => "litespeed_copy_to_clipboard('".$id_to_copy."')"
     84        );
     85    return subnav_link($item);
    6986}
    7087
     
    7794    $file = $this->cls('Debug2')->path($log['name']);
    7895    $lines = File::count_lines($file);
    79     $start = $lines > 1000 ? $lines - 1000 : 0;
     96    $max_lines = apply_filters('litespeed_debug_show_max_lines', 1000);
     97    $start = $lines > $max_lines ? $lines - $max_lines : 0;
    8098    $lines = File::read($file, $start);
    8199    $lines = $lines ? trim(implode("\n", $lines)) : '';
     100   
     101    $log_body_id = 'litespeed-log-' . $log['name'];
    82102
    83103    $log_views[] =
    84104        "<div class='litespeed-log-view-wrapper' data-litespeed-sublayout='{$log['name']}_log'>"
    85         . "<h3 class='litespeed-title'>{$log['label']}</h3>"
    86         . '<div class="litespeed-log-body">'
     105        . "<h3 class='litespeed-title'>{$log['label']}" . copy_logs_link($log_body_id) ."</h3>"
     106        . '<div class="litespeed-log-body" id="' . $log_body_id . '">'
    87107        . nl2br(htmlspecialchars($lines))
    88108        . '</div>'
     
    92112
    93113<h3 class="litespeed-title">
    94     <?php esc_html_e('LiteSpeed Logs', 'litespeed-cache'); ?>
     114    <?php _e('LiteSpeed Logs', 'litespeed-cache'); ?>
    95115    <?php Doc::learn_more('https://docs.litespeedtech.com/lscache/lscwp/toolbox/#log-view-tab'); ?>
    96116</h3>
Note: See TracChangeset for help on using the changeset viewer.