Plugin Directory

Changeset 3380206


Ignore:
Timestamp:
10/17/2025 02:55:12 PM (2 months ago)
Author:
LiteSpeedTech
Message:

Release v7.6.2

Location:
litespeed-cache
Files:
342 added
8 edited

Legend:

Unmodified
Added
Removed
  • litespeed-cache/trunk/assets/css/litespeed-dark-mode.css

    r3379049 r3380206  
    2525
    2626@media (prefers-color-scheme: dark) {
    27     body[class*="litespeed"]:not(.litespeed-lightmode) {
     27    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) {
    2828        background-color: #1e1e1e;
    2929        color: #e0e0e0;
     
    3737/* WordPress admin wrapper */
    3838@media (prefers-color-scheme: dark) {
    39     body[class*="litespeed"]:not(.litespeed-lightmode) #wpwrap {
     39    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) #wpwrap {
    4040        background-color: #1e1e1e;
    4141        color: #e0e0e0;
     
    4949/* Main content area */
    5050@media (prefers-color-scheme: dark) {
    51     body[class*="litespeed"]:not(.litespeed-lightmode) #wpcontent {
     51    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) #wpcontent {
    5252        background-color: #181818;
    5353        color: #e0e0e0;
     
    6161/* Form inputs */
    6262@media (prefers-color-scheme: dark) {
    63     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='text'],
    64     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='number'],
    65     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='email'],
    66     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='url'],
    67     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='password'],
    68     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='search'],
    69     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='file'],
    70     body[class*="litespeed"]:not(.litespeed-lightmode) textarea,
    71     body[class*="litespeed"]:not(.litespeed-lightmode) select {
     63    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='text'],
     64    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='number'],
     65    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='email'],
     66    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='url'],
     67    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='password'],
     68    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='search'],
     69    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='file'],
     70    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) textarea,
     71    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) select {
    7272        background-color: #2d2d30;
    7373        border: 1px solid #3e3e42;
     
    9090
    9191@media (prefers-color-scheme: dark) {
    92     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='text']:focus,
    93     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='number']:focus,
    94     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='email']:focus,
    95     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='url']:focus,
    96     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='password']:focus,
    97     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='search']:focus,
    98     body[class*="litespeed"]:not(.litespeed-lightmode) input[type='file']:focus,
    99     body[class*="litespeed"]:not(.litespeed-lightmode) textarea:focus,
    100     body[class*="litespeed"]:not(.litespeed-lightmode) select:focus {
     92    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='text']:focus,
     93    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='number']:focus,
     94    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='email']:focus,
     95    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='url']:focus,
     96    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='password']:focus,
     97    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='search']:focus,
     98    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type='file']:focus,
     99    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) textarea:focus,
     100    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) select:focus {
    101101        background-color: #404043;
    102102        border: 1px solid #5a5a5d;
     
    120120/* Buttons */
    121121@media (prefers-color-scheme: dark) {
    122     body[class*="litespeed"]:not(.litespeed-lightmode) .button,
    123     body[class*="litespeed"]:not(.litespeed-lightmode) .button-secondary {
     122    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button,
     123    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-secondary {
    124124        background-color: #3e3e42;
    125125        border-color: #5a5a5d;
     
    135135
    136136@media (prefers-color-scheme: dark) {
    137     body[class*="litespeed"]:not(.litespeed-lightmode) circle.litespeed-pie_bg {
     137    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) circle.litespeed-pie_bg {
    138138        stroke: #3e3e42;
    139139    }
     
    144144
    145145@media (prefers-color-scheme: dark) {
    146     body[class*="litespeed"]:not(.litespeed-lightmode) g.litespeed-pie_info text {
     146    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) g.litespeed-pie_info text {
    147147        fill: #e0e0e0;
    148148    }
     
    153153
    154154@media (prefers-color-scheme: dark) {
    155     body[class*="litespeed"]:not(.litespeed-lightmode) g.litespeed-pie_info .litespeed-pie-done {
     155    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) g.litespeed-pie_info .litespeed-pie-done {
    156156        fill: #6dd17e;
    157157    }
     
    162162
    163163@media (prefers-color-scheme: dark) {
    164     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-switch input:not(:checked) + label {
     164    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-switch input:not(:checked) + label {
    165165        background-color: #3e3e42;
    166166        color: #e0e0e0;
     
    176176/* Column with boxes layout */
    177177@media (prefers-color-scheme: dark) {
    178     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes .postbox {
     178    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes .postbox {
    179179        border-color: #3e3e42;
    180180    }
     
    185185
    186186@media (prefers-color-scheme: dark) {
    187     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes > div.litespeed-column-right {
     187    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes > div.litespeed-column-right {
    188188        background-color: #2d2d30;
    189189    }
     
    194194
    195195@media (prefers-color-scheme: dark) {
    196     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-image-optim-summary,
    197     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-column-left-inside {
     196    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-image-optim-summary,
     197    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-column-left-inside {
    198198        background-color: #1e1e1e;
    199199        border: 1px solid #3e3e42;
     
    224224
    225225@media (prefers-color-scheme: dark) {
    226     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-image-optim-summary-footer,
    227     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes-footer {
     226    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-image-optim-summary-footer,
     227    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes-footer {
    228228        border-top: 1px solid #373737;
    229229        background: revert;
     
    237237
    238238@media (prefers-color-scheme: dark) {
    239     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes-footer {
     239    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-column-with-boxes-footer {
    240240        border-top: 1px solid #3e3e42;
    241241        background-color: #353539;
     
    250250
    251251@media (prefers-color-scheme: dark) {
    252     body[class*="litespeed"]:not(.litespeed-lightmode) .nav-tab:focus:not(.nav-tab-active),
    253     body[class*="litespeed"]:not(.litespeed-lightmode) .nav-tab:hover:not(.nav-tab-active) {
     252    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .nav-tab:focus:not(.nav-tab-active),
     253    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .nav-tab:hover:not(.nav-tab-active) {
    254254        background-color: #4d4d51;
    255255        border-color: #666;
     
    265265
    266266@media (prefers-color-scheme: dark) {
    267     body[class*="litespeed"]:not(.litespeed-lightmode) .button:hover,
    268     body[class*="litespeed"]:not(.litespeed-lightmode) .button-secondary:hover {
     267    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button:hover,
     268    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-secondary:hover {
    269269        background-color: #484851;
    270270        border-color: #666;
     
    278278
    279279@media (prefers-color-scheme: dark) {
    280     body[class*="litespeed"]:not(.litespeed-lightmode) .button-primary {
     280    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-primary {
    281281        background-color: #0073aa;
    282282        border-color: #005a87;
     
    291291
    292292@media (prefers-color-scheme: dark) {
    293     body[class*="litespeed"]:not(.litespeed-lightmode) .button-primary:hover {
     293    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-primary:hover {
    294294        background-color: #005a87;
    295295        border-color: #004a73;
     
    302302
    303303@media (prefers-color-scheme: dark) {
    304     body[class*="litespeed"]:not(.litespeed-lightmode) .button-primary:disabled,
    305     body[class*="litespeed"]:not(.litespeed-lightmode) .button-primary[disabled] {
     304    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-primary:disabled,
     305    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .button-primary[disabled] {
    306306        background-color: #3e3e42;
    307307        border-color: #5a5a5d;
     
    322322/* Danger buttons */
    323323@media (prefers-color-scheme: dark) {
    324     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-btn-danger-bg,
    325     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed .litespeed-btn-danger-bg,
    326     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-wrap .litespeed-btn-danger-bg {
     324    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-btn-danger-bg,
     325    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed .litespeed-btn-danger-bg,
     326    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-wrap .litespeed-btn-danger-bg {
    327327        background-color: #dc3232;
    328328        border-color: #b32d2e;
     
    341341
    342342@media (prefers-color-scheme: dark) {
    343     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-btn-danger-bg:hover,
    344     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed .litespeed-btn-danger-bg:hover,
    345     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-wrap .litespeed-btn-danger-bg:hover {
     343    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-btn-danger-bg:hover,
     344    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed .litespeed-btn-danger-bg:hover,
     345    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-wrap .litespeed-btn-danger-bg:hover {
    346346        background-color: #b32d2e;
    347347        border-color: #a02622;
     
    357357/* Notices */
    358358@media (prefers-color-scheme: dark) {
    359     body[class*="litespeed"]:not(.litespeed-lightmode) .notice {
     359    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .notice {
    360360        background-color: #262626;
    361361        border-left: 4px solid #72a9d3;
     
    370370
    371371@media (prefers-color-scheme: dark) {
    372     body[class*="litespeed"]:not(.litespeed-lightmode) .notice-success {
     372    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .notice-success {
    373373        border-left-color: #46b450;
    374374    }
     
    379379
    380380@media (prefers-color-scheme: dark) {
    381     body[class*="litespeed"]:not(.litespeed-lightmode) .notice-warning {
     381    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .notice-warning {
    382382        border-left-color: #b28100;
    383383    }
     
    388388
    389389@media (prefers-color-scheme: dark) {
    390     body[class*="litespeed"]:not(.litespeed-lightmode) .notice-error {
     390    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .notice-error {
    391391        border-left-color: #dc3232;
    392392    }
     
    397397
    398398@media (prefers-color-scheme: dark) {
    399     body[class*="litespeed"]:not(.litespeed-lightmode) .notice-info {
     399    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .notice-info {
    400400        border-left-color: #00a0d2;
    401401    }
     
    407407/* Striped table notices */
    408408@media (prefers-color-scheme: dark) {
    409     body[class*="litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(even) .notice {
     409    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(even) .notice {
    410410        background-color: #3e3e42;
    411411        box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.3);
     
    419419/* Postboxes */
    420420@media (prefers-color-scheme: dark) {
    421     body[class*="litespeed"]:not(.litespeed-lightmode) .postbox {
     421    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .postbox {
    422422        background-color: #2d2d30;
    423423        border: 1px solid #767679;
     
    432432
    433433@media (prefers-color-scheme: dark) {
    434     body[class*="litespeed"]:not(.litespeed-lightmode) .postbox h3,
    435     body[class*="litespeed"]:not(.litespeed-lightmode) .postbox .hndle {
     434    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .postbox h3,
     435    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .postbox .hndle {
    436436        color: #e0e0e0;
    437437    }
     
    444444/* Tables */
    445445@media (prefers-color-scheme: dark) {
    446     body[class*="litespeed"]:not(.litespeed-lightmode) table,
    447     body[class*="litespeed"]:not(.litespeed-lightmode) .wp-list-table {
     446    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) table,
     447    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .wp-list-table {
    448448        background-color: #2d2d30;
    449449        color: #e0e0e0;
     
    457457
    458458@media (prefers-color-scheme: dark) {
    459     body[class*="litespeed"]:not(.litespeed-lightmode) .wp-list-table th {
     459    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .wp-list-table th {
    460460        color: #e0e0e0;
    461461    }
     
    466466
    467467@media (prefers-color-scheme: dark) {
    468     body[class*="litespeed"]:not(.litespeed-lightmode) .wp-list-table td {
     468    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .wp-list-table td {
    469469        border-bottom: 1px solid #3e3e42;
    470470        color: #e0e0e0;
     
    477477
    478478@media (prefers-color-scheme: dark) {
    479     body[class*="litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(odd) {
     479    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(odd) {
    480480        background-color: #2d2d30;
    481481    }
     
    486486
    487487@media (prefers-color-scheme: dark) {
    488     body[class*="litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(even) {
     488    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .striped > tbody > :nth-child(even) {
    489489        background-color: #353539;
    490490    }
     
    496496/* Form tables */
    497497@media (prefers-color-scheme: dark) {
    498     body[class*="litespeed"]:not(.litespeed-lightmode) .form-table {
     498    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .form-table {
    499499        background: transparent;
    500500    }
     
    505505
    506506@media (prefers-color-scheme: dark) {
    507     body[class*="litespeed"]:not(.litespeed-lightmode) .form-table th {
     507    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .form-table th {
    508508        background: transparent;
    509509        color: #e0e0e0;
     
    516516
    517517@media (prefers-color-scheme: dark) {
    518     body[class*="litespeed"]:not(.litespeed-lightmode) .form-table td {
     518    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .form-table td {
    519519        background: transparent;
    520520        color: #e0e0e0;
     
    528528/* Links */
    529529@media (prefers-color-scheme: dark) {
    530     body[class*="litespeed"]:not(.litespeed-lightmode) a {
     530    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) a {
    531531        color: #72aee6;
    532532    }
     
    537537
    538538@media (prefers-color-scheme: dark) {
    539     body[class*="litespeed"]:not(.litespeed-lightmode) a:hover,
    540     body[class*="litespeed"]:not(.litespeed-lightmode) a:focus {
     539    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) a:hover,
     540    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) a:focus {
    541541        color: #9ec8f2;
    542542    }
     
    549549/* Code blocks */
    550550@media (prefers-color-scheme: dark) {
    551     body[class*="litespeed"]:not(.litespeed-lightmode) code {
     551    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) code {
    552552        background-color: #404043;
    553553        color: #e0e0e0;
     
    561561/* Horizontal rules */
    562562@media (prefers-color-scheme: dark) {
    563     body[class*="litespeed"]:not(.litespeed-lightmode) hr {
     563    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) hr {
    564564        border-color: #5a5a5d;
    565565        background-color: #5a5a5d;
     
    573573/* Dashboard widgets */
    574574@media (prefers-color-scheme: dark) {
    575     body[class*="litespeed"]:not(.litespeed-lightmode) .dashboard-widget {
     575    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .dashboard-widget {
    576576        background-color: #2d2d30;
    577577        border: 1px solid #3e3e42;
     
    584584
    585585@media (prefers-color-scheme: dark) {
    586     body[class*="litespeed"]:not(.litespeed-lightmode) .dashboard-widget .widget-top {
     586    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .dashboard-widget .widget-top {
    587587        background-color: #404043;
    588588        border-bottom: 1px solid #5a5a5d;
     
    596596/* Meta boxes */
    597597@media (prefers-color-scheme: dark) {
    598     body[class*="litespeed"]:not(.litespeed-lightmode) .meta-box-sortables .postbox {
     598    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .meta-box-sortables .postbox {
    599599        background-color: #2d2d30;
    600600        border: 1px solid #3e3e42;
     
    608608/* LiteSpeed specific styles */
    609609@media (prefers-color-scheme: dark) {
    610     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-header {
     610    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-header {
    611611        border-bottom: 1px solid #5a5a5d;
    612612    }
     
    617617
    618618@media (prefers-color-scheme: dark) {
    619     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-body {
     619    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-body {
    620620        background-color: #1e1e1e;
    621621        border-left: 1px solid #5a5a5d;
     
    634634
    635635@media (prefers-color-scheme: dark) {
    636     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-panel {
     636    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-panel {
    637637        background-color: #2d2d30;
    638638        border: 1px solid #3e3e42;
     
    647647
    648648@media (prefers-color-scheme: dark) {
    649     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-panel-wrapper {
     649    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-panel-wrapper {
    650650        background: transparent;
    651651    }
     
    657657/* Dashboard titles */
    658658@media (prefers-color-scheme: dark) {
    659     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-h1,
    660     body[class*="litespeed"]:not(.litespeed-lightmode) h1.litespeed-h1 {
     659    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-h1,
     660    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) h1.litespeed-h1 {
    661661        color: #e0e0e0;
    662662    }
     
    668668
    669669@media (prefers-color-scheme: dark) {
    670     body[class*="litespeed"]:not(.litespeed-lightmode) h3 {
     670    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) h3 {
    671671        color: #e0e0e0;
    672672    }
     
    678678/* LiteSpeed postboxes */
    679679@media (prefers-color-scheme: dark) {
    680     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox {
     680    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox {
    681681        background-color: #2d2d30;
    682682        border: 1px solid #3e3e42;
     
    691691
    692692@media (prefers-color-scheme: dark) {
    693     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside {
     693    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside {
    694694        color: #e0e0e0;
    695695    }
     
    700700
    701701@media (prefers-color-scheme: dark) {
    702     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside .litespeed-title {
     702    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside .litespeed-title {
    703703        border-bottom: 1px solid #5a5a5d;
    704704        color: #e0e0e0;
     
    711711
    712712@media (prefers-color-scheme: dark) {
    713     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside.litespeed-postbox-footer {
     713    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox .inside.litespeed-postbox-footer {
    714714        background-color: #353539;
    715715        border-top: 1px solid #5a5a5d;
     
    722722
    723723@media (prefers-color-scheme: dark) {
    724     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox p.litespeed-dashboard-stats-total {
     724    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox p.litespeed-dashboard-stats-total {
    725725        border-top: 1px dashed #5a5a5d;
    726726    }
     
    732732/* Dashboard stats */
    733733@media (prefers-color-scheme: dark) {
    734     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats .litespeed-desc {
     734    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats .litespeed-desc {
    735735        color: #b3b3b3;
    736736    }
     
    741741
    742742@media (prefers-color-scheme: dark) {
    743     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-payg {
     743    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-payg {
    744744        color: #b3b3b3;
    745745    }
     
    750750
    751751@media (prefers-color-scheme: dark) {
    752     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-payg strong {
     752    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-payg strong {
    753753        color: #e0e0e0;
    754754    }
     
    759759
    760760@media (prefers-color-scheme: dark) {
    761     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-wrapper .litespeed-postbox:not(:first-child) {
     761    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-stats-wrapper .litespeed-postbox:not(:first-child) {
    762762        border-left-color: #3e3e42;
    763763    }
     
    768768
    769769@media (prefers-color-scheme: dark) {
    770     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox.litespeed-postbox-partner h3.litespeed-title {
     770    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox.litespeed-postbox-partner h3.litespeed-title {
    771771        color: #b3b3b3;
    772772    }
     
    778778/* QUIC.cloud postbox styling */
    779779@media (prefers-color-scheme: dark) {
    780     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud {
     780    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud {
    781781        border-color: #3e7cb3;
    782782    }
     
    787787
    788788@media (prefers-color-scheme: dark) {
    789     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title {
     789    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title {
    790790        background-color: #41464a;
    791791        color: #ffffff;
     
    798798
    799799@media (prefers-color-scheme: dark) {
    800     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a {
     800    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a {
    801801        color: #a5caf2;
    802802    }
     
    807807
    808808@media (prefers-color-scheme: dark) {
    809     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a:hover {
     809    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a:hover {
    810810        color: #c2dcff;
    811811    }
     
    817817/* Dashboard unlock/promo styling */
    818818@media (prefers-color-scheme: dark) {
    819     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock {
     819    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock {
    820820        background-color: #2d2d30;
    821821        color: #e0e0e0;
     
    828828
    829829@media (prefers-color-scheme: dark) {
    830     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock-desc {
     830    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock-desc {
    831831        color: #e0e0e0;
    832832    }
     
    837837
    838838@media (prefers-color-scheme: dark) {
    839     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock-desc span {
     839    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-dashboard-unlock-desc span {
    840840        color: #b3b3b3;
    841841    }
     
    847847/* Navigation tabs */
    848848@media (prefers-color-scheme: dark) {
    849     body[class*="litespeed"]:not(.litespeed-lightmode) .nav-tab {
     849    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .nav-tab {
    850850        background-color: #3e3e42;
    851851        border-color: #5a5a5d;
     
    860860
    861861@media (prefers-color-scheme: dark) {
    862     body[class*="litespeed"]:not(.litespeed-lightmode) .nav-tab:hover {
     862    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .nav-tab:hover {
    863863        background-color: #1e1e1e;
    864864    }
     
    869869
    870870@media (prefers-color-scheme: dark) {
    871     body[class*="litespeed"]:not(.litespeed-lightmode) .nav-tab-active {
     871    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .nav-tab-active {
    872872        background-color: #1e1e1e;
    873873        border-bottom-color: #1e1e1e;
     
    883883/* Status indicators */
    884884@media (prefers-color-scheme: dark) {
    885     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-success {
     885    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-success {
    886886        color: #46b450;
    887887    }
     
    892892
    893893@media (prefers-color-scheme: dark) {
    894     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-error {
     894    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-error {
    895895        color: #dc3232;
    896896    }
     
    901901
    902902@media (prefers-color-scheme: dark) {
    903     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-warning {
     903    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-warning {
    904904        color: #ffb900;
    905905    }
     
    910910
    911911@media (prefers-color-scheme: dark) {
    912     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-warning-bg {
     912    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-warning-bg {
    913913        background-color: #584007 !important;
    914914        color: #ffffff;
     
    922922/* Footer */
    923923@media (prefers-color-scheme: dark) {
    924     body[class*="litespeed"]:not(.litespeed-lightmode) #wpfooter {
     924    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) #wpfooter {
    925925        background-color: #2d2d30;
    926926        color: #e0e0e0;
     
    934934/* Checkbox and radio inputs */
    935935@media (prefers-color-scheme: dark) {
    936     body[class*="litespeed"]:not(.litespeed-lightmode) input[type="checkbox"],
    937     body[class*="litespeed"]:not(.litespeed-lightmode) input[type="radio"] {
     936    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type="checkbox"],
     937    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) input[type="radio"] {
    938938        background-color: #2d2d30;
    939939        border: 1px solid #3e3e42;
     
    948948/* Progress bars */
    949949@media (prefers-color-scheme: dark) {
    950     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-progress {
     950    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-progress {
    951951        background-color: #3e3e42;
    952952    }
     
    957957
    958958@media (prefers-color-scheme: dark) {
    959     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-progress-bar {
     959    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-progress-bar {
    960960        background-color: #0073aa;
    961961    }
     
    967967/* Litespeed tick buttons */
    968968@media (prefers-color-scheme: dark) {
    969     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick {
     969    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick {
    970970        background-color: #2d2d30;
    971971        border: 1px solid #3e3e42;
     
    980980
    981981@media (prefers-color-scheme: dark) {
    982     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick:hover {
     982    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick:hover {
    983983        background-color: #404043;
    984984        border-color: #5a5a5d;
     
    991991
    992992@media (prefers-color-scheme: dark) {
    993     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick label {
     993    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick label {
    994994        color: #e0e0e0;
    995995        padding: 4px 8px;
     
    10021002
    10031003@media (prefers-color-scheme: dark) {
    1004     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick label:hover {
     1004    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick label:hover {
    10051005        color: #72aee6;
    10061006    }
     
    10111011
    10121012@media (prefers-color-scheme: dark) {
    1013     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick input[type='checkbox'] {
     1013    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick input[type='checkbox'] {
    10141014        background-color: #2d2d30;
    10151015        border: 2px solid #5a5a5d;
     
    10221022
    10231023@media (prefers-color-scheme: dark) {
    1024     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-tick input[type='checkbox']:checked {
     1024    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-tick input[type='checkbox']:checked {
    10251025        background-color: #0073aa;
    10261026        border-color: #0073aa;
     
    10341034/* Card headers */
    10351035@media (prefers-color-scheme: dark) {
    1036     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-card-header {
     1036    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-card-header {
    10371037        background-color: #404043;
    10381038        border-bottom: 1px solid #5a5a5d;
     
    10481048/* Card action buttons */
    10491049@media (prefers-color-scheme: dark) {
    1050     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-card-action .button-secondary:hover {
     1050    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-card-action .button-secondary:hover {
    10511051        background-color: #484851;
    10521052        border-color: #666;
     
    10611061
    10621062@media (prefers-color-scheme: dark) {
    1063     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-card-action .button-primary:hover {
     1063    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-card-action .button-primary:hover {
    10641064        background-color: #005a87;
    10651065        border-color: #004a73;
     
    10741074
    10751075@media (prefers-color-scheme: dark) {
    1076     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-h3,
    1077     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-panel-para {
     1076    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-h3,
     1077    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-panel-para {
    10781078        color: revert;
    10791079    }
     
    10861086/* Text gradient for QUIC.cloud branding */
    10871087@media (prefers-color-scheme: dark) {
    1088     body[class*="litespeed"]:not(.litespeed-lightmode) .litespeed-qc-text-gradient {
     1088    body[class*="litespeed-cache_page_litespeed"]:not(.litespeed-lightmode) .litespeed-qc-text-gradient {
    10891089        background: -webkit-linear-gradient(130deg, #ff69b4, #4db3e6 60%, #a5e7ff);
    10901090        -webkit-background-clip: text;
  • litespeed-cache/trunk/litespeed-cache.php

    r3379192 r3380206  
    44 * Plugin URI:        https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
    55 * Description:       High-performance page caching and site optimization from LiteSpeed
    6  * Version:           7.6.1
     6 * Version:           7.6.2
    77 * Author:            LiteSpeed Technologies
    88 * Author URI:        https://www.litespeedtech.com
     
    3636}
    3737
    38 ! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '7.6.1' );
     38! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '7.6.2' );
    3939
    4040! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR );
  • litespeed-cache/trunk/readme.txt

    r3379192 r3380206  
    55Requires PHP: 7.2
    66Tested up to: 6.8
    7 Stable tag: 7.6.1
     7Stable tag: 7.6.2
    88License: GPLv3
    99License URI: http://www.gnu.org/licenses/gpl.html
     
    257257
    258258== Changelog ==
     259
     260= 7.6.2 - Oct 17 2025 =
     261* 🐞**Cloud** Fixed the PHP 8+ typecast issue in QUIC.cloud signature verification which caused activation failures.
     262* **Purge** Restored a delay purge hook while calling purge by CLI. (asafm7)
     263* **REST** Dropped legacy code that had been used for development purposes.
     264* **GUI** Use a stricter selector for dark mode to prevent side effects.
    259265
    260266= 7.6.1 - Oct 15 2025 =
  • litespeed-cache/trunk/src/admin-display.cls.php

    r3379192 r3380206  
    330330                1
    331331            );
     332            // Add unified body class for settings page and top-level page
     333            add_filter( 'admin_body_class', function ( $classes ) {
     334                $screen = get_current_screen();
     335                if ( $screen && in_array( $screen->id, [ 'settings_page_litespeed-cache-options', 'toplevel_page_litespeed' ], true ) ) {
     336                    $classes .= ' litespeed-cache_page_litespeed';
     337                }
     338                return $classes;
     339            } );
    332340        } );
    333341    }
  • litespeed-cache/trunk/src/cloud.cls.php

    r3379192 r3380206  
    593593
    594594        // phpcs:ignore WordPress.Security.NonceVerification.Missing
    595         $ts = !empty( $_POST['wpapi_ts'] ) ? (int) sanitize_text_field( wp_unslash( $_POST['wpapi_ts'] ) ) : 0;
     595        $ts = !empty( $_POST['wpapi_ts'] ) ? sanitize_text_field( wp_unslash( $_POST['wpapi_ts'] ) ) : '';
    596596        // phpcs:ignore WordPress.Security.NonceVerification.Missing
    597597        $sig = !empty( $_POST['wpapi_signature_b64'] ) ? sanitize_text_field( wp_unslash( $_POST['wpapi_signature_b64'] ) ) : '';
     
    635635            }
    636636            $signature = base64_decode( $signature_b64 ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
    637             $is_valid  = sodium_crypto_sign_verify_detached( $signature, $data, $cloud_pk );
     637            $is_valid  = sodium_crypto_sign_verify_detached( $signature, (string) $data, $cloud_pk );
    638638        } catch ( \SodiumException $e ) {
    639639            self::debugErr( 'Decryption failed: ' . esc_html( $e->getMessage() ) );
     
    20802080     */
    20812081    public function is_from_cloud() {
    2082         // return true;
    20832082        $check_point = time() - 86400 * self::TTL_IPS;
    20842083        if ( empty( $this->_summary['ips'] ) || empty( $this->_summary['ips_ts'] ) || $this->_summary['ips_ts'] < $check_point ) {
  • litespeed-cache/trunk/src/purge.cls.php

    r3379049 r3380206  
    607607
    608608        if ( defined( 'LITESPEED_CLI' ) ) {
     609            // Can't send, already has output, need to save and wait for next run
     610            self::update_option($purge2 ? self::DB_QUEUE2 : self::DB_QUEUE, $curr_built);
    609611            self::debug( 'CLI request, queue stored: ' . $curr_built );
    610612        } else {
  • litespeed-cache/trunk/src/rest.cls.php

    r3352087 r3380206  
    11<?php
    2 // phpcs:ignoreFile
    3 
    42/**
    5  * The REST related class.
     3 * REST endpoints and helpers for LiteSpeed.
    64 *
    7  * @since       2.9.4
     5 * @since   2.9.4
     6 * @package LiteSpeed
    87 */
    98
    109namespace LiteSpeed;
    1110
    12 defined('WPINC') || exit();
    13 
     11defined( 'WPINC' ) || exit();
     12
     13/**
     14 * Class REST
     15 *
     16 * Registers plugin REST endpoints and exposes helpers for REST detection.
     17 */
    1418class REST extends Root {
    1519
    16     const LOG_TAG                  = '☎️';
     20    const LOG_TAG = '☎️';
     21
     22    /**
     23     * Whether current request is an internal REST call.
     24     *
     25     * @var bool
     26     */
    1727    private $_internal_rest_status = false;
    1828
    1929    /**
    20      * Confructor of ESI
    21      *
    22      * @since    2.9.4
     30     * Constructor.
     31     *
     32     * @since 2.9.4
    2333     */
    2434    public function __construct() {
    25         // Hook to internal REST call
    26         add_filter('rest_request_before_callbacks', array( $this, 'set_internal_rest_on' ));
    27         add_filter('rest_request_after_callbacks', array( $this, 'set_internal_rest_off' ));
    28 
    29         add_action('rest_api_init', array( $this, 'rest_api_init' ));
    30     }
    31 
    32     /**
    33      * Register REST hooks
    34      *
    35      * @since  3.0
    36      * @access public
     35        // Hook to internal REST call.
     36        add_filter( 'rest_request_before_callbacks', [ $this, 'set_internal_rest_on' ] );
     37        add_filter( 'rest_request_after_callbacks', [ $this, 'set_internal_rest_off' ] );
     38
     39        add_action( 'rest_api_init', [ $this, 'rest_api_init' ] );
     40    }
     41
     42    /**
     43     * Register REST routes.
     44     *
     45     * @since 3.0
     46     * @return void
    3747     */
    3848    public function rest_api_init() {
    3949        // Activate or deactivate a specific crawler callback
    40         register_rest_route('litespeed/v1', '/toggle_crawler_state', array(
    41             'methods' => 'POST',
    42             'callback' => array( $this, 'toggle_crawler_state' ),
     50        register_rest_route( 'litespeed/v1', '/toggle_crawler_state', [
     51            'methods'             => 'POST',
     52            'callback'            => [ $this, 'toggle_crawler_state' ],
    4353            'permission_callback' => function () {
    44                 return current_user_can('manage_network_options') || current_user_can('manage_options');
     54                return current_user_can( 'manage_network_options' ) || current_user_can( 'manage_options' );
    4555            },
    46         ));
    47 
    48         register_rest_route('litespeed/v1', '/tool/check_ip', array(
    49             'methods' => 'GET',
    50             'callback' => array( $this, 'check_ip' ),
     56        ] );
     57
     58        register_rest_route( 'litespeed/v1', '/tool/check_ip', [
     59            'methods'             => 'GET',
     60            'callback'            => [ $this, 'check_ip' ],
    5161            'permission_callback' => function () {
    52                 return current_user_can('manage_network_options') || current_user_can('manage_options');
     62                return current_user_can( 'manage_network_options' ) || current_user_can( 'manage_options' );
    5363            },
    54         ));
     64        ] );
    5565
    5666        // IP callback validate
    57         register_rest_route('litespeed/v3', '/ip_validate', array(
    58             'methods' => 'POST',
    59             'callback' => array( $this, 'ip_validate' ),
    60             'permission_callback' => array( $this, 'is_from_cloud' ),
    61         ));
     67        register_rest_route( 'litespeed/v3', '/ip_validate', [
     68            'methods'             => 'POST',
     69            'callback'            => [ $this, 'ip_validate' ],
     70            'permission_callback' => [ $this, 'is_from_cloud' ],
     71        ] );
    6272
    6373        // 1.2. WP REST Dryrun Callback
    64         register_rest_route('litespeed/v3', '/wp_rest_echo', array(
    65             'methods' => 'POST',
    66             'callback' => array( $this, 'wp_rest_echo' ),
    67             'permission_callback' => array( $this, 'is_from_cloud' ),
    68         ));
    69         register_rest_route('litespeed/v3', '/ping', array(
    70             'methods' => 'POST',
    71             'callback' => array( $this, 'ping' ),
    72             'permission_callback' => array( $this, 'is_from_cloud' ),
    73         ));
     74        register_rest_route( 'litespeed/v3', '/wp_rest_echo', [
     75            'methods'             => 'POST',
     76            'callback'            => [ $this, 'wp_rest_echo' ],
     77            'permission_callback' => [ $this, 'is_from_cloud' ],
     78        ] );
     79        register_rest_route( 'litespeed/v3', '/ping', [
     80            'methods'             => 'POST',
     81            'callback'            => [ $this, 'ping' ],
     82            'permission_callback' => [ $this, 'is_from_cloud' ],
     83        ] );
    7484
    7585        // CDN setup callback notification
    76         register_rest_route('litespeed/v3', '/cdn_status', array(
    77             'methods' => 'POST',
    78             'callback' => array( $this, 'cdn_status' ),
    79             'permission_callback' => array( $this, 'is_from_cloud' ),
    80         ));
     86        register_rest_route( 'litespeed/v3', '/cdn_status', [
     87            'methods'             => 'POST',
     88            'callback'            => [ $this, 'cdn_status' ],
     89            'permission_callback' => [ $this, 'is_from_cloud' ],
     90        ] );
    8191
    8292        // Image optm notify_img
    8393        // Need validation
    84         register_rest_route('litespeed/v1', '/notify_img', array(
    85             'methods' => 'POST',
    86             'callback' => array( $this, 'notify_img' ),
    87             'permission_callback' => array( $this, 'is_from_cloud' ),
    88         ));
    89 
    90         register_rest_route('litespeed/v1', '/notify_ccss', array(
    91             'methods' => 'POST',
    92             'callback' => array( $this, 'notify_ccss' ),
    93             'permission_callback' => array( $this, 'is_from_cloud' ),
    94         ));
    95 
    96         register_rest_route('litespeed/v1', '/notify_ucss', array(
    97             'methods' => 'POST',
    98             'callback' => array( $this, 'notify_ucss' ),
    99             'permission_callback' => array( $this, 'is_from_cloud' ),
    100         ));
    101 
    102         register_rest_route('litespeed/v1', '/notify_vpi', array(
    103             'methods' => 'POST',
    104             'callback' => array( $this, 'notify_vpi' ),
    105             'permission_callback' => array( $this, 'is_from_cloud' ),
    106         ));
    107 
    108         register_rest_route('litespeed/v3', '/err_domains', array(
    109             'methods' => 'POST',
    110             'callback' => array( $this, 'err_domains' ),
    111             'permission_callback' => array( $this, 'is_from_cloud' ),
    112         ));
     94        register_rest_route( 'litespeed/v1', '/notify_img', [
     95            'methods'             => 'POST',
     96            'callback'            => [ $this, 'notify_img' ],
     97            'permission_callback' => [ $this, 'is_from_cloud' ],
     98        ] );
     99
     100        register_rest_route( 'litespeed/v1', '/notify_ccss', [
     101            'methods'             => 'POST',
     102            'callback'            => [ $this, 'notify_ccss' ],
     103            'permission_callback' => [ $this, 'is_from_cloud' ],
     104        ] );
     105
     106        register_rest_route( 'litespeed/v1', '/notify_ucss', [
     107            'methods'             => 'POST',
     108            'callback'            => [ $this, 'notify_ucss' ],
     109            'permission_callback' => [ $this, 'is_from_cloud' ],
     110        ] );
     111
     112        register_rest_route( 'litespeed/v1', '/notify_vpi', [
     113            'methods'             => 'POST',
     114            'callback'            => [ $this, 'notify_vpi' ],
     115            'permission_callback' => [ $this, 'is_from_cloud' ],
     116        ] );
     117
     118        register_rest_route( 'litespeed/v3', '/err_domains', [
     119            'methods'             => 'POST',
     120            'callback'            => [ $this, 'err_domains' ],
     121            'permission_callback' => [ $this, 'is_from_cloud' ],
     122        ] );
    113123
    114124        // Image optm check_img
    115125        // Need validation
    116         register_rest_route('litespeed/v1', '/check_img', array(
    117             'methods' => 'POST',
    118             'callback' => array( $this, 'check_img' ),
    119             'permission_callback' => array( $this, 'is_from_cloud' ),
    120         ));
     126        register_rest_route( 'litespeed/v1', '/check_img', [
     127            'methods'             => 'POST',
     128            'callback'            => [ $this, 'check_img' ],
     129            'permission_callback' => [ $this, 'is_from_cloud' ],
     130        ] );
    121131    }
    122132
     
    127137     */
    128138    public function toggle_crawler_state() {
    129         if (isset($_POST['crawler_id'])) {
    130             return $this->cls('Crawler')->toggle_activeness($_POST['crawler_id']) ? 1 : 0;
    131         }
    132     }
    133 
    134     /**
    135      * Check if the request is from cloud nodes
     139        // phpcs:ignore WordPress.Security.NonceVerification.Missing -- REST API nonce verified by WordPress
     140        $crawler_id = isset( $_POST['crawler_id'] ) ? sanitize_text_field( wp_unslash( $_POST['crawler_id'] ) ) : '';
     141
     142        if ( $crawler_id ) {
     143            return $this->cls( 'Crawler' )->toggle_activeness( $crawler_id ) ? 1 : 0;
     144        }
     145    }
     146
     147    /**
     148     * Check if the request is from cloud nodes.
    136149     *
    137150     * @since 4.2
    138      * @since 4.4.7 As there is always token/api key validation, ip validation is redundant
     151     * @since 4.4.7 Token/API key validation makes IP validation redundant.
     152     * @return bool
    139153     */
    140154    public function is_from_cloud() {
    141         // return true;
    142         return $this->cls('Cloud')->is_from_cloud();
    143     }
    144 
    145     /**
    146      * Ping pong
    147      *
    148      * @since  3.0.4
     155        return $this->cls( 'Cloud' )->is_from_cloud();
     156    }
     157
     158    /**
     159     * Ping pong.
     160     *
     161     * @since 3.0.4
     162     * @return mixed
    149163     */
    150164    public function ping() {
    151         return $this->cls('Cloud')->ping();
    152     }
    153 
    154     /**
    155      * Launch api call
    156      *
    157      * @since  3.0
     165        return $this->cls( 'Cloud' )->ping();
     166    }
     167
     168    /**
     169     * Launch IP check.
     170     *
     171     * @since 3.0
     172     * @return mixed
    158173     */
    159174    public function check_ip() {
     
    162177
    163178    /**
    164      * Launch api call
    165      *
    166      * @since  3.0
     179     * Validate IPs from cloud.
     180     *
     181     * @since 3.0
     182     * @return mixed
    167183     */
    168184    public function ip_validate() {
    169         return $this->cls('Cloud')->ip_validate();
    170     }
    171 
    172     /**
    173      * Launch api call
    174      *
    175      * @since  3.0
     185        return $this->cls( 'Cloud' )->ip_validate();
     186    }
     187
     188    /**
     189     * REST echo helper.
     190     *
     191     * @since 3.0
     192     * @return mixed
    176193     */
    177194    public function wp_rest_echo() {
    178         return $this->cls('Cloud')->wp_rest_echo();
    179     }
    180 
    181     /**
    182      * Endpoint for QC to notify plugin of CDN status update.
    183      *
    184      * @since  7.0
     195        return $this->cls( 'Cloud' )->wp_rest_echo();
     196    }
     197
     198    /**
     199     * Endpoint to notify plugin of CDN status updates.
     200     *
     201     * @since 7.0
     202     * @return mixed
    185203     */
    186204    public function cdn_status() {
    187         return $this->cls('Cloud')->update_cdn_status();
    188     }
    189 
    190     /**
    191      * Launch api call
    192      *
    193      * @since  3.0
     205        return $this->cls( 'Cloud' )->update_cdn_status();
     206    }
     207
     208    /**
     209     * Image optimization notification.
     210     *
     211     * @since 3.0
     212     * @return mixed
    194213     */
    195214    public function notify_img() {
     
    198217
    199218    /**
    200      * @since  7.1
     219     * Critical CSS notification.
     220     *
     221     * @since 7.1
     222     * @return mixed
    201223     */
    202224    public function notify_ccss() {
    203         self::debug('notify_ccss');
     225        self::debug( 'notify_ccss' );
    204226        return CSS::cls()->notify();
    205227    }
    206228
    207229    /**
    208      * @since  5.2
     230     * Unique CSS notification.
     231     *
     232     * @since 5.2
     233     * @return mixed
    209234     */
    210235    public function notify_ucss() {
    211         self::debug('notify_ucss');
     236        self::debug( 'notify_ucss' );
    212237        return UCSS::cls()->notify();
    213238    }
    214239
    215240    /**
    216      * @since  4.7
     241     * Viewport Images notification.
     242     *
     243     * @since 4.7
     244     * @return mixed
    217245     */
    218246    public function notify_vpi() {
    219         self::debug('notify_vpi');
     247        self::debug( 'notify_vpi' );
    220248        return VPI::cls()->notify();
    221249    }
    222250
    223251    /**
    224      * @since  4.7
     252     * Error domain report from cloud.
     253     *
     254     * @since 4.7
     255     * @return mixed
    225256     */
    226257    public function err_domains() {
    227         self::debug('err_domains');
    228         return $this->cls('Cloud')->rest_err_domains();
    229     }
    230 
    231     /**
    232      * Launch api call
    233      *
    234      * @since  3.0
     258        self::debug( 'err_domains' );
     259        return $this->cls( 'Cloud' )->rest_err_domains();
     260    }
     261
     262    /**
     263     * Launch image check.
     264     *
     265     * @since 3.0
     266     * @return mixed
    235267     */
    236268    public function check_img() {
     
    239271
    240272    /**
    241      * Return error
    242      *
    243      * @since  5.7.0.1
     273     * Return a standardized error payload.
     274     *
     275     * @since 5.7.0.1
     276     * @param string|int $code Error code.
     277     * @return array
    244278     */
    245279    public static function err( $code ) {
    246         return array(
     280        return [
    247281            '_res' => 'err',
    248282            '_msg' => $code,
    249         );
    250     }
    251 
    252     /**
    253      * Set internal REST tag to ON
    254      *
    255      * @since  2.9.4
    256      * @access public
     283        ];
     284    }
     285
     286    /**
     287     * Set internal REST tag to ON.
     288     *
     289     * @since 2.9.4
     290     * @param mixed $not_used Passthrough value from the filter.
     291     * @return mixed
    257292     */
    258293    public function set_internal_rest_on( $not_used = null ) {
    259294        $this->_internal_rest_status = true;
    260         Debug2::debug2('[REST] ✅ Internal REST ON [filter] rest_request_before_callbacks');
     295        Debug2::debug2( '[REST] ✅ Internal REST ON [filter] rest_request_before_callbacks' );
    261296
    262297        return $not_used;
     
    264299
    265300    /**
    266      * Set internal REST tag to OFF
    267      *
    268      * @since  2.9.4
    269      * @access public
     301     * Set internal REST tag to OFF.
     302     *
     303     * @since 2.9.4
     304     * @param mixed $not_used Passthrough value from the filter.
     305     * @return mixed
    270306     */
    271307    public function set_internal_rest_off( $not_used = null ) {
    272308        $this->_internal_rest_status = false;
    273         Debug2::debug2('[REST] ❎ Internal REST OFF [filter] rest_request_after_callbacks');
     309        Debug2::debug2( '[REST] ❎ Internal REST OFF [filter] rest_request_after_callbacks' );
    274310
    275311        return $not_used;
     
    277313
    278314    /**
    279      * Get internal REST tag
    280      *
    281      * @since  2.9.4
    282      * @access public
     315     * Whether current request is an internal REST call.
     316     *
     317     * @since 2.9.4
     318     * @return bool
    283319     */
    284320    public function is_internal_rest() {
     
    287323
    288324    /**
    289      * Check if an URL or current page is REST req or not
    290      *
    291      * @since  2.9.3
    292      * @since  2.9.4 Moved here from Utility, dropped static
    293      * @access public
     325     * Check whether a URL or current page is a REST request.
     326     *
     327     * @since 2.9.3
     328     * @since 2.9.4 Moved here from Utility, dropped static.
     329     * @param string|false $url URL to check; when false checks current request.
     330     * @return bool
    294331     */
    295332    public function is_rest( $url = false ) {
    296         // For WP 4.4.0- compatibility
    297         if (!function_exists('rest_get_url_prefix')) {
    298             return defined('REST_REQUEST') && REST_REQUEST;
     333        // For WP 4.4.0- compatibility.
     334        if ( ! function_exists( 'rest_get_url_prefix' ) ) {
     335            return ( defined( 'REST_REQUEST' ) && REST_REQUEST );
    299336        }
    300337
    301338        $prefix = rest_get_url_prefix();
    302339
    303         // Case #1: After WP_REST_Request initialisation
    304         if (defined('REST_REQUEST') && REST_REQUEST) {
     340        // Case #1: After WP_REST_Request initialization.
     341        if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
    305342            return true;
    306343        }
    307344
    308         // Case #2: Support "plain" permalink settings
    309         if (isset($_GET['rest_route']) && strpos(trim($_GET['rest_route'], '\\/'), $prefix, 0) === 0) {
     345        // Case #2: Support "plain" permalink settings.
     346        // phpcs:ignore WordPress.Security.NonceVerification.Recommended
     347        $route = isset( $_GET['rest_route'] ) ? sanitize_text_field( wp_unslash( $_GET['rest_route'] ) ) : '';
     348
     349        if ( $route && 0 === strpos( trim( $route, '\\/' ), $prefix, 0 ) ) {
    310350            return true;
    311351        }
    312352
    313         if (!$url) {
     353        if ( !$url ) {
    314354            return false;
    315355        }
    316356
    317         // Case #3: URL Path begins with wp-json/ (REST prefix) Safe for subfolder installation
    318         $rest_url    = wp_parse_url(site_url($prefix));
    319         $current_url = wp_parse_url($url);
    320         // Debug2::debug( '[Util] is_rest check [base] ', $rest_url );
    321         // Debug2::debug( '[Util] is_rest check [curr] ', $current_url );
    322         // Debug2::debug( '[Util] is_rest check [curr2] ', wp_parse_url( add_query_arg( array( ) ) ) );
    323         if ($current_url !== false && !empty($current_url['path']) && $rest_url !== false && !empty($rest_url['path'])) {
    324             return strpos($current_url['path'], $rest_url['path']) === 0;
     357        // Case #3: URL path begins with wp-json/ (REST prefix) – safe for subfolder installs.
     358        $rest_url    = wp_parse_url( site_url( $prefix ) );
     359        $current_url = wp_parse_url( $url );
     360
     361        if ( false !== $current_url && ! empty( $current_url['path'] ) && false !== $rest_url && ! empty( $rest_url['path'] ) ) {
     362            return 0 === strpos( $current_url['path'], $rest_url['path'] );
    325363        }
    326364
  • litespeed-cache/trunk/tpl/toolbox/beta_test.tpl.php

    r3379192 r3380206  
    1515// List of available public versions
    1616$v_list = array(
     17    '7.6.2',
    1718    '7.6.1',
    1819    '7.6',
    1920    '7.5.0.1',
    20     '7.5',
    2121    '7.4',
    2222    '7.3.0.1',
Note: See TracChangeset for help on using the changeset viewer.