From 340d477821cecf80ce1da6bc5b9e96bf505e4c7e Mon Sep 17 00:00:00 2001 From: Cyrille C <18537428+CrochetFeve0251@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:37:00 +0200 Subject: [PATCH 01/24] Enhancement/5905 notice cpcss integration tests (#5944) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémy Perona Co-authored-by: Ahmed Saed --- assets/css/wpr-admin.min.css | 2 +- .../CriticalCSSSubscriber/switchToRucss.php | 2 + .../switchToRucssNotice.php | 65 ++++++++++-- .../CriticalCSSSubscriber/switchToRucss.php | 78 +++++++++++++++ .../switchToRucssNotice.php | 98 +++++++++++++++++++ 5 files changed, 238 insertions(+), 7 deletions(-) create mode 100644 tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php create mode 100644 tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php diff --git a/assets/css/wpr-admin.min.css b/assets/css/wpr-admin.min.css index 79f4177513..bb6400e8a7 100755 --- a/assets/css/wpr-admin.min.css +++ b/assets/css/wpr-admin.min.css @@ -1 +1 @@ -h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:24px 16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:98px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid #c2cad4}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:transparent}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(255,255,255,.5)}.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(0,0,0,.5)}.wpr-rocketcdn-cta-close--no-promo:before{content:"✕";font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{background-color:#fff;align-items:center;display:flex;flex-direction:column;padding:16px;padding-bottom:32px;width:33.3333333333%;max-width:219px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c;margin-bottom:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail{margin-bottom:16px;font-size:1rem;line-height:1.375}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major{font-weight:700;font-size:3rem;line-height:1.1666666667}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor{font-weight:700;vertical-align:top;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{margin:24px 0;min-height:30px;padding-left:62px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%)}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{content:url(../img/configuration.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{content:url(../img/automatic.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;margin:0 16px 0 0;padding:24px;text-align:center;width:50%}.wpr-Popin-Upgrade .wpr-Popin-flex>div:last-child{margin-right:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-Upgrade-Plus .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-Upgrade-Infinite .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:top}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:block;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link::after{content:"→";font-weight:normal;margin-left:8px}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative}.rocket-renewal-expired-banner-container{display:flex;justify-content:space-around}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{justify-content:center;align-items:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-menuItem{position:relative;display:block;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid transparent;overflow:hidden;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background:#fde0d9;color:#f56640;text-align:center;border-radius:3px}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled{opacity:.55}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:transparent;-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:transparent transparent #19073b transparent}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:24px;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:33.3333333333%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:66.6666666667%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:0;margin-left:40px;list-style-type:">"}.wpr-imagify li{padding-left:7px}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:20px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{font-weight:bold;margin-left:5px}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}} \ No newline at end of file +h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:24px 16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:98px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid #c2cad4}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:transparent}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(255,255,255,.5)}.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(0,0,0,.5)}.wpr-rocketcdn-cta-close--no-promo:before{content:"✕";font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{background-color:#fff;align-items:center;display:flex;flex-direction:column;padding:16px;padding-bottom:32px;width:33.3333333333%;max-width:219px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c;margin-bottom:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail{margin-bottom:16px;font-size:1rem;line-height:1.375}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major{font-weight:700;font-size:3rem;line-height:1.1666666667}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor{font-weight:700;vertical-align:top;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{margin:24px 0;min-height:30px;padding-left:62px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%)}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{content:url(../img/configuration.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{content:url(../img/automatic.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;margin:0 16px 0 0;padding:24px;text-align:center;width:50%}.wpr-Popin-Upgrade .wpr-Popin-flex>div:last-child{margin-right:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-Upgrade-Plus .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-Upgrade-Infinite .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:top}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:block;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link::after{content:"→";font-weight:normal;margin-left:8px}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative}.rocket-renewal-expired-banner-container{display:flex;justify-content:space-around}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{justify-content:center;align-items:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-menuItem{position:relative;display:block;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid transparent;overflow:hidden;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background:#fde0d9;color:#f56640;text-align:center;border-radius:3px}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled{opacity:.55}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:transparent;-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:transparent transparent #19073b transparent}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:24px;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:33.3333333333%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:66.6666666667%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:0;margin-left:40px;list-style-type:">"}.wpr-imagify li{padding-left:7px}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:20px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{font-weight:bold;margin-left:5px}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}} \ No newline at end of file diff --git a/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php b/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php index 80ab86e70a..7aa65aab73 100644 --- a/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php +++ b/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php @@ -9,6 +9,7 @@ 'value' => 'true' ], 'options' => 'options', + 'has_box' => true, ], 'expected' => [ 'referer' => 'referer', @@ -25,6 +26,7 @@ 'value' => 'true' ], 'options' => 'options', + 'has_box' => false, ], 'expected' => [ 'referer' => 'referer', diff --git a/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php b/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php index 082bc2eb06..48cc5ee884 100644 --- a/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php +++ b/tests/Fixtures/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php @@ -1,4 +1,15 @@ +

+We highly recommend the +updated Remove Unused CSS +for a better CSS optimization. Load CSS Asynchronously is always available as a back-up.

+

+NOTICE; + + return [ 'shouldDisplayNotice' => [ 'config' => [ @@ -13,9 +24,16 @@ 'screen' => (object) [ 'id' => 'settings_page_wprocket' ], - 'rucss_status' => false, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'next year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), + 'rucss_status' => false, ], 'expected' => [ + 'contains' => true, + 'content' => $notice, 'user_id' => 42, 'notice' => [ 'status' => 'wpr-warning', @@ -40,9 +58,16 @@ 'screen' => (object) [ 'id' => 'settings_page_wprocket' ], - 'rucss_status' => false, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'next year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), ], 'expected' => [ + 'contains' => false, + 'content' => $notice, + 'rucss_status' => false, 'user_id' => 42, 'notice' => [ 'status' => 'wpr-warning', @@ -67,9 +92,16 @@ 'screen' => (object) [ 'id' => 'settings_page_wprocket' ], - 'rucss_status' => false, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'next year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), ], 'expected' => [ + 'contains' => false, + 'content' => $notice, + 'rucss_status' => false, 'user_id' => 42, 'notice' => [ 'status' => 'wpr-warning', @@ -94,9 +126,16 @@ 'screen' => (object) [ 'id' => 'settings_page_wprocket' ], - 'rucss_status' => false, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'last year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), + 'rucss_status' => false, ], 'expected' => [ + 'contains' => false, + 'content' => $notice, 'user_id' => 42, 'notice' => [ 'status' => 'wpr-warning', @@ -121,9 +160,16 @@ 'screen' => (object) [ 'id' => 'random' ], - 'rucss_status' => false, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'next year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), ], 'expected' => [ + 'contains' => false, + 'content' => $notice, + 'rucss_status' => false, 'user_id' => 42, 'notice' => [ 'status' => 'wpr-warning', @@ -149,9 +195,16 @@ 'id' => 'settings_page_wprocket' ], 'rucss_status' => true, + 'user' => json_decode( json_encode( [ + 'licence_account' => -1, + 'licence_expiration' => strtotime( 'next year' ), + 'date_created' => strtotime( 'last year' ), + ] ) ), ], 'expected' => [ - 'user_id' => 42, + 'user_id' => 42, + 'contains' => false, + 'content' => $notice, 'notice' => [ 'status' => 'wpr-warning', 'dismissible' => '', diff --git a/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php b/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php new file mode 100644 index 0000000000..e65a63dfa2 --- /dev/null +++ b/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucss.php @@ -0,0 +1,78 @@ +add_cap( 'rocket_purge_cache' ); + self::$user_id = $factory->user->create( [ 'role' => 'administrator' ] ); + } + + public static function set_up_before_class() + { + parent::set_up_before_class(); + $container = apply_filters( 'rocket_container', null ); + self::$options = $container->get('options'); + self::$original_options = self::$options->get_options(); + self::$options_api = $container->get('options_api'); + self::installFresh(); + } + + public static function tear_down_after_class() { + parent::tear_down_after_class(); + self::$options_api->set( 'settings', self::$original_options ); + + self::uninstallAll(); + } + + public function set_up() { + update_user_meta( get_current_user_id(), 'rocket_boxes', [] ); + parent::set_up(); + } + + public function tear_down() { + update_user_meta( get_current_user_id(), 'rocket_boxes', [] ); + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + self::$options->set( 'async_css', true ); + self::$options->set( 'remove_unused_css', false ); + self::$options_api->set( 'settings', self::$options->get_options() ); + + if ( $config['user_can'] ) { + wp_set_current_user( self::$user_id ); + } + + $_GET['_wpnonce'] = wp_create_nonce( "rucss_switch" ); + Functions\expect( 'check_admin_referer' )->once()->with( 'rucss_switch' )->andReturnNull(); + Functions\expect( 'wp_safe_redirect' )->once()->andReturnNull(); + Functions\expect( 'wp_die' )->once()->andReturnNull(); + do_action('admin_post_switch_to_rucss'); + + $boxes = get_user_meta( self::$user_id, 'rocket_boxes', true ) ?: []; + + if($config['has_box']) { + $this->assertContains('switch_to_rucss_notice', $boxes); + }else { + $this->assertNotContains('switch_to_rucss_notice', $boxes); + } + self::$options->set_values(self::$options_api->get('settings')); + } +} diff --git a/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php b/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php new file mode 100644 index 0000000000..cd489750c6 --- /dev/null +++ b/tests/Integration/inc/Engine/CriticalPath/CriticalCSSSubscriber/switchToRucssNotice.php @@ -0,0 +1,98 @@ +user->create( [ 'role' => 'administrator' ] ); + } + + public static function set_up_before_class() + { + parent::set_up_before_class(); + self::uninstallAll(); + $container = apply_filters( 'rocket_container', null ); + self::$user = $container->get( 'user' ); + } + + public function set_up() + { + parent::set_up(); + add_filter('pre_get_rocket_option_async_css', [$this, 'async_css']); + add_filter('rocket_disable_rucss_setting', [$this, 'rucss']); + + wp_set_current_user( self::$user_id ); + + $this->original_user = $this->getNonPublicPropertyValue( 'user', self::$user, self::$user ); + + } + + public function tear_down() + { + $this->set_reflective_property( $this->original_user, 'user', self::$user ); + remove_filter('pre_get_rocket_option_async_css', [$this, 'async_css']); + remove_filter('rocket_disable_rucss_setting', [$this, 'rucss']); + update_user_meta( get_current_user_id(), 'rocket_boxes', [] ); + set_current_screen( 'front' ); + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + $this->config = $config; + $this->set_reflective_property( $config['user'], 'user', self::$user ); + + if($config['in_boxes']) { + rocket_dismiss_box( 'switch_to_rucss_notice' ); + } + if ($config['is_right_screen']) { + set_current_screen( 'settings_page_wprocket' ); + } else { + set_current_screen( 'edit.php' ); + } + + ob_start(); + do_action('admin_notices'); + $result = ob_get_clean(); + if($expected['contains']) { + $this->assertStringContainsString( + $this->format_the_html( $expected['content'] ), + $this->format_the_html( $result ) + ); + } else { + $this->assertStringNotContainsString( + $this->format_the_html( $expected['content'] ), + $this->format_the_html( $result ) + ); + } + } + + public function async_css() { + return $this->config['async_css']; + } + + public function rucss() { + return [ + 'disable' => $this->config['rucss_status'], + ]; + } +} From 27ee9174531c26d308ec5c3b9cb161ab13b1c205 Mon Sep 17 00:00:00 2001 From: Michael Lee <38788055+jeawhanlee@users.noreply.github.com> Date: Mon, 12 Jun 2023 18:27:59 +0100 Subject: [PATCH 02/24] Closes #5965: Bump minimal wp and php versions (#5968) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémy Perona --- .github/workflows/deploy_plugin.yml | 2 +- .github/workflows/test_wprocket.yml | 5 +- .github/workflows/test_wprocket_legacy.yml | 90 ---------------------- composer.json | 2 +- wp-rocket.php | 8 +- 5 files changed, 10 insertions(+), 97 deletions(-) delete mode 100644 .github/workflows/test_wprocket_legacy.yml diff --git a/.github/workflows/deploy_plugin.yml b/.github/workflows/deploy_plugin.yml index a7afe70ccb..e795139d1b 100644 --- a/.github/workflows/deploy_plugin.yml +++ b/.github/workflows/deploy_plugin.yml @@ -15,7 +15,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '7.2' + php-version: '7.3' tools: composer:v2 - name: Get composer cache directory diff --git a/.github/workflows/test_wprocket.yml b/.github/workflows/test_wprocket.yml index 4b95efde37..9ae6928074 100644 --- a/.github/workflows/test_wprocket.yml +++ b/.github/workflows/test_wprocket.yml @@ -17,7 +17,7 @@ jobs: matrix: operating-system: [ubuntu-latest] php-versions: ['7.3', '7.4'] - wp-versions: ['latest'] + wp-versions: ['5.8'] name: WP ${{ matrix.wp-versions }} with PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}. @@ -67,6 +67,9 @@ jobs: key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-composer- + - name: Require PHPUnit 7.5 for WP compatibility + run: composer require --dev --no-scripts phpunit/phpunit "^7.5" -W + - name: Install dependencies run: composer install --prefer-dist --no-interaction --no-scripts diff --git a/.github/workflows/test_wprocket_legacy.yml b/.github/workflows/test_wprocket_legacy.yml deleted file mode 100644 index b7bc3d1503..0000000000 --- a/.github/workflows/test_wprocket_legacy.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: Unit/Integration tests - Legacy - -on: - pull_request: - branches: - - trunk - - develop - - branch-* - - feature/* - -jobs: - run: - runs-on: ${{ matrix.operating-system }} - - strategy: - fail-fast: true - matrix: - operating-system: [ubuntu-latest] - php-versions: ['7.2'] - wp-versions: ['5.7'] - - name: WP ${{ matrix.wp-versions }} with PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}. - - env: - WP_TESTS_DIR: "/tmp/tests/phpunit" - WP_CORE_DIR: "/tmp/wordpress-develop" - ROCKETCDN_EMAIL: ${{ secrets.ROCKETCDN_EMAIL }} - ROCKETCDN_PWD: ${{ secrets.ROCKETCDN_PWD }} - ROCKETCDN_TOKEN: ${{ secrets.ROCKETCDN_TOKEN }} - ROCKETCDN_URL: ${{ secrets.ROCKETCDN_URL }} - ROCKETCDN_WEBSITE_ID: ${{ secrets.ROCKETCDN_WEBSITE_ID }} - ROCKET_EMAIL: ${{ secrets.ROCKET_EMAIL }} - ROCKET_KEY: ${{ secrets.ROCKET_KEY }} - ROCKET_CLOUDFLARE_API_KEY: ${{ secrets.ROCKET_CLOUDFLARE_API_KEY }} - ROCKET_CLOUDFLARE_EMAIL: ${{ secrets.ROCKET_CLOUDFLARE_EMAIL }} - ROCKET_CLOUDFLARE_SITE_URL: ${{ secrets.ROCKET_CLOUDFLARE_SITE_URL }} - ROCKET_CLOUDFLARE_ZONE_ID: ${{ secrets.ROCKET_CLOUDFLARE_ZONE_ID }} - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - extensions: mysqli - coverage: none # XDebug can be enabled here 'coverage: xdebug' - tools: composer:v2, phpunit - - - name: Start mysql service - run: sudo /etc/init.d/mysql start - - - name: Setup problem matchers for PHP - run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - - - name: Setup problem matchers for PHPUnit - run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - - - name: Get composer cache directory - id: composercache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: ${{ steps.composercache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Remove unmet dependencies by legacy versions - run: composer remove --dev --no-scripts coenjacobs/mozart - - - name: Require PHPUnit 7.5 for WP compatibility - run: composer require --dev --no-scripts phpunit/phpunit "^7.5" -W - - - name: Require WooCommerce 5.9 for PHP 7.2 compatibility - run: composer require --dev --no-scripts wpackagist-plugin/woocommerce "^5.9" -W - - - name: Install dependencies - run: composer install --prefer-dist --no-interaction --no-scripts - - - name: Install tests - run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:3306 ${{ matrix.wp-versions }} - - - name: Mysql8 auth plugin workaround - run: sudo mysql -u root -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" - - - name: Test - run: composer run-tests diff --git a/composer.json b/composer.json index e7d4d27abd..aea3f7a285 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ } ], "require": { - "php": ">=7.2", + "php": ">=7.3", "composer/installers": "^1.0 || ^2.0", "monolog/monolog": "^1.0 || ^2.0" }, diff --git a/wp-rocket.php b/wp-rocket.php index d6e73b9b00..06ed42456e 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -4,8 +4,8 @@ * Plugin URI: https://wp-rocket.me * Description: The best WordPress performance plugin. * Version: 3.13.4 - * Requires at least: 5.7 - * Requires PHP: 7.2 + * Requires at least: 5.8 + * Requires PHP: 7.3 * Code Name: Iego * Author: WP Media * Author URI: https://wp-media.me @@ -21,9 +21,9 @@ // Rocket defines. define( 'WP_ROCKET_VERSION', '3.13.4' ); -define( 'WP_ROCKET_WP_VERSION', '5.7' ); +define( 'WP_ROCKET_WP_VERSION', '5.8' ); define( 'WP_ROCKET_WP_VERSION_TESTED', '5.9' ); -define( 'WP_ROCKET_PHP_VERSION', '7.2' ); +define( 'WP_ROCKET_PHP_VERSION', '7.3' ); define( 'WP_ROCKET_PRIVATE_KEY', false ); define( 'WP_ROCKET_SLUG', 'wp_rocket_settings' ); define( 'WP_ROCKET_WEB_MAIN', 'https://wp-rocket.me/' ); From 73ab0c312ad29b15dfb9970974da0a67bf19aad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 13:29:57 -0400 Subject: [PATCH 03/24] Closes #5729 Refactor Cloudflare implementation (#5884) Co-authored-by: COQUARD Cyrille --- .github/workflows/lint_phpcs.yml | 1 + .github/workflows/test_wprocket.yml | 1 + .github/workflows/test_wprocket_php8.yml | 1 + assets/js/wpr-admin.js.min.map | 2 +- assets/js/wpr-admin.min.js | 2 +- composer.json | 7 +- inc/Addon/Cloudflare/API/Client.php | 218 ++++++ inc/Addon/Cloudflare/API/Endpoints.php | 174 +++++ inc/Addon/Cloudflare/APIClient.php | 394 ----------- inc/Addon/Cloudflare/Admin/Subscriber.php | 125 ++++ inc/Addon/Cloudflare/Auth/APIKey.php | 75 +++ inc/Addon/Cloudflare/Auth/APIKeyFactory.php | 44 ++ .../Cloudflare/Auth/AuthFactoryInterface.php | 16 + inc/Addon/Cloudflare/Auth/AuthInterface.php | 19 + .../Cloudflare/AuthenticationException.php | 7 - inc/Addon/Cloudflare/Cloudflare.php | 518 +++++++------- inc/Addon/Cloudflare/ServiceProvider.php | 63 ++ inc/Addon/Cloudflare/Subscriber.php | 634 ++++++++++-------- .../Cloudflare/UnauthorizedException.php | 7 - inc/Addon/Cloudflare/composer.json | 51 -- inc/Addon/ServiceProvider.php | 41 +- inc/Engine/Admin/Beacon/Beacon.php | 10 + inc/Engine/Admin/Settings/Page.php | 56 +- inc/Engine/Admin/Settings/Settings.php | 13 - inc/Plugin.php | 5 + inc/ThirdParty/Plugins/CDN/Cloudflare.php | 346 +++++++++- inc/ThirdParty/Plugins/Optimization/AMP.php | 15 +- inc/ThirdParty/ServiceProvider.php | 2 + inc/admin/ui/notices.php | 11 +- inc/common/cloudflare-flexible-ssl.php | 111 --- inc/common/purge.php | 196 +++--- .../ip_in_range.php => deprecated/3.14.php} | 170 +++++ inc/front/protocol.php | 55 -- inc/main.php | 14 +- package-lock.json | 158 ++--- package.json | 64 +- src/scss/components/_addon.scss | 16 + tests/Fixtures/WP_Error.php | 2 +- tests/Fixtures/WP_Post.php | 8 + .../Addon/Cloudflare/API/Client/delete.php | 163 +++++ .../inc/Addon/Cloudflare/API/Client/get.php | 163 +++++ .../inc/Addon/Cloudflare/API/Client/patch.php | 163 +++++ .../inc/Addon/Cloudflare/API/Client/post.php | 163 +++++ .../Subscriber/maybeDisplayPurgeNotice.php | 31 + .../maybeDisplayUpdateSettingsNotice.php | 60 ++ .../Cloudflare/Auth/APIKey/getHeaders.php | 14 + .../Auth/APIKey/isValidCredentials.php | 39 ++ .../Cloudflare/getCloudflareIps.php | 225 +++++++ .../Cloudflare/Cloudflare/getSettings.php | 94 +++ .../Cloudflare/Cloudflare/hasPageRule.php | 55 ++ .../Cloudflare/Cloudflare/isAuthValid.php | 56 ++ .../Cloudflare/Cloudflare/purgeByUrl.php | 36 + .../Cloudflare/Cloudflare/purgeCloudflare.php | 28 + .../Cloudflare/setBrowserCacheTtl.php | 85 +++ .../Cloudflare/Cloudflare/setCacheLevel.php | 30 + .../Cloudflare/Cloudflare/setDevMode.php | 50 ++ .../Addon/Cloudflare/Cloudflare/setMinify.php | 40 ++ .../Cloudflare/Cloudflare/setRocketLoader.php | 30 + .../Addon/Cloudflare/Subscriber/autoPurge.php | 58 ++ .../Cloudflare/Subscriber/autoPurgeByUrl.php | 52 ++ .../Cloudflare/Subscriber/protocolRewrite.php | 62 ++ .../Subscriber/protocolRewriteSrcset.php | 73 ++ .../Cloudflare/Subscriber/purgeCacheNoDie.php | 31 + .../Subscriber/saveCloudflareOldSettings.php | 168 +++++ .../Subscriber/saveCloudflareOptions.php | 62 ++ .../Subscriber/setVarnishLocalhost.php | 43 ++ .../Subscriber/setVarnishPurgeRequestHost.php | 28 + .../addAfterRocketCleanToActions.php | 12 + .../CDN/Cloudflare/addCleanDomainOnPurge.php | 12 + .../addRocketPurgeUrlToPurgeUrl.php | 39 ++ .../Cloudflare/disableCloudflareOption.php | 63 ++ .../CDN/Cloudflare/displayApoCacheNotice.php | 556 +++++++++++++++ .../Cloudflare/displayApoCookiesNotice.php | 363 ++++++++++ .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 67 ++ .../CDN/Cloudflare/updateAddonField.php | 87 +++ .../inc/vendors/ipInRange/rocketIp2Long6.php | 43 -- tests/Integration/bootstrap.php | 28 +- .../Addon/Cloudflare/API/Client/delete.php | 55 ++ .../inc/Addon/Cloudflare/API/Client/get.php | 55 ++ .../inc/Addon/Cloudflare/API/Client/patch.php | 55 ++ .../inc/Addon/Cloudflare/API/Client/post.php | 57 ++ .../Subscriber/maybeDisplayPurgeNotice.php | 57 ++ .../maybeDisplayUpdateSettingsNotice.php | 57 ++ .../Cloudflare/getCloudflareIps.php | 54 ++ .../Cloudflare/Cloudflare/getSettings.php | 57 ++ .../Cloudflare/Cloudflare/hasPageRule.php | 57 ++ .../Cloudflare/Cloudflare/isAuthValid.php | 54 ++ .../Cloudflare/Cloudflare/purgeByUrl.php | 57 ++ .../Cloudflare/Cloudflare/purgeCloudflare.php | 57 ++ .../Cloudflare/setBrowserCacheTtl.php | 57 ++ .../Cloudflare/Cloudflare/setCacheLevel.php | 57 ++ .../Cloudflare/Cloudflare/setDevMode.php | 65 ++ .../Addon/Cloudflare/Cloudflare/setMinify.php | 57 ++ .../Cloudflare/Cloudflare/setRocketLoader.php | 57 ++ .../Addon/Cloudflare/Subscriber/TestCase.php | 148 ---- .../Addon/Cloudflare/Subscriber/autoPurge.php | 43 -- .../Cloudflare/Subscriber/autoPurgeByUrl.php | 41 -- .../Subscriber/deactivateDevMode.php | 35 +- .../Cloudflare/Subscriber/protocolRewrite.php | 62 ++ .../Subscriber/protocolRewriteSrcset.php | 62 ++ .../Cloudflare/Subscriber/purgeCache.php | 117 ---- .../Subscriber/saveCloudflareOldSettings.php | 57 ++ .../Subscriber/setVarnishLocalhost.php | 62 +- .../Subscriber/setVarnishPurgeRequestHost.php | 75 +-- .../inc/Addon/Cloudflare/Test_Addon.php | 25 - .../Hostings/Kinsta/cleanKinstaPostCache.php | 3 +- .../addAfterRocketCleanToActions.php | 19 + .../CDN/Cloudflare/addCleanDomainOnPurge.php | 19 + .../addRocketPurgeUrlToPurgeUrl.php | 55 ++ .../Cloudflare/disableCloudflareOption.php | 44 ++ .../CDN/Cloudflare/displayApoCacheNotice.php | 118 ++++ .../Cloudflare/displayApoCookiesNotice.php | 110 +++ .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 56 ++ .../CDN/Cloudflare/updateAddonField.php | 56 ++ .../AMP/disableOptionsOnAmpWithCloudflare.php | 6 +- .../Addon/Cloudflare/API/Client/delete.php | 82 +++ .../inc/Addon/Cloudflare/API/Client/get.php | 82 +++ .../inc/Addon/Cloudflare/API/Client/patch.php | 82 +++ .../inc/Addon/Cloudflare/API/Client/post.php | 83 +++ .../Subscriber/maybeDisplayPurgeNotice.php | 43 ++ .../maybeDisplayUpdateSettingsNotice.php | 46 ++ .../Cloudflare/Auth/APIKey/getHeaders.php | 25 + .../Auth/APIKey/isValidCredentials.php | 39 ++ .../Cloudflare/getCloudflareIps.php | 68 ++ .../Cloudflare/Cloudflare/getSettings.php | 78 +++ .../Cloudflare/Cloudflare/hasPageRule.php | 78 +++ .../Cloudflare/Cloudflare/isAuthValid.php | 73 ++ .../Cloudflare/Cloudflare/purgeByUrl.php | 73 ++ .../Cloudflare/Cloudflare/purgeCloudflare.php | 73 ++ .../Cloudflare/setBrowserCacheTtl.php | 75 +++ .../Cloudflare/Cloudflare/setCacheLevel.php | 73 ++ .../Cloudflare/Cloudflare/setDevMode.php | 86 +++ .../Addon/Cloudflare/Cloudflare/setMinify.php | 73 ++ .../Cloudflare/Cloudflare/setRocketLoader.php | 73 ++ .../Addon/Cloudflare/Subscriber/autoPurge.php | 87 +++ .../Cloudflare/Subscriber/autoPurgeByUrl.php | 74 ++ .../Subscriber/deactivateDevmode.php | 55 ++ .../Cloudflare/Subscriber/protocolRewrite.php | 60 ++ .../Subscriber/protocolRewriteSrcset.php | 60 ++ .../Cloudflare/Subscriber/purgeCacheNoDie.php | 75 +++ .../Subscriber/saveCloudflareOldSettings.php | 66 ++ .../Subscriber/saveCloudflareOptions.php | 96 +++ .../Subscriber/setVarnishLocalhost.php | 56 ++ .../Engine/Cache/Purge/purgePostTermsUrls.php | 8 +- .../addAfterRocketCleanToActions.php | 56 ++ .../CDN/Cloudflare/addCleanDomainOnPurge.php | 55 ++ .../addRocketPurgeUrlToPurgeUrl.php | 66 ++ .../Cloudflare/disableCloudflareOption.php | 71 ++ .../CDN/Cloudflare/displayApoCacheNotice.php | 147 ++++ .../Cloudflare/displayApoCookiesNotice.php | 143 ++++ .../displayServerPushingModeNotice.php | 18 +- .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 72 ++ .../CDN/Cloudflare/updateAddonField.php | 77 +++ .../Optimization/AMP/disableOptionsOnAmp.php | 36 +- tests/Unit/inc/common/rocketGetPurgeUrls.php | 1 + .../inc/vendors/ipInRange/rocketIp2Long6.php | 29 - views/settings/fields/rocket-addon.php | 32 +- 157 files changed, 9853 insertions(+), 2094 deletions(-) create mode 100644 inc/Addon/Cloudflare/API/Client.php create mode 100644 inc/Addon/Cloudflare/API/Endpoints.php delete mode 100644 inc/Addon/Cloudflare/APIClient.php create mode 100644 inc/Addon/Cloudflare/Admin/Subscriber.php create mode 100644 inc/Addon/Cloudflare/Auth/APIKey.php create mode 100644 inc/Addon/Cloudflare/Auth/APIKeyFactory.php create mode 100644 inc/Addon/Cloudflare/Auth/AuthFactoryInterface.php create mode 100644 inc/Addon/Cloudflare/Auth/AuthInterface.php delete mode 100644 inc/Addon/Cloudflare/AuthenticationException.php create mode 100644 inc/Addon/Cloudflare/ServiceProvider.php delete mode 100644 inc/Addon/Cloudflare/UnauthorizedException.php delete mode 100644 inc/Addon/Cloudflare/composer.json delete mode 100644 inc/common/cloudflare-flexible-ssl.php rename inc/{vendors/ip_in_range.php => deprecated/3.14.php} (66%) mode change 100755 => 100644 delete mode 100644 inc/front/protocol.php create mode 100644 tests/Fixtures/WP_Post.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/API/Client/delete.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/API/Client/get.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/API/Client/patch.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/API/Client/post.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getSettings.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setDevMode.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setMinify.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurge.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php create mode 100644 tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php delete mode 100644 tests/Fixtures/inc/vendors/ipInRange/rocketIp2Long6.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/API/Client/delete.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/API/Client/get.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/API/Client/patch.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/API/Client/post.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/getSettings.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/setDevMode.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/setMinify.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php delete mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/TestCase.php delete mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurge.php delete mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php delete mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/purgeCache.php create mode 100644 tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php delete mode 100644 tests/Integration/inc/Addon/Cloudflare/Test_Addon.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/API/Client/delete.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/API/Client/get.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/API/Client/patch.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/API/Client/post.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/getSettings.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/setDevMode.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/setMinify.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurge.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/deactivateDevmode.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php create mode 100644 tests/Unit/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php delete mode 100644 tests/Unit/inc/vendors/ipInRange/rocketIp2Long6.php diff --git a/.github/workflows/lint_phpcs.yml b/.github/workflows/lint_phpcs.yml index 88dafdc553..f9b92c42c1 100644 --- a/.github/workflows/lint_phpcs.yml +++ b/.github/workflows/lint_phpcs.yml @@ -7,6 +7,7 @@ on: - develop - branch-* - feature/* + - enhancement/* jobs: run: diff --git a/.github/workflows/test_wprocket.yml b/.github/workflows/test_wprocket.yml index 9ae6928074..b3ae1a1f6f 100644 --- a/.github/workflows/test_wprocket.yml +++ b/.github/workflows/test_wprocket.yml @@ -7,6 +7,7 @@ on: - develop - branch-* - feature/* + - enhancement/* jobs: run: diff --git a/.github/workflows/test_wprocket_php8.yml b/.github/workflows/test_wprocket_php8.yml index 6262b85eb5..3e206e6d0b 100644 --- a/.github/workflows/test_wprocket_php8.yml +++ b/.github/workflows/test_wprocket_php8.yml @@ -7,6 +7,7 @@ on: - develop - branch-* - feature/* + - enhancement/* jobs: run: diff --git a/assets/js/wpr-admin.js.min.map b/assets/js/wpr-admin.js.min.map index 5408920d99..1113310a91 100644 --- a/assets/js/wpr-admin.js.min.map +++ b/assets/js/wpr-admin.js.min.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["wpr-admin.js"],"sourcesContent":["!function s(n,r,a){function o(e,t){if(!r[e]){if(!n[e]){var i=\"function\"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(i=new Error(\"Cannot find module '\"+e+\"'\")).code=\"MODULE_NOT_FOUND\",i}i=r[e]={exports:{}},n[e][0].call(i.exports,function(t){return o(n[e][1][t]||t)},i,i.exports,s,n,r,a)}return r[e].exports}for(var l=\"function\"==typeof require&&require,t=0;t{i.append(\"\"+t+\": \"),i.append(e[t].message),i.append(\"
\")}):i.append('

'+e.message+\"
\")}})})})},{}],2:[function(t,e,i){\"use strict\";t(\"../lib/greensock/TweenLite.min.js\"),t(\"../lib/greensock/TimelineLite.min.js\"),t(\"../lib/greensock/easing/EasePack.min.js\"),t(\"../lib/greensock/plugins/CSSPlugin.min.js\"),t(\"../lib/greensock/plugins/ScrollToPlugin.min.js\"),t(\"../global/pageManager.js\"),t(\"../global/main.js\"),t(\"../global/fields.js\"),t(\"../global/beacon.js\"),t(\"../global/ajax.js\"),t(\"../global/rocketcdn.js\"),t(\"../global/countdown.js\")},{\"../global/ajax.js\":1,\"../global/beacon.js\":3,\"../global/countdown.js\":4,\"../global/fields.js\":5,\"../global/main.js\":6,\"../global/pageManager.js\":7,\"../global/rocketcdn.js\":8,\"../lib/greensock/TimelineLite.min.js\":9,\"../lib/greensock/TweenLite.min.js\":10,\"../lib/greensock/easing/EasePack.min.js\":11,\"../lib/greensock/plugins/CSSPlugin.min.js\":12,\"../lib/greensock/plugins/ScrollToPlugin.min.js\":13}],3:[function(t,e,i){\"use strict\";var s=jQuery;s(document).ready(function(){\"Beacon\"in window&&s(\".wpr-infoAction--help\").on(\"click\",function(t){var e=s(this).data(\"beacon-id\");return 0!==(e=(e=e).split(\",\")).length&&(1{o(t).attr(\"checked\",i?null:\"checked\")});else{const r=o(e).closest(\".wpr-list\").find(\".wpr-main-checkbox\");var n=o.map(s,t=>{if(void 0!==o(t).attr(\"checked\"))return t});r.attr(\"checked\",n.length===s.length?\"checked\":null)}}),0{let i=o(e).parents(\".wpr-list\");var s=i.find(\".wpr-list-body input[type=checkbox]:not(:checked)\").length;o(e).attr(\"checked\",s<=0?\"checked\":null)})})},{}],6:[function(t,e,i){\"use strict\";var c=jQuery;c(document).ready(function(){var t=c(\".wpr-notice\");c(\"#wpr-congratulations-notice\").on(\"click\",function(){return(new TimelineLite).to(t,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(t,.6,{height:0,marginTop:0,ease:Power4.easeOut},\"=-.4\").set(t,{display:\"none\"}),!1}),c(\".rocket-analytics-data-container\").hide(),c(\".rocket-preview-analytics-data\").on(\"click\",function(t){t.preventDefault(),c(this).parent().next(\".rocket-analytics-data-container\").toggle()}),c(\".wpr-toggle-button\").each(function(){var t=c(this),e=t.closest(\".wpr-fieldsContainer-fieldset\").find(\".wpr-radio :checkbox\"),i=c('[href=\"'+t.attr(\"href\")+'\"].wpr-menuItem');e.on(\"change\",function(){e.is(\":checked\")?(i.css(\"display\",\"block\"),t.css(\"display\",\"inline-block\")):(i.css(\"display\",\"none\"),t.css(\"display\",\"none\"))}).trigger(\"change\")});var e=c(\".wpr-Popin-Analytics\"),i=c(\".wpr-Popin-overlay\"),s=c(\".wpr-Popin-Analytics-close\"),n=c(\".wpr-Popin-Analytics .wpr-button\");function r(){(new TimelineLite).fromTo(e,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},\"=-.5\").set(e,{display:\"none\"}).set(i,{display:\"none\"})}c(\".wpr-js-popin\").on(\"click\",function(t){return t.preventDefault(),(new TimelineLite).set(e,{display:\"block\"}).set(i,{display:\"block\"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(e,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},\"=-.5\"),!1}),s.on(\"click\",function(t){return t.preventDefault(),r(),!1}),n.on(\"click\",function(t){return t.preventDefault(),r(),c(\"#analytics_enabled\").prop(\"checked\",!0),c(\"#analytics_enabled\").trigger(\"change\"),!1});var a=c(\".wpr-Popin-Upgrade\"),n=c(\".wpr-Popin-Upgrade-close\");c(\".wpr-popin-upgrade-toggle\").on(\"click\",function(t){return t.preventDefault(),(new TimelineLite).set(a,{display:\"block\"}).set(i,{display:\"block\"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(a,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},\"=-.5\"),!1}),n.on(\"click\",function(){return(new TimelineLite).fromTo(a,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},\"=-.5\").set(a,{display:\"none\"}).set(i,{display:\"none\"}),!1});var o=c(\".wpr-Sidebar\");c(\".wpr-js-tips\").on(\"change\",function(){c(this).is(\":checked\")?(o.css(\"display\",\"block\"),localStorage.setItem(\"wpr-show-sidebar\",\"on\")):(o.css(\"display\",\"none\"),localStorage.setItem(\"wpr-show-sidebar\",\"off\"))}),document.getElementById(\"LKgOcCRpwmAj\")?c(\".wpr-adblock\").css(\"display\",\"none\"):c(\".wpr-adblock\").css(\"display\",\"block\");var l=c(\".wpr-adblock\");c(\".wpr-adblock-close\").on(\"click\",function(){return(new TimelineLite).to(l,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(l,.4,{height:0,marginTop:0,ease:Power4.easeOut},\"=-.4\").set(l,{display:\"none\"}),!1})})},{}],7:[function(t,e,i){\"use strict\";function s(t){var e,i=this;this.$body=document.querySelector(\".wpr-body\"),this.$menuItems=document.querySelectorAll(\".wpr-menuItem\"),this.$submitButton=document.querySelector(\".wpr-Content > form > #wpr-options-submit\"),this.$pages=document.querySelectorAll(\".wpr-Page\"),this.$sidebar=document.querySelector(\".wpr-Sidebar\"),this.$content=document.querySelector(\".wpr-Content\"),this.$tips=document.querySelector(\".wpr-Content-tips\"),this.$links=document.querySelectorAll(\".wpr-body a\"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem(\"wpr-hash\"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add(\"isActive\"),localStorage.setItem(\"wpr-hash\",\"dashboard\"),window.location.hash=\"#dashboard\"));for(var s=0;s{a.querySelectorAll(\".wpr-rocketcdn-open\").forEach(t=>{t.addEventListener(\"click\",t=>{t.preventDefault()})}),function(){var t=\"\";t+=\"action=rocketcdn_process_status\";const e=r(t+=\"&nonce=\"+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show(\"wpr-rocketcdn-modal\")}}(),MicroModal.init({disableScroll:!0})}),s.addEventListener(\"load\",()=>{let t=a.querySelector(\"#wpr-rocketcdn-open-cta\"),e=a.querySelector(\"#wpr-rocketcdn-close-cta\"),i=a.querySelector(\"#wpr-rocketcdn-cta-small\"),s=a.querySelector(\"#wpr-rocketcdn-cta\");function n(t){var e=\"\";return e+=\"action=toggle_rocketcdn_cta\",e+=\"&status=\"+t,e+=\"&nonce=\"+rocket_ajax_data.nonce}null!==t&&null!==i&&null!==s&&t.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.add(\"wpr-isHidden\"),s.classList.remove(\"wpr-isHidden\"),r(n(\"big\"))}),null!==e&&null!==i&&null!==s&&e.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.remove(\"wpr-isHidden\"),s.classList.add(\"wpr-isHidden\"),r(n(\"small\"))})}),s.onmessage=t=>{var e,i,s=rocket_ajax_data.origin_url;t.origin===s&&((e=t.data).hasOwnProperty(\"cdnFrameHeight\")&&(a.getElementById(\"rocketcdn-iframe\").style.height=\"\".concat(e.cdnFrameHeight,\"px\")),(i=t.data).hasOwnProperty(\"cdnFrameClose\")&&(MicroModal.close(\"wpr-rocketcdn-modal\"),i.hasOwnProperty(\"cdn_page_message\")&&-1!==[\"iframe-payment-success\",\"iframe-unsubscribe-success\"].indexOf(i.cdn_page_message)&&a.location.reload()),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_token\")){var s=\"\";s+=\"action=save_rocketcdn_token\",s+=\"&value=\"+t.rocketcdn_token;const n=r(s+=\"&nonce=\"+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}else{s={process:\"subscribe\",message:\"token_not_received\"};i.postMessage({success:!1,data:s,rocketcdn:!0},e)}}(t.data,s),(e=t.data).hasOwnProperty(\"rocketcdn_process\")&&(i=\"\",i+=\"action=rocketcdn_process_set\",i+=\"&status=\"+e.rocketcdn_process,r(i+=\"&nonce=\"+rocket_ajax_data.nonce)),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_url\")){var s=\"\";s+=\"action=rocketcdn_enable\",s+=\"&cdn_url=\"+t.rocketcdn_url;const n=r(s+=\"&nonce=\"+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_disable\")){t=\"\";t+=\"action=rocketcdn_disable\";const s=r(t+=\"&nonce=\"+rocket_ajax_data.nonce);s.onreadystatechange=()=>{var t;s.readyState===XMLHttpRequest.DONE&&200===s.status&&(t=JSON.parse(s.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),(s=t.data).hasOwnProperty(\"rocketcdn_validate_token\")&&s.hasOwnProperty(\"rocketcdn_validate_cname\")&&(t=\"\",t+=\"action=rocketcdn_validate_token_cname\",t+=\"&cdn_url=\"+s.rocketcdn_validate_cname,t+=\"&cdn_token=\"+s.rocketcdn_validate_token,r(t+=\"&nonce=\"+rocket_ajax_data.nonce)))}},{}],9:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"TimelineLite\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(h,u,p){function d(t){u.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,s=this.vars;for(i in s)e=s[i],g(e)&&-1!==e.join(\"\").indexOf(\"{self}\")&&(s[i]=this._swapSelfInParams(e));g(s.tweens)&&this.add(s.tweens,0,s.align,s.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function n(t,e,i,s){t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||w)}var f=1e-10,m=p._internals.isSelector,g=p._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=d.prototype=new u;return d.version=\"1.12.1\",t.constructor=d,t.kill()._gc=!1,t.to=function(t,e,i,s){var n=i.repeat&&a.TweenMax||p;return e?this.add(new n(t,e,i),s):this.set(t,i,s)},t.from=function(t,e,i,s){return this.add((i.repeat&&a.TweenMax||p).from(t,e,i),s)},t.fromTo=function(t,e,i,s,n){var r=s.repeat&&a.TweenMax||p;return e?this.add(r.fromTo(t,e,i,s),n):this.set(t,s,n)},t.staggerTo=function(t,e,i,s,n,r,a,o){var l,c=new d({onComplete:r,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for(\"string\"==typeof t&&(t=p.selector(t)||t),m(t)&&(t=v.call(t,0)),s=s||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*s);return this.add(c,n)},t.staggerFrom=function(t,e,i,s,n,r,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,n,r,a,o)},t.staggerFromTo=function(t,e,i,s,n,r,a,o,l){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,n,r,a,o,l)},t.call=function(t,e,i,s){return this.add(p.delayedCall(0,t,e,i),s)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new p(t,0,e),i)},d.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,s,n=new d(t),t=n._timeline;for(null==e&&(e=!0),t._remove(n,!0),n._startTime=0,n._rawPrevTime=n._time=n._totalTime=t._time,i=t._first;i;)s=i._next,e&&i instanceof p&&i.target===i.vars.onComplete||n.add(i,i._startTime-i._delay),i=s;return t.add(n,0),n},t.add=function(t,e,i,s){var n,r,a,o,l,c;if(\"number\"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof h)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||\"normal\",s=s||0,n=e,r=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof h)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return\"string\"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){u.prototype._remove.call(this,t,e);e=this._last;return e?this._time>e._startTime+e._totalDuration/e._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},t.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,s){return this.call(n,[\"{self}\",e,i,s],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,s){var n;if(s instanceof h&&s.timeline===this)this.remove(s);else if(s&&(s instanceof Array||s.push&&g(s)))for(n=s.length;-1<--n;)s[n]instanceof h&&s[n].timeline===this&&this.remove(s[n]);if(\"string\"==typeof e)return this._parseTimeOrLabel(e,i&&\"number\"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,\"string\"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(n=t.indexOf(\"=\")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(n-1)+\"1\",10)*Number(t.substr(n+1)),t=1f&&(a=\"onReverseComplete\"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(s=this._first;s&&(r=s._next,!this._paused||p);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;else for(s=this._last;s&&(r=s._prev,!this._paused||p);)(s._active||c>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w)),a&&(this._gc||h!==this._startTime&&u===this._timeScale||!(0===this._time||l>=this.totalDuration())||(n&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[a]&&this.vars[a].apply(this.vars[a+\"Scope\"]||this,this.vars[a+\"Params\"]||w)))}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof d&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,s){s=s||-9999999999;for(var n=[],r=this._first,a=0;r;)s>r._startTime||(r instanceof p?!1!==e&&(n[a++]=r):(!1!==i&&(n[a++]=r),!1!==t&&(a=(n=n.concat(r.getChildren(!0,e,i))).length))),r=r._next;return n},t.getTweensOf=function(t,e){var i,s,n=this._gc,r=[],a=0;for(n&&this._enabled(!0,!0),s=(i=p.getTweensOf(t)).length;-1<--s;)(i[s].timeline===this||e&&this._contains(i[s]))&&(r[a++]=i[s]);return n&&this._enabled(!1,!0),r},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var s,n=this._first,r=this._labels;n;)n._startTime>=i&&(n._startTime+=t),n=n._next;if(e)for(s in r)r[s]>=i&&(r[s]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,n=!1;-1<--s;)i[s]._kill(t,e)&&(n=!0);return n},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return u.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,s=0,n=this._last,r=999999999999;n;)e=n._prev,n._dirty&&n.totalDuration(),n._startTime>r&&this._sortChildren&&!n._paused?this.add(n,n._startTime-n._delay):r=n._startTime,n._startTime<0&&!n._paused&&(s-=n._startTime,this._timeline.smoothChildTiming&&(this._startTime+=n._startTime/this._timeScale),this.shiftChildren(-n._startTime,!1,-9999999999),r=0),s<(i=n._startTime+n._totalDuration/n._timeScale)&&(s=i),n=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===h._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},d},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],10:[function(t,Q,e){\"use strict\";!function(p){var e,i,d=p.GreenSockGlobals||p;if(!d.TweenLite){var _,f=function(t){for(var e=t.split(\".\"),i=d,s=0;e.length>s;s++)i[e[s]]=i=i[e[s]]||{};return i},u=f(\"com.greensock\"),m=1e-10,o=[].slice,g=function(){},h=(e=Object.prototype.toString,i=e.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&e.call(t)===i)}),w={},v=function(o,l,c,h){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var u=[];this.check=function(t){for(var e,i,s,n,r=l.length,a=r;-1<--r;)(e=w[l[r]]||new v(l[r],[])).gsClass?(u[r]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(s=(i=(\"com.greensock.\"+o).split(\".\")).pop(),n=f(i.join(\".\"))[s]=this.gsClass=c.apply(c,u),h&&(d[s]=n,\"function\"==typeof define&&define.amd?define((p.GreenSockAMDPath?p.GreenSockAMDPath+\"/\":\"\")+o.split(\".\").join(\"/\"),[],function(){return n}):void 0!==Q&&Q.exports&&(Q.exports=n)),r=0;this.sc.length>r;r++)this.sc[r].check()},this.check(!0)},s=p._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=u._class=function(t,e,i){return e=e||function(){},s(t,[],function(){return e},i),e};s.globals=d;var t,n=[0,0,1,1],x=[],b=y(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?n.concat(e):n},!0),T=b.map={},r=b.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),c=l.length,h=(i||\"easeIn,easeOut,easeInOut\").split(\",\");-1<--c;)for(r=l[c],n=s?y(\"easing.\"+r,null,!0):u.easing[r]||{},a=h.length;-1<--a;)o=h[a],T[r+\".\"+o]=T[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((t=b.prototype)._calcEnd=!1,t.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},l=(a=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;-1<--l;)t=a[l]+\",Power\"+l,r(new b(null,null,1,l),t,\"easeOut\",!0),r(new b(null,null,2,l),t,\"easeIn\"+(0===l?\",easeNone\":\"\")),r(new b(null,null,3,l),t,\"easeInOut\");T.linear=u.easing.Linear.easeIn,T.swing=u.easing.Quad.easeInOut;var k=y(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(t=k.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(r=o[a]).c===e&&r.s===i?o.splice(a,1):0===l&&n>r.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:s,pr:n}),this!==A||_||A.wake()},t.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;-1<--i;)if(s[i].c===e)return void s.splice(i,1)},t.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for(e=n.length,i=this._eventTarget;-1<--e;)(s=n[e]).up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i)};for(var a,P=p.requestAnimationFrame,S=p.cancelAnimationFrame,O=Date.now||function(){return(new Date).getTime()},C=O(),l=(a=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;-1<--l&&!P;)P=p[a[l]+\"RequestAnimationFrame\"],S=p[a[l]+\"CancelAnimationFrame\"]||p[a[l]+\"CancelRequestAnimationFrame\"];y(\"Ticker\",function(t,e){var s,n,r,a,o,l=this,c=O(),i=!1!==e&&P,h=500,u=33,p=function(t){var e,i=O()-C;h=i&&i+this.totalDuration()/this._timeScale>t},t._enabled=function(t,e){return _||A.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},t._kill=function(){return this._enabled(!1,!1)},t.kill=function(t,e){return this._kill(t,e),this},t._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},t._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)\"{self}\"===t[e]&&(i[e]=this);return i},t.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=h(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},t.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},t.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},t.totalTime=function(t,e,i){if(_||A.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(ss;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},t._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline&&this._uncache(!0)),this},t.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s},t.rawTime=function(){return _||A.wake(),this._totalTime};var I=y(\"TweenLite\",function(t,e,i){if(c.call(this,e,i),this.render=I.prototype.render,null==t)throw\"Cannot tween a null target.\";this.target=t=\"string\"==typeof t&&I.selector(t)||t;var s,n,r,i=t.jquery||t.length&&t!==p&&t[0]&&(t[0]===p||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?F[I.defaultOverwrite]:\"number\"==typeof a?a>>0:F[a],(i||t instanceof Array||t.push&&h(t))&&\"number\"!=typeof t[0])for(this._targets=r=o.call(t,0),this._propLookup=[],this._siblings=[],s=0;r.length>s;s++)(n=r[s])?\"string\"!=typeof n?n.length&&n!==p&&n[0]&&(n[0]===p||n[0].nodeType&&n[0].style&&!n.nodeType)?(r.splice(s--,1),this._targets=r=r.concat(o.call(n,0))):(this._siblings[s]=H(n,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((p||!a._initted)&&c-a._startTime<=2e-10||(h[u++]=a)));for(d=u;-1<--d;)a=h[d],2===s&&a._kill(i,t)&&(r=!0),(2!==s||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(r=!0);return r},W=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return e<(r/=n)?r-e:i&&r===e||!t._initted&&r-e<2*m?m:(r+=t.totalDuration()/t._timeScale/n)>e+m?0:r-e-m};t._init=function(){var t,e,i,s,n,r=this.vars,a=this._overwrittenProps,o=this._duration,l=!!r.immediateRender,c=r.ease;if(r.startAt){for(s in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),n={},r.startAt)n[s]=r.startAt[s];if(n.overwrite=!1,n.immediateRender=!0,n.lazy=l&&!1!==r.lazy,n.startAt=n.delay=null,this._startAt=I.to(this.target,0,n),l)if(0o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===V.API&&(E[(new t[e])._propName]=t[e]);return!0},s.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_roundProps\",initAll:\"_onInitAllProps\"},a=y(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){V.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new V(i);for(e in(o.constructor=a).API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,V.activate([a]),a},a=p._gsQueue){for(l=0;a.length>l;l++)a[l]();for(t in w)w[t].func||p.console.log(\"GSAP encountered missing dependency: com.greensock.\"+t)}_=!1}}(window)},{}],11:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"easing.Back\",[\"easing.Ease\"],function(m){function t(t,e){var i=c(\"easing.\"+t,function(){},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,i}function e(t,e,i,s){return s=c(\"easing.\"+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0),h(s,t),s}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c(\"easing.\"+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var s,n,r=window.GreenSockGlobals||window,a=r.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,h=m.register||function(){},u=e(\"Back\",i(\"BackOut\",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i(\"BackIn\",function(t){return t*t*((this._p1+1)*t-this._p1)}),i(\"BackInOut\",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c(\"easing.SlowMo\",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),a.config=p.config=function(t,e,i){return new p(t,e,i)},(a=(s=c(\"easing.SteppedEase\",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=s,a.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},a.config=s.config=function(t){return new s(t)},(a=(n=c(\"easing.RoughEase\",function(t){for(var e,i,s,n,r,a,o=(t=t||{}).taper||\"none\",l=[],c=0,h=0|(t.points||20),u=h,p=!1!==t.randomize,d=!0===t.clamp,_=t.template instanceof m?t.template:null,f=\"number\"==typeof t.strength?.4*t.strength:.4;-1<--u;)e=p?Math.random():1/h*u,i=_?_.getRatio(e):e,s=\"none\"===o?f:\"out\"===o?(n=1-e)*n*f:\"in\"===o?e*e*f:.5*(n=e<.5?2*e:2*(1-e))*n*f,p?i+=Math.random()*s-.5*s:u%2?i+=.5*s:i-=.5*s,d&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},a.config=function(t){return new n(t)},n.ease=new n,e(\"Bounce\",t(\"BounceOut\",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t(\"BounceIn\",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t(\"BounceInOut\",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e(\"Circ\",t(\"CircOut\",function(t){return Math.sqrt(1- --t*t)}),t(\"CircIn\",function(t){return-(Math.sqrt(1-t*t)-1)}),t(\"CircInOut\",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e(\"Elastic\",(a=function(t,e,i){var s=c(\"easing.\"+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=s.prototype=new m;return t.constructor=s,t.getRatio=e,t.config=function(t,e){return new s(t,e)},s})(\"ElasticOut\",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),a(\"ElasticIn\",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),a(\"ElasticInOut\",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e(\"Expo\",t(\"ExpoOut\",function(t){return 1-Math.pow(2,-10*t)}),t(\"ExpoIn\",function(t){return Math.pow(2,10*(t-1))-.001}),t(\"ExpoInOut\",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e(\"Sine\",t(\"SineOut\",function(t){return Math.sin(t*l)}),t(\"SineIn\",function(t){return 1-Math.cos(t*l)}),t(\"SineInOut\",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c(\"easing.EaseLookup\",{find:function(t){return m.map[t]}},!0),h(r.SlowMo,\"SlowMo\",\"ease,\"),h(n,\"RoughEase\",\"ease,\"),h(s,\"SteppedEase\",\"ease,\"),u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],12:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(r,p){function N(){r.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=N.prototype.setRatio}var d,x,b,u,_={},t=N.prototype=new r(\"css\");(t.constructor=N).version=\"1.12.1\",N.API=2,N.defaultTransformPerspective=0,N.defaultSkewType=\"compensated\",N.suffixMap={top:t=\"px\",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:\"\"};function n(t,e){return e.toUpperCase()}function a(t){return L.test(\"string\"==typeof t?t:(t.currentStyle||t.style).filter||\"\")?parseFloat(RegExp.$1)/100:1}function f(t){window.console&&console.log(t)}function T(t,e){var i,s,n=(e=e||Z).style;if(void 0!==n[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],s=5;-1<--s&&void 0===n[i[s]+t];);return 0<=s?(tt=\"-\"+(et=3===s?\"ms\":i[s]).toLowerCase()+\"-\",et+t):null}function m(t,e){var i,s={};if(e=e||it(t,null))if(i=e.length)for(;-1<--i;)s[e[i].replace(Y,n)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)\"string\"==typeof i&&void 0===s[i]&&(s[i.replace(Y,n)]=e[i]);return J||(s.opacity=a(t)),t=Pt(t,e,!1),s.rotation=t.rotation,s.skewX=t.skewX,s.scaleX=t.scaleX,s.scaleY=t.scaleY,s.x=t.x,s.y=t.y,Tt&&(s.z=t.z,s.rotationX=t.rotationX,s.rotationY=t.rotationY,s.scaleZ=t.scaleZ),s.filters&&delete s.filters,s}function g(t,e,i,s,n){var r,a,o,l={},c=t.style;for(a in i)\"cssText\"!==a&&\"length\"!==a&&isNaN(a)&&(e[a]!==(r=i[a])||n&&n[a])&&-1===a.indexOf(\"Origin\")&&(\"number\"==typeof r||\"string\"==typeof r)&&(l[a]=\"auto\"!==r||\"left\"!==a&&\"top\"!==a?\"\"!==r&&\"auto\"!==r&&\"none\"!==r||\"string\"!=typeof e[a]||\"\"===e[a].replace(D,\"\")?r:0:rt(t,a),void 0!==c[a]&&(o=new pt(c,a,c[a],o)));if(s)for(a in s)\"className\"!==a&&(l[a]=s[a]);return{difs:l,firstMPT:o}}function w(t,e){var i=(t=null==t||\"\"===t||\"auto\"===t||\"auto auto\"===t?\"0 0\":t).split(\" \"),s=-1!==t.indexOf(\"left\")?\"0%\":-1!==t.indexOf(\"right\")?\"100%\":i[0];return null==(t=-1!==t.indexOf(\"top\")?\"0%\":-1!==t.indexOf(\"bottom\")?\"100%\":i[1])?t=\"0\":\"center\"===t&&(t=\"50%\"),(\"center\"===s||isNaN(parseFloat(s))&&-1===(s+\"\").indexOf(\"=\"))&&(s=\"50%\"),e&&(e.oxp=-1!==s.indexOf(\"%\"),e.oyp=-1!==t.indexOf(\"%\"),e.oxr=\"=\"===s.charAt(1),e.oyr=\"=\"===t.charAt(1),e.ox=parseFloat(s.replace(D,\"\")),e.oy=parseFloat(t.replace(D,\"\"))),s+\" \"+t+(2>16,255&t>>8,255&t]:(\",\"===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),lt[t]||(\"#\"===t.charAt(0)?(4===t.length&&(t=\"#\"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(r=t.charAt(3))+r),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):(\"hsl\"===t.substr(0,3)?(t=t.match(A),s=Number(t[0])%360/360,n=Number(t[1])/100,e=2*(r=Number(t[2])/100)-(i=r<=.5?r*(1+n):r+n-r*n),3a\",!!(i=i.getElementsByTagName(\"a\")[0])&&/^0.55/.test(i.style.opacity)),tt=\"\",et=\"\",it=Q.defaultView?Q.defaultView.getComputedStyle:function(){},st=N.getStyle=function(t,e,i,s,n){var r;return J||\"opacity\"!==e?(!s&&t.style[e]?r=t.style[e]:(i=i||it(t))?r=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(z,\"-$1\").toLowerCase()):t.currentStyle&&(r=t.currentStyle[e]),null==n||r&&\"none\"!==r&&\"auto\"!==r&&\"auto auto\"!==r?r:n):a(t)},nt=s.convertToPixels=function(t,e,i,s,n){if(\"px\"===s||!s)return i;if(\"auto\"===s||!i)return 0;var r,a,o,l=$.test(e),c=t,h=Z.style,u=i<0;if(u&&(i=-i),\"%\"===s&&-1!==e.indexOf(\"border\"))r=i/100*(l?t.clientWidth:t.clientHeight);else{if(h.cssText=\"border:0 solid red;position:\"+st(t,\"position\")+\";line-height:0;\",\"%\"!==s&&c.appendChild)h[l?\"borderLeftWidth\":\"borderTopWidth\"]=i+s;else{if(a=(c=t.parentNode||Q.body)._gsCache,o=p.ticker.frame,a&&l&&a.time===o)return a.width*i/100;h[l?\"width\":\"height\"]=i+s}c.appendChild(Z),r=parseFloat(Z[l?\"offsetWidth\":\"offsetHeight\"]),c.removeChild(Z),l&&\"%\"===s&&!1!==N.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=r/i*100),0!==r||n||(r=nt(t,e,i,s,!0))}return u?-r:r},rt=s.calculateOffset=function(t,e,i){if(\"absolute\"!==st(t,\"position\",i))return 0;var s=\"left\"===e?\"Left\":\"Top\",i=st(t,\"margin\"+s,i);return t[\"offset\"+s]-(nt(t,e,parseFloat(i),i.replace(j,\"\"))||0)},at={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ot=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],lt={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ct=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#.+?\\\\b\";for(t in lt)ct+=\"|\"+t+\"\\\\b\";function ht(t,e,r,a){if(null==t)return function(t){return t};var o,l=e?(t.match(ct)||[\"\"])[0]:\"\",c=t.split(l).join(\"\").match(I)||[],h=t.substr(0,t.indexOf(c[0])),u=\")\"===t.charAt(t.length-1)?\")\":\"\",p=-1!==t.indexOf(\" \")?\" \":\",\",d=c.length,_=0s;s++)n[s]=o(n[s]);return n.join(\",\")}if(e=(t.match(ct)||[l])[0],s=(i=t.split(e).join(\"\").match(I)||[]).length,d>s--)for(;d>++s;)i[s]=r?i[0|(s-1)/2]:c[s];return h+i.join(p)+p+e+u+(-1!==t.indexOf(\"inset\")?\" inset\":\"\")}:function(t){var e,i,s;if(\"number\"==typeof t)t+=_;else if(a&&H.test(t)){for(i=t.replace(H,\"|\").split(\"|\"),s=0;i.length>s;s++)i[s]=o(i[s]);return i.join(\",\")}if(s=(e=t.match(I)||[]).length,d>s--)for(;d>++s;)e[s]=r?e[0|(s-1)/2]:c[s];return h+e.join(p)+u}:function(t){return t}}function ut(c){return c=c.split(\",\"),function(t,e,i,s,n,r,a){var o,l=(e+\"\").split(\" \");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return s.parse(t,a,n,r)}}var ct=RegExp(ct+\")\",\"gi\"),pt=(s._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,s,n,r=this.data,a=r.proxy,o=r.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6s;s++)n+=i[\"xn\"+s]+i[\"xs\"+(s+1)];i.e=n}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,s,n){this.t=t,this.p=e,this.v=i,this.r=n,s&&((s._prev=this)._next=s)}),dt=(s._parseToProxy=function(t,e,i,s,n,r){var a,o,l,c,h=s,u={},p={},d=i._transform,_=V;for(i._transform=null,V=e,s=n=i.parse(t,e,s,n),V=_,r&&(i._transform=d,h&&(h._prev=null,h._prev&&(h._prev._next=null)));s&&s!==h;){if(s.type<=1&&(p[o=s.p]=s.s+s.c,u[o]=s.s,r||(c=new pt(s,\"s\",o,c,s.r),s.c=0),1===s.type))for(a=s.l;0<--a;)p[o=s.p+\"_\"+(l=\"xn\"+a)]=s.data[l],u[o]=s[l],r||(c=new pt(s,l,o,c,s.rxp[l]));s=s._next}return{proxy:u,end:p,firstMPT:c,pt:n}},s.CSSPropTween=function(t,e,i,s,n,r,a,o,l,c,h){this.t=t,this.p=e,this.s=i,this.c=s,this.n=a||e,t instanceof dt||u.push(this.n),this.r=o,this.type=r||0,l&&(this.pr=l,d=!0),this.b=void 0===c?i:c,this.e=void 0===h?i+s:h,n&&((this._next=n)._prev=this)}),_t=N.parseComplex=function(t,e,i,s,n,r,a,o,l,c){a=new dt(t,e,0,0,a,c?2:1,null,!1,o,i=i||r||\"\",s),s+=\"\";var h,u,p,d,_,f,m,g,w,v,y,x=i.split(\", \").join(\",\").split(\" \"),b=s.split(\", \").join(\",\").split(\" \"),T=x.length,k=!1!==O;for(-1===s.indexOf(\",\")&&-1===i.indexOf(\",\")||(x=x.join(\" \").replace(H,\", \").split(\" \"),b=b.join(\" \").replace(H,\", \").split(\" \"),T=x.length),T!==b.length&&(T=(x=(r||\"\").split(\" \")).length),a.plugin=l,a.setRatio=c,h=0;hu;u++)v=f[u],w=d.indexOf(v,p),a.appendXtra(d.substr(p,w-p),Number(v),P(m[u],v),\"\",k&&\"px\"===d.substr(w+v.length,2),0===u),p=w+v.length;a[\"xs\"+a.l]+=d.substr(p)}else a[\"xs\"+a.l]+=a.l?\" \"+d:d;if(-1!==s.indexOf(\"=\")&&a.data){for(y=a.xs0+a.data.s,h=1;a.l>h;h++)y+=a[\"xs\"+h]+a.data[\"xn\"+h];a.e=y+a[\"xs\"+h]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ft=9;for((t=dt.prototype).l=t.pr=0;0<--ft;)t[\"xn\"+ft]=0,t[\"xs\"+ft]=\"\";t.xs0=\"\",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,s,n,r){var a=this,o=a.l;return a[\"xs\"+o]+=r&&o?\" \"+t:t||\"\",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a[\"xs\"+a.l]=s||\"\",0s;s++)e.prefix=0===s&&e.prefix,e.defaultValue=i[s]||r,new mt(n[s],e)};(t=mt.prototype).parseComplex=function(t,e,i,s,n,r){var a,o,l,c,h,u=this.keyword;if(this.multi&&(H.test(i)||H.test(e)?(o=e.replace(H,\"|\").split(\"|\"),l=i.replace(H,\"|\").split(\"|\")):u&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aI[r]&&I[r]>-j&&(I[r]=0);return i&&(t._gsTransform=I),I},St=s.set3DTransformRatio=function(t){var e,i,s,n,r,a,o,l,c,h,u,p,d,_,f,m,g,w,v,y,x,b,T=this.data,k=this.t.style,P=T.rotation*U,S=T.scaleX,O=T.scaleY,C=T.scaleZ,A=T.perspective;if(1!==t&&0!==t||\"auto\"!==T.force3D||T.rotationY||T.rotationX||1!==C||A||T.z){if(M&&(S<1e-4&&-1e-4y;y++)this.p.indexOf(\"border\")&&(f[y]=T(f[y])),-1!==(o=a=st(t,f[y],b,!1,\"0px\")).indexOf(\" \")&&(o=(a=o.split(\" \"))[0],a=a[1]),l=r=v[y],d=parseFloat(o),_=o.substr((d+\"\").length),(h=\"\"===(h=(u=\"=\"===l.charAt(1))?(c=parseInt(l.charAt(0)+\"1\",10),l=l.substr(2),c*=parseFloat(l),l.substr((c+\"\").length-(c<0?1:0))||\"\"):(c=parseFloat(l),l.substr((c+\"\").length)))?x[i]||_:h)!==_&&(p=nt(t,\"borderLeft\",d,_),d=nt(t,\"borderTop\",d,_),a=\"%\"===h?(o=p/g*100+\"%\",d/w*100+\"%\"):\"em\"===h?(o=p/(_=nt(t,\"borderLeft\",1,\"em\"))+\"em\",d/_+\"em\"):(o=p+\"px\",d+\"px\"),u&&(l=parseFloat(o)+c+h,r=parseFloat(a)+c+h)),n=_t(m,f[y],o+\" \"+a,l+\" \"+r,!1,\"0px\",n);return n},prefix:!0,formatter:ht(\"0px 0px 0px 0px\",!1,!0)}),gt(\"backgroundPosition\",{defaultValue:\"0 0\",parser:function(t,e,i,s,n,r){var a,o,l,c,h,u,p=\"background-position\",d=b||it(t,null),_=this.format((d?C?d.getPropertyValue(p+\"-x\")+\" \"+d.getPropertyValue(p+\"-y\"):d.getPropertyValue(p):t.currentStyle.backgroundPositionX+\" \"+t.currentStyle.backgroundPositionY)||\"0 0\"),e=this.format(e);if(-1!==_.indexOf(\"%\")!=(-1!==e.indexOf(\"%\"))&&((u=st(t,\"backgroundImage\").replace(F,\"\"))&&\"none\"!==u)){for(a=_.split(\" \"),o=e.split(\" \"),G.setAttribute(\"src\",u),l=2;-1<--l;)(c=-1!==(_=a[l]).indexOf(\"%\"))!=(-1!==o[l].indexOf(\"%\"))&&(h=0===l?t.offsetWidth-G.width:t.offsetHeight-G.height,a[l]=c?parseFloat(_)/100*h+\"px\":parseFloat(_)/h*100+\"%\");_=a.join(\" \")}return this.parseComplex(t.style,_,e,n,r)},formatter:w}),gt(\"backgroundSize\",{defaultValue:\"0 0\",formatter:w}),gt(\"perspective\",{defaultValue:\"0px\",prefix:!0}),gt(\"perspectiveOrigin\",{defaultValue:\"50% 50%\",prefix:!0}),gt(\"transformStyle\",{prefix:!0}),gt(\"backfaceVisibility\",{prefix:!0}),gt(\"userSelect\",{prefix:!0}),gt(\"margin\",{parser:ut(\"marginTop,marginRight,marginBottom,marginLeft\")}),gt(\"padding\",{parser:ut(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")}),gt(\"clip\",{defaultValue:\"rect(0px,0px,0px,0px)\",parser:function(t,e,i,s,n,r){var a,o;return e=C<9?(a=t.currentStyle,o=C<8?\" \":\",\",a=\"rect(\"+a.clipTop+o+a.clipRight+o+a.clipBottom+o+a.clipLeft+\")\",this.format(e).split(\",\").join(o)):(a=this.format(st(t,this.p,b,!1,this.dflt)),this.format(e)),this.parseComplex(t.style,a,e,n,r)}}),gt(\"textShadow\",{defaultValue:\"0px 0px 0px #999\",color:!0,multi:!0}),gt(\"autoRound,strictUnits\",{parser:function(t,e,i,s,n){return n}}),gt(\"border\",{defaultValue:\"0px solid #000\",parser:function(t,e,i,s,n,r){return this.parseComplex(t.style,this.format(st(t,\"borderTopWidth\",b,!1,\"0px\")+\" \"+st(t,\"borderTopStyle\",b,!1,\"solid\")+\" \"+st(t,\"borderTopColor\",b,!1,\"#000\")),this.format(e),n,r)},color:!0,formatter:function(t){var e=t.split(\" \");return e[0]+\" \"+(e[1]||\"solid\")+\" \"+(t.match(ct)||[\"#000\"])[0]}}),gt(\"borderWidth\",{parser:ut(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}),gt(\"float,cssFloat,styleFloat\",{parser:function(t,e,i,s,n){var r=t.style,t=\"cssFloat\"in r?\"cssFloat\":\"styleFloat\";return new dt(r,t,0,0,n,-1,i,!1,0,r[t],e)}});function Ct(t){var e,i=this.t,s=i.filter||st(this.data,\"filter\"),t=0|this.s+this.c*t;(e=100==t?-1===s.indexOf(\"atrix(\")&&-1===s.indexOf(\"radient(\")&&-1===s.indexOf(\"oader(\")?(i.removeAttribute(\"filter\"),!st(this.data,\"filter\")):(i.filter=s.replace(l,\"\"),!0):e)||(this.xn1&&(i.filter=s=s||\"alpha(opacity=\"+t+\")\"),-1===s.indexOf(\"pacity\")?0==t&&this.xn1||(i.filter=s+\" alpha(opacity=\"+t+\")\"):i.filter=s.replace(L,\"opacity=\"+t))}gt(\"opacity,alpha,autoAlpha\",{defaultValue:\"1\",parser:function(t,e,i,s,n,r){var a=parseFloat(st(t,\"opacity\",b,!1,\"1\")),o=t.style,l=\"autoAlpha\"===i;return\"string\"==typeof e&&\"=\"===e.charAt(1)&&(e=(\"-\"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+a),l&&1===a&&\"hidden\"===st(t,\"visibility\",b)&&0!==e&&(a=0),J?n=new dt(o,\"opacity\",a,e-a,n):((n=new dt(o,\"opacity\",100*a,100*(e-a),n)).xn1=l?1:0,o.zoom=1,n.type=2,n.b=\"alpha(opacity=\"+n.s+\")\",n.e=\"alpha(opacity=\"+(n.s+n.c)+\")\",n.data=t,n.plugin=r,n.setRatio=Ct),l&&((n=new dt(o,\"visibility\",0,0,n,-1,null,!1,0,0!==a?\"inherit\":\"hidden\",0===e?\"hidden\":\"inherit\")).xs0=\"inherit\",s._overwriteProps.push(n.n),s._overwriteProps.push(i)),n}});function At(t,e){e&&(t.removeProperty?(\"ms\"===e.substr(0,2)&&(e=\"M\"+e.substr(1)),t.removeProperty(e.replace(z,\"-$1\").toLowerCase())):t.removeAttribute(e))}function Mt(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute(\"class\",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:At(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute(\"class\")!==this.e&&this.t.setAttribute(\"class\",this.e)}gt(\"className\",{parser:function(t,e,i,s,n,r,a){var o,l,c,h=t.getAttribute(\"class\")||\"\",u=t.style.cssText;if((n=s._classNamePT=new dt(t,i,0,0,n,2)).setRatio=Mt,n.pr=-11,d=!0,n.b=h,o=m(t,b),i=t._gsClassPT){for(l={},c=i.data;c;)l[c.p]=1,c=c._next;i.setRatio(1)}return(t._gsClassPT=n).e=\"=\"!==e.charAt(1)?e:h.replace(RegExp(\"\\\\s*\\\\b\"+e.substr(2)+\"\\\\b\"),\"\")+(\"+\"===e.charAt(0)?\" \"+e.substr(2):\"\"),s._tween._duration&&(t.setAttribute(\"class\",n.e),a=g(t,o,m(t),a,l),t.setAttribute(\"class\",h),n.data=a.firstMPT,t.style.cssText=u,n=n.xfirst=s.parse(t,a.difs,n,r)),n}});function Rt(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&\"isFromStart\"!==this.data.data){var e,i,s,n,r=this.t.style,a=_.transform.parse;if(\"all\"===this.e)n=!(r.cssText=\"\");else for(s=(e=this.e.split(\",\")).length;-1<--s;)i=e[s],_[i]&&(_[i].parse===a?n=!0:i=\"transformOrigin\"===i?bt:_[i].p),At(r,i);n&&(At(r,yt),this.t._gsTransform&&delete this.t._gsTransform)}}for(gt(\"clearProps\",{parser:function(t,e,i,s,n){return(n=new dt(t,i,0,0,n,2)).setRatio=Rt,n.e=e,n.pr=-10,n.data=s._tween,d=!0,n}}),t=\"bezier,throwProps,physicsProps,physics2D\".split(\",\"),ft=t.length;ft--;)!function(t){var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+\"Plugin\",gt(t,{parser:function(t,e,i,s,n,r,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,s,n,r,a)):(f(\"Error: \"+l+\" js file not loaded.\"),n)}}))}(t[ft]);(t=N.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,O=e.autoRound,d=!1,x=e.suffixMap||N.suffixMap,b=it(t,\"\"),u=this._overwriteProps;var s,n,r,a,o,l,i=t.style;if(c&&\"\"===i.zIndex&&(\"auto\"!==(l=st(t,\"zIndex\",b))&&\"\"!==l||this._addLazySet(i,\"zIndex\",0)),\"string\"==typeof e&&(r=i.cssText,l=m(t,b),i.cssText=r+\";\"+e,l=g(t,l,m(t)).difs,!J&&X.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=r),this._firstPT=s=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,yt?h&&(c=!0,\"\"===i.zIndex&&(\"auto\"!==(e=st(t,\"zIndex\",b))&&\"\"!==e||this._addLazySet(i,\"zIndex\",0)),k&&this._addLazySet(i,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(l?\"visible\":\"hidden\"))):i.zoom=1,n=s;n&&n._next;)n=n._next;i=new dt(t,\"transform\",0,0,null,2),this._linkCSSP(i,null,n),i.setRatio=l&&Tt?St:yt?Ot:wt,i.data=this._transform||Pt(t,b,!0),u.pop()}if(d){for(;s;){for(o=s._next,n=r;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:a)?s._prev._next=s:r=s,(s._next=n)?n._prev=s:a=s,s=o}this._firstPT=r}return!0},t.parse=function(t,e,i,s){var n,r,a,o,l,c,h,u,p=t.style;for(n in e)l=e[n],u=_[n],u?i=u.parse(t,l,n,this,i,s,e):(o=st(t,n,b)+\"\",h=\"string\"==typeof l,\"color\"===n||\"fill\"===n||\"stroke\"===n||-1!==n.indexOf(\"Color\")||h&&E.test(l)?(h||(l=S(l),l=(3s;s++)i+=n[\"xn\"+s]+n[\"xs\"+(s+1)];n.t[n.p]=i}else-1===n.type?n.t[n.p]=n.xs0:n.setRatio&&n.setRatio(t);else n.t[n.p]=e+n.xs0;n=n._next}else for(;n;)2!==n.type?n.t[n.p]=n.b:n.setRatio(t),n=n._next;else for(;n;)2!==n.type?n.t[n.p]=n.e:n.setRatio(t),n=n._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||Pt(this._target,b,!0)};function It(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}t._addLazySet=function(t,e,i){e=this._firstPT=new dt(t,e,0,0,this._firstPT,2);e.e=i,e.setRatio=It,e.data=this},t._linkCSSP=function(t,e,i,s){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,s=!0),i?i._next=t:s||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,s,n=t;if(t.autoAlpha||t.alpha){for(i in n={},t)n[i]=t[i];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return t.className&&(e=this._classNamePT)&&((s=e.xfirst)&&s._prev?this._linkCSSP(s._prev,e._next,s._prev._prev):s===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,s._prev),this._classNamePT=null),r.prototype._kill.call(this,n)};function Dt(t,e,i){var s,n,r,a;if(t.slice)for(n=t.length;-1<--n;)Dt(t[n],e,i);else for(n=(s=t.childNodes).length;-1<--n;)a=(r=s[n]).type,r.style&&(e.push(m(r)),i&&i.push(r)),1!==a&&9!==a&&11!==a||!r.childNodes.length||Dt(r,e,i)}return N.cascadeTo=function(t,e,i){var s,n,r,a=p.to(t,e,i),o=[a],l=[],c=[],h=[],u=p._internals.reservedProps;for(t=a._targets||a.target,Dt(t,l,h),a.render(e,!0),Dt(t,c),a.render(0,!0),a._enabled(!0),s=h.length;-1<--s;)if((n=g(h[s],l[s],c[s])).firstMPT){for(r in n=n.difs,i)u[r]&&(n[r]=i[r]);o.push(p.to(h[s],e,n))}return o},r.activate([N]),N},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){function n(t,e){var i=\"x\"===e?\"Width\":\"Height\",s=\"scroll\"+i,n=\"client\"+i,e=document.body;return t===a||t===r||t===e?Math.max(r[s],e[s])-(a[\"inner\"+i]||Math.max(r[n],e[n])):t[s]-t[\"offset\"+i]}var r=document.documentElement,a=window,t=window._gsDefine.plugin({propName:\"scrollTo\",API:2,version:\"1.7.3\",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e=\"object\"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,\"x\",this.x,\"max\"===e.x?n(t,\"x\"):e.x,\"scrollTo_x\",!0),this._overwriteProps.push(\"scrollTo_x\")):this.skipX=!0,null!=e.y?(this._addTween(this,\"y\",this.y,\"max\"===e.y?n(t,\"y\"):e.y,\"scrollTo_y\",!0),this._overwriteProps.push(\"scrollTo_y\")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var e=this._wdw||!this.skipX?this.getX():this.xPrev,i=this._wdw||!this.skipY?this.getY():this.yPrev,s=i-this.yPrev,t=e-this.xPrev;this._autoKill&&(!this.skipX&&(7e&&(this.skipX=!0),!this.skipY&&(7i&&(this.skipY=!0),this.skipX&&this.skipY&&this._tween.kill()),this._wdw?a.scrollTo(this.skipX?e:this.x,this.skipY?i:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=n,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=r.scrollLeft?r:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=r.scrollTop?r:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[2]);"],"file":"wpr-admin.js"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["wpr-admin.js"],"sourcesContent":["!function s(n,r,a){function o(e,t){if(!r[e]){if(!n[e]){var i=\"function\"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(i=new Error(\"Cannot find module '\"+e+\"'\")).code=\"MODULE_NOT_FOUND\",i}i=r[e]={exports:{}},n[e][0].call(i.exports,function(t){return o(n[e][1][t]||t)},i,i.exports,s,n,r,a)}return r[e].exports}for(var l=\"function\"==typeof require&&require,t=0;t{i.append(\"\"+t+\": \"),i.append(e[t].message),i.append(\"
\")}):i.append('
'+e.message+\"
\")}})})})},{}],2:[function(t,e,i){\"use strict\";t(\"../lib/greensock/TweenLite.min.js\"),t(\"../lib/greensock/TimelineLite.min.js\"),t(\"../lib/greensock/easing/EasePack.min.js\"),t(\"../lib/greensock/plugins/CSSPlugin.min.js\"),t(\"../lib/greensock/plugins/ScrollToPlugin.min.js\"),t(\"../global/pageManager.js\"),t(\"../global/main.js\"),t(\"../global/fields.js\"),t(\"../global/beacon.js\"),t(\"../global/ajax.js\"),t(\"../global/rocketcdn.js\"),t(\"../global/countdown.js\")},{\"../global/ajax.js\":1,\"../global/beacon.js\":3,\"../global/countdown.js\":4,\"../global/fields.js\":5,\"../global/main.js\":6,\"../global/pageManager.js\":7,\"../global/rocketcdn.js\":8,\"../lib/greensock/TimelineLite.min.js\":9,\"../lib/greensock/TweenLite.min.js\":10,\"../lib/greensock/easing/EasePack.min.js\":11,\"../lib/greensock/plugins/CSSPlugin.min.js\":12,\"../lib/greensock/plugins/ScrollToPlugin.min.js\":13}],3:[function(t,e,i){\"use strict\";var s=jQuery;s(document).ready(function(){\"Beacon\"in window&&s(\".wpr-infoAction--help\").on(\"click\",function(t){var e=s(this).data(\"beacon-id\");return 0!==(e=(e=e).split(\",\")).length&&(1{o(t).attr(\"checked\",i?null:\"checked\")});else{const r=o(e).closest(\".wpr-list\").find(\".wpr-main-checkbox\");var n=o.map(s,t=>{if(void 0!==o(t).attr(\"checked\"))return t});r.attr(\"checked\",n.length===s.length?\"checked\":null)}}),0{let i=o(e).parents(\".wpr-list\");var s=i.find(\".wpr-list-body input[type=checkbox]:not(:checked)\").length;o(e).attr(\"checked\",s<=0?\"checked\":null)})})},{}],6:[function(t,e,i){\"use strict\";var c=jQuery;c(document).ready(function(){var t=c(\".wpr-notice\");c(\"#wpr-congratulations-notice\").on(\"click\",function(){return(new TimelineLite).to(t,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(t,.6,{height:0,marginTop:0,ease:Power4.easeOut},\"=-.4\").set(t,{display:\"none\"}),!1}),c(\".rocket-analytics-data-container\").hide(),c(\".rocket-preview-analytics-data\").on(\"click\",function(t){t.preventDefault(),c(this).parent().next(\".rocket-analytics-data-container\").toggle()}),c(\".wpr-toggle-button\").each(function(){var t=c(this),e=t.closest(\".wpr-fieldsContainer-fieldset\").find(\".wpr-radio :checkbox\"),i=c('[href=\"'+t.attr(\"href\")+'\"].wpr-menuItem');e.on(\"change\",function(){e.is(\":checked\")?(i.css(\"display\",\"block\"),t.css(\"display\",\"inline-block\")):(i.css(\"display\",\"none\"),t.css(\"display\",\"none\"))}).trigger(\"change\")});var e=c(\".wpr-Popin-Analytics\"),i=c(\".wpr-Popin-overlay\"),s=c(\".wpr-Popin-Analytics-close\"),n=c(\".wpr-Popin-Analytics .wpr-button\");function r(){(new TimelineLite).fromTo(e,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},\"=-.5\").set(e,{display:\"none\"}).set(i,{display:\"none\"})}c(\".wpr-js-popin\").on(\"click\",function(t){return t.preventDefault(),(new TimelineLite).set(e,{display:\"block\"}).set(i,{display:\"block\"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(e,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},\"=-.5\"),!1}),s.on(\"click\",function(t){return t.preventDefault(),r(),!1}),n.on(\"click\",function(t){return t.preventDefault(),r(),c(\"#analytics_enabled\").prop(\"checked\",!0),c(\"#analytics_enabled\").trigger(\"change\"),!1});var a=c(\".wpr-Popin-Upgrade\"),n=c(\".wpr-Popin-Upgrade-close\");c(\".wpr-popin-upgrade-toggle\").on(\"click\",function(t){return t.preventDefault(),(new TimelineLite).set(a,{display:\"block\"}).set(i,{display:\"block\"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(a,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},\"=-.5\"),!1}),n.on(\"click\",function(){return(new TimelineLite).fromTo(a,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},\"=-.5\").set(a,{display:\"none\"}).set(i,{display:\"none\"}),!1});var o=c(\".wpr-Sidebar\");c(\".wpr-js-tips\").on(\"change\",function(){c(this).is(\":checked\")?(o.css(\"display\",\"block\"),localStorage.setItem(\"wpr-show-sidebar\",\"on\")):(o.css(\"display\",\"none\"),localStorage.setItem(\"wpr-show-sidebar\",\"off\"))}),document.getElementById(\"LKgOcCRpwmAj\")?c(\".wpr-adblock\").css(\"display\",\"none\"):c(\".wpr-adblock\").css(\"display\",\"block\");var l=c(\".wpr-adblock\");c(\".wpr-adblock-close\").on(\"click\",function(){return(new TimelineLite).to(l,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(l,.4,{height:0,marginTop:0,ease:Power4.easeOut},\"=-.4\").set(l,{display:\"none\"}),!1})})},{}],7:[function(t,e,i){\"use strict\";function s(t){var e,i=this;this.$body=document.querySelector(\".wpr-body\"),this.$menuItems=document.querySelectorAll(\".wpr-menuItem\"),this.$submitButton=document.querySelector(\".wpr-Content > form > #wpr-options-submit\"),this.$pages=document.querySelectorAll(\".wpr-Page\"),this.$sidebar=document.querySelector(\".wpr-Sidebar\"),this.$content=document.querySelector(\".wpr-Content\"),this.$tips=document.querySelector(\".wpr-Content-tips\"),this.$links=document.querySelectorAll(\".wpr-body a\"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem(\"wpr-hash\"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add(\"isActive\"),localStorage.setItem(\"wpr-hash\",\"dashboard\"),window.location.hash=\"#dashboard\"));for(var s=0;s{a.querySelectorAll(\".wpr-rocketcdn-open\").forEach(t=>{t.addEventListener(\"click\",t=>{t.preventDefault()})}),function(){var t=\"\";t+=\"action=rocketcdn_process_status\";const e=r(t+=\"&nonce=\"+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show(\"wpr-rocketcdn-modal\")}}(),MicroModal.init({disableScroll:!0})}),s.addEventListener(\"load\",()=>{let t=a.querySelector(\"#wpr-rocketcdn-open-cta\"),e=a.querySelector(\"#wpr-rocketcdn-close-cta\"),i=a.querySelector(\"#wpr-rocketcdn-cta-small\"),s=a.querySelector(\"#wpr-rocketcdn-cta\");function n(t){var e=\"\";return e+=\"action=toggle_rocketcdn_cta\",e+=\"&status=\"+t,e+=\"&nonce=\"+rocket_ajax_data.nonce}null!==t&&null!==i&&null!==s&&t.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.add(\"wpr-isHidden\"),s.classList.remove(\"wpr-isHidden\"),r(n(\"big\"))}),null!==e&&null!==i&&null!==s&&e.addEventListener(\"click\",t=>{t.preventDefault(),i.classList.remove(\"wpr-isHidden\"),s.classList.add(\"wpr-isHidden\"),r(n(\"small\"))})}),s.onmessage=t=>{var e,i,s=rocket_ajax_data.origin_url;t.origin===s&&((e=t.data).hasOwnProperty(\"cdnFrameHeight\")&&(a.getElementById(\"rocketcdn-iframe\").style.height=e.cdnFrameHeight+\"px\"),(i=t.data).hasOwnProperty(\"cdnFrameClose\")&&(MicroModal.close(\"wpr-rocketcdn-modal\"),i.hasOwnProperty(\"cdn_page_message\")&&-1!==[\"iframe-payment-success\",\"iframe-unsubscribe-success\"].indexOf(i.cdn_page_message)&&a.location.reload()),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_token\")){var s=\"\";s+=\"action=save_rocketcdn_token\",s+=\"&value=\"+t.rocketcdn_token;const n=r(s+=\"&nonce=\"+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}else{s={process:\"subscribe\",message:\"token_not_received\"};i.postMessage({success:!1,data:s,rocketcdn:!0},e)}}(t.data,s),(e=t.data).hasOwnProperty(\"rocketcdn_process\")&&(i=\"\",i+=\"action=rocketcdn_process_set\",i+=\"&status=\"+e.rocketcdn_process,r(i+=\"&nonce=\"+rocket_ajax_data.nonce)),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_url\")){var s=\"\";s+=\"action=rocketcdn_enable\",s+=\"&cdn_url=\"+t.rocketcdn_url;const n=r(s+=\"&nonce=\"+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),function(t,e){let i=a.querySelector(\"#rocketcdn-iframe\").contentWindow;if(t.hasOwnProperty(\"rocketcdn_disable\")){t=\"\";t+=\"action=rocketcdn_disable\";const s=r(t+=\"&nonce=\"+rocket_ajax_data.nonce);s.onreadystatechange=()=>{var t;s.readyState===XMLHttpRequest.DONE&&200===s.status&&(t=JSON.parse(s.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),(s=t.data).hasOwnProperty(\"rocketcdn_validate_token\")&&s.hasOwnProperty(\"rocketcdn_validate_cname\")&&(t=\"\",t+=\"action=rocketcdn_validate_token_cname\",t+=\"&cdn_url=\"+s.rocketcdn_validate_cname,t+=\"&cdn_token=\"+s.rocketcdn_validate_token,r(t+=\"&nonce=\"+rocket_ajax_data.nonce)))}},{}],9:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"TimelineLite\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(h,u,p){function d(t){u.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,s=this.vars;for(i in s)e=s[i],g(e)&&-1!==e.join(\"\").indexOf(\"{self}\")&&(s[i]=this._swapSelfInParams(e));g(s.tweens)&&this.add(s.tweens,0,s.align,s.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function n(t,e,i,s){t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||w)}var f=1e-10,m=p._internals.isSelector,g=p._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=d.prototype=new u;return d.version=\"1.12.1\",t.constructor=d,t.kill()._gc=!1,t.to=function(t,e,i,s){var n=i.repeat&&a.TweenMax||p;return e?this.add(new n(t,e,i),s):this.set(t,i,s)},t.from=function(t,e,i,s){return this.add((i.repeat&&a.TweenMax||p).from(t,e,i),s)},t.fromTo=function(t,e,i,s,n){var r=s.repeat&&a.TweenMax||p;return e?this.add(r.fromTo(t,e,i,s),n):this.set(t,s,n)},t.staggerTo=function(t,e,i,s,n,r,a,o){var l,c=new d({onComplete:r,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for(\"string\"==typeof t&&(t=p.selector(t)||t),m(t)&&(t=v.call(t,0)),s=s||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*s);return this.add(c,n)},t.staggerFrom=function(t,e,i,s,n,r,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,n,r,a,o)},t.staggerFromTo=function(t,e,i,s,n,r,a,o,l){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,n,r,a,o,l)},t.call=function(t,e,i,s){return this.add(p.delayedCall(0,t,e,i),s)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new p(t,0,e),i)},d.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,s,n=new d(t),t=n._timeline;for(null==e&&(e=!0),t._remove(n,!0),n._startTime=0,n._rawPrevTime=n._time=n._totalTime=t._time,i=t._first;i;)s=i._next,e&&i instanceof p&&i.target===i.vars.onComplete||n.add(i,i._startTime-i._delay),i=s;return t.add(n,0),n},t.add=function(t,e,i,s){var n,r,a,o,l,c;if(\"number\"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof h)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||\"normal\",s=s||0,n=e,r=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof h)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return\"string\"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){u.prototype._remove.call(this,t,e);e=this._last;return e?this._time>e._startTime+e._totalDuration/e._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},t.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,s){return this.call(n,[\"{self}\",e,i,s],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,s){var n;if(s instanceof h&&s.timeline===this)this.remove(s);else if(s&&(s instanceof Array||s.push&&g(s)))for(n=s.length;-1<--n;)s[n]instanceof h&&s[n].timeline===this&&this.remove(s[n]);if(\"string\"==typeof e)return this._parseTimeOrLabel(e,i&&\"number\"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,\"string\"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(n=t.indexOf(\"=\")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(n-1)+\"1\",10)*Number(t.substr(n+1)),t=1f&&(a=\"onReverseComplete\"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(s=this._first;s&&(r=s._next,!this._paused||p);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;else for(s=this._last;s&&(r=s._prev,!this._paused||p);)(s._active||c>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w)),a&&(this._gc||h!==this._startTime&&u===this._timeScale||!(0===this._time||l>=this.totalDuration())||(n&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[a]&&this.vars[a].apply(this.vars[a+\"Scope\"]||this,this.vars[a+\"Params\"]||w)))}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof d&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,s){s=s||-9999999999;for(var n=[],r=this._first,a=0;r;)s>r._startTime||(r instanceof p?!1!==e&&(n[a++]=r):(!1!==i&&(n[a++]=r),!1!==t&&(a=(n=n.concat(r.getChildren(!0,e,i))).length))),r=r._next;return n},t.getTweensOf=function(t,e){var i,s,n=this._gc,r=[],a=0;for(n&&this._enabled(!0,!0),s=(i=p.getTweensOf(t)).length;-1<--s;)(i[s].timeline===this||e&&this._contains(i[s]))&&(r[a++]=i[s]);return n&&this._enabled(!1,!0),r},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var s,n=this._first,r=this._labels;n;)n._startTime>=i&&(n._startTime+=t),n=n._next;if(e)for(s in r)r[s]>=i&&(r[s]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,n=!1;-1<--s;)i[s]._kill(t,e)&&(n=!0);return n},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return u.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,s=0,n=this._last,r=999999999999;n;)e=n._prev,n._dirty&&n.totalDuration(),n._startTime>r&&this._sortChildren&&!n._paused?this.add(n,n._startTime-n._delay):r=n._startTime,n._startTime<0&&!n._paused&&(s-=n._startTime,this._timeline.smoothChildTiming&&(this._startTime+=n._startTime/this._timeScale),this.shiftChildren(-n._startTime,!1,-9999999999),r=0),s<(i=n._startTime+n._totalDuration/n._timeScale)&&(s=i),n=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===h._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},d},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],10:[function(t,Q,e){\"use strict\";!function(p){var e,i,d=p.GreenSockGlobals||p;if(!d.TweenLite){var _,f=function(t){for(var e=t.split(\".\"),i=d,s=0;e.length>s;s++)i[e[s]]=i=i[e[s]]||{};return i},u=f(\"com.greensock\"),m=1e-10,o=[].slice,g=function(){},h=(e=Object.prototype.toString,i=e.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&e.call(t)===i)}),w={},v=function(o,l,c,h){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var u=[];this.check=function(t){for(var e,i,s,n,r=l.length,a=r;-1<--r;)(e=w[l[r]]||new v(l[r],[])).gsClass?(u[r]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(s=(i=(\"com.greensock.\"+o).split(\".\")).pop(),n=f(i.join(\".\"))[s]=this.gsClass=c.apply(c,u),h&&(d[s]=n,\"function\"==typeof define&&define.amd?define((p.GreenSockAMDPath?p.GreenSockAMDPath+\"/\":\"\")+o.split(\".\").join(\"/\"),[],function(){return n}):void 0!==Q&&Q.exports&&(Q.exports=n)),r=0;this.sc.length>r;r++)this.sc[r].check()},this.check(!0)},s=p._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=u._class=function(t,e,i){return e=e||function(){},s(t,[],function(){return e},i),e};s.globals=d;var t,n=[0,0,1,1],x=[],b=y(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?n.concat(e):n},!0),T=b.map={},r=b.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),c=l.length,h=(i||\"easeIn,easeOut,easeInOut\").split(\",\");-1<--c;)for(r=l[c],n=s?y(\"easing.\"+r,null,!0):u.easing[r]||{},a=h.length;-1<--a;)o=h[a],T[r+\".\"+o]=T[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((t=b.prototype)._calcEnd=!1,t.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},l=(a=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;-1<--l;)t=a[l]+\",Power\"+l,r(new b(null,null,1,l),t,\"easeOut\",!0),r(new b(null,null,2,l),t,\"easeIn\"+(0===l?\",easeNone\":\"\")),r(new b(null,null,3,l),t,\"easeInOut\");T.linear=u.easing.Linear.easeIn,T.swing=u.easing.Quad.easeInOut;var k=y(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(t=k.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(r=o[a]).c===e&&r.s===i?o.splice(a,1):0===l&&n>r.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:s,pr:n}),this!==A||_||A.wake()},t.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;-1<--i;)if(s[i].c===e)return void s.splice(i,1)},t.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for(e=n.length,i=this._eventTarget;-1<--e;)(s=n[e]).up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i)};for(var a,P=p.requestAnimationFrame,S=p.cancelAnimationFrame,O=Date.now||function(){return(new Date).getTime()},C=O(),l=(a=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;-1<--l&&!P;)P=p[a[l]+\"RequestAnimationFrame\"],S=p[a[l]+\"CancelAnimationFrame\"]||p[a[l]+\"CancelRequestAnimationFrame\"];y(\"Ticker\",function(t,e){var s,n,r,a,o,l=this,c=O(),i=!1!==e&&P,h=500,u=33,p=function(t){var e,i=O()-C;h=i&&i+this.totalDuration()/this._timeScale>t},t._enabled=function(t,e){return _||A.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},t._kill=function(){return this._enabled(!1,!1)},t.kill=function(t,e){return this._kill(t,e),this},t._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},t._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)\"{self}\"===t[e]&&(i[e]=this);return i},t.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=h(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},t.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},t.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},t.totalTime=function(t,e,i){if(_||A.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(ss;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},t._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline&&this._uncache(!0)),this},t.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s},t.rawTime=function(){return _||A.wake(),this._totalTime};var I=y(\"TweenLite\",function(t,e,i){if(c.call(this,e,i),this.render=I.prototype.render,null==t)throw\"Cannot tween a null target.\";this.target=t=\"string\"==typeof t&&I.selector(t)||t;var s,n,r,i=t.jquery||t.length&&t!==p&&t[0]&&(t[0]===p||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?F[I.defaultOverwrite]:\"number\"==typeof a?a>>0:F[a],(i||t instanceof Array||t.push&&h(t))&&\"number\"!=typeof t[0])for(this._targets=r=o.call(t,0),this._propLookup=[],this._siblings=[],s=0;r.length>s;s++)(n=r[s])?\"string\"!=typeof n?n.length&&n!==p&&n[0]&&(n[0]===p||n[0].nodeType&&n[0].style&&!n.nodeType)?(r.splice(s--,1),this._targets=r=r.concat(o.call(n,0))):(this._siblings[s]=H(n,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((p||!a._initted)&&c-a._startTime<=2e-10||(h[u++]=a)));for(d=u;-1<--d;)a=h[d],2===s&&a._kill(i,t)&&(r=!0),(2!==s||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(r=!0);return r},W=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return e<(r/=n)?r-e:i&&r===e||!t._initted&&r-e<2*m?m:(r+=t.totalDuration()/t._timeScale/n)>e+m?0:r-e-m};t._init=function(){var t,e,i,s,n,r=this.vars,a=this._overwrittenProps,o=this._duration,l=!!r.immediateRender,c=r.ease;if(r.startAt){for(s in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),n={},r.startAt)n[s]=r.startAt[s];if(n.overwrite=!1,n.immediateRender=!0,n.lazy=l&&!1!==r.lazy,n.startAt=n.delay=null,this._startAt=I.to(this.target,0,n),l)if(0o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===V.API&&(E[(new t[e])._propName]=t[e]);return!0},s.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_roundProps\",initAll:\"_onInitAllProps\"},a=y(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){V.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new V(i);for(e in(o.constructor=a).API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,V.activate([a]),a},a=p._gsQueue){for(l=0;a.length>l;l++)a[l]();for(t in w)w[t].func||p.console.log(\"GSAP encountered missing dependency: com.greensock.\"+t)}_=!1}}(window)},{}],11:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"easing.Back\",[\"easing.Ease\"],function(m){function t(t,e){var i=c(\"easing.\"+t,function(){},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,i}function e(t,e,i,s){return s=c(\"easing.\"+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0),h(s,t),s}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c(\"easing.\"+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var s,n,r=window.GreenSockGlobals||window,a=r.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,h=m.register||function(){},u=e(\"Back\",i(\"BackOut\",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i(\"BackIn\",function(t){return t*t*((this._p1+1)*t-this._p1)}),i(\"BackInOut\",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c(\"easing.SlowMo\",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),a.config=p.config=function(t,e,i){return new p(t,e,i)},(a=(s=c(\"easing.SteppedEase\",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=s,a.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},a.config=s.config=function(t){return new s(t)},(a=(n=c(\"easing.RoughEase\",function(t){for(var e,i,s,n,r,a,o=(t=t||{}).taper||\"none\",l=[],c=0,h=0|(t.points||20),u=h,p=!1!==t.randomize,d=!0===t.clamp,_=t.template instanceof m?t.template:null,f=\"number\"==typeof t.strength?.4*t.strength:.4;-1<--u;)e=p?Math.random():1/h*u,i=_?_.getRatio(e):e,s=\"none\"===o?f:\"out\"===o?(n=1-e)*n*f:\"in\"===o?e*e*f:.5*(n=e<.5?2*e:2*(1-e))*n*f,p?i+=Math.random()*s-.5*s:u%2?i+=.5*s:i-=.5*s,d&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},a.config=function(t){return new n(t)},n.ease=new n,e(\"Bounce\",t(\"BounceOut\",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t(\"BounceIn\",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t(\"BounceInOut\",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e(\"Circ\",t(\"CircOut\",function(t){return Math.sqrt(1- --t*t)}),t(\"CircIn\",function(t){return-(Math.sqrt(1-t*t)-1)}),t(\"CircInOut\",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e(\"Elastic\",(a=function(t,e,i){var s=c(\"easing.\"+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=s.prototype=new m;return t.constructor=s,t.getRatio=e,t.config=function(t,e){return new s(t,e)},s})(\"ElasticOut\",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),a(\"ElasticIn\",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),a(\"ElasticInOut\",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e(\"Expo\",t(\"ExpoOut\",function(t){return 1-Math.pow(2,-10*t)}),t(\"ExpoIn\",function(t){return Math.pow(2,10*(t-1))-.001}),t(\"ExpoInOut\",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e(\"Sine\",t(\"SineOut\",function(t){return Math.sin(t*l)}),t(\"SineIn\",function(t){return 1-Math.cos(t*l)}),t(\"SineInOut\",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c(\"easing.EaseLookup\",{find:function(t){return m.map[t]}},!0),h(r.SlowMo,\"SlowMo\",\"ease,\"),h(n,\"RoughEase\",\"ease,\"),h(s,\"SteppedEase\",\"ease,\"),u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],12:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(r,p){function N(){r.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=N.prototype.setRatio}var d,x,b,u,_={},t=N.prototype=new r(\"css\");(t.constructor=N).version=\"1.12.1\",N.API=2,N.defaultTransformPerspective=0,N.defaultSkewType=\"compensated\",N.suffixMap={top:t=\"px\",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:\"\"};function n(t,e){return e.toUpperCase()}function a(t){return L.test(\"string\"==typeof t?t:(t.currentStyle||t.style).filter||\"\")?parseFloat(RegExp.$1)/100:1}function f(t){window.console&&console.log(t)}function T(t,e){var i,s,n=(e=e||Z).style;if(void 0!==n[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],s=5;-1<--s&&void 0===n[i[s]+t];);return 0<=s?(tt=\"-\"+(et=3===s?\"ms\":i[s]).toLowerCase()+\"-\",et+t):null}function m(t,e){var i,s={};if(e=e||it(t,null))if(i=e.length)for(;-1<--i;)s[e[i].replace(Y,n)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)\"string\"==typeof i&&void 0===s[i]&&(s[i.replace(Y,n)]=e[i]);return J||(s.opacity=a(t)),t=Pt(t,e,!1),s.rotation=t.rotation,s.skewX=t.skewX,s.scaleX=t.scaleX,s.scaleY=t.scaleY,s.x=t.x,s.y=t.y,Tt&&(s.z=t.z,s.rotationX=t.rotationX,s.rotationY=t.rotationY,s.scaleZ=t.scaleZ),s.filters&&delete s.filters,s}function g(t,e,i,s,n){var r,a,o,l={},c=t.style;for(a in i)\"cssText\"!==a&&\"length\"!==a&&isNaN(a)&&(e[a]!==(r=i[a])||n&&n[a])&&-1===a.indexOf(\"Origin\")&&(\"number\"==typeof r||\"string\"==typeof r)&&(l[a]=\"auto\"!==r||\"left\"!==a&&\"top\"!==a?\"\"!==r&&\"auto\"!==r&&\"none\"!==r||\"string\"!=typeof e[a]||\"\"===e[a].replace(D,\"\")?r:0:rt(t,a),void 0!==c[a]&&(o=new pt(c,a,c[a],o)));if(s)for(a in s)\"className\"!==a&&(l[a]=s[a]);return{difs:l,firstMPT:o}}function w(t,e){var i=(t=null==t||\"\"===t||\"auto\"===t||\"auto auto\"===t?\"0 0\":t).split(\" \"),s=-1!==t.indexOf(\"left\")?\"0%\":-1!==t.indexOf(\"right\")?\"100%\":i[0];return null==(t=-1!==t.indexOf(\"top\")?\"0%\":-1!==t.indexOf(\"bottom\")?\"100%\":i[1])?t=\"0\":\"center\"===t&&(t=\"50%\"),(\"center\"===s||isNaN(parseFloat(s))&&-1===(s+\"\").indexOf(\"=\"))&&(s=\"50%\"),e&&(e.oxp=-1!==s.indexOf(\"%\"),e.oyp=-1!==t.indexOf(\"%\"),e.oxr=\"=\"===s.charAt(1),e.oyr=\"=\"===t.charAt(1),e.ox=parseFloat(s.replace(D,\"\")),e.oy=parseFloat(t.replace(D,\"\"))),s+\" \"+t+(2>16,255&t>>8,255&t]:(\",\"===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),lt[t]||(\"#\"===t.charAt(0)?(4===t.length&&(t=\"#\"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(r=t.charAt(3))+r),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):(\"hsl\"===t.substr(0,3)?(t=t.match(A),s=Number(t[0])%360/360,n=Number(t[1])/100,e=2*(r=Number(t[2])/100)-(i=r<=.5?r*(1+n):r+n-r*n),3a\",!!(i=i.getElementsByTagName(\"a\")[0])&&/^0.55/.test(i.style.opacity)),tt=\"\",et=\"\",it=Q.defaultView?Q.defaultView.getComputedStyle:function(){},st=N.getStyle=function(t,e,i,s,n){var r;return J||\"opacity\"!==e?(!s&&t.style[e]?r=t.style[e]:(i=i||it(t))?r=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(z,\"-$1\").toLowerCase()):t.currentStyle&&(r=t.currentStyle[e]),null==n||r&&\"none\"!==r&&\"auto\"!==r&&\"auto auto\"!==r?r:n):a(t)},nt=s.convertToPixels=function(t,e,i,s,n){if(\"px\"===s||!s)return i;if(\"auto\"===s||!i)return 0;var r,a,o,l=$.test(e),c=t,h=Z.style,u=i<0;if(u&&(i=-i),\"%\"===s&&-1!==e.indexOf(\"border\"))r=i/100*(l?t.clientWidth:t.clientHeight);else{if(h.cssText=\"border:0 solid red;position:\"+st(t,\"position\")+\";line-height:0;\",\"%\"!==s&&c.appendChild)h[l?\"borderLeftWidth\":\"borderTopWidth\"]=i+s;else{if(a=(c=t.parentNode||Q.body)._gsCache,o=p.ticker.frame,a&&l&&a.time===o)return a.width*i/100;h[l?\"width\":\"height\"]=i+s}c.appendChild(Z),r=parseFloat(Z[l?\"offsetWidth\":\"offsetHeight\"]),c.removeChild(Z),l&&\"%\"===s&&!1!==N.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=r/i*100),0!==r||n||(r=nt(t,e,i,s,!0))}return u?-r:r},rt=s.calculateOffset=function(t,e,i){if(\"absolute\"!==st(t,\"position\",i))return 0;var s=\"left\"===e?\"Left\":\"Top\",i=st(t,\"margin\"+s,i);return t[\"offset\"+s]-(nt(t,e,parseFloat(i),i.replace(j,\"\"))||0)},at={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ot=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],lt={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ct=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#.+?\\\\b\";for(t in lt)ct+=\"|\"+t+\"\\\\b\";function ht(t,e,r,a){if(null==t)return function(t){return t};var o,l=e?(t.match(ct)||[\"\"])[0]:\"\",c=t.split(l).join(\"\").match(I)||[],h=t.substr(0,t.indexOf(c[0])),u=\")\"===t.charAt(t.length-1)?\")\":\"\",p=-1!==t.indexOf(\" \")?\" \":\",\",d=c.length,_=0s;s++)n[s]=o(n[s]);return n.join(\",\")}if(e=(t.match(ct)||[l])[0],s=(i=t.split(e).join(\"\").match(I)||[]).length,d>s--)for(;d>++s;)i[s]=r?i[0|(s-1)/2]:c[s];return h+i.join(p)+p+e+u+(-1!==t.indexOf(\"inset\")?\" inset\":\"\")}:function(t){var e,i,s;if(\"number\"==typeof t)t+=_;else if(a&&H.test(t)){for(i=t.replace(H,\"|\").split(\"|\"),s=0;i.length>s;s++)i[s]=o(i[s]);return i.join(\",\")}if(s=(e=t.match(I)||[]).length,d>s--)for(;d>++s;)e[s]=r?e[0|(s-1)/2]:c[s];return h+e.join(p)+u}:function(t){return t}}function ut(c){return c=c.split(\",\"),function(t,e,i,s,n,r,a){var o,l=(e+\"\").split(\" \");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return s.parse(t,a,n,r)}}var ct=RegExp(ct+\")\",\"gi\"),pt=(s._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,s,n,r=this.data,a=r.proxy,o=r.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6s;s++)n+=i[\"xn\"+s]+i[\"xs\"+(s+1)];i.e=n}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,s,n){this.t=t,this.p=e,this.v=i,this.r=n,s&&((s._prev=this)._next=s)}),dt=(s._parseToProxy=function(t,e,i,s,n,r){var a,o,l,c,h=s,u={},p={},d=i._transform,_=V;for(i._transform=null,V=e,s=n=i.parse(t,e,s,n),V=_,r&&(i._transform=d,h&&(h._prev=null,h._prev&&(h._prev._next=null)));s&&s!==h;){if(s.type<=1&&(p[o=s.p]=s.s+s.c,u[o]=s.s,r||(c=new pt(s,\"s\",o,c,s.r),s.c=0),1===s.type))for(a=s.l;0<--a;)p[o=s.p+\"_\"+(l=\"xn\"+a)]=s.data[l],u[o]=s[l],r||(c=new pt(s,l,o,c,s.rxp[l]));s=s._next}return{proxy:u,end:p,firstMPT:c,pt:n}},s.CSSPropTween=function(t,e,i,s,n,r,a,o,l,c,h){this.t=t,this.p=e,this.s=i,this.c=s,this.n=a||e,t instanceof dt||u.push(this.n),this.r=o,this.type=r||0,l&&(this.pr=l,d=!0),this.b=void 0===c?i:c,this.e=void 0===h?i+s:h,n&&((this._next=n)._prev=this)}),_t=N.parseComplex=function(t,e,i,s,n,r,a,o,l,c){a=new dt(t,e,0,0,a,c?2:1,null,!1,o,i=i||r||\"\",s),s+=\"\";var h,u,p,d,_,f,m,g,w,v,y,x=i.split(\", \").join(\",\").split(\" \"),b=s.split(\", \").join(\",\").split(\" \"),T=x.length,k=!1!==O;for(-1===s.indexOf(\",\")&&-1===i.indexOf(\",\")||(x=x.join(\" \").replace(H,\", \").split(\" \"),b=b.join(\" \").replace(H,\", \").split(\" \"),T=x.length),T!==b.length&&(T=(x=(r||\"\").split(\" \")).length),a.plugin=l,a.setRatio=c,h=0;hu;u++)v=f[u],w=d.indexOf(v,p),a.appendXtra(d.substr(p,w-p),Number(v),P(m[u],v),\"\",k&&\"px\"===d.substr(w+v.length,2),0===u),p=w+v.length;a[\"xs\"+a.l]+=d.substr(p)}else a[\"xs\"+a.l]+=a.l?\" \"+d:d;if(-1!==s.indexOf(\"=\")&&a.data){for(y=a.xs0+a.data.s,h=1;a.l>h;h++)y+=a[\"xs\"+h]+a.data[\"xn\"+h];a.e=y+a[\"xs\"+h]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ft=9;for((t=dt.prototype).l=t.pr=0;0<--ft;)t[\"xn\"+ft]=0,t[\"xs\"+ft]=\"\";t.xs0=\"\",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,s,n,r){var a=this,o=a.l;return a[\"xs\"+o]+=r&&o?\" \"+t:t||\"\",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a[\"xs\"+a.l]=s||\"\",0s;s++)e.prefix=0===s&&e.prefix,e.defaultValue=i[s]||r,new mt(n[s],e)};(t=mt.prototype).parseComplex=function(t,e,i,s,n,r){var a,o,l,c,h,u=this.keyword;if(this.multi&&(H.test(i)||H.test(e)?(o=e.replace(H,\"|\").split(\"|\"),l=i.replace(H,\"|\").split(\"|\")):u&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aI[r]&&I[r]>-j&&(I[r]=0);return i&&(t._gsTransform=I),I},St=s.set3DTransformRatio=function(t){var e,i,s,n,r,a,o,l,c,h,u,p,d,_,f,m,g,w,v,y,x,b,T=this.data,k=this.t.style,P=T.rotation*U,S=T.scaleX,O=T.scaleY,C=T.scaleZ,A=T.perspective;if(1!==t&&0!==t||\"auto\"!==T.force3D||T.rotationY||T.rotationX||1!==C||A||T.z){if(M&&(S<1e-4&&-1e-4y;y++)this.p.indexOf(\"border\")&&(f[y]=T(f[y])),-1!==(o=a=st(t,f[y],b,!1,\"0px\")).indexOf(\" \")&&(o=(a=o.split(\" \"))[0],a=a[1]),l=r=v[y],d=parseFloat(o),_=o.substr((d+\"\").length),(h=\"\"===(h=(u=\"=\"===l.charAt(1))?(c=parseInt(l.charAt(0)+\"1\",10),l=l.substr(2),c*=parseFloat(l),l.substr((c+\"\").length-(c<0?1:0))||\"\"):(c=parseFloat(l),l.substr((c+\"\").length)))?x[i]||_:h)!==_&&(p=nt(t,\"borderLeft\",d,_),d=nt(t,\"borderTop\",d,_),a=\"%\"===h?(o=p/g*100+\"%\",d/w*100+\"%\"):\"em\"===h?(o=p/(_=nt(t,\"borderLeft\",1,\"em\"))+\"em\",d/_+\"em\"):(o=p+\"px\",d+\"px\"),u&&(l=parseFloat(o)+c+h,r=parseFloat(a)+c+h)),n=_t(m,f[y],o+\" \"+a,l+\" \"+r,!1,\"0px\",n);return n},prefix:!0,formatter:ht(\"0px 0px 0px 0px\",!1,!0)}),gt(\"backgroundPosition\",{defaultValue:\"0 0\",parser:function(t,e,i,s,n,r){var a,o,l,c,h,u,p=\"background-position\",d=b||it(t,null),_=this.format((d?C?d.getPropertyValue(p+\"-x\")+\" \"+d.getPropertyValue(p+\"-y\"):d.getPropertyValue(p):t.currentStyle.backgroundPositionX+\" \"+t.currentStyle.backgroundPositionY)||\"0 0\"),e=this.format(e);if(-1!==_.indexOf(\"%\")!=(-1!==e.indexOf(\"%\"))&&((u=st(t,\"backgroundImage\").replace(F,\"\"))&&\"none\"!==u)){for(a=_.split(\" \"),o=e.split(\" \"),G.setAttribute(\"src\",u),l=2;-1<--l;)(c=-1!==(_=a[l]).indexOf(\"%\"))!=(-1!==o[l].indexOf(\"%\"))&&(h=0===l?t.offsetWidth-G.width:t.offsetHeight-G.height,a[l]=c?parseFloat(_)/100*h+\"px\":parseFloat(_)/h*100+\"%\");_=a.join(\" \")}return this.parseComplex(t.style,_,e,n,r)},formatter:w}),gt(\"backgroundSize\",{defaultValue:\"0 0\",formatter:w}),gt(\"perspective\",{defaultValue:\"0px\",prefix:!0}),gt(\"perspectiveOrigin\",{defaultValue:\"50% 50%\",prefix:!0}),gt(\"transformStyle\",{prefix:!0}),gt(\"backfaceVisibility\",{prefix:!0}),gt(\"userSelect\",{prefix:!0}),gt(\"margin\",{parser:ut(\"marginTop,marginRight,marginBottom,marginLeft\")}),gt(\"padding\",{parser:ut(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")}),gt(\"clip\",{defaultValue:\"rect(0px,0px,0px,0px)\",parser:function(t,e,i,s,n,r){var a,o;return e=C<9?(a=t.currentStyle,o=C<8?\" \":\",\",a=\"rect(\"+a.clipTop+o+a.clipRight+o+a.clipBottom+o+a.clipLeft+\")\",this.format(e).split(\",\").join(o)):(a=this.format(st(t,this.p,b,!1,this.dflt)),this.format(e)),this.parseComplex(t.style,a,e,n,r)}}),gt(\"textShadow\",{defaultValue:\"0px 0px 0px #999\",color:!0,multi:!0}),gt(\"autoRound,strictUnits\",{parser:function(t,e,i,s,n){return n}}),gt(\"border\",{defaultValue:\"0px solid #000\",parser:function(t,e,i,s,n,r){return this.parseComplex(t.style,this.format(st(t,\"borderTopWidth\",b,!1,\"0px\")+\" \"+st(t,\"borderTopStyle\",b,!1,\"solid\")+\" \"+st(t,\"borderTopColor\",b,!1,\"#000\")),this.format(e),n,r)},color:!0,formatter:function(t){var e=t.split(\" \");return e[0]+\" \"+(e[1]||\"solid\")+\" \"+(t.match(ct)||[\"#000\"])[0]}}),gt(\"borderWidth\",{parser:ut(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}),gt(\"float,cssFloat,styleFloat\",{parser:function(t,e,i,s,n){var r=t.style,t=\"cssFloat\"in r?\"cssFloat\":\"styleFloat\";return new dt(r,t,0,0,n,-1,i,!1,0,r[t],e)}});function Ct(t){var e,i=this.t,s=i.filter||st(this.data,\"filter\"),t=0|this.s+this.c*t;(e=100==t?-1===s.indexOf(\"atrix(\")&&-1===s.indexOf(\"radient(\")&&-1===s.indexOf(\"oader(\")?(i.removeAttribute(\"filter\"),!st(this.data,\"filter\")):(i.filter=s.replace(l,\"\"),!0):e)||(this.xn1&&(i.filter=s=s||\"alpha(opacity=\"+t+\")\"),-1===s.indexOf(\"pacity\")?0==t&&this.xn1||(i.filter=s+\" alpha(opacity=\"+t+\")\"):i.filter=s.replace(L,\"opacity=\"+t))}gt(\"opacity,alpha,autoAlpha\",{defaultValue:\"1\",parser:function(t,e,i,s,n,r){var a=parseFloat(st(t,\"opacity\",b,!1,\"1\")),o=t.style,l=\"autoAlpha\"===i;return\"string\"==typeof e&&\"=\"===e.charAt(1)&&(e=(\"-\"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+a),l&&1===a&&\"hidden\"===st(t,\"visibility\",b)&&0!==e&&(a=0),J?n=new dt(o,\"opacity\",a,e-a,n):((n=new dt(o,\"opacity\",100*a,100*(e-a),n)).xn1=l?1:0,o.zoom=1,n.type=2,n.b=\"alpha(opacity=\"+n.s+\")\",n.e=\"alpha(opacity=\"+(n.s+n.c)+\")\",n.data=t,n.plugin=r,n.setRatio=Ct),l&&((n=new dt(o,\"visibility\",0,0,n,-1,null,!1,0,0!==a?\"inherit\":\"hidden\",0===e?\"hidden\":\"inherit\")).xs0=\"inherit\",s._overwriteProps.push(n.n),s._overwriteProps.push(i)),n}});function At(t,e){e&&(t.removeProperty?(\"ms\"===e.substr(0,2)&&(e=\"M\"+e.substr(1)),t.removeProperty(e.replace(z,\"-$1\").toLowerCase())):t.removeAttribute(e))}function Mt(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute(\"class\",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:At(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute(\"class\")!==this.e&&this.t.setAttribute(\"class\",this.e)}gt(\"className\",{parser:function(t,e,i,s,n,r,a){var o,l,c,h=t.getAttribute(\"class\")||\"\",u=t.style.cssText;if((n=s._classNamePT=new dt(t,i,0,0,n,2)).setRatio=Mt,n.pr=-11,d=!0,n.b=h,o=m(t,b),i=t._gsClassPT){for(l={},c=i.data;c;)l[c.p]=1,c=c._next;i.setRatio(1)}return(t._gsClassPT=n).e=\"=\"!==e.charAt(1)?e:h.replace(RegExp(\"\\\\s*\\\\b\"+e.substr(2)+\"\\\\b\"),\"\")+(\"+\"===e.charAt(0)?\" \"+e.substr(2):\"\"),s._tween._duration&&(t.setAttribute(\"class\",n.e),a=g(t,o,m(t),a,l),t.setAttribute(\"class\",h),n.data=a.firstMPT,t.style.cssText=u,n=n.xfirst=s.parse(t,a.difs,n,r)),n}});function Rt(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&\"isFromStart\"!==this.data.data){var e,i,s,n,r=this.t.style,a=_.transform.parse;if(\"all\"===this.e)n=!(r.cssText=\"\");else for(s=(e=this.e.split(\",\")).length;-1<--s;)i=e[s],_[i]&&(_[i].parse===a?n=!0:i=\"transformOrigin\"===i?bt:_[i].p),At(r,i);n&&(At(r,yt),this.t._gsTransform&&delete this.t._gsTransform)}}for(gt(\"clearProps\",{parser:function(t,e,i,s,n){return(n=new dt(t,i,0,0,n,2)).setRatio=Rt,n.e=e,n.pr=-10,n.data=s._tween,d=!0,n}}),t=\"bezier,throwProps,physicsProps,physics2D\".split(\",\"),ft=t.length;ft--;)!function(t){var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+\"Plugin\",gt(t,{parser:function(t,e,i,s,n,r,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,s,n,r,a)):(f(\"Error: \"+l+\" js file not loaded.\"),n)}}))}(t[ft]);(t=N.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,O=e.autoRound,d=!1,x=e.suffixMap||N.suffixMap,b=it(t,\"\"),u=this._overwriteProps;var s,n,r,a,o,l,i=t.style;if(c&&\"\"===i.zIndex&&(\"auto\"!==(l=st(t,\"zIndex\",b))&&\"\"!==l||this._addLazySet(i,\"zIndex\",0)),\"string\"==typeof e&&(r=i.cssText,l=m(t,b),i.cssText=r+\";\"+e,l=g(t,l,m(t)).difs,!J&&X.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=r),this._firstPT=s=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,yt?h&&(c=!0,\"\"===i.zIndex&&(\"auto\"!==(e=st(t,\"zIndex\",b))&&\"\"!==e||this._addLazySet(i,\"zIndex\",0)),k&&this._addLazySet(i,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(l?\"visible\":\"hidden\"))):i.zoom=1,n=s;n&&n._next;)n=n._next;i=new dt(t,\"transform\",0,0,null,2),this._linkCSSP(i,null,n),i.setRatio=l&&Tt?St:yt?Ot:wt,i.data=this._transform||Pt(t,b,!0),u.pop()}if(d){for(;s;){for(o=s._next,n=r;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:a)?s._prev._next=s:r=s,(s._next=n)?n._prev=s:a=s,s=o}this._firstPT=r}return!0},t.parse=function(t,e,i,s){var n,r,a,o,l,c,h,u,p=t.style;for(n in e)l=e[n],u=_[n],u?i=u.parse(t,l,n,this,i,s,e):(o=st(t,n,b)+\"\",h=\"string\"==typeof l,\"color\"===n||\"fill\"===n||\"stroke\"===n||-1!==n.indexOf(\"Color\")||h&&E.test(l)?(h||(l=S(l),l=(3s;s++)i+=n[\"xn\"+s]+n[\"xs\"+(s+1)];n.t[n.p]=i}else-1===n.type?n.t[n.p]=n.xs0:n.setRatio&&n.setRatio(t);else n.t[n.p]=e+n.xs0;n=n._next}else for(;n;)2!==n.type?n.t[n.p]=n.b:n.setRatio(t),n=n._next;else for(;n;)2!==n.type?n.t[n.p]=n.e:n.setRatio(t),n=n._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||Pt(this._target,b,!0)};function It(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}t._addLazySet=function(t,e,i){e=this._firstPT=new dt(t,e,0,0,this._firstPT,2);e.e=i,e.setRatio=It,e.data=this},t._linkCSSP=function(t,e,i,s){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,s=!0),i?i._next=t:s||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,s,n=t;if(t.autoAlpha||t.alpha){for(i in n={},t)n[i]=t[i];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return t.className&&(e=this._classNamePT)&&((s=e.xfirst)&&s._prev?this._linkCSSP(s._prev,e._next,s._prev._prev):s===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,s._prev),this._classNamePT=null),r.prototype._kill.call(this,n)};function Dt(t,e,i){var s,n,r,a;if(t.slice)for(n=t.length;-1<--n;)Dt(t[n],e,i);else for(n=(s=t.childNodes).length;-1<--n;)a=(r=s[n]).type,r.style&&(e.push(m(r)),i&&i.push(r)),1!==a&&9!==a&&11!==a||!r.childNodes.length||Dt(r,e,i)}return N.cascadeTo=function(t,e,i){var s,n,r,a=p.to(t,e,i),o=[a],l=[],c=[],h=[],u=p._internals.reservedProps;for(t=a._targets||a.target,Dt(t,l,h),a.render(e,!0),Dt(t,c),a.render(0,!0),a._enabled(!0),s=h.length;-1<--s;)if((n=g(h[s],l[s],c[s])).firstMPT){for(r in n=n.difs,i)u[r]&&(n[r]=i[r]);o.push(p.to(h[s],e,n))}return o},r.activate([N]),N},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(t,e,i){\"use strict\";(window._gsQueue||(window._gsQueue=[])).push(function(){function n(t,e){var i=\"x\"===e?\"Width\":\"Height\",s=\"scroll\"+i,n=\"client\"+i,e=document.body;return t===a||t===r||t===e?Math.max(r[s],e[s])-(a[\"inner\"+i]||Math.max(r[n],e[n])):t[s]-t[\"offset\"+i]}var r=document.documentElement,a=window,t=window._gsDefine.plugin({propName:\"scrollTo\",API:2,version:\"1.7.3\",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e=\"object\"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,\"x\",this.x,\"max\"===e.x?n(t,\"x\"):e.x,\"scrollTo_x\",!0),this._overwriteProps.push(\"scrollTo_x\")):this.skipX=!0,null!=e.y?(this._addTween(this,\"y\",this.y,\"max\"===e.y?n(t,\"y\"):e.y,\"scrollTo_y\",!0),this._overwriteProps.push(\"scrollTo_y\")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var e=this._wdw||!this.skipX?this.getX():this.xPrev,i=this._wdw||!this.skipY?this.getY():this.yPrev,s=i-this.yPrev,t=e-this.xPrev;this._autoKill&&(!this.skipX&&(7e&&(this.skipX=!0),!this.skipY&&(7i&&(this.skipY=!0),this.skipX&&this.skipY&&this._tween.kill()),this._wdw?a.scrollTo(this.skipX?e:this.x,this.skipY?i:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=n,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=r.scrollLeft?r:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=r.scrollTop?r:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[2]);"],"file":"wpr-admin.js"} \ No newline at end of file diff --git a/assets/js/wpr-admin.min.js b/assets/js/wpr-admin.min.js index d409ea5d8b..c6e31bb4f5 100644 --- a/assets/js/wpr-admin.min.js +++ b/assets/js/wpr-admin.min.js @@ -1,2 +1,2 @@ -!function s(n,r,a){function o(e,t){if(!r[e]){if(!n[e]){var i="function"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(i=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",i}i=r[e]={exports:{}},n[e][0].call(i.exports,function(t){return o(n[e][1][t]||t)},i,i.exports,s,n,r,a)}return r[e].exports}for(var l="function"==typeof require&&require,t=0;t{i.append(""+t+": "),i.append(e[t].message),i.append("
")}):i.append('
'+e.message+"
")}})})})},{}],2:[function(t,e,i){"use strict";t("../lib/greensock/TweenLite.min.js"),t("../lib/greensock/TimelineLite.min.js"),t("../lib/greensock/easing/EasePack.min.js"),t("../lib/greensock/plugins/CSSPlugin.min.js"),t("../lib/greensock/plugins/ScrollToPlugin.min.js"),t("../global/pageManager.js"),t("../global/main.js"),t("../global/fields.js"),t("../global/beacon.js"),t("../global/ajax.js"),t("../global/rocketcdn.js"),t("../global/countdown.js")},{"../global/ajax.js":1,"../global/beacon.js":3,"../global/countdown.js":4,"../global/fields.js":5,"../global/main.js":6,"../global/pageManager.js":7,"../global/rocketcdn.js":8,"../lib/greensock/TimelineLite.min.js":9,"../lib/greensock/TweenLite.min.js":10,"../lib/greensock/easing/EasePack.min.js":11,"../lib/greensock/plugins/CSSPlugin.min.js":12,"../lib/greensock/plugins/ScrollToPlugin.min.js":13}],3:[function(t,e,i){"use strict";var s=jQuery;s(document).ready(function(){"Beacon"in window&&s(".wpr-infoAction--help").on("click",function(t){var e=s(this).data("beacon-id");return 0!==(e=(e=e).split(",")).length&&(1{o(t).attr("checked",i?null:"checked")});else{const r=o(e).closest(".wpr-list").find(".wpr-main-checkbox");var n=o.map(s,t=>{if(void 0!==o(t).attr("checked"))return t});r.attr("checked",n.length===s.length?"checked":null)}}),0{let i=o(e).parents(".wpr-list");var s=i.find(".wpr-list-body input[type=checkbox]:not(:checked)").length;o(e).attr("checked",s<=0?"checked":null)})})},{}],6:[function(t,e,i){"use strict";var c=jQuery;c(document).ready(function(){var t=c(".wpr-notice");c("#wpr-congratulations-notice").on("click",function(){return(new TimelineLite).to(t,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(t,.6,{height:0,marginTop:0,ease:Power4.easeOut},"=-.4").set(t,{display:"none"}),!1}),c(".rocket-analytics-data-container").hide(),c(".rocket-preview-analytics-data").on("click",function(t){t.preventDefault(),c(this).parent().next(".rocket-analytics-data-container").toggle()}),c(".wpr-toggle-button").each(function(){var t=c(this),e=t.closest(".wpr-fieldsContainer-fieldset").find(".wpr-radio :checkbox"),i=c('[href="'+t.attr("href")+'"].wpr-menuItem');e.on("change",function(){e.is(":checked")?(i.css("display","block"),t.css("display","inline-block")):(i.css("display","none"),t.css("display","none"))}).trigger("change")});var e=c(".wpr-Popin-Analytics"),i=c(".wpr-Popin-overlay"),s=c(".wpr-Popin-Analytics-close"),n=c(".wpr-Popin-Analytics .wpr-button");function r(){(new TimelineLite).fromTo(e,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},"=-.5").set(e,{display:"none"}).set(i,{display:"none"})}c(".wpr-js-popin").on("click",function(t){return t.preventDefault(),(new TimelineLite).set(e,{display:"block"}).set(i,{display:"block"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(e,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},"=-.5"),!1}),s.on("click",function(t){return t.preventDefault(),r(),!1}),n.on("click",function(t){return t.preventDefault(),r(),c("#analytics_enabled").prop("checked",!0),c("#analytics_enabled").trigger("change"),!1});var a=c(".wpr-Popin-Upgrade"),n=c(".wpr-Popin-Upgrade-close");c(".wpr-popin-upgrade-toggle").on("click",function(t){return t.preventDefault(),(new TimelineLite).set(a,{display:"block"}).set(i,{display:"block"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(a,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},"=-.5"),!1}),n.on("click",function(){return(new TimelineLite).fromTo(a,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},"=-.5").set(a,{display:"none"}).set(i,{display:"none"}),!1});var o=c(".wpr-Sidebar");c(".wpr-js-tips").on("change",function(){c(this).is(":checked")?(o.css("display","block"),localStorage.setItem("wpr-show-sidebar","on")):(o.css("display","none"),localStorage.setItem("wpr-show-sidebar","off"))}),document.getElementById("LKgOcCRpwmAj")?c(".wpr-adblock").css("display","none"):c(".wpr-adblock").css("display","block");var l=c(".wpr-adblock");c(".wpr-adblock-close").on("click",function(){return(new TimelineLite).to(l,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(l,.4,{height:0,marginTop:0,ease:Power4.easeOut},"=-.4").set(l,{display:"none"}),!1})})},{}],7:[function(t,e,i){"use strict";function s(t){var e,i=this;this.$body=document.querySelector(".wpr-body"),this.$menuItems=document.querySelectorAll(".wpr-menuItem"),this.$submitButton=document.querySelector(".wpr-Content > form > #wpr-options-submit"),this.$pages=document.querySelectorAll(".wpr-Page"),this.$sidebar=document.querySelector(".wpr-Sidebar"),this.$content=document.querySelector(".wpr-Content"),this.$tips=document.querySelector(".wpr-Content-tips"),this.$links=document.querySelectorAll(".wpr-body a"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem("wpr-hash"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add("isActive"),localStorage.setItem("wpr-hash","dashboard"),window.location.hash="#dashboard"));for(var s=0;s{a.querySelectorAll(".wpr-rocketcdn-open").forEach(t=>{t.addEventListener("click",t=>{t.preventDefault()})}),function(){var t="";t+="action=rocketcdn_process_status";const e=r(t+="&nonce="+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show("wpr-rocketcdn-modal")}}(),MicroModal.init({disableScroll:!0})}),s.addEventListener("load",()=>{let t=a.querySelector("#wpr-rocketcdn-open-cta"),e=a.querySelector("#wpr-rocketcdn-close-cta"),i=a.querySelector("#wpr-rocketcdn-cta-small"),s=a.querySelector("#wpr-rocketcdn-cta");function n(t){var e="";return e+="action=toggle_rocketcdn_cta",e+="&status="+t,e+="&nonce="+rocket_ajax_data.nonce}null!==t&&null!==i&&null!==s&&t.addEventListener("click",t=>{t.preventDefault(),i.classList.add("wpr-isHidden"),s.classList.remove("wpr-isHidden"),r(n("big"))}),null!==e&&null!==i&&null!==s&&e.addEventListener("click",t=>{t.preventDefault(),i.classList.remove("wpr-isHidden"),s.classList.add("wpr-isHidden"),r(n("small"))})}),s.onmessage=t=>{var e,i,s=rocket_ajax_data.origin_url;t.origin===s&&((e=t.data).hasOwnProperty("cdnFrameHeight")&&(a.getElementById("rocketcdn-iframe").style.height="".concat(e.cdnFrameHeight,"px")),(i=t.data).hasOwnProperty("cdnFrameClose")&&(MicroModal.close("wpr-rocketcdn-modal"),i.hasOwnProperty("cdn_page_message")&&-1!==["iframe-payment-success","iframe-unsubscribe-success"].indexOf(i.cdn_page_message)&&a.location.reload()),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_token")){var s="";s+="action=save_rocketcdn_token",s+="&value="+t.rocketcdn_token;const n=r(s+="&nonce="+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}else{s={process:"subscribe",message:"token_not_received"};i.postMessage({success:!1,data:s,rocketcdn:!0},e)}}(t.data,s),(e=t.data).hasOwnProperty("rocketcdn_process")&&(i="",i+="action=rocketcdn_process_set",i+="&status="+e.rocketcdn_process,r(i+="&nonce="+rocket_ajax_data.nonce)),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_url")){var s="";s+="action=rocketcdn_enable",s+="&cdn_url="+t.rocketcdn_url;const n=r(s+="&nonce="+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_disable")){t="";t+="action=rocketcdn_disable";const s=r(t+="&nonce="+rocket_ajax_data.nonce);s.onreadystatechange=()=>{var t;s.readyState===XMLHttpRequest.DONE&&200===s.status&&(t=JSON.parse(s.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),(s=t.data).hasOwnProperty("rocketcdn_validate_token")&&s.hasOwnProperty("rocketcdn_validate_cname")&&(t="",t+="action=rocketcdn_validate_token_cname",t+="&cdn_url="+s.rocketcdn_validate_cname,t+="&cdn_token="+s.rocketcdn_validate_token,r(t+="&nonce="+rocket_ajax_data.nonce)))}},{}],9:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(h,u,p){function d(t){u.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,s=this.vars;for(i in s)e=s[i],g(e)&&-1!==e.join("").indexOf("{self}")&&(s[i]=this._swapSelfInParams(e));g(s.tweens)&&this.add(s.tweens,0,s.align,s.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function n(t,e,i,s){t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||w)}var f=1e-10,m=p._internals.isSelector,g=p._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=d.prototype=new u;return d.version="1.12.1",t.constructor=d,t.kill()._gc=!1,t.to=function(t,e,i,s){var n=i.repeat&&a.TweenMax||p;return e?this.add(new n(t,e,i),s):this.set(t,i,s)},t.from=function(t,e,i,s){return this.add((i.repeat&&a.TweenMax||p).from(t,e,i),s)},t.fromTo=function(t,e,i,s,n){var r=s.repeat&&a.TweenMax||p;return e?this.add(r.fromTo(t,e,i,s),n):this.set(t,s,n)},t.staggerTo=function(t,e,i,s,n,r,a,o){var l,c=new d({onComplete:r,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=p.selector(t)||t),m(t)&&(t=v.call(t,0)),s=s||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*s);return this.add(c,n)},t.staggerFrom=function(t,e,i,s,n,r,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,n,r,a,o)},t.staggerFromTo=function(t,e,i,s,n,r,a,o,l){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,n,r,a,o,l)},t.call=function(t,e,i,s){return this.add(p.delayedCall(0,t,e,i),s)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new p(t,0,e),i)},d.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,s,n=new d(t),t=n._timeline;for(null==e&&(e=!0),t._remove(n,!0),n._startTime=0,n._rawPrevTime=n._time=n._totalTime=t._time,i=t._first;i;)s=i._next,e&&i instanceof p&&i.target===i.vars.onComplete||n.add(i,i._startTime-i._delay),i=s;return t.add(n,0),n},t.add=function(t,e,i,s){var n,r,a,o,l,c;if("number"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof h)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||"normal",s=s||0,n=e,r=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof h)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return"string"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){u.prototype._remove.call(this,t,e);e=this._last;return e?this._time>e._startTime+e._totalDuration/e._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},t.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,s){return this.call(n,["{self}",e,i,s],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,s){var n;if(s instanceof h&&s.timeline===this)this.remove(s);else if(s&&(s instanceof Array||s.push&&g(s)))for(n=s.length;-1<--n;)s[n]instanceof h&&s[n].timeline===this&&this.remove(s[n]);if("string"==typeof e)return this._parseTimeOrLabel(e,i&&"number"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,"string"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(n=t.indexOf("=")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(n-1)+"1",10)*Number(t.substr(n+1)),t=1f&&(a="onReverseComplete"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(s=this._first;s&&(r=s._next,!this._paused||p);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;else for(s=this._last;s&&(r=s._prev,!this._paused||p);)(s._active||c>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w)),a&&(this._gc||h!==this._startTime&&u===this._timeScale||!(0===this._time||l>=this.totalDuration())||(n&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[a]&&this.vars[a].apply(this.vars[a+"Scope"]||this,this.vars[a+"Params"]||w)))}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof d&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,s){s=s||-9999999999;for(var n=[],r=this._first,a=0;r;)s>r._startTime||(r instanceof p?!1!==e&&(n[a++]=r):(!1!==i&&(n[a++]=r),!1!==t&&(a=(n=n.concat(r.getChildren(!0,e,i))).length))),r=r._next;return n},t.getTweensOf=function(t,e){var i,s,n=this._gc,r=[],a=0;for(n&&this._enabled(!0,!0),s=(i=p.getTweensOf(t)).length;-1<--s;)(i[s].timeline===this||e&&this._contains(i[s]))&&(r[a++]=i[s]);return n&&this._enabled(!1,!0),r},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var s,n=this._first,r=this._labels;n;)n._startTime>=i&&(n._startTime+=t),n=n._next;if(e)for(s in r)r[s]>=i&&(r[s]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,n=!1;-1<--s;)i[s]._kill(t,e)&&(n=!0);return n},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return u.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,s=0,n=this._last,r=999999999999;n;)e=n._prev,n._dirty&&n.totalDuration(),n._startTime>r&&this._sortChildren&&!n._paused?this.add(n,n._startTime-n._delay):r=n._startTime,n._startTime<0&&!n._paused&&(s-=n._startTime,this._timeline.smoothChildTiming&&(this._startTime+=n._startTime/this._timeScale),this.shiftChildren(-n._startTime,!1,-9999999999),r=0),s<(i=n._startTime+n._totalDuration/n._timeScale)&&(s=i),n=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===h._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},d},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],10:[function(t,Q,e){"use strict";!function(p){var e,i,d=p.GreenSockGlobals||p;if(!d.TweenLite){var _,f=function(t){for(var e=t.split("."),i=d,s=0;e.length>s;s++)i[e[s]]=i=i[e[s]]||{};return i},u=f("com.greensock"),m=1e-10,o=[].slice,g=function(){},h=(e=Object.prototype.toString,i=e.call([]),function(t){return null!=t&&(t instanceof Array||"object"==typeof t&&!!t.push&&e.call(t)===i)}),w={},v=function(o,l,c,h){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var u=[];this.check=function(t){for(var e,i,s,n,r=l.length,a=r;-1<--r;)(e=w[l[r]]||new v(l[r],[])).gsClass?(u[r]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(s=(i=("com.greensock."+o).split(".")).pop(),n=f(i.join("."))[s]=this.gsClass=c.apply(c,u),h&&(d[s]=n,"function"==typeof define&&define.amd?define((p.GreenSockAMDPath?p.GreenSockAMDPath+"/":"")+o.split(".").join("/"),[],function(){return n}):void 0!==Q&&Q.exports&&(Q.exports=n)),r=0;this.sc.length>r;r++)this.sc[r].check()},this.check(!0)},s=p._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=u._class=function(t,e,i){return e=e||function(){},s(t,[],function(){return e},i),e};s.globals=d;var t,n=[0,0,1,1],x=[],b=y("easing.Ease",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?n.concat(e):n},!0),T=b.map={},r=b.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(","),c=l.length,h=(i||"easeIn,easeOut,easeInOut").split(",");-1<--c;)for(r=l[c],n=s?y("easing."+r,null,!0):u.easing[r]||{},a=h.length;-1<--a;)o=h[a],T[r+"."+o]=T[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((t=b.prototype)._calcEnd=!1,t.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},l=(a=["Linear","Quad","Cubic","Quart","Quint,Strong"]).length;-1<--l;)t=a[l]+",Power"+l,r(new b(null,null,1,l),t,"easeOut",!0),r(new b(null,null,2,l),t,"easeIn"+(0===l?",easeNone":"")),r(new b(null,null,3,l),t,"easeInOut");T.linear=u.easing.Linear.easeIn,T.swing=u.easing.Quad.easeInOut;var k=y("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this});(t=k.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(r=o[a]).c===e&&r.s===i?o.splice(a,1):0===l&&n>r.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:s,pr:n}),this!==A||_||A.wake()},t.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;-1<--i;)if(s[i].c===e)return void s.splice(i,1)},t.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for(e=n.length,i=this._eventTarget;-1<--e;)(s=n[e]).up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i)};for(var a,P=p.requestAnimationFrame,S=p.cancelAnimationFrame,O=Date.now||function(){return(new Date).getTime()},C=O(),l=(a=["ms","moz","webkit","o"]).length;-1<--l&&!P;)P=p[a[l]+"RequestAnimationFrame"],S=p[a[l]+"CancelAnimationFrame"]||p[a[l]+"CancelRequestAnimationFrame"];y("Ticker",function(t,e){var s,n,r,a,o,l=this,c=O(),i=!1!==e&&P,h=500,u=33,p=function(t){var e,i=O()-C;h=i&&i+this.totalDuration()/this._timeScale>t},t._enabled=function(t,e){return _||A.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},t._kill=function(){return this._enabled(!1,!1)},t.kill=function(t,e){return this._kill(t,e),this},t._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},t._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)"{self}"===t[e]&&(i[e]=this);return i},t.eventCallback=function(t,e,i,s){if("on"===(t||"").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+"Params"]=h(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,n[t+"Scope"]=s),"onUpdate"===t&&(this._onUpdate=e)}return this},t.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},t.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},t.totalTime=function(t,e,i){if(_||A.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(ss;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},t._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline&&this._uncache(!0)),this},t.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s},t.rawTime=function(){return _||A.wake(),this._totalTime};var I=y("TweenLite",function(t,e,i){if(c.call(this,e,i),this.render=I.prototype.render,null==t)throw"Cannot tween a null target.";this.target=t="string"==typeof t&&I.selector(t)||t;var s,n,r,i=t.jquery||t.length&&t!==p&&t[0]&&(t[0]===p||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?F[I.defaultOverwrite]:"number"==typeof a?a>>0:F[a],(i||t instanceof Array||t.push&&h(t))&&"number"!=typeof t[0])for(this._targets=r=o.call(t,0),this._propLookup=[],this._siblings=[],s=0;r.length>s;s++)(n=r[s])?"string"!=typeof n?n.length&&n!==p&&n[0]&&(n[0]===p||n[0].nodeType&&n[0].style&&!n.nodeType)?(r.splice(s--,1),this._targets=r=r.concat(o.call(n,0))):(this._siblings[s]=H(n,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((p||!a._initted)&&c-a._startTime<=2e-10||(h[u++]=a)));for(d=u;-1<--d;)a=h[d],2===s&&a._kill(i,t)&&(r=!0),(2!==s||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(r=!0);return r},W=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return e<(r/=n)?r-e:i&&r===e||!t._initted&&r-e<2*m?m:(r+=t.totalDuration()/t._timeScale/n)>e+m?0:r-e-m};t._init=function(){var t,e,i,s,n,r=this.vars,a=this._overwrittenProps,o=this._duration,l=!!r.immediateRender,c=r.ease;if(r.startAt){for(s in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),n={},r.startAt)n[s]=r.startAt[s];if(n.overwrite=!1,n.immediateRender=!0,n.lazy=l&&!1!==r.lazy,n.startAt=n.delay=null,this._startAt=I.to(this.target,0,n),l)if(0o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===V.API&&(E[(new t[e])._propName]=t[e]);return!0},s.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=y("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){V.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new V(i);for(e in(o.constructor=a).API=t.API,r)"function"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,V.activate([a]),a},a=p._gsQueue){for(l=0;a.length>l;l++)a[l]();for(t in w)w[t].func||p.console.log("GSAP encountered missing dependency: com.greensock."+t)}_=!1}}(window)},{}],11:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("easing.Back",["easing.Ease"],function(m){function t(t,e){var i=c("easing."+t,function(){},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,i}function e(t,e,i,s){return s=c("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0),h(s,t),s}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c("easing."+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var s,n,r=window.GreenSockGlobals||window,a=r.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,h=m.register||function(){},u=e("Back",i("BackOut",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),i("BackInOut",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),a.config=p.config=function(t,e,i){return new p(t,e,i)},(a=(s=c("easing.SteppedEase",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=s,a.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},a.config=s.config=function(t){return new s(t)},(a=(n=c("easing.RoughEase",function(t){for(var e,i,s,n,r,a,o=(t=t||{}).taper||"none",l=[],c=0,h=0|(t.points||20),u=h,p=!1!==t.randomize,d=!0===t.clamp,_=t.template instanceof m?t.template:null,f="number"==typeof t.strength?.4*t.strength:.4;-1<--u;)e=p?Math.random():1/h*u,i=_?_.getRatio(e):e,s="none"===o?f:"out"===o?(n=1-e)*n*f:"in"===o?e*e*f:.5*(n=e<.5?2*e:2*(1-e))*n*f,p?i+=Math.random()*s-.5*s:u%2?i+=.5*s:i-=.5*s,d&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},a.config=function(t){return new n(t)},n.ease=new n,e("Bounce",t("BounceOut",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t("BounceInOut",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e("Circ",t("CircOut",function(t){return Math.sqrt(1- --t*t)}),t("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),t("CircInOut",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e("Elastic",(a=function(t,e,i){var s=c("easing."+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=s.prototype=new m;return t.constructor=s,t.getRatio=e,t.config=function(t,e){return new s(t,e)},s})("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),a("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),a("ElasticInOut",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e("Expo",t("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),t("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),t("ExpoInOut",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e("Sine",t("SineOut",function(t){return Math.sin(t*l)}),t("SineIn",function(t){return 1-Math.cos(t*l)}),t("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c("easing.EaseLookup",{find:function(t){return m.map[t]}},!0),h(r.SlowMo,"SlowMo","ease,"),h(n,"RoughEase","ease,"),h(s,"SteppedEase","ease,"),u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],12:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(r,p){function N(){r.call(this,"css"),this._overwriteProps.length=0,this.setRatio=N.prototype.setRatio}var d,x,b,u,_={},t=N.prototype=new r("css");(t.constructor=N).version="1.12.1",N.API=2,N.defaultTransformPerspective=0,N.defaultSkewType="compensated",N.suffixMap={top:t="px",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:""};function n(t,e){return e.toUpperCase()}function a(t){return L.test("string"==typeof t?t:(t.currentStyle||t.style).filter||"")?parseFloat(RegExp.$1)/100:1}function f(t){window.console&&console.log(t)}function T(t,e){var i,s,n=(e=e||Z).style;if(void 0!==n[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],s=5;-1<--s&&void 0===n[i[s]+t];);return 0<=s?(tt="-"+(et=3===s?"ms":i[s]).toLowerCase()+"-",et+t):null}function m(t,e){var i,s={};if(e=e||it(t,null))if(i=e.length)for(;-1<--i;)s[e[i].replace(Y,n)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===s[i]&&(s[i.replace(Y,n)]=e[i]);return J||(s.opacity=a(t)),t=Pt(t,e,!1),s.rotation=t.rotation,s.skewX=t.skewX,s.scaleX=t.scaleX,s.scaleY=t.scaleY,s.x=t.x,s.y=t.y,Tt&&(s.z=t.z,s.rotationX=t.rotationX,s.rotationY=t.rotationY,s.scaleZ=t.scaleZ),s.filters&&delete s.filters,s}function g(t,e,i,s,n){var r,a,o,l={},c=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(r=i[a])||n&&n[a])&&-1===a.indexOf("Origin")&&("number"==typeof r||"string"==typeof r)&&(l[a]="auto"!==r||"left"!==a&&"top"!==a?""!==r&&"auto"!==r&&"none"!==r||"string"!=typeof e[a]||""===e[a].replace(D,"")?r:0:rt(t,a),void 0!==c[a]&&(o=new pt(c,a,c[a],o)));if(s)for(a in s)"className"!==a&&(l[a]=s[a]);return{difs:l,firstMPT:o}}function w(t,e){var i=(t=null==t||""===t||"auto"===t||"auto auto"===t?"0 0":t).split(" "),s=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0];return null==(t=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1])?t="0":"center"===t&&(t="50%"),("center"===s||isNaN(parseFloat(s))&&-1===(s+"").indexOf("="))&&(s="50%"),e&&(e.oxp=-1!==s.indexOf("%"),e.oyp=-1!==t.indexOf("%"),e.oxr="="===s.charAt(1),e.oyr="="===t.charAt(1),e.ox=parseFloat(s.replace(D,"")),e.oy=parseFloat(t.replace(D,""))),s+" "+t+(2>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),lt[t]||("#"===t.charAt(0)?(4===t.length&&(t="#"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(r=t.charAt(3))+r),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):("hsl"===t.substr(0,3)?(t=t.match(A),s=Number(t[0])%360/360,n=Number(t[1])/100,e=2*(r=Number(t[2])/100)-(i=r<=.5?r*(1+n):r+n-r*n),3a",!!(i=i.getElementsByTagName("a")[0])&&/^0.55/.test(i.style.opacity)),tt="",et="",it=Q.defaultView?Q.defaultView.getComputedStyle:function(){},st=N.getStyle=function(t,e,i,s,n){var r;return J||"opacity"!==e?(!s&&t.style[e]?r=t.style[e]:(i=i||it(t))?r=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(z,"-$1").toLowerCase()):t.currentStyle&&(r=t.currentStyle[e]),null==n||r&&"none"!==r&&"auto"!==r&&"auto auto"!==r?r:n):a(t)},nt=s.convertToPixels=function(t,e,i,s,n){if("px"===s||!s)return i;if("auto"===s||!i)return 0;var r,a,o,l=$.test(e),c=t,h=Z.style,u=i<0;if(u&&(i=-i),"%"===s&&-1!==e.indexOf("border"))r=i/100*(l?t.clientWidth:t.clientHeight);else{if(h.cssText="border:0 solid red;position:"+st(t,"position")+";line-height:0;","%"!==s&&c.appendChild)h[l?"borderLeftWidth":"borderTopWidth"]=i+s;else{if(a=(c=t.parentNode||Q.body)._gsCache,o=p.ticker.frame,a&&l&&a.time===o)return a.width*i/100;h[l?"width":"height"]=i+s}c.appendChild(Z),r=parseFloat(Z[l?"offsetWidth":"offsetHeight"]),c.removeChild(Z),l&&"%"===s&&!1!==N.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=r/i*100),0!==r||n||(r=nt(t,e,i,s,!0))}return u?-r:r},rt=s.calculateOffset=function(t,e,i){if("absolute"!==st(t,"position",i))return 0;var s="left"===e?"Left":"Top",i=st(t,"margin"+s,i);return t["offset"+s]-(nt(t,e,parseFloat(i),i.replace(j,""))||0)},at={width:["Left","Right"],height:["Top","Bottom"]},ot=["marginLeft","marginRight","marginTop","marginBottom"],lt={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ct="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(t in lt)ct+="|"+t+"\\b";function ht(t,e,r,a){if(null==t)return function(t){return t};var o,l=e?(t.match(ct)||[""])[0]:"",c=t.split(l).join("").match(I)||[],h=t.substr(0,t.indexOf(c[0])),u=")"===t.charAt(t.length-1)?")":"",p=-1!==t.indexOf(" ")?" ":",",d=c.length,_=0s;s++)n[s]=o(n[s]);return n.join(",")}if(e=(t.match(ct)||[l])[0],s=(i=t.split(e).join("").match(I)||[]).length,d>s--)for(;d>++s;)i[s]=r?i[0|(s-1)/2]:c[s];return h+i.join(p)+p+e+u+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,i,s;if("number"==typeof t)t+=_;else if(a&&H.test(t)){for(i=t.replace(H,"|").split("|"),s=0;i.length>s;s++)i[s]=o(i[s]);return i.join(",")}if(s=(e=t.match(I)||[]).length,d>s--)for(;d>++s;)e[s]=r?e[0|(s-1)/2]:c[s];return h+e.join(p)+u}:function(t){return t}}function ut(c){return c=c.split(","),function(t,e,i,s,n,r,a){var o,l=(e+"").split(" ");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return s.parse(t,a,n,r)}}var ct=RegExp(ct+")","gi"),pt=(s._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,s,n,r=this.data,a=r.proxy,o=r.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6s;s++)n+=i["xn"+s]+i["xs"+(s+1)];i.e=n}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,s,n){this.t=t,this.p=e,this.v=i,this.r=n,s&&((s._prev=this)._next=s)}),dt=(s._parseToProxy=function(t,e,i,s,n,r){var a,o,l,c,h=s,u={},p={},d=i._transform,_=V;for(i._transform=null,V=e,s=n=i.parse(t,e,s,n),V=_,r&&(i._transform=d,h&&(h._prev=null,h._prev&&(h._prev._next=null)));s&&s!==h;){if(s.type<=1&&(p[o=s.p]=s.s+s.c,u[o]=s.s,r||(c=new pt(s,"s",o,c,s.r),s.c=0),1===s.type))for(a=s.l;0<--a;)p[o=s.p+"_"+(l="xn"+a)]=s.data[l],u[o]=s[l],r||(c=new pt(s,l,o,c,s.rxp[l]));s=s._next}return{proxy:u,end:p,firstMPT:c,pt:n}},s.CSSPropTween=function(t,e,i,s,n,r,a,o,l,c,h){this.t=t,this.p=e,this.s=i,this.c=s,this.n=a||e,t instanceof dt||u.push(this.n),this.r=o,this.type=r||0,l&&(this.pr=l,d=!0),this.b=void 0===c?i:c,this.e=void 0===h?i+s:h,n&&((this._next=n)._prev=this)}),_t=N.parseComplex=function(t,e,i,s,n,r,a,o,l,c){a=new dt(t,e,0,0,a,c?2:1,null,!1,o,i=i||r||"",s),s+="";var h,u,p,d,_,f,m,g,w,v,y,x=i.split(", ").join(",").split(" "),b=s.split(", ").join(",").split(" "),T=x.length,k=!1!==O;for(-1===s.indexOf(",")&&-1===i.indexOf(",")||(x=x.join(" ").replace(H,", ").split(" "),b=b.join(" ").replace(H,", ").split(" "),T=x.length),T!==b.length&&(T=(x=(r||"").split(" ")).length),a.plugin=l,a.setRatio=c,h=0;hu;u++)v=f[u],w=d.indexOf(v,p),a.appendXtra(d.substr(p,w-p),Number(v),P(m[u],v),"",k&&"px"===d.substr(w+v.length,2),0===u),p=w+v.length;a["xs"+a.l]+=d.substr(p)}else a["xs"+a.l]+=a.l?" "+d:d;if(-1!==s.indexOf("=")&&a.data){for(y=a.xs0+a.data.s,h=1;a.l>h;h++)y+=a["xs"+h]+a.data["xn"+h];a.e=y+a["xs"+h]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ft=9;for((t=dt.prototype).l=t.pr=0;0<--ft;)t["xn"+ft]=0,t["xs"+ft]="";t.xs0="",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,s,n,r){var a=this,o=a.l;return a["xs"+o]+=r&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=s||"",0s;s++)e.prefix=0===s&&e.prefix,e.defaultValue=i[s]||r,new mt(n[s],e)};(t=mt.prototype).parseComplex=function(t,e,i,s,n,r){var a,o,l,c,h,u=this.keyword;if(this.multi&&(H.test(i)||H.test(e)?(o=e.replace(H,"|").split("|"),l=i.replace(H,"|").split("|")):u&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aI[r]&&I[r]>-j&&(I[r]=0);return i&&(t._gsTransform=I),I},St=s.set3DTransformRatio=function(t){var e,i,s,n,r,a,o,l,c,h,u,p,d,_,f,m,g,w,v,y,x,b,T=this.data,k=this.t.style,P=T.rotation*U,S=T.scaleX,O=T.scaleY,C=T.scaleZ,A=T.perspective;if(1!==t&&0!==t||"auto"!==T.force3D||T.rotationY||T.rotationX||1!==C||A||T.z){if(M&&(S<1e-4&&-1e-4y;y++)this.p.indexOf("border")&&(f[y]=T(f[y])),-1!==(o=a=st(t,f[y],b,!1,"0px")).indexOf(" ")&&(o=(a=o.split(" "))[0],a=a[1]),l=r=v[y],d=parseFloat(o),_=o.substr((d+"").length),(h=""===(h=(u="="===l.charAt(1))?(c=parseInt(l.charAt(0)+"1",10),l=l.substr(2),c*=parseFloat(l),l.substr((c+"").length-(c<0?1:0))||""):(c=parseFloat(l),l.substr((c+"").length)))?x[i]||_:h)!==_&&(p=nt(t,"borderLeft",d,_),d=nt(t,"borderTop",d,_),a="%"===h?(o=p/g*100+"%",d/w*100+"%"):"em"===h?(o=p/(_=nt(t,"borderLeft",1,"em"))+"em",d/_+"em"):(o=p+"px",d+"px"),u&&(l=parseFloat(o)+c+h,r=parseFloat(a)+c+h)),n=_t(m,f[y],o+" "+a,l+" "+r,!1,"0px",n);return n},prefix:!0,formatter:ht("0px 0px 0px 0px",!1,!0)}),gt("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,i,s,n,r){var a,o,l,c,h,u,p="background-position",d=b||it(t,null),_=this.format((d?C?d.getPropertyValue(p+"-x")+" "+d.getPropertyValue(p+"-y"):d.getPropertyValue(p):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),e=this.format(e);if(-1!==_.indexOf("%")!=(-1!==e.indexOf("%"))&&((u=st(t,"backgroundImage").replace(F,""))&&"none"!==u)){for(a=_.split(" "),o=e.split(" "),G.setAttribute("src",u),l=2;-1<--l;)(c=-1!==(_=a[l]).indexOf("%"))!=(-1!==o[l].indexOf("%"))&&(h=0===l?t.offsetWidth-G.width:t.offsetHeight-G.height,a[l]=c?parseFloat(_)/100*h+"px":parseFloat(_)/h*100+"%");_=a.join(" ")}return this.parseComplex(t.style,_,e,n,r)},formatter:w}),gt("backgroundSize",{defaultValue:"0 0",formatter:w}),gt("perspective",{defaultValue:"0px",prefix:!0}),gt("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),gt("transformStyle",{prefix:!0}),gt("backfaceVisibility",{prefix:!0}),gt("userSelect",{prefix:!0}),gt("margin",{parser:ut("marginTop,marginRight,marginBottom,marginLeft")}),gt("padding",{parser:ut("paddingTop,paddingRight,paddingBottom,paddingLeft")}),gt("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,i,s,n,r){var a,o;return e=C<9?(a=t.currentStyle,o=C<8?" ":",",a="rect("+a.clipTop+o+a.clipRight+o+a.clipBottom+o+a.clipLeft+")",this.format(e).split(",").join(o)):(a=this.format(st(t,this.p,b,!1,this.dflt)),this.format(e)),this.parseComplex(t.style,a,e,n,r)}}),gt("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),gt("autoRound,strictUnits",{parser:function(t,e,i,s,n){return n}}),gt("border",{defaultValue:"0px solid #000",parser:function(t,e,i,s,n,r){return this.parseComplex(t.style,this.format(st(t,"borderTopWidth",b,!1,"0px")+" "+st(t,"borderTopStyle",b,!1,"solid")+" "+st(t,"borderTopColor",b,!1,"#000")),this.format(e),n,r)},color:!0,formatter:function(t){var e=t.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(t.match(ct)||["#000"])[0]}}),gt("borderWidth",{parser:ut("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")}),gt("float,cssFloat,styleFloat",{parser:function(t,e,i,s,n){var r=t.style,t="cssFloat"in r?"cssFloat":"styleFloat";return new dt(r,t,0,0,n,-1,i,!1,0,r[t],e)}});function Ct(t){var e,i=this.t,s=i.filter||st(this.data,"filter"),t=0|this.s+this.c*t;(e=100==t?-1===s.indexOf("atrix(")&&-1===s.indexOf("radient(")&&-1===s.indexOf("oader(")?(i.removeAttribute("filter"),!st(this.data,"filter")):(i.filter=s.replace(l,""),!0):e)||(this.xn1&&(i.filter=s=s||"alpha(opacity="+t+")"),-1===s.indexOf("pacity")?0==t&&this.xn1||(i.filter=s+" alpha(opacity="+t+")"):i.filter=s.replace(L,"opacity="+t))}gt("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,i,s,n,r){var a=parseFloat(st(t,"opacity",b,!1,"1")),o=t.style,l="autoAlpha"===i;return"string"==typeof e&&"="===e.charAt(1)&&(e=("-"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+a),l&&1===a&&"hidden"===st(t,"visibility",b)&&0!==e&&(a=0),J?n=new dt(o,"opacity",a,e-a,n):((n=new dt(o,"opacity",100*a,100*(e-a),n)).xn1=l?1:0,o.zoom=1,n.type=2,n.b="alpha(opacity="+n.s+")",n.e="alpha(opacity="+(n.s+n.c)+")",n.data=t,n.plugin=r,n.setRatio=Ct),l&&((n=new dt(o,"visibility",0,0,n,-1,null,!1,0,0!==a?"inherit":"hidden",0===e?"hidden":"inherit")).xs0="inherit",s._overwriteProps.push(n.n),s._overwriteProps.push(i)),n}});function At(t,e){e&&(t.removeProperty?("ms"===e.substr(0,2)&&(e="M"+e.substr(1)),t.removeProperty(e.replace(z,"-$1").toLowerCase())):t.removeAttribute(e))}function Mt(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute("class",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:At(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute("class")!==this.e&&this.t.setAttribute("class",this.e)}gt("className",{parser:function(t,e,i,s,n,r,a){var o,l,c,h=t.getAttribute("class")||"",u=t.style.cssText;if((n=s._classNamePT=new dt(t,i,0,0,n,2)).setRatio=Mt,n.pr=-11,d=!0,n.b=h,o=m(t,b),i=t._gsClassPT){for(l={},c=i.data;c;)l[c.p]=1,c=c._next;i.setRatio(1)}return(t._gsClassPT=n).e="="!==e.charAt(1)?e:h.replace(RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+("+"===e.charAt(0)?" "+e.substr(2):""),s._tween._duration&&(t.setAttribute("class",n.e),a=g(t,o,m(t),a,l),t.setAttribute("class",h),n.data=a.firstMPT,t.style.cssText=u,n=n.xfirst=s.parse(t,a.difs,n,r)),n}});function Rt(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var e,i,s,n,r=this.t.style,a=_.transform.parse;if("all"===this.e)n=!(r.cssText="");else for(s=(e=this.e.split(",")).length;-1<--s;)i=e[s],_[i]&&(_[i].parse===a?n=!0:i="transformOrigin"===i?bt:_[i].p),At(r,i);n&&(At(r,yt),this.t._gsTransform&&delete this.t._gsTransform)}}for(gt("clearProps",{parser:function(t,e,i,s,n){return(n=new dt(t,i,0,0,n,2)).setRatio=Rt,n.e=e,n.pr=-10,n.data=s._tween,d=!0,n}}),t="bezier,throwProps,physicsProps,physics2D".split(","),ft=t.length;ft--;)!function(t){var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin",gt(t,{parser:function(t,e,i,s,n,r,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,s,n,r,a)):(f("Error: "+l+" js file not loaded."),n)}}))}(t[ft]);(t=N.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,O=e.autoRound,d=!1,x=e.suffixMap||N.suffixMap,b=it(t,""),u=this._overwriteProps;var s,n,r,a,o,l,i=t.style;if(c&&""===i.zIndex&&("auto"!==(l=st(t,"zIndex",b))&&""!==l||this._addLazySet(i,"zIndex",0)),"string"==typeof e&&(r=i.cssText,l=m(t,b),i.cssText=r+";"+e,l=g(t,l,m(t)).difs,!J&&X.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=r),this._firstPT=s=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,yt?h&&(c=!0,""===i.zIndex&&("auto"!==(e=st(t,"zIndex",b))&&""!==e||this._addLazySet(i,"zIndex",0)),k&&this._addLazySet(i,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(l?"visible":"hidden"))):i.zoom=1,n=s;n&&n._next;)n=n._next;i=new dt(t,"transform",0,0,null,2),this._linkCSSP(i,null,n),i.setRatio=l&&Tt?St:yt?Ot:wt,i.data=this._transform||Pt(t,b,!0),u.pop()}if(d){for(;s;){for(o=s._next,n=r;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:a)?s._prev._next=s:r=s,(s._next=n)?n._prev=s:a=s,s=o}this._firstPT=r}return!0},t.parse=function(t,e,i,s){var n,r,a,o,l,c,h,u,p=t.style;for(n in e)l=e[n],u=_[n],u?i=u.parse(t,l,n,this,i,s,e):(o=st(t,n,b)+"",h="string"==typeof l,"color"===n||"fill"===n||"stroke"===n||-1!==n.indexOf("Color")||h&&E.test(l)?(h||(l=S(l),l=(3s;s++)i+=n["xn"+s]+n["xs"+(s+1)];n.t[n.p]=i}else-1===n.type?n.t[n.p]=n.xs0:n.setRatio&&n.setRatio(t);else n.t[n.p]=e+n.xs0;n=n._next}else for(;n;)2!==n.type?n.t[n.p]=n.b:n.setRatio(t),n=n._next;else for(;n;)2!==n.type?n.t[n.p]=n.e:n.setRatio(t),n=n._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||Pt(this._target,b,!0)};function It(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}t._addLazySet=function(t,e,i){e=this._firstPT=new dt(t,e,0,0,this._firstPT,2);e.e=i,e.setRatio=It,e.data=this},t._linkCSSP=function(t,e,i,s){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,s=!0),i?i._next=t:s||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,s,n=t;if(t.autoAlpha||t.alpha){for(i in n={},t)n[i]=t[i];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return t.className&&(e=this._classNamePT)&&((s=e.xfirst)&&s._prev?this._linkCSSP(s._prev,e._next,s._prev._prev):s===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,s._prev),this._classNamePT=null),r.prototype._kill.call(this,n)};function Dt(t,e,i){var s,n,r,a;if(t.slice)for(n=t.length;-1<--n;)Dt(t[n],e,i);else for(n=(s=t.childNodes).length;-1<--n;)a=(r=s[n]).type,r.style&&(e.push(m(r)),i&&i.push(r)),1!==a&&9!==a&&11!==a||!r.childNodes.length||Dt(r,e,i)}return N.cascadeTo=function(t,e,i){var s,n,r,a=p.to(t,e,i),o=[a],l=[],c=[],h=[],u=p._internals.reservedProps;for(t=a._targets||a.target,Dt(t,l,h),a.render(e,!0),Dt(t,c),a.render(0,!0),a._enabled(!0),s=h.length;-1<--s;)if((n=g(h[s],l[s],c[s])).firstMPT){for(r in n=n.difs,i)u[r]&&(n[r]=i[r]);o.push(p.to(h[s],e,n))}return o},r.activate([N]),N},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){function n(t,e){var i="x"===e?"Width":"Height",s="scroll"+i,n="client"+i,e=document.body;return t===a||t===r||t===e?Math.max(r[s],e[s])-(a["inner"+i]||Math.max(r[n],e[n])):t[s]-t["offset"+i]}var r=document.documentElement,a=window,t=window._gsDefine.plugin({propName:"scrollTo",API:2,version:"1.7.3",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e="object"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,"x",this.x,"max"===e.x?n(t,"x"):e.x,"scrollTo_x",!0),this._overwriteProps.push("scrollTo_x")):this.skipX=!0,null!=e.y?(this._addTween(this,"y",this.y,"max"===e.y?n(t,"y"):e.y,"scrollTo_y",!0),this._overwriteProps.push("scrollTo_y")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var e=this._wdw||!this.skipX?this.getX():this.xPrev,i=this._wdw||!this.skipY?this.getY():this.yPrev,s=i-this.yPrev,t=e-this.xPrev;this._autoKill&&(!this.skipX&&(7e&&(this.skipX=!0),!this.skipY&&(7i&&(this.skipY=!0),this.skipX&&this.skipY&&this._tween.kill()),this._wdw?a.scrollTo(this.skipX?e:this.x,this.skipY?i:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=n,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=r.scrollLeft?r:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=r.scrollTop?r:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[2]); +!function s(n,r,a){function o(e,t){if(!r[e]){if(!n[e]){var i="function"==typeof require&&require;if(!t&&i)return i(e,!0);if(l)return l(e,!0);throw(i=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",i}i=r[e]={exports:{}},n[e][0].call(i.exports,function(t){return o(n[e][1][t]||t)},i,i.exports,s,n,r,a)}return r[e].exports}for(var l="function"==typeof require&&require,t=0;t{i.append(""+t+": "),i.append(e[t].message),i.append("
")}):i.append('
'+e.message+"
")}})})})},{}],2:[function(t,e,i){"use strict";t("../lib/greensock/TweenLite.min.js"),t("../lib/greensock/TimelineLite.min.js"),t("../lib/greensock/easing/EasePack.min.js"),t("../lib/greensock/plugins/CSSPlugin.min.js"),t("../lib/greensock/plugins/ScrollToPlugin.min.js"),t("../global/pageManager.js"),t("../global/main.js"),t("../global/fields.js"),t("../global/beacon.js"),t("../global/ajax.js"),t("../global/rocketcdn.js"),t("../global/countdown.js")},{"../global/ajax.js":1,"../global/beacon.js":3,"../global/countdown.js":4,"../global/fields.js":5,"../global/main.js":6,"../global/pageManager.js":7,"../global/rocketcdn.js":8,"../lib/greensock/TimelineLite.min.js":9,"../lib/greensock/TweenLite.min.js":10,"../lib/greensock/easing/EasePack.min.js":11,"../lib/greensock/plugins/CSSPlugin.min.js":12,"../lib/greensock/plugins/ScrollToPlugin.min.js":13}],3:[function(t,e,i){"use strict";var s=jQuery;s(document).ready(function(){"Beacon"in window&&s(".wpr-infoAction--help").on("click",function(t){var e=s(this).data("beacon-id");return 0!==(e=(e=e).split(",")).length&&(1{o(t).attr("checked",i?null:"checked")});else{const r=o(e).closest(".wpr-list").find(".wpr-main-checkbox");var n=o.map(s,t=>{if(void 0!==o(t).attr("checked"))return t});r.attr("checked",n.length===s.length?"checked":null)}}),0{let i=o(e).parents(".wpr-list");var s=i.find(".wpr-list-body input[type=checkbox]:not(:checked)").length;o(e).attr("checked",s<=0?"checked":null)})})},{}],6:[function(t,e,i){"use strict";var c=jQuery;c(document).ready(function(){var t=c(".wpr-notice");c("#wpr-congratulations-notice").on("click",function(){return(new TimelineLite).to(t,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(t,.6,{height:0,marginTop:0,ease:Power4.easeOut},"=-.4").set(t,{display:"none"}),!1}),c(".rocket-analytics-data-container").hide(),c(".rocket-preview-analytics-data").on("click",function(t){t.preventDefault(),c(this).parent().next(".rocket-analytics-data-container").toggle()}),c(".wpr-toggle-button").each(function(){var t=c(this),e=t.closest(".wpr-fieldsContainer-fieldset").find(".wpr-radio :checkbox"),i=c('[href="'+t.attr("href")+'"].wpr-menuItem');e.on("change",function(){e.is(":checked")?(i.css("display","block"),t.css("display","inline-block")):(i.css("display","none"),t.css("display","none"))}).trigger("change")});var e=c(".wpr-Popin-Analytics"),i=c(".wpr-Popin-overlay"),s=c(".wpr-Popin-Analytics-close"),n=c(".wpr-Popin-Analytics .wpr-button");function r(){(new TimelineLite).fromTo(e,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},"=-.5").set(e,{display:"none"}).set(i,{display:"none"})}c(".wpr-js-popin").on("click",function(t){return t.preventDefault(),(new TimelineLite).set(e,{display:"block"}).set(i,{display:"block"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(e,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},"=-.5"),!1}),s.on("click",function(t){return t.preventDefault(),r(),!1}),n.on("click",function(t){return t.preventDefault(),r(),c("#analytics_enabled").prop("checked",!0),c("#analytics_enabled").trigger("change"),!1});var a=c(".wpr-Popin-Upgrade"),n=c(".wpr-Popin-Upgrade-close");c(".wpr-popin-upgrade-toggle").on("click",function(t){return t.preventDefault(),(new TimelineLite).set(a,{display:"block"}).set(i,{display:"block"}).fromTo(i,.6,{autoAlpha:0},{autoAlpha:1,ease:Power4.easeOut}).fromTo(a,.6,{autoAlpha:0,marginTop:-24},{autoAlpha:1,marginTop:0,ease:Power4.easeOut},"=-.5"),!1}),n.on("click",function(){return(new TimelineLite).fromTo(a,.6,{autoAlpha:1,marginTop:0},{autoAlpha:0,marginTop:-24,ease:Power4.easeOut}).fromTo(i,.6,{autoAlpha:1},{autoAlpha:0,ease:Power4.easeOut},"=-.5").set(a,{display:"none"}).set(i,{display:"none"}),!1});var o=c(".wpr-Sidebar");c(".wpr-js-tips").on("change",function(){c(this).is(":checked")?(o.css("display","block"),localStorage.setItem("wpr-show-sidebar","on")):(o.css("display","none"),localStorage.setItem("wpr-show-sidebar","off"))}),document.getElementById("LKgOcCRpwmAj")?c(".wpr-adblock").css("display","none"):c(".wpr-adblock").css("display","block");var l=c(".wpr-adblock");c(".wpr-adblock-close").on("click",function(){return(new TimelineLite).to(l,1,{autoAlpha:0,x:40,ease:Power4.easeOut}).to(l,.4,{height:0,marginTop:0,ease:Power4.easeOut},"=-.4").set(l,{display:"none"}),!1})})},{}],7:[function(t,e,i){"use strict";function s(t){var e,i=this;this.$body=document.querySelector(".wpr-body"),this.$menuItems=document.querySelectorAll(".wpr-menuItem"),this.$submitButton=document.querySelector(".wpr-Content > form > #wpr-options-submit"),this.$pages=document.querySelectorAll(".wpr-Page"),this.$sidebar=document.querySelector(".wpr-Sidebar"),this.$content=document.querySelector(".wpr-Content"),this.$tips=document.querySelector(".wpr-Content-tips"),this.$links=document.querySelectorAll(".wpr-body a"),this.$menuItem=null,this.$page=null,this.pageId=null,this.bodyTop=0,this.buttonText=this.$submitButton.value,i.getBodyTop(),window.onhashchange=function(){i.detectID()},window.location.hash?(this.bodyTop=0,this.detectID()):(e=localStorage.getItem("wpr-hash"),this.bodyTop=0,e?(window.location.hash=e,this.detectID()):(this.$menuItems[0].classList.add("isActive"),localStorage.setItem("wpr-hash","dashboard"),window.location.hash="#dashboard"));for(var s=0;s{a.querySelectorAll(".wpr-rocketcdn-open").forEach(t=>{t.addEventListener("click",t=>{t.preventDefault()})}),function(){var t="";t+="action=rocketcdn_process_status";const e=r(t+="&nonce="+rocket_ajax_data.nonce);e.onreadystatechange=()=>{e.readyState===XMLHttpRequest.DONE&&200===e.status&&!0===JSON.parse(e.responseText).success&&MicroModal.show("wpr-rocketcdn-modal")}}(),MicroModal.init({disableScroll:!0})}),s.addEventListener("load",()=>{let t=a.querySelector("#wpr-rocketcdn-open-cta"),e=a.querySelector("#wpr-rocketcdn-close-cta"),i=a.querySelector("#wpr-rocketcdn-cta-small"),s=a.querySelector("#wpr-rocketcdn-cta");function n(t){var e="";return e+="action=toggle_rocketcdn_cta",e+="&status="+t,e+="&nonce="+rocket_ajax_data.nonce}null!==t&&null!==i&&null!==s&&t.addEventListener("click",t=>{t.preventDefault(),i.classList.add("wpr-isHidden"),s.classList.remove("wpr-isHidden"),r(n("big"))}),null!==e&&null!==i&&null!==s&&e.addEventListener("click",t=>{t.preventDefault(),i.classList.remove("wpr-isHidden"),s.classList.add("wpr-isHidden"),r(n("small"))})}),s.onmessage=t=>{var e,i,s=rocket_ajax_data.origin_url;t.origin===s&&((e=t.data).hasOwnProperty("cdnFrameHeight")&&(a.getElementById("rocketcdn-iframe").style.height=e.cdnFrameHeight+"px"),(i=t.data).hasOwnProperty("cdnFrameClose")&&(MicroModal.close("wpr-rocketcdn-modal"),i.hasOwnProperty("cdn_page_message")&&-1!==["iframe-payment-success","iframe-unsubscribe-success"].indexOf(i.cdn_page_message)&&a.location.reload()),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_token")){var s="";s+="action=save_rocketcdn_token",s+="&value="+t.rocketcdn_token;const n=r(s+="&nonce="+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}else{s={process:"subscribe",message:"token_not_received"};i.postMessage({success:!1,data:s,rocketcdn:!0},e)}}(t.data,s),(e=t.data).hasOwnProperty("rocketcdn_process")&&(i="",i+="action=rocketcdn_process_set",i+="&status="+e.rocketcdn_process,r(i+="&nonce="+rocket_ajax_data.nonce)),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_url")){var s="";s+="action=rocketcdn_enable",s+="&cdn_url="+t.rocketcdn_url;const n=r(s+="&nonce="+rocket_ajax_data.nonce);n.onreadystatechange=()=>{var t;n.readyState===XMLHttpRequest.DONE&&200===n.status&&(t=JSON.parse(n.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),function(t,e){let i=a.querySelector("#rocketcdn-iframe").contentWindow;if(t.hasOwnProperty("rocketcdn_disable")){t="";t+="action=rocketcdn_disable";const s=r(t+="&nonce="+rocket_ajax_data.nonce);s.onreadystatechange=()=>{var t;s.readyState===XMLHttpRequest.DONE&&200===s.status&&(t=JSON.parse(s.responseText),i.postMessage({success:t.success,data:t.data,rocketcdn:!0},e))}}}(t.data,s),(s=t.data).hasOwnProperty("rocketcdn_validate_token")&&s.hasOwnProperty("rocketcdn_validate_cname")&&(t="",t+="action=rocketcdn_validate_token_cname",t+="&cdn_url="+s.rocketcdn_validate_cname,t+="&cdn_token="+s.rocketcdn_validate_token,r(t+="&nonce="+rocket_ajax_data.nonce)))}},{}],9:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(h,u,p){function d(t){u.call(this,t),this._labels={},this.autoRemoveChildren=!0===this.vars.autoRemoveChildren,this.smoothChildTiming=!0===this.vars.smoothChildTiming,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var e,i,s=this.vars;for(i in s)e=s[i],g(e)&&-1!==e.join("").indexOf("{self}")&&(s[i]=this._swapSelfInParams(e));g(s.tweens)&&this.add(s.tweens,0,s.align,s.stagger)}function _(t){var e,i={};for(e in t)i[e]=t[e];return i}function n(t,e,i,s){t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||w)}var f=1e-10,m=p._internals.isSelector,g=p._internals.isArray,w=[],a=window._gsDefine.globals,v=w.slice,t=d.prototype=new u;return d.version="1.12.1",t.constructor=d,t.kill()._gc=!1,t.to=function(t,e,i,s){var n=i.repeat&&a.TweenMax||p;return e?this.add(new n(t,e,i),s):this.set(t,i,s)},t.from=function(t,e,i,s){return this.add((i.repeat&&a.TweenMax||p).from(t,e,i),s)},t.fromTo=function(t,e,i,s,n){var r=s.repeat&&a.TweenMax||p;return e?this.add(r.fromTo(t,e,i,s),n):this.set(t,s,n)},t.staggerTo=function(t,e,i,s,n,r,a,o){var l,c=new d({onComplete:r,onCompleteParams:a,onCompleteScope:o,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=p.selector(t)||t),m(t)&&(t=v.call(t,0)),s=s||0,l=0;t.length>l;l++)i.startAt&&(i.startAt=_(i.startAt)),c.to(t[l],e,_(i),l*s);return this.add(c,n)},t.staggerFrom=function(t,e,i,s,n,r,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,n,r,a,o)},t.staggerFromTo=function(t,e,i,s,n,r,a,o,l){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,n,r,a,o,l)},t.call=function(t,e,i,s){return this.add(p.delayedCall(0,t,e,i),s)},t.set=function(t,e,i){return i=this._parseTimeOrLabel(i,0,!0),null==e.immediateRender&&(e.immediateRender=i===this._time&&!this._paused),this.add(new p(t,0,e),i)},d.exportRoot=function(t,e){null==(t=t||{}).smoothChildTiming&&(t.smoothChildTiming=!0);var i,s,n=new d(t),t=n._timeline;for(null==e&&(e=!0),t._remove(n,!0),n._startTime=0,n._rawPrevTime=n._time=n._totalTime=t._time,i=t._first;i;)s=i._next,e&&i instanceof p&&i.target===i.vars.onComplete||n.add(i,i._startTime-i._delay),i=s;return t.add(n,0),n},t.add=function(t,e,i,s){var n,r,a,o,l,c;if("number"!=typeof e&&(e=this._parseTimeOrLabel(e,0,!0,t)),!(t instanceof h)){if(t instanceof Array||t&&t.push&&g(t)){for(i=i||"normal",s=s||0,n=e,r=t.length,a=0;at._startTime;l._timeline;)c&&l._timeline.smoothChildTiming?l.totalTime(l._totalTime,!0):l._gc&&l._enabled(!0,!1),l=l._timeline;return this},t.remove=function(t){if(t instanceof h)return this._remove(t,!1);if(t instanceof Array||t&&t.push&&g(t)){for(var e=t.length;-1<--e;)this.remove(t[e]);return this}return"string"==typeof t?this.removeLabel(t):this.kill(null,t)},t._remove=function(t,e){u.prototype._remove.call(this,t,e);e=this._last;return e?this._time>e._startTime+e._totalDuration/e._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},t.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},t.insert=t.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},t.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},t.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},t.addPause=function(t,e,i,s){return this.call(n,["{self}",e,i,s],this,t)},t.removeLabel=function(t){return delete this._labels[t],this},t.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},t._parseTimeOrLabel=function(t,e,i,s){var n;if(s instanceof h&&s.timeline===this)this.remove(s);else if(s&&(s instanceof Array||s.push&&g(s)))for(n=s.length;-1<--n;)s[n]instanceof h&&s[n].timeline===this&&this.remove(s[n]);if("string"==typeof e)return this._parseTimeOrLabel(e,i&&"number"==typeof t&&null==this._labels[e]?t-this.duration():0,i);if(e=e||0,"string"!=typeof t||!isNaN(t)&&null==this._labels[t])null==t&&(t=this.duration());else{if(-1===(n=t.indexOf("=")))return null==this._labels[t]?i?this._labels[t]=this.duration()+e:e:this._labels[t]+e;e=parseInt(t.charAt(n-1)+"1",10)*Number(t.substr(n+1)),t=1f&&(a="onReverseComplete"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:f,t=l+1e-4):t<1e-7?(((this._totalTime=this._time=0)!==c||0===this._duration&&this._rawPrevTime!==f&&(0=c)for(s=this._first;s&&(r=s._next,!this._paused||p);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;else for(s=this._last;s&&(r=s._prev,!this._paused||p);)(s._active||c>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=r;this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||w)),a&&(this._gc||h!==this._startTime&&u===this._timeScale||!(0===this._time||l>=this.totalDuration())||(n&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[a]&&this.vars[a].apply(this.vars[a+"Scope"]||this,this.vars[a+"Params"]||w)))}},t._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof d&&t._hasPausedChild())return!0;t=t._next}return!1},t.getChildren=function(t,e,i,s){s=s||-9999999999;for(var n=[],r=this._first,a=0;r;)s>r._startTime||(r instanceof p?!1!==e&&(n[a++]=r):(!1!==i&&(n[a++]=r),!1!==t&&(a=(n=n.concat(r.getChildren(!0,e,i))).length))),r=r._next;return n},t.getTweensOf=function(t,e){var i,s,n=this._gc,r=[],a=0;for(n&&this._enabled(!0,!0),s=(i=p.getTweensOf(t)).length;-1<--s;)(i[s].timeline===this||e&&this._contains(i[s]))&&(r[a++]=i[s]);return n&&this._enabled(!1,!0),r},t._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},t.shiftChildren=function(t,e,i){i=i||0;for(var s,n=this._first,r=this._labels;n;)n._startTime>=i&&(n._startTime+=t),n=n._next;if(e)for(s in r)r[s]>=i&&(r[s]+=t);return this._uncache(!0)},t._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,n=!1;-1<--s;)i[s]._kill(t,e)&&(n=!0);return n},t.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;-1<--i;)e[i]._enabled(!1,!1);return!1!==t&&(this._labels={}),this._uncache(!0)},t.invalidate=function(){for(var t=this._first;t;)t.invalidate(),t=t._next;return this},t._enabled=function(t,e){if(t===this._gc)for(var i=this._first;i;)i._enabled(t,!0),i=i._next;return u.prototype._enabled.call(this,t,e)},t.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},t.totalDuration=function(t){if(arguments.length)return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this;if(this._dirty){for(var e,i,s=0,n=this._last,r=999999999999;n;)e=n._prev,n._dirty&&n.totalDuration(),n._startTime>r&&this._sortChildren&&!n._paused?this.add(n,n._startTime-n._delay):r=n._startTime,n._startTime<0&&!n._paused&&(s-=n._startTime,this._timeline.smoothChildTiming&&(this._startTime+=n._startTime/this._timeScale),this.shiftChildren(-n._startTime,!1,-9999999999),r=0),s<(i=n._startTime+n._totalDuration/n._timeScale)&&(s=i),n=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration},t.usesFrames=function(){for(var t=this._timeline;t._timeline;)t=t._timeline;return t===h._rootFramesTimeline},t.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},d},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],10:[function(t,Q,e){"use strict";!function(p){var e,i,d=p.GreenSockGlobals||p;if(!d.TweenLite){var _,f=function(t){for(var e=t.split("."),i=d,s=0;e.length>s;s++)i[e[s]]=i=i[e[s]]||{};return i},u=f("com.greensock"),m=1e-10,o=[].slice,g=function(){},h=(e=Object.prototype.toString,i=e.call([]),function(t){return null!=t&&(t instanceof Array||"object"==typeof t&&!!t.push&&e.call(t)===i)}),w={},v=function(o,l,c,h){this.sc=w[o]?w[o].sc:[],(w[o]=this).gsClass=null,this.func=c;var u=[];this.check=function(t){for(var e,i,s,n,r=l.length,a=r;-1<--r;)(e=w[l[r]]||new v(l[r],[])).gsClass?(u[r]=e.gsClass,a--):t&&e.sc.push(this);if(0===a&&c)for(s=(i=("com.greensock."+o).split(".")).pop(),n=f(i.join("."))[s]=this.gsClass=c.apply(c,u),h&&(d[s]=n,"function"==typeof define&&define.amd?define((p.GreenSockAMDPath?p.GreenSockAMDPath+"/":"")+o.split(".").join("/"),[],function(){return n}):void 0!==Q&&Q.exports&&(Q.exports=n)),r=0;this.sc.length>r;r++)this.sc[r].check()},this.check(!0)},s=p._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=u._class=function(t,e,i){return e=e||function(){},s(t,[],function(){return e},i),e};s.globals=d;var t,n=[0,0,1,1],x=[],b=y("easing.Ease",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?n.concat(e):n},!0),T=b.map={},r=b.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(","),c=l.length,h=(i||"easeIn,easeOut,easeInOut").split(",");-1<--c;)for(r=l[c],n=s?y("easing."+r,null,!0):u.easing[r]||{},a=h.length;-1<--a;)o=h[a],T[r+"."+o]=T[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((t=b.prototype)._calcEnd=!1,t.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},l=(a=["Linear","Quad","Cubic","Quart","Quint,Strong"]).length;-1<--l;)t=a[l]+",Power"+l,r(new b(null,null,1,l),t,"easeOut",!0),r(new b(null,null,2,l),t,"easeIn"+(0===l?",easeNone":"")),r(new b(null,null,3,l),t,"easeInOut");T.linear=u.easing.Linear.easeIn,T.swing=u.easing.Quad.easeInOut;var k=y("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this});(t=k.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,o=this._listeners[t],l=0;for(null==o&&(this._listeners[t]=o=[]),a=o.length;-1<--a;)(r=o[a]).c===e&&r.s===i?o.splice(a,1):0===l&&n>r.pr&&(l=a+1);o.splice(l,0,{c:e,s:i,up:s,pr:n}),this!==A||_||A.wake()},t.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;-1<--i;)if(s[i].c===e)return void s.splice(i,1)},t.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for(e=n.length,i=this._eventTarget;-1<--e;)(s=n[e]).up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i)};for(var a,P=p.requestAnimationFrame,S=p.cancelAnimationFrame,O=Date.now||function(){return(new Date).getTime()},C=O(),l=(a=["ms","moz","webkit","o"]).length;-1<--l&&!P;)P=p[a[l]+"RequestAnimationFrame"],S=p[a[l]+"CancelAnimationFrame"]||p[a[l]+"CancelRequestAnimationFrame"];y("Ticker",function(t,e){var s,n,r,a,o,l=this,c=O(),i=!1!==e&&P,h=500,u=33,p=function(t){var e,i=O()-C;h=i&&i+this.totalDuration()/this._timeScale>t},t._enabled=function(t,e){return _||A.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},t._kill=function(){return this._enabled(!1,!1)},t.kill=function(t,e){return this._kill(t,e),this},t._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},t._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();-1<--e;)"{self}"===t[e]&&(i[e]=this);return i},t.eventCallback=function(t,e,i,s){if("on"===(t||"").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+"Params"]=h(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,n[t+"Scope"]=s),"onUpdate"===t&&(this._onUpdate=e)}return this},t.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},t.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&0this._duration?this._duration:t,e)):this._time},t.totalTime=function(t,e,i){if(_||A.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(ss;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._timeline&&this._uncache(!0),this},t._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t.timeline=null,t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),this._timeline&&this._uncache(!0)),this},t.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused)&&(n._reversed?n.render((n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale,e,i):n.render((t-n._startTime)*n._timeScale,e,i)),n=s},t.rawTime=function(){return _||A.wake(),this._totalTime};var I=y("TweenLite",function(t,e,i){if(c.call(this,e,i),this.render=I.prototype.render,null==t)throw"Cannot tween a null target.";this.target=t="string"==typeof t&&I.selector(t)||t;var s,n,r,i=t.jquery||t.length&&t!==p&&t[0]&&(t[0]===p||t[0].nodeType&&t[0].style&&!t.nodeType),a=this.vars.overwrite;if(this._overwrite=a=null==a?F[I.defaultOverwrite]:"number"==typeof a?a>>0:F[a],(i||t instanceof Array||t.push&&h(t))&&"number"!=typeof t[0])for(this._targets=r=o.call(t,0),this._propLookup=[],this._siblings=[],s=0;r.length>s;s++)(n=r[s])?"string"!=typeof n?n.length&&n!==p&&n[0]&&(n[0]===p||n[0].nodeType&&n[0].style&&!n.nodeType)?(r.splice(s--,1),this._targets=r=r.concat(o.call(n,0))):(this._siblings[s]=H(n,this,!1),1===a&&1=a._startTime&&a._startTime+a.totalDuration()/a._timeScale>c&&((p||!a._initted)&&c-a._startTime<=2e-10||(h[u++]=a)));for(d=u;-1<--d;)a=h[d],2===s&&a._kill(i,t)&&(r=!0),(2!==s||!a._firstPT&&a._initted)&&a._enabled(!1,!1)&&(r=!0);return r},W=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return e<(r/=n)?r-e:i&&r===e||!t._initted&&r-e<2*m?m:(r+=t.totalDuration()/t._timeScale/n)>e+m?0:r-e-m};t._init=function(){var t,e,i,s,n,r=this.vars,a=this._overwrittenProps,o=this._duration,l=!!r.immediateRender,c=r.ease;if(r.startAt){for(s in this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),n={},r.startAt)n[s]=r.startAt[s];if(n.overwrite=!1,n.immediateRender=!0,n.lazy=l&&!1!==r.lazy,n.startAt=n.delay=null,this._startAt=I.to(this.target,0,n),l)if(0o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;-1<--e;)t[e].API===V.API&&(E[(new t[e])._propName]=t[e]);return!0},s.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=y("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){V.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new V(i);for(e in(o.constructor=a).API=t.API,r)"function"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,V.activate([a]),a},a=p._gsQueue){for(l=0;a.length>l;l++)a[l]();for(t in w)w[t].func||p.console.log("GSAP encountered missing dependency: com.greensock."+t)}_=!1}}(window)},{}],11:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("easing.Back",["easing.Ease"],function(m){function t(t,e){var i=c("easing."+t,function(){},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,i}function e(t,e,i,s){return s=c("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0),h(s,t),s}function g(t,e,i){this.t=t,this.v=e,i&&(((this.next=i).prev=this).c=i.v-e,this.gap=i.t-t)}function i(t,e){var i=c("easing."+t,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0);return(t=i.prototype=new m).constructor=i,t.getRatio=e,t.config=function(t){return new i(t)},i}var s,n,r=window.GreenSockGlobals||window,a=r.com.greensock,o=2*Math.PI,l=Math.PI/2,c=a._class,h=m.register||function(){},u=e("Back",i("BackOut",function(t){return--t*t*((this._p1+1)*t+this._p1)+1}),i("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),i("BackInOut",function(t){return(t*=2)<1?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),p=c("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:1t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},p.ease=new p(.7,.7),a.config=p.config=function(t,e,i){return new p(t,e,i)},(a=(s=c("easing.SteppedEase",function(t){this._p1=1/(t=t||1),this._p2=t+1},!0)).prototype=new m).constructor=s,a.getRatio=function(t){return t<0?t=0:1<=t&&(t=.999999999),(this._p2*t>>0)*this._p1},a.config=s.config=function(t){return new s(t)},(a=(n=c("easing.RoughEase",function(t){for(var e,i,s,n,r,a,o=(t=t||{}).taper||"none",l=[],c=0,h=0|(t.points||20),u=h,p=!1!==t.randomize,d=!0===t.clamp,_=t.template instanceof m?t.template:null,f="number"==typeof t.strength?.4*t.strength:.4;-1<--u;)e=p?Math.random():1/h*u,i=_?_.getRatio(e):e,s="none"===o?f:"out"===o?(n=1-e)*n*f:"in"===o?e*e*f:.5*(n=e<.5?2*e:2*(1-e))*n*f,p?i+=Math.random()*s-.5*s:u%2?i+=.5*s:i-=.5*s,d&&(1e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return(this._prev=e).v+(t-e.t)/e.gap*e.c},a.config=function(t){return new n(t)},n.ease=new n,e("Bounce",t("BounceOut",function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),t("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),t("BounceInOut",function(t){var e=t<.5;return t=(t=e?1-2*t:2*t-1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),e("Circ",t("CircOut",function(t){return Math.sqrt(1- --t*t)}),t("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),t("CircInOut",function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),e("Elastic",(a=function(t,e,i){var s=c("easing."+t,function(t,e){this._p1=t||1,this._p2=e||i,this._p3=this._p2/o*(Math.asin(1/this._p1)||0)},!0),t=s.prototype=new m;return t.constructor=s,t.getRatio=e,t.config=function(t,e){return new s(t,e)},s})("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*o/this._p2)+1},.3),a("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2))},.3),a("ElasticInOut",function(t){return(t*=2)<1?-.5*this._p1*Math.pow(2,10*--t)*Math.sin((t-this._p3)*o/this._p2):.5*this._p1*Math.pow(2,-10*--t)*Math.sin((t-this._p3)*o/this._p2)+1},.45)),e("Expo",t("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),t("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),t("ExpoInOut",function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),e("Sine",t("SineOut",function(t){return Math.sin(t*l)}),t("SineIn",function(t){return 1-Math.cos(t*l)}),t("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),c("easing.EaseLookup",{find:function(t){return m.map[t]}},!0),h(r.SlowMo,"SlowMo","ease,"),h(n,"RoughEase","ease,"),h(s,"SteppedEase","ease,"),u},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],12:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){window._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(r,p){function N(){r.call(this,"css"),this._overwriteProps.length=0,this.setRatio=N.prototype.setRatio}var d,x,b,u,_={},t=N.prototype=new r("css");(t.constructor=N).version="1.12.1",N.API=2,N.defaultTransformPerspective=0,N.defaultSkewType="compensated",N.suffixMap={top:t="px",right:t,bottom:t,left:t,width:t,height:t,fontSize:t,padding:t,margin:t,perspective:t,lineHeight:""};function n(t,e){return e.toUpperCase()}function a(t){return L.test("string"==typeof t?t:(t.currentStyle||t.style).filter||"")?parseFloat(RegExp.$1)/100:1}function f(t){window.console&&console.log(t)}function T(t,e){var i,s,n=(e=e||Z).style;if(void 0!==n[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],s=5;-1<--s&&void 0===n[i[s]+t];);return 0<=s?(tt="-"+(et=3===s?"ms":i[s]).toLowerCase()+"-",et+t):null}function m(t,e){var i,s={};if(e=e||it(t,null))if(i=e.length)for(;-1<--i;)s[e[i].replace(Y,n)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===s[i]&&(s[i.replace(Y,n)]=e[i]);return J||(s.opacity=a(t)),t=Pt(t,e,!1),s.rotation=t.rotation,s.skewX=t.skewX,s.scaleX=t.scaleX,s.scaleY=t.scaleY,s.x=t.x,s.y=t.y,Tt&&(s.z=t.z,s.rotationX=t.rotationX,s.rotationY=t.rotationY,s.scaleZ=t.scaleZ),s.filters&&delete s.filters,s}function g(t,e,i,s,n){var r,a,o,l={},c=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(r=i[a])||n&&n[a])&&-1===a.indexOf("Origin")&&("number"==typeof r||"string"==typeof r)&&(l[a]="auto"!==r||"left"!==a&&"top"!==a?""!==r&&"auto"!==r&&"none"!==r||"string"!=typeof e[a]||""===e[a].replace(D,"")?r:0:rt(t,a),void 0!==c[a]&&(o=new pt(c,a,c[a],o)));if(s)for(a in s)"className"!==a&&(l[a]=s[a]);return{difs:l,firstMPT:o}}function w(t,e){var i=(t=null==t||""===t||"auto"===t||"auto auto"===t?"0 0":t).split(" "),s=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0];return null==(t=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1])?t="0":"center"===t&&(t="50%"),("center"===s||isNaN(parseFloat(s))&&-1===(s+"").indexOf("="))&&(s="50%"),e&&(e.oxp=-1!==s.indexOf("%"),e.oyp=-1!==t.indexOf("%"),e.oxr="="===s.charAt(1),e.oyr="="===t.charAt(1),e.ox=parseFloat(s.replace(D,"")),e.oy=parseFloat(t.replace(D,""))),s+" "+t+(2>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),lt[t]||("#"===t.charAt(0)?(4===t.length&&(t="#"+(e=t.charAt(1))+e+(i=t.charAt(2))+i+(r=t.charAt(3))+r),[(t=parseInt(t.substr(1),16))>>16,255&t>>8,255&t]):("hsl"===t.substr(0,3)?(t=t.match(A),s=Number(t[0])%360/360,n=Number(t[1])/100,e=2*(r=Number(t[2])/100)-(i=r<=.5?r*(1+n):r+n-r*n),3a",!!(i=i.getElementsByTagName("a")[0])&&/^0.55/.test(i.style.opacity)),tt="",et="",it=Q.defaultView?Q.defaultView.getComputedStyle:function(){},st=N.getStyle=function(t,e,i,s,n){var r;return J||"opacity"!==e?(!s&&t.style[e]?r=t.style[e]:(i=i||it(t))?r=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(z,"-$1").toLowerCase()):t.currentStyle&&(r=t.currentStyle[e]),null==n||r&&"none"!==r&&"auto"!==r&&"auto auto"!==r?r:n):a(t)},nt=s.convertToPixels=function(t,e,i,s,n){if("px"===s||!s)return i;if("auto"===s||!i)return 0;var r,a,o,l=$.test(e),c=t,h=Z.style,u=i<0;if(u&&(i=-i),"%"===s&&-1!==e.indexOf("border"))r=i/100*(l?t.clientWidth:t.clientHeight);else{if(h.cssText="border:0 solid red;position:"+st(t,"position")+";line-height:0;","%"!==s&&c.appendChild)h[l?"borderLeftWidth":"borderTopWidth"]=i+s;else{if(a=(c=t.parentNode||Q.body)._gsCache,o=p.ticker.frame,a&&l&&a.time===o)return a.width*i/100;h[l?"width":"height"]=i+s}c.appendChild(Z),r=parseFloat(Z[l?"offsetWidth":"offsetHeight"]),c.removeChild(Z),l&&"%"===s&&!1!==N.cacheWidths&&((a=c._gsCache=c._gsCache||{}).time=o,a.width=r/i*100),0!==r||n||(r=nt(t,e,i,s,!0))}return u?-r:r},rt=s.calculateOffset=function(t,e,i){if("absolute"!==st(t,"position",i))return 0;var s="left"===e?"Left":"Top",i=st(t,"margin"+s,i);return t["offset"+s]-(nt(t,e,parseFloat(i),i.replace(j,""))||0)},at={width:["Left","Right"],height:["Top","Bottom"]},ot=["marginLeft","marginRight","marginTop","marginBottom"],lt={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ct="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(t in lt)ct+="|"+t+"\\b";function ht(t,e,r,a){if(null==t)return function(t){return t};var o,l=e?(t.match(ct)||[""])[0]:"",c=t.split(l).join("").match(I)||[],h=t.substr(0,t.indexOf(c[0])),u=")"===t.charAt(t.length-1)?")":"",p=-1!==t.indexOf(" ")?" ":",",d=c.length,_=0s;s++)n[s]=o(n[s]);return n.join(",")}if(e=(t.match(ct)||[l])[0],s=(i=t.split(e).join("").match(I)||[]).length,d>s--)for(;d>++s;)i[s]=r?i[0|(s-1)/2]:c[s];return h+i.join(p)+p+e+u+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,i,s;if("number"==typeof t)t+=_;else if(a&&H.test(t)){for(i=t.replace(H,"|").split("|"),s=0;i.length>s;s++)i[s]=o(i[s]);return i.join(",")}if(s=(e=t.match(I)||[]).length,d>s--)for(;d>++s;)e[s]=r?e[0|(s-1)/2]:c[s];return h+e.join(p)+u}:function(t){return t}}function ut(c){return c=c.split(","),function(t,e,i,s,n,r,a){var o,l=(e+"").split(" ");for(a={},o=0;o<4;o++)a[c[o]]=l[o]=l[o]||l[(o-1)/2>>0];return s.parse(t,a,n,r)}}var ct=RegExp(ct+")","gi"),pt=(s._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,s,n,r=this.data,a=r.proxy,o=r.firstMPT;o;)e=a[o.v],o.r?e=Math.round(e):e<1e-6&&-1e-6s;s++)n+=i["xn"+s]+i["xs"+(s+1)];i.e=n}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,s,n){this.t=t,this.p=e,this.v=i,this.r=n,s&&((s._prev=this)._next=s)}),dt=(s._parseToProxy=function(t,e,i,s,n,r){var a,o,l,c,h=s,u={},p={},d=i._transform,_=V;for(i._transform=null,V=e,s=n=i.parse(t,e,s,n),V=_,r&&(i._transform=d,h&&(h._prev=null,h._prev&&(h._prev._next=null)));s&&s!==h;){if(s.type<=1&&(p[o=s.p]=s.s+s.c,u[o]=s.s,r||(c=new pt(s,"s",o,c,s.r),s.c=0),1===s.type))for(a=s.l;0<--a;)p[o=s.p+"_"+(l="xn"+a)]=s.data[l],u[o]=s[l],r||(c=new pt(s,l,o,c,s.rxp[l]));s=s._next}return{proxy:u,end:p,firstMPT:c,pt:n}},s.CSSPropTween=function(t,e,i,s,n,r,a,o,l,c,h){this.t=t,this.p=e,this.s=i,this.c=s,this.n=a||e,t instanceof dt||u.push(this.n),this.r=o,this.type=r||0,l&&(this.pr=l,d=!0),this.b=void 0===c?i:c,this.e=void 0===h?i+s:h,n&&((this._next=n)._prev=this)}),_t=N.parseComplex=function(t,e,i,s,n,r,a,o,l,c){a=new dt(t,e,0,0,a,c?2:1,null,!1,o,i=i||r||"",s),s+="";var h,u,p,d,_,f,m,g,w,v,y,x=i.split(", ").join(",").split(" "),b=s.split(", ").join(",").split(" "),T=x.length,k=!1!==O;for(-1===s.indexOf(",")&&-1===i.indexOf(",")||(x=x.join(" ").replace(H,", ").split(" "),b=b.join(" ").replace(H,", ").split(" "),T=x.length),T!==b.length&&(T=(x=(r||"").split(" ")).length),a.plugin=l,a.setRatio=c,h=0;hu;u++)v=f[u],w=d.indexOf(v,p),a.appendXtra(d.substr(p,w-p),Number(v),P(m[u],v),"",k&&"px"===d.substr(w+v.length,2),0===u),p=w+v.length;a["xs"+a.l]+=d.substr(p)}else a["xs"+a.l]+=a.l?" "+d:d;if(-1!==s.indexOf("=")&&a.data){for(y=a.xs0+a.data.s,h=1;a.l>h;h++)y+=a["xs"+h]+a.data["xn"+h];a.e=y+a["xs"+h]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ft=9;for((t=dt.prototype).l=t.pr=0;0<--ft;)t["xn"+ft]=0,t["xs"+ft]="";t.xs0="",t._next=t._prev=t.xfirst=t.data=t.plugin=t.setRatio=t.rxp=null,t.appendXtra=function(t,e,i,s,n,r){var a=this,o=a.l;return a["xs"+o]+=r&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=s||"",0s;s++)e.prefix=0===s&&e.prefix,e.defaultValue=i[s]||r,new mt(n[s],e)};(t=mt.prototype).parseComplex=function(t,e,i,s,n,r){var a,o,l,c,h,u=this.keyword;if(this.multi&&(H.test(i)||H.test(e)?(o=e.replace(H,"|").split("|"),l=i.replace(H,"|").split("|")):u&&(o=[e],l=[i])),l){for(c=(l.length>o.length?l:o).length,a=0;aI[r]&&I[r]>-j&&(I[r]=0);return i&&(t._gsTransform=I),I},St=s.set3DTransformRatio=function(t){var e,i,s,n,r,a,o,l,c,h,u,p,d,_,f,m,g,w,v,y,x,b,T=this.data,k=this.t.style,P=T.rotation*U,S=T.scaleX,O=T.scaleY,C=T.scaleZ,A=T.perspective;if(1!==t&&0!==t||"auto"!==T.force3D||T.rotationY||T.rotationX||1!==C||A||T.z){if(M&&(S<1e-4&&-1e-4y;y++)this.p.indexOf("border")&&(f[y]=T(f[y])),-1!==(o=a=st(t,f[y],b,!1,"0px")).indexOf(" ")&&(o=(a=o.split(" "))[0],a=a[1]),l=r=v[y],d=parseFloat(o),_=o.substr((d+"").length),(h=""===(h=(u="="===l.charAt(1))?(c=parseInt(l.charAt(0)+"1",10),l=l.substr(2),c*=parseFloat(l),l.substr((c+"").length-(c<0?1:0))||""):(c=parseFloat(l),l.substr((c+"").length)))?x[i]||_:h)!==_&&(p=nt(t,"borderLeft",d,_),d=nt(t,"borderTop",d,_),a="%"===h?(o=p/g*100+"%",d/w*100+"%"):"em"===h?(o=p/(_=nt(t,"borderLeft",1,"em"))+"em",d/_+"em"):(o=p+"px",d+"px"),u&&(l=parseFloat(o)+c+h,r=parseFloat(a)+c+h)),n=_t(m,f[y],o+" "+a,l+" "+r,!1,"0px",n);return n},prefix:!0,formatter:ht("0px 0px 0px 0px",!1,!0)}),gt("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,i,s,n,r){var a,o,l,c,h,u,p="background-position",d=b||it(t,null),_=this.format((d?C?d.getPropertyValue(p+"-x")+" "+d.getPropertyValue(p+"-y"):d.getPropertyValue(p):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),e=this.format(e);if(-1!==_.indexOf("%")!=(-1!==e.indexOf("%"))&&((u=st(t,"backgroundImage").replace(F,""))&&"none"!==u)){for(a=_.split(" "),o=e.split(" "),G.setAttribute("src",u),l=2;-1<--l;)(c=-1!==(_=a[l]).indexOf("%"))!=(-1!==o[l].indexOf("%"))&&(h=0===l?t.offsetWidth-G.width:t.offsetHeight-G.height,a[l]=c?parseFloat(_)/100*h+"px":parseFloat(_)/h*100+"%");_=a.join(" ")}return this.parseComplex(t.style,_,e,n,r)},formatter:w}),gt("backgroundSize",{defaultValue:"0 0",formatter:w}),gt("perspective",{defaultValue:"0px",prefix:!0}),gt("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),gt("transformStyle",{prefix:!0}),gt("backfaceVisibility",{prefix:!0}),gt("userSelect",{prefix:!0}),gt("margin",{parser:ut("marginTop,marginRight,marginBottom,marginLeft")}),gt("padding",{parser:ut("paddingTop,paddingRight,paddingBottom,paddingLeft")}),gt("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,i,s,n,r){var a,o;return e=C<9?(a=t.currentStyle,o=C<8?" ":",",a="rect("+a.clipTop+o+a.clipRight+o+a.clipBottom+o+a.clipLeft+")",this.format(e).split(",").join(o)):(a=this.format(st(t,this.p,b,!1,this.dflt)),this.format(e)),this.parseComplex(t.style,a,e,n,r)}}),gt("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),gt("autoRound,strictUnits",{parser:function(t,e,i,s,n){return n}}),gt("border",{defaultValue:"0px solid #000",parser:function(t,e,i,s,n,r){return this.parseComplex(t.style,this.format(st(t,"borderTopWidth",b,!1,"0px")+" "+st(t,"borderTopStyle",b,!1,"solid")+" "+st(t,"borderTopColor",b,!1,"#000")),this.format(e),n,r)},color:!0,formatter:function(t){var e=t.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(t.match(ct)||["#000"])[0]}}),gt("borderWidth",{parser:ut("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")}),gt("float,cssFloat,styleFloat",{parser:function(t,e,i,s,n){var r=t.style,t="cssFloat"in r?"cssFloat":"styleFloat";return new dt(r,t,0,0,n,-1,i,!1,0,r[t],e)}});function Ct(t){var e,i=this.t,s=i.filter||st(this.data,"filter"),t=0|this.s+this.c*t;(e=100==t?-1===s.indexOf("atrix(")&&-1===s.indexOf("radient(")&&-1===s.indexOf("oader(")?(i.removeAttribute("filter"),!st(this.data,"filter")):(i.filter=s.replace(l,""),!0):e)||(this.xn1&&(i.filter=s=s||"alpha(opacity="+t+")"),-1===s.indexOf("pacity")?0==t&&this.xn1||(i.filter=s+" alpha(opacity="+t+")"):i.filter=s.replace(L,"opacity="+t))}gt("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,i,s,n,r){var a=parseFloat(st(t,"opacity",b,!1,"1")),o=t.style,l="autoAlpha"===i;return"string"==typeof e&&"="===e.charAt(1)&&(e=("-"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+a),l&&1===a&&"hidden"===st(t,"visibility",b)&&0!==e&&(a=0),J?n=new dt(o,"opacity",a,e-a,n):((n=new dt(o,"opacity",100*a,100*(e-a),n)).xn1=l?1:0,o.zoom=1,n.type=2,n.b="alpha(opacity="+n.s+")",n.e="alpha(opacity="+(n.s+n.c)+")",n.data=t,n.plugin=r,n.setRatio=Ct),l&&((n=new dt(o,"visibility",0,0,n,-1,null,!1,0,0!==a?"inherit":"hidden",0===e?"hidden":"inherit")).xs0="inherit",s._overwriteProps.push(n.n),s._overwriteProps.push(i)),n}});function At(t,e){e&&(t.removeProperty?("ms"===e.substr(0,2)&&(e="M"+e.substr(1)),t.removeProperty(e.replace(z,"-$1").toLowerCase())):t.removeAttribute(e))}function Mt(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute("class",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:At(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute("class")!==this.e&&this.t.setAttribute("class",this.e)}gt("className",{parser:function(t,e,i,s,n,r,a){var o,l,c,h=t.getAttribute("class")||"",u=t.style.cssText;if((n=s._classNamePT=new dt(t,i,0,0,n,2)).setRatio=Mt,n.pr=-11,d=!0,n.b=h,o=m(t,b),i=t._gsClassPT){for(l={},c=i.data;c;)l[c.p]=1,c=c._next;i.setRatio(1)}return(t._gsClassPT=n).e="="!==e.charAt(1)?e:h.replace(RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+("+"===e.charAt(0)?" "+e.substr(2):""),s._tween._duration&&(t.setAttribute("class",n.e),a=g(t,o,m(t),a,l),t.setAttribute("class",h),n.data=a.firstMPT,t.style.cssText=u,n=n.xfirst=s.parse(t,a.difs,n,r)),n}});function Rt(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var e,i,s,n,r=this.t.style,a=_.transform.parse;if("all"===this.e)n=!(r.cssText="");else for(s=(e=this.e.split(",")).length;-1<--s;)i=e[s],_[i]&&(_[i].parse===a?n=!0:i="transformOrigin"===i?bt:_[i].p),At(r,i);n&&(At(r,yt),this.t._gsTransform&&delete this.t._gsTransform)}}for(gt("clearProps",{parser:function(t,e,i,s,n){return(n=new dt(t,i,0,0,n,2)).setRatio=Rt,n.e=e,n.pr=-10,n.data=s._tween,d=!0,n}}),t="bezier,throwProps,physicsProps,physics2D".split(","),ft=t.length;ft--;)!function(t){var l;_[t]||(l=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin",gt(t,{parser:function(t,e,i,s,n,r,a){var o=(window.GreenSockGlobals||window).com.greensock.plugins[l];return o?(o._cssRegister(),_[i].parse(t,e,i,s,n,r,a)):(f("Error: "+l+" js file not loaded."),n)}}))}(t[ft]);(t=N.prototype)._firstPT=null,t._onInitTween=function(t,e,i){if(!t.nodeType)return!1;this._target=t,this._tween=i,this._vars=e,O=e.autoRound,d=!1,x=e.suffixMap||N.suffixMap,b=it(t,""),u=this._overwriteProps;var s,n,r,a,o,l,i=t.style;if(c&&""===i.zIndex&&("auto"!==(l=st(t,"zIndex",b))&&""!==l||this._addLazySet(i,"zIndex",0)),"string"==typeof e&&(r=i.cssText,l=m(t,b),i.cssText=r+";"+e,l=g(t,l,m(t)).difs,!J&&X.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,i.cssText=r),this._firstPT=s=this.parse(t,e,null),this._transformType){for(l=3===this._transformType,yt?h&&(c=!0,""===i.zIndex&&("auto"!==(e=st(t,"zIndex",b))&&""!==e||this._addLazySet(i,"zIndex",0)),k&&this._addLazySet(i,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(l?"visible":"hidden"))):i.zoom=1,n=s;n&&n._next;)n=n._next;i=new dt(t,"transform",0,0,null,2),this._linkCSSP(i,null,n),i.setRatio=l&&Tt?St:yt?Ot:wt,i.data=this._transform||Pt(t,b,!0),u.pop()}if(d){for(;s;){for(o=s._next,n=r;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:a)?s._prev._next=s:r=s,(s._next=n)?n._prev=s:a=s,s=o}this._firstPT=r}return!0},t.parse=function(t,e,i,s){var n,r,a,o,l,c,h,u,p=t.style;for(n in e)l=e[n],u=_[n],u?i=u.parse(t,l,n,this,i,s,e):(o=st(t,n,b)+"",h="string"==typeof l,"color"===n||"fill"===n||"stroke"===n||-1!==n.indexOf("Color")||h&&E.test(l)?(h||(l=S(l),l=(3s;s++)i+=n["xn"+s]+n["xs"+(s+1)];n.t[n.p]=i}else-1===n.type?n.t[n.p]=n.xs0:n.setRatio&&n.setRatio(t);else n.t[n.p]=e+n.xs0;n=n._next}else for(;n;)2!==n.type?n.t[n.p]=n.b:n.setRatio(t),n=n._next;else for(;n;)2!==n.type?n.t[n.p]=n.e:n.setRatio(t),n=n._next},t._enableTransforms=function(t){this._transformType=t||3===this._transformType?3:2,this._transform=this._transform||Pt(this._target,b,!0)};function It(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}t._addLazySet=function(t,e,i){e=this._firstPT=new dt(t,e,0,0,this._firstPT,2);e.e=i,e.setRatio=It,e.data=this},t._linkCSSP=function(t,e,i,s){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,s=!0),i?i._next=t:s||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},t._kill=function(t){var e,i,s,n=t;if(t.autoAlpha||t.alpha){for(i in n={},t)n[i]=t[i];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return t.className&&(e=this._classNamePT)&&((s=e.xfirst)&&s._prev?this._linkCSSP(s._prev,e._next,s._prev._prev):s===this._firstPT&&(this._firstPT=e._next),e._next&&this._linkCSSP(e._next,e._next._next,s._prev),this._classNamePT=null),r.prototype._kill.call(this,n)};function Dt(t,e,i){var s,n,r,a;if(t.slice)for(n=t.length;-1<--n;)Dt(t[n],e,i);else for(n=(s=t.childNodes).length;-1<--n;)a=(r=s[n]).type,r.style&&(e.push(m(r)),i&&i.push(r)),1!==a&&9!==a&&11!==a||!r.childNodes.length||Dt(r,e,i)}return N.cascadeTo=function(t,e,i){var s,n,r,a=p.to(t,e,i),o=[a],l=[],c=[],h=[],u=p._internals.reservedProps;for(t=a._targets||a.target,Dt(t,l,h),a.render(e,!0),Dt(t,c),a.render(0,!0),a._enabled(!0),s=h.length;-1<--s;)if((n=g(h[s],l[s],c[s])).firstMPT){for(r in n=n.difs,i)u[r]&&(n[r]=i[r]);o.push(p.to(h[s],e,n))}return o},r.activate([N]),N},!0)}),window._gsDefine&&window._gsQueue.pop()()},{}],13:[function(t,e,i){"use strict";(window._gsQueue||(window._gsQueue=[])).push(function(){function n(t,e){var i="x"===e?"Width":"Height",s="scroll"+i,n="client"+i,e=document.body;return t===a||t===r||t===e?Math.max(r[s],e[s])-(a["inner"+i]||Math.max(r[n],e[n])):t[s]-t["offset"+i]}var r=document.documentElement,a=window,t=window._gsDefine.plugin({propName:"scrollTo",API:2,version:"1.7.3",init:function(t,e,i){return this._wdw=t===a,this._target=t,this._tween=i,this._autoKill=!1!==(e="object"!=typeof e?{y:e}:e).autoKill,this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=e.x?(this._addTween(this,"x",this.x,"max"===e.x?n(t,"x"):e.x,"scrollTo_x",!0),this._overwriteProps.push("scrollTo_x")):this.skipX=!0,null!=e.y?(this._addTween(this,"y",this.y,"max"===e.y?n(t,"y"):e.y,"scrollTo_y",!0),this._overwriteProps.push("scrollTo_y")):this.skipY=!0,!0},set:function(t){this._super.setRatio.call(this,t);var e=this._wdw||!this.skipX?this.getX():this.xPrev,i=this._wdw||!this.skipY?this.getY():this.yPrev,s=i-this.yPrev,t=e-this.xPrev;this._autoKill&&(!this.skipX&&(7e&&(this.skipX=!0),!this.skipY&&(7i&&(this.skipY=!0),this.skipX&&this.skipY&&this._tween.kill()),this._wdw?a.scrollTo(this.skipX?e:this.x,this.skipY?i:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),e=t.prototype;t.max=n,e.getX=function(){return this._wdw?null!=a.pageXOffset?a.pageXOffset:(null!=r.scrollLeft?r:document.body).scrollLeft:this._target.scrollLeft},e.getY=function(){return this._wdw?null!=a.pageYOffset?a.pageYOffset:(null!=r.scrollTop?r:document.body).scrollTop:this._target.scrollTop},e._kill=function(t){return t.scrollTo_x&&(this.skipX=!0),t.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,t)}}),window._gsDefine&&window._gsQueue.pop()()},{}]},{},[2]); //# sourceMappingURL=wpr-admin.js.map diff --git a/composer.json b/composer.json index aea3f7a285..586657b4d2 100644 --- a/composer.json +++ b/composer.json @@ -41,6 +41,7 @@ ], "require": { "php": ">=7.3", + "cloudflare/cf-ip-rewrite": "^1.0", "composer/installers": "^1.0 || ^2.0", "monolog/monolog": "^1.0 || ^2.0" }, @@ -115,10 +116,11 @@ }, "scripts": { "test-unit": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist", - "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --exclude-group AdminOnly,BeaverBuilder,Elementor,Hummingbird,WithSmush,WithWoo,WithAmp,WithAmpAndCloudflare,WithSCCSS,Cloudways,Dreampress,DoCloudflare,Multisite,WPEngine,SpinUpWP,WordPressCom,O2Switch,PDFEmbedder,PDFEmbedderPremium,PDFEmbedderSecure,Godaddy,LiteSpeed,RevolutionSlider,WordFence,ConvertPlug,Kinsta,Jetpack,RankMathSEO,AllInOneSeoPack,SEOPress,TheSEOFramework,OneCom,RocketLazyLoad,WPXCloud,TheEventsCalendar,Perfmatters,RapidLoad,ProIsp,WPGeotargeting", + "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --exclude-group AdminOnly,BeaverBuilder,Elementor,Hummingbird,WithSmush,WithWoo,WithAmp,WithAmpAndCloudflare,WithSCCSS,Cloudways,Dreampress,Cloudflare,CloudflareAdmin,Multisite,WPEngine,SpinUpWP,WordPressCom,O2Switch,PDFEmbedder,PDFEmbedderPremium,PDFEmbedderSecure,Godaddy,LiteSpeed,RevolutionSlider,WordFence,ConvertPlug,Kinsta,Jetpack,RankMathSEO,AllInOneSeoPack,SEOPress,TheSEOFramework,OneCom,RocketLazyLoad,WPXCloud,TheEventsCalendar,Perfmatters,RapidLoad,ProIsp,WPGeotargeting", "test-integration-adminonly": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group AdminOnly", "test-integration-bb": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group BeaverBuilder", - "test-integration-cloudflare": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group DoCloudflare", + "test-integration-cloudflare": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Cloudflare", + "test-integration-cloudflareadmin": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group CloudflareAdmin", "test-integration-cloudways": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Cloudways", "test-integration-elementor": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Elementor", "test-integration-hummingbird": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Hummingbird", @@ -160,6 +162,7 @@ "@test-integration", "@test-integration-adminonly", "@test-integration-cloudflare", + "@test-integration-cloudflareadmin", "@test-integration-bb", "@test-integration-elementor", "@test-integration-hummingbird", diff --git a/inc/Addon/Cloudflare/API/Client.php b/inc/Addon/Cloudflare/API/Client.php new file mode 100644 index 0000000000..b0f3b83d92 --- /dev/null +++ b/inc/Addon/Cloudflare/API/Client.php @@ -0,0 +1,218 @@ +auth = $auth; + $this->args = [ + 'sslverify' => true, + 'body' => [], + 'headers' => [], + ]; + } + /** + * Change client auth. + * + * @param AuthInterface $auth Client auth. + * + * @return void + */ + public function set_auth( AuthInterface $auth ) { + $this->auth = $auth; + } + + /** + * API call method for sending requests using GET. + * + * @param string $path Path of the endpoint. + * @param array $data Data to be sent along with the request. + * + * @return object + */ + public function get( $path, array $data = [] ) { + return $this->request( $path, 'get', $data ); + } + + /** + * API call method for sending requests using POST. + * + * @param string $path Path of the endpoint. + * @param array $data Data to be sent along with the request. + * + * @return object + */ + public function post( $path, array $data = [] ) { + return $this->request( $path, 'post', $data ); + } + + /** + * API call method for sending requests using DELETE. + * + * @param string $path Path of the endpoint. + * @param array $data Data to be sent along with the request. + * + * @return object + */ + public function delete( $path, array $data = [] ) { + return $this->request( $path, 'delete', $data ); + } + + /** + * API call method for sending requests using PATCH. + * + * @param string $path Path of the endpoint. + * @param array $data Data to be sent along with the request. + * + * @return object + */ + public function patch( $path, array $data = [] ) { + return $this->request( $path, 'patch', $data ); + } + + /** + * API call method for sending requests + * + * @param string $path Path of the endpoint. + * @param string $method Type of method that should be used. + * @param array $data Data to be sent along with the request. + * + * @return object|WP_Error + */ + protected function request( $path, $method = 'get', array $data = [] ) { + if ( '/ips' !== $path ) { + $valid = $this->auth->is_valid_credentials(); + + if ( is_wp_error( $valid ) ) { + return $valid; + } + + if ( ! $valid ) { + return new WP_Error( 'cloudflare_invalid_credentials', 'Cloudflare credentials are invalid.' ); + } + } + + $response = $this->do_remote_request( $path, $method, $data ); + + if ( is_wp_error( $response ) ) { + return $response; + } + + $content = wp_remote_retrieve_body( $response ); + + if ( empty( $content ) ) { + return new WP_Error( 'cloudflare_no_reply', __( 'Cloudflare did not provide any reply. Please try again later.', 'rocket' ) ); + } + + $content = json_decode( $content ); + + if ( empty( $content->success ) ) { + return $this->set_request_error( $content ); + } + + return $content->result; + } + + /** + * Does the request remote request. + * + * @param string $path Path of the endpoint. + * @param string $method Type of method that should be used. + * @param array $data Data to be sent along with the request. + * + * @return array|WP_Error + */ + private function do_remote_request( string $path, string $method, array $data ) { + $this->args['method'] = isset( $method ) ? strtoupper( $method ) : 'GET'; + + $headers = [ + 'User-Agent' => 'wp-rocket/' . rocket_get_constant( 'WP_ROCKET_VERSION' ), + 'Content-Type' => 'application/json', + ]; + + if ( '/ips' !== $path ) { + $this->args['headers'] = array_merge( $headers, $this->auth->get_headers() ); + } + + $this->args['body'] = []; + + if ( ! empty( $data ) ) { + $this->args['body'] = wp_json_encode( $data ); + } + + $response = wp_remote_request( self::CLOUDFLARE_API . $path, $this->args ); + + return $response; + } + + /** + * Sets the WP_Error when request is not successful + * + * @param object $content Response object. + * + * @return WP_Error + */ + private function set_request_error( $content ) { + $errors = []; + + foreach ( $content->errors as $error ) { + if ( + 6003 === $error->code || 9103 === $error->code ) { + $msg = __( 'Incorrect Cloudflare email address or API key.', 'rocket' ); + + $msg .= ' ' . sprintf( + /* translators: %1$s = opening link; %2$s = closing link */ + __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), + // translators: Documentation exists in EN, FR; use localized URL if applicable. + '', + '' + ); + + return new WP_Error( 'cloudflare_incorrect_credentials', $msg ); + } + + if ( 7003 === $error->code ) { + $msg = __( 'Incorrect Cloudflare Zone ID.', 'rocket' ); + + $msg .= ' ' . sprintf( + /* translators: %1$s = opening link; %2$s = closing link */ + __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), + // translators: Documentation exists in EN, FR; use localized URL if applicable. + '', + '' + ); + + return new WP_Error( 'cloudflare_incorrect_zone_id', $msg ); + } + + $errors[] = $error->message; + } + + return new WP_Error( 'cloudflare_request_error', wp_sprintf_l( '%l ', $errors ) ); + } +} diff --git a/inc/Addon/Cloudflare/API/Endpoints.php b/inc/Addon/Cloudflare/API/Endpoints.php new file mode 100644 index 0000000000..bc4a73d2ba --- /dev/null +++ b/inc/Addon/Cloudflare/API/Endpoints.php @@ -0,0 +1,174 @@ +client = $client; + } + + /** + * Get zone data. + * + * @param string $zone_id Zone ID. + * + * @return object + */ + public function get_zones( string $zone_id ) { + return $this->client->get( "zones/{$zone_id}" ); + } + + /** + * Get the zone's page rules. + * + * @param string $zone_id Zone ID. + * @param string $status Rule status. + * + * @return object + */ + public function list_pagerules( string $zone_id, string $status ) { + return $this->client->get( "zones/{$zone_id}/pagerules?status={$status}" ); + } + + /** + * Purges the cache. + * + * @param string $zone_id Zone ID. + * + * @return object + */ + public function purge( string $zone_id ) { + return $this->client->post( "zones/{$zone_id}/purge_cache", [ 'purge_everything' => true ] ); + } + + /** + * Purges the given URLs. + * + * @param string $zone_id Zone ID. + * @param array $urls An array of URLs that should be removed from cache. + * + * @return object + */ + public function purge_files( string $zone_id, array $urls = [] ) { + return $this->client->post( "zones/{$zone_id}/purge_cache", [ 'files' => $urls ] ); + } + + /** + * Updates the zone's browser cache TTL setting + * + * @param string $zone_id Zone ID. + * @param string $value Cache TTL value. + * + * @return object + */ + public function update_browser_cache_ttl( string $zone_id, $value ) { + return $this->update_setting( $zone_id, 'browser_cache_ttl', $value ); + } + + /** + * Updates the zone's rocket loader setting. + * + * @param string $zone_id Zone ID. + * @param string $value Rocket Loader value. + * + * @return object + */ + public function update_rocket_loader( string $zone_id, $value ) { + return $this->update_setting( $zone_id, 'rocket_loader', $value ); + } + + /** + * Updates the zone's minify setting. + * + * @param string $zone_id Zone ID. + * @param string $value Minify value. + * + * @return object + */ + public function update_minify( string $zone_id, $value ) { + return $this->update_setting( $zone_id, 'minify', $value ); + } + + /** + * Updates the zone's cache level. + * + * @param string $zone_id Zone ID. + * @param string $value Cache level value. + * + * @return object + */ + public function change_cache_level( string $zone_id, $value ) { + return $this->update_setting( $zone_id, 'cache_level', $value ); + } + + /** + * Changes the zone's development mode. + * + * @param string $zone_id Zone ID. + * @param string $value Development mode value. + * + * @return object + */ + public function change_development_mode( string $zone_id, $value ) { + return $this->update_setting( $zone_id, 'development_mode', $value ); + } + + /** + * Updates the given setting. + * + * @param string $zone_id Zone ID. + * @param string $setting Name of the setting to change. + * @param string $value Setting value. + * + * @return object + */ + protected function update_setting( string $zone_id, $setting, $value ) { + return $this->client->patch( "zones/{$zone_id}/settings/{$setting}", [ 'value' => $value ] ); + } + + /** + * Gets all of the Cloudflare settings. + * + * @param string $zone_id Zone ID. + * + * @return object + */ + public function get_settings( string $zone_id ) { + return $this->client->get( "zones/{$zone_id}/settings" ); + } + + /** + * Gets Cloudflare's IPs. + * + * @return object + */ + public function get_ips() { + return $this->client->get( '/ips' ); + } + + /** + * Change client auth. + * + * @param AuthInterface $auth Client auth. + * + * @return void + */ + public function change_auth( AuthInterface $auth ) { + $this->client->set_auth( $auth ); + } +} diff --git a/inc/Addon/Cloudflare/APIClient.php b/inc/Addon/Cloudflare/APIClient.php deleted file mode 100644 index 244cad5851..0000000000 --- a/inc/Addon/Cloudflare/APIClient.php +++ /dev/null @@ -1,394 +0,0 @@ -args = [ - 'timeout' => 30, // Increase from default of 5 to give extra time for the plugin to process story for exporting. - 'sslverify' => true, - 'body' => [], - ]; - $this->headers = [ - 'X-Auth-Email' => '', - 'X-Auth-Key' => '', - 'User-Agent' => $useragent, - 'Content-type' => 'application/json', - ]; - } - - /** - * Sets up the API credentials. - * - * @since 1.0 - * - * @param string $email The email associated with the Cloudflare account. - * @param string $api_key The API key for the associated Cloudflare account. - * @param string $zone_id The zone ID. - */ - public function set_api_credentials( $email, $api_key, $zone_id ) { - $this->email = $email; - $this->api_key = $api_key; - $this->zone_id = $zone_id; - - $this->headers['X-Auth-Email'] = $email; - $this->headers['X-Auth-Key'] = $api_key; - } - - /** - * Get zone data. - * - * @since 1.0 - * - * @return stdClass Cloudflare response packet. - */ - public function get_zones() { - return $this->get( "zones/{$this->zone_id}" ); - } - - /** - * Get the zone's page rules. - * - * @since 1.0 - * - * @return stdClass Cloudflare response packet. - */ - public function list_pagerules() { - return $this->get( "zones/{$this->zone_id}/pagerules?status=active" ); - } - - /** - * Purges the cache. - * - * @since 1.0 - * - * @return stdClass Cloudflare response packet. - */ - public function purge() { - return $this->delete( "zones/{$this->zone_id}/purge_cache", [ 'purge_everything' => true ] ); - } - - /** - * Purges the given URLs. - * - * @since 1.0 - * - * @param array|null $urls An array of URLs that should be removed from cache. - * - * @return stdClass Cloudflare response packet. - */ - public function purge_files( array $urls ) { - return $this->delete( "zones/{$this->zone_id}/purge_cache", [ 'files' => $urls ] ); - } - - /** - * Changes the zone's browser cache TTL setting. - * - * @since 1.0 - * - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - public function change_browser_cache_ttl( $value ) { - return $this->change_setting( 'browser_cache_ttl', $value ); - } - - /** - * Changes the zone's rocket loader setting. - * - * @since 1.0 - * - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - public function change_rocket_loader( $value ) { - return $this->change_setting( 'rocket_loader', $value ); - } - - /** - * Changes the zone's minify setting. - * - * @since 1.0 - * - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - public function change_minify( $value ) { - return $this->change_setting( 'minify', $value ); - } - - /** - * Changes the zone's cache level. - * - * @since 1.0 - * - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - public function change_cache_level( $value ) { - return $this->change_setting( 'cache_level', $value ); - } - - /** - * Changes the zone's development mode. - * - * @since 1.0 - * - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - public function change_development_mode( $value ) { - return $this->change_setting( 'development_mode', $value ); - } - - /** - * Changes the given setting. - * - * @since 1.0 - * - * @param string $setting Name of the setting to change. - * @param string $value New setting's value. - * - * @return stdClass Cloudflare response packet. - */ - protected function change_setting( $setting, $value ) { - return $this->patch( "zones/{$this->zone_id}/settings/{$setting}", [ 'value' => $value ] ); - } - - /** - * Gets all of the Cloudflare settings. - * - * @since 1.0 - * - * @return stdClass Cloudflare response packet. - */ - public function get_settings() { - return $this->get( "zones/{$this->zone_id}/settings" ); - } - - /** - * Gets Cloudflare's IPs. - * - * @since 1.0 - * - * @return stdClass Cloudflare response packet. - */ - public function get_ips() { - return $this->get( '/ips' ); - } - - /** - * API call method for sending requests using GET. - * - * @since 1.0 - * - * @param string $path Path of the endpoint. - * @param array $data Data to be sent along with the request. - * - * @return stdClass Cloudflare response packet. - */ - protected function get( $path, array $data = [] ) { - return $this->request( $path, $data, 'get' ); - } - - /** - * API call method for sending requests using DELETE. - * - * @since 1.0 - * - * @param string $path Path of the endpoint. - * @param array $data Data to be sent along with the request. - * - * @return stdClass Cloudflare response packet. - */ - protected function delete( $path, array $data = [] ) { - return $this->request( $path, $data, 'delete' ); - } - - /** - * API call method for sending requests using PATCH. - * - * @since 1.0 - * - * @param string $path Path of the endpoint. - * @param array $data Data to be sent along with the request. - * - * @return stdClass Cloudflare response packet. - */ - protected function patch( $path, array $data = [] ) { - return $this->request( $path, $data, 'patch' ); - } - - /** - * API call method for sending requests using GET, POST, PUT, DELETE OR PATCH. - * - * @since 1.0 - * - * @author James Bell - credit for original code adapted for version 1.0. - * @author WP Media - * - * @param string $path Path of the endpoint. - * @param array $data Data to be sent along with the request. - * @param string $method Type of method that should be used ('GET', 'DELETE', 'PATCH'). - * - * @return stdClass response object. - * @throws AuthenticationException When email or api key are not set. - * @throws UnauthorizedException When Cloudflare's API returns a 401 or 403. - */ - protected function request( $path, array $data = [], $method = 'get' ) { - if ( '/ips' !== $path && ! $this->is_authorized() ) { - throw new AuthenticationException( 'Authentication information must be provided.' ); - } - - $response = $this->do_remote_request( $path, $data, $method ); - - if ( is_wp_error( $response ) ) { - throw new Exception( $response->get_error_message() ); - } - - $data = wp_remote_retrieve_body( $response ); - - if ( empty( $data ) ) { - throw new Exception( __( 'Cloudflare did not provide any reply. Please try again later.', 'rocket' ) ); - } - - $data = json_decode( $data ); - - if ( empty( $data->success ) ) { - $errors = []; - foreach ( $data->errors as $error ) { - if ( 6003 === $error->code || 9103 === $error->code ) { - $msg = __( 'Incorrect Cloudflare email address or API key.', 'rocket' ); - - $msg .= ' ' . sprintf( - /* translators: %1$s = opening link; %2$s = closing link */ - __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), - // translators: Documentation exists in EN, FR; use localized URL if applicable. - '', - '' - ); - - throw new Exception( $msg ); - } - if ( 7003 === $error->code ) { - $msg = __( 'Incorrect Cloudflare Zone ID.', 'rocket' ); - - $msg .= ' ' . sprintf( - /* translators: %1$s = opening link; %2$s = closing link */ - __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), - // translators: Documentation exists in EN, FR; use localized URL if applicable. - '', - '' - ); - - throw new Exception( $msg ); - } - $errors[] = $error->message; - } - throw new Exception( wp_sprintf_l( '%l ', $errors ) ); - } - - return $data; - } - - /** - * Checks if the email and API key for the API credentials are set. - * - * @since 1.0 - * - * @return bool true if authorized; else false. - */ - private function is_authorized() { - return ( - isset( $this->email, $this->api_key ) - && - false !== filter_var( $this->email, FILTER_VALIDATE_EMAIL ) - ); - } - - /** - * Does the request remote cURL request. - * - * @since 1.0 - * - * @param string $path Path of the endpoint. - * @param array $data Data to be sent along with the request. - * @param string $method Type of method that should be used ('GET', 'DELETE', 'PATCH'). - * - * @return array curl response packet. - */ - private function do_remote_request( $path, array $data, $method ) { - $this->args['method'] = isset( $method ) ? strtoupper( $method ) : 'GET'; - - if ( '/ips' !== $path ) { - $this->args['headers'] = $this->headers; - } - - $this->args['body'] = []; - - if ( ! empty( $data ) ) { - $this->args['body'] = wp_json_encode( $data ); - } - - $response = wp_remote_request( self::CLOUDFLARE_API . $path, $this->args ); - - return $response; - } -} diff --git a/inc/Addon/Cloudflare/Admin/Subscriber.php b/inc/Addon/Cloudflare/Admin/Subscriber.php new file mode 100644 index 0000000000..69e5f5b79e --- /dev/null +++ b/inc/Addon/Cloudflare/Admin/Subscriber.php @@ -0,0 +1,125 @@ + [ + [ 'maybe_display_purge_notice' ], + [ 'maybe_display_update_settings_notice' ], + ], + 'rocket_input_sanitize' => [ 'sanitize_options', 20, 2 ], + ]; + } + + /** + * This notice is displayed after purging the CloudFlare cache. + */ + public function maybe_display_purge_notice() { + if ( ! current_user_can( 'rocket_purge_cloudflare_cache' ) ) { + return; + } + + $user_id = get_current_user_id(); + $notice = get_transient( $user_id . '_cloudflare_purge_result' ); + + if ( ! $notice ) { + return; + } + + delete_transient( $user_id . '_cloudflare_purge_result' ); + + rocket_notice_html( + [ + 'status' => $notice['result'], + 'message' => $notice['message'], + ] + ); + } + + /** + * This notice is displayed after modifying the CloudFlare settings. + */ + public function maybe_display_update_settings_notice() { + $screen = get_current_screen(); + + if ( ! current_user_can( 'rocket_manage_options' ) || 'settings_page_wprocket' !== $screen->id ) { + return; + } + + $user_id = get_current_user_id(); + $notices = get_transient( $user_id . '_cloudflare_update_settings' ); + + if ( ! $notices ) { + return; + } + + $errors = ''; + $success = ''; + delete_transient( $user_id . '_cloudflare_update_settings' ); + + if ( isset( $notices['pre'] ) ) { + $pre = $notices['pre']; + + unset( $notices['pre'] ); + } + + foreach ( $notices as $notice ) { + if ( 'error' === $notice['result'] ) { + $errors .= $notice['message'] . '
'; + } elseif ( 'success' === $notice['result'] ) { + $success .= $notice['message'] . '
'; + } + } + + if ( ! empty( $success ) ) { + rocket_notice_html( + [ + 'message' => $pre . $success, + ] + ); + } + + if ( ! empty( $errors ) ) { + rocket_notice_html( + [ + 'status' => 'error', + 'message' => $errors, + ] + ); + } + } + + /** + * Sanitize Cloudflare options + * + * @param array $input gtArray of sanitized values after being submitted by the form. + * @param Settings $settings Settings instance. + * + * @return array + */ + public function sanitize_options( $input, $settings ) { + $input['do_cloudflare'] = $settings->sanitize_checkbox( $input, 'do_cloudflare' ); + $input['cloudflare_devmode'] = $settings->sanitize_checkbox( $input, 'cloudflare_devmode' ); + $input['cloudflare_auto_settings'] = $settings->sanitize_checkbox( $input, 'cloudflare_auto_settings' ); + $input['cloudflare_protocol_rewrite'] = $settings->sanitize_checkbox( $input, 'cloudflare_protocol_rewrite' ); + + $input['cloudflare_email'] = isset( $input['cloudflare_email'] ) ? sanitize_email( $input['cloudflare_email'] ) : ''; + $input['cloudflare_zone_id'] = isset( $input['cloudflare_zone_id'] ) ? sanitize_text_field( $input['cloudflare_zone_id'] ) : ''; + + $input['cloudflare_api_key'] = isset( $input['cloudflare_api_key'] ) ? sanitize_text_field( $input['cloudflare_api_key'] ) : ''; + + if ( defined( 'WP_ROCKET_CF_API_KEY' ) ) { + $input['cloudflare_api_key'] = rocket_get_constant( 'WP_ROCKET_CF_API_KEY', '' ); + } + + return $input; + } +} diff --git a/inc/Addon/Cloudflare/Auth/APIKey.php b/inc/Addon/Cloudflare/Auth/APIKey.php new file mode 100644 index 0000000000..23bb58c757 --- /dev/null +++ b/inc/Addon/Cloudflare/Auth/APIKey.php @@ -0,0 +1,75 @@ +email = $email; + $this->api_key = $api_key; + } + + /** + * Gets headers for Cloudflare API request + * + * @return array + */ + public function get_headers(): array { + return [ + 'X-Auth-Email' => $this->email, + 'X-Auth-Key' => $this->api_key, + ]; + } + + /** + * Checks if the credentials are set. + * + * @return bool|WP_Error true if authorized, false if not, WP_Error if either credential is empty. + */ + public function is_valid_credentials() { + if ( + empty( $this->email ) + || + empty( $this->api_key ) + ) { + return new WP_Error( + 'cloudflare_credentials_empty', + sprintf( + /* translators: %1$s = opening link; %2$s = closing link */ + __( 'Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), + // translators: Documentation exists in EN, FR; use localized URL if applicable. + '', + '' + ) + ); + } + + return ( + isset( $this->email, $this->api_key ) + && + false !== filter_var( $this->email, FILTER_VALIDATE_EMAIL ) + ); + } +} diff --git a/inc/Addon/Cloudflare/Auth/APIKeyFactory.php b/inc/Addon/Cloudflare/Auth/APIKeyFactory.php new file mode 100644 index 0000000000..6333ac66f6 --- /dev/null +++ b/inc/Addon/Cloudflare/Auth/APIKeyFactory.php @@ -0,0 +1,44 @@ +options = $options; + } + + + /** + * Create a new authentication instance. + * + * @param array $data Data to inject into the client. + * @return AuthInterface + */ + public function create( array $data = [] ): AuthInterface { + + $cf_api_key = defined( 'WP_ROCKET_CF_API_KEY' ) ? rocket_get_constant( 'WP_ROCKET_CF_API_KEY', '' ) : $this->options->get( 'cloudflare_api_key', '' ); + + $email = key_exists( 'cloudflare_email', $data ) ? $data['cloudflare_email'] : $this->options->get( 'cloudflare_email', '' ); + $api_key = key_exists( 'cloudflare_api_key', $data ) ? $data['cloudflare_api_key'] : $cf_api_key; + + return new APIKey( $email, $api_key ); + } +} diff --git a/inc/Addon/Cloudflare/Auth/AuthFactoryInterface.php b/inc/Addon/Cloudflare/Auth/AuthFactoryInterface.php new file mode 100644 index 0000000000..b7df0a86df --- /dev/null +++ b/inc/Addon/Cloudflare/Auth/AuthFactoryInterface.php @@ -0,0 +1,16 @@ +options = $options; - $this->cloudflare_api_error = null; - $this->api = $api; - // Update api_error with WP_Error if credentials are not valid. - // Update API with Cloudflare instance with correct auth data. - $this->get_cloudflare_instance(); + public function __construct( Options_Data $options, Endpoints $endpoints ) { + $this->endpoints = $endpoints; + $this->options = $options; } /** - * Get a Cloudflare\Api instance & the zone_id corresponding to the domain. - * - * @since 1.0 + * Check valid connection with Cloudflare * - * @return Object Cloudflare instance & zone_id if credentials are correct, WP_Error otherwise. + * @param string $zone_id Cloudflare zone ID. + * @return bool|mixed|WP_Error */ - public function get_cloudflare_instance() { - $cf_email = $this->options->get( 'cloudflare_email', null ); - $cf_api_key = defined( 'WP_ROCKET_CF_API_KEY' ) ? WP_ROCKET_CF_API_KEY : $this->options->get( 'cloudflare_api_key', null ); - $cf_zone_id = $this->options->get( 'cloudflare_zone_id', null ); - $is_api_keys_valid_cf = get_transient( 'rocket_cloudflare_is_api_keys_valid' ); - - if ( false === $is_api_keys_valid_cf ) { - $is_api_keys_valid_cf = $this->is_api_keys_valid( $cf_email, $cf_api_key, $cf_zone_id ); - set_transient( 'rocket_cloudflare_is_api_keys_valid', $is_api_keys_valid_cf, 2 * WEEK_IN_SECONDS ); - } + public function check_connection( string $zone_id = '' ) { + $is_valid = get_transient( 'rocket_cloudflare_is_api_keys_valid' ); + if ( false === $is_valid ) { - if ( is_wp_error( $is_api_keys_valid_cf ) ) { - // Sets Cloudflare API as WP_Error if credentials are not valid. - $this->cloudflare_api_error = $is_api_keys_valid_cf; + if ( '' === $zone_id ) { + $zone_id = $this->options->get( 'cloudflare_zone_id', '' ); + } + + $is_valid = $this->is_auth_valid( $zone_id ); - return; + set_transient( 'rocket_cloudflare_is_api_keys_valid', $is_valid, 2 * WEEK_IN_SECONDS ); } - // Sets Cloudflare Valid Credentials and User Agent. - $this->api->set_api_credentials( $cf_email, $cf_api_key, $cf_zone_id ); + return $is_valid; } /** * Validate Cloudflare input data. * - * @since 1.0 - * - * @param string $cf_email Cloudflare email. - * @param string $cf_api_key Cloudflare API key. - * @param string $cf_zone_id Cloudflare zone ID. + * @param string $zone_id Cloudflare zone ID. * - * @return stdClass true if credentials are ok, WP_Error otherwise. + * @return bool|WP_Error true if credentials are ok, WP_Error otherwise. */ - public function is_api_keys_valid( $cf_email, $cf_api_key, $cf_zone_id ) { - if ( empty( $cf_email ) || empty( $cf_api_key ) ) { - return new WP_Error( - 'cloudflare_credentials_empty', - sprintf( - /* translators: %1$s = opening link; %2$s = closing link */ - __( 'Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), - // translators: Documentation exists in EN, FR; use localized URL if applicable. - '', - '' - ) - ); - } - - if ( empty( $cf_zone_id ) ) { + public function is_auth_valid( string $zone_id ) { + if ( empty( $zone_id ) ) { $msg = __( 'Missing Cloudflare Zone ID.', 'rocket' ); $msg .= ' ' . sprintf( @@ -118,313 +80,304 @@ public function is_api_keys_valid( $cf_email, $cf_api_key, $cf_zone_id ) { return new WP_Error( 'cloudflare_no_zone_id', $msg ); } - try { - $this->api->set_api_credentials( $cf_email, $cf_api_key, $cf_zone_id ); + $result = $this->endpoints->get_zones( $zone_id ); - $cf_zone = $this->api->get_zones(); - $zone_found = false; - $site_url = get_site_url(); + if ( is_wp_error( $result ) ) { + return $result; + } - if ( function_exists( 'domain_mapping_siteurl' ) ) { - $site_url = domain_mapping_siteurl( $site_url ); - } + $zone_found = false; + $site_url = get_site_url(); - if ( ! empty( $cf_zone->result ) ) { - $parsed_url = wp_parse_url( $site_url ); - if ( false !== strpos( strtolower( $parsed_url['host'] ), $cf_zone->result->name ) ) { - $zone_found = true; - } - } - - if ( ! $zone_found ) { - $msg = __( 'It looks like your domain is not set up on Cloudflare.', 'rocket' ); + if ( function_exists( 'domain_mapping_siteurl' ) ) { + $site_url = domain_mapping_siteurl( $site_url ); + } - $msg .= ' ' . sprintf( - /* translators: %1$s = opening link; %2$s = closing link */ - __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), - // translators: Documentation exists in EN, FR; use localized URL if applicable. - '', - '' - ); + if ( ! empty( $result ) ) { + $parsed_url = wp_parse_url( $site_url ); - return new WP_Error( 'cloudflare_wrong_zone_id', $msg ); + if ( is_object( $result ) && property_exists( $result, 'name' ) && false !== strpos( strtolower( $parsed_url['host'] ), $result->name ) ) { + $zone_found = true; } + } + + if ( ! $zone_found ) { + $msg = __( 'It looks like your domain is not set up on Cloudflare.', 'rocket' ); + + $msg .= ' ' . sprintf( + /* translators: %1$s = opening link; %2$s = closing link */ + __( 'Read the %1$sdocumentation%2$s for further guidance.', 'rocket' ), + // translators: Documentation exists in EN, FR; use localized URL if applicable. + '', + '' + ); - $this->cloudflare_api_error = null; - return true; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_invalid_auth', $e->getMessage() ); + return new WP_Error( 'cloudflare_zone_not_found', $msg ); } + + return true; } /** * Checks if CF has the $action_value set as a Page Rule. * - * @since 1.0 + * @param string $action_value Action value. * - * @param string $action_value Cache_everything. - * - * @return mixed Object|bool true / false if $action_value was found or not, WP_Error otherwise. + * @return mixed true/false if $action_value was found or not, WP_Error otherwise. */ public function has_page_rule( $action_value ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; + $result = $this->endpoints->list_pagerules( $this->options->get( 'cloudflare_zone_id', '' ), 'active' ); + + if ( is_wp_error( $result ) ) { + return $result; } - try { - $cf_page_rule = $this->api->list_pagerules(); - $cf_page_rule_arr = wp_json_encode( $cf_page_rule ); + $page_rule = wp_json_encode( $result ); - return preg_match( '/' . $action_value . '/', $cf_page_rule_arr ); - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_page_rule_failed', $e->getMessage() ); - } + return (bool) preg_match( '/' . $action_value . '/', $page_rule ); } /** * Purge Cloudflare cache. * - * @since 1.0 - * - * @return mixed Object|bool true if the purge is successful, WP_Error otherwise. + * @return mixed true if the purge is successful, WP_Error otherwise. */ public function purge_cloudflare() { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } + $result = $this->endpoints->purge( $this->options->get( 'cloudflare_zone_id', '' ) ); - try { - $cf_purge = $this->api->purge(); - return true; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_purge_failed', $e->getMessage() ); + if ( is_wp_error( $result ) ) { + return $result; } + + return true; } /** * Purge Cloudflare Cache by URL * - * @since 1.0 - * * @param WP_Post $post The post object. * @param array $purge_urls URLs cache files to remove. * @param string $lang The post language. * - * @return mixed Object|bool true if the purge is successful, WP_Error otherwise + * @return mixed true if the purge is successful, WP_Error otherwise */ public function purge_by_url( $post, $purge_urls, $lang ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } + $result = $this->endpoints->purge_files( $this->options->get( 'cloudflare_zone_id', '' ), $purge_urls ); - try { - $cf_purge = $this->api->purge_files( $purge_urls ); - return true; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_purge_failed', $e->getMessage() ); + if ( is_wp_error( $result ) ) { + return $result; } + + return true; } /** * Set the Browser Cache TTL in Cloudflare. * - * @since 1.0 + * @param string $value Value for Cloudflare browser cache TTL. * - * @param string $mode Value for Cloudflare browser cache TTL. + * @return mixed Value if the update is successful, WP_Error otherwise. + */ + public function set_browser_cache_ttl( $value ) { + $result = $this->endpoints->update_browser_cache_ttl( $this->options->get( 'cloudflare_zone_id', '' ), (int) $value ); + + if ( is_wp_error( $result ) ) { + return $result; + } + + return $this->convert_time( (int) $value ); + } + + /** + * Convert value in seconds to seconds/minutes/hours/days * - * @return mixed Object|String Mode value if the update is successful, WP_Error otherwise. + * @param int $value Value in seconds. + * + * @return string */ - public function set_browser_cache_ttl( $mode ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; + private function convert_time( $value ): string { + if ( ! is_int( $value ) ) { + $value = 0; } - try { - $cf_return = $this->api->change_browser_cache_ttl( (int) $mode ); - return $mode; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_browser_cache', $e->getMessage() ); + $base = new DateTimeImmutable( '@0' ); + $time = new DateTimeImmutable( "@$value" ); + $format = '%a ' . __( 'days', 'rocket' ); + + if ( 60 > $value ) { + $format = '%s ' . __( 'seconds', 'rocket' ); + } elseif ( 3600 > $value ) { + $format = '%i ' . __( 'minutes', 'rocket' ); + } elseif ( 86400 > $value ) { + $format = '%h ' . __( 'hours', 'rocket' ); } + + return $base->diff( $time )->format( $format ); } /** * Set the Cloudflare Rocket Loader. * - * @since 1.0 + * @param string $value Value for Cloudflare Rocket Loader. * - * @param string $mode Value for Cloudflare Rocket Loader. - * - * @return mixed Object|String Mode value if the update is successful, WP_Error otherwise. + * @return mixed Value if the update is successful, WP_Error otherwise. */ - public function set_rocket_loader( $mode ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } + public function set_rocket_loader( $value ) { + $result = $this->endpoints->update_rocket_loader( $this->options->get( 'cloudflare_zone_id', '' ), $value ); - try { - $cf_return = $this->api->change_rocket_loader( $mode ); - return $mode; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_rocket_loader', $e->getMessage() ); + if ( is_wp_error( $result ) ) { + return $result; } + + return $value; } /** * Set the Cloudflare Minification. * - * @since 1.0 + * @param string $value Value for Cloudflare minification. * - * @param string $mode Value for Cloudflare minification. - * - * @return mixed Object|String Mode value if the update is successful, WP_Error otherwise. + * @return mixed Value if the update is successful, WP_Error otherwise. */ - public function set_minify( $mode ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } - + public function set_minify( $value ) { $cf_minify_settings = [ - 'css' => $mode, - 'html' => $mode, - 'js' => $mode, + 'css' => $value, + 'html' => $value, + 'js' => $value, ]; - try { - $cf_return = $this->api->change_minify( $cf_minify_settings ); - return $mode; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_minification', $e->getMessage() ); + $result = $this->endpoints->update_minify( $this->options->get( 'cloudflare_zone_id', '' ), $cf_minify_settings ); + + if ( is_wp_error( $result ) ) { + return $result; } + + return $value; } /** * Set the Cloudflare Caching level. * - * @since 1.0 - * - * @param string $mode Value for Cloudflare caching level. + * @param string $value Value for Cloudflare caching level. * - * @return mixed Object|String Mode value if the update is successful, WP_Error otherwise. + * @return mixed Value if the update is successful, WP_Error otherwise. */ - public function set_cache_level( $mode ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } + public function set_cache_level( $value ) { + $result = $this->endpoints->change_cache_level( $this->options->get( 'cloudflare_zone_id', '' ), $value ); - try { - $cf_return = $this->api->change_cache_level( $mode ); - return $mode; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_cache_level', $e->getMessage() ); + if ( is_wp_error( $result ) ) { + return $result; } + + return $value; } /** * Set the Cloudflare Development mode. * - * @since 1.0 - * - * @param string $mode Value for Cloudflare development mode. + * @param string $value Value for Cloudflare development mode. * - * @return mixed Object|String Mode value if the update is successful, WP_Error otherwise. + * @return mixed Value if the update is successful, WP_Error otherwise. */ - public function set_devmode( $mode ) { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } - - if ( 0 === (int) $mode ) { + public function set_devmode( $value ) { + if ( 0 === (int) $value ) { $value = 'off'; } else { $value = 'on'; } - try { - $cf_return = $this->api->change_development_mode( $value ); + $result = $this->endpoints->change_development_mode( $this->options->get( 'cloudflare_zone_id', '' ), $value ); + + if ( is_wp_error( $result ) ) { + return $result; + } - if ( 'on' === $value ) { + switch ( $value ) { + case 'on': wp_schedule_single_event( time() + 3 * HOUR_IN_SECONDS, 'rocket_cron_deactivate_cloudflare_devmode' ); - } + break; + case 'off': + $next_event = wp_next_scheduled( 'rocket_cron_deactivate_cloudflare_devmode' ); - return $value; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_dev_mode', $e->getMessage() ); + if ( false !== $next_event ) { + wp_unschedule_event( $next_event, 'rocket_cron_deactivate_cloudflare_devmode' ); + } + break; } + + return $value; } /** * Get all the current Cloudflare settings for a given domain. * - * @since 1.0 - * - * @return mixed bool|Array Array of Cloudflare settings, false if any error connection to Cloudflare. + * @return array|WP_Error Array of Cloudflare settings, WP_Error if any error connection to Cloudflare. */ public function get_settings() { - if ( is_wp_error( $this->cloudflare_api_error ) ) { - return $this->cloudflare_api_error; - } + $cf_settings = $this->endpoints->get_settings( $this->options->get( 'cloudflare_zone_id', '' ) ); - try { - $cf_settings = $this->api->get_settings(); - - foreach ( $cf_settings->result as $cloudflare_option ) { - switch ( $cloudflare_option->id ) { - case 'browser_cache_ttl': - $browser_cache_ttl = $cloudflare_option->value; - break; - case 'cache_level': - $cache_level = $cloudflare_option->value; - break; - case 'rocket_loader': - $rocket_loader = $cloudflare_option->value; - break; - case 'minify': - $cf_minify = $cloudflare_option->value; - break; - } - } - $cf_minify_value = 'on'; + if ( is_wp_error( $cf_settings ) ) { + return $cf_settings; + } - if ( 'off' === $cf_minify->js || 'off' === $cf_minify->css || 'off' === $cf_minify->html ) { - $cf_minify_value = 'off'; + foreach ( $cf_settings as $cloudflare_option ) { + switch ( $cloudflare_option->id ) { + case 'browser_cache_ttl': + $browser_cache_ttl = $cloudflare_option->value; + break; + case 'cache_level': + $cache_level = $cloudflare_option->value; + break; + case 'rocket_loader': + $rocket_loader = $cloudflare_option->value; + break; + case 'minify': + $cf_minify = $cloudflare_option->value; + break; } + } + $cf_minify_value = 'on'; + + if ( + 'off' === $cf_minify->js + || + 'off' === $cf_minify->css + || + 'off' === $cf_minify->html + ) { + $cf_minify_value = 'off'; + } - $cf_settings_array = [ - 'cache_level' => $cache_level, - 'minify' => $cf_minify_value, - 'rocket_loader' => $rocket_loader, - 'browser_cache_ttl' => $browser_cache_ttl, - ]; + $cf_settings_array = [ + 'cache_level' => $cache_level, + 'minify' => $cf_minify_value, + 'rocket_loader' => $rocket_loader, + 'browser_cache_ttl' => $browser_cache_ttl, + ]; - return $cf_settings_array; - } catch ( Exception $e ) { - return new WP_Error( 'cloudflare_current_settings', $e->getMessage() ); - } + return $cf_settings_array; } /** * Get Cloudflare IPs. No API validation needed, all exceptions returns the default CF IPs array. * - * @since 1.0 - * - * @return Object Result of API request if successful, default CF IPs otherwise. + * @return object Result of API request if successful, default CF IPs otherwise. */ public function get_cloudflare_ips() { $cf_ips = get_transient( 'rocket_cloudflare_ips' ); + if ( false !== $cf_ips ) { return $cf_ips; } - try { - $cf_ips = $this->api->get_ips(); + $cf_ips = $this->endpoints->get_ips(); - if ( empty( $cf_ips->success ) ) { - // Set default IPs from Cloudflare if call to Cloudflare /ips API does not contain a success. - // Prevents from making API calls on each page load. - $cf_ips = $this->get_default_ips(); - } - } catch ( Exception $e ) { - // Set default IPs from Cloudflare if call to Cloudflare /ips API fails. + if ( + is_wp_error( $cf_ips ) + || + empty( $cf_ips ) + ) { + // Set default IPs from Cloudflare if call to Cloudflare /ips API does not contain a success. // Prevents from making API calls on each page load. $cf_ips = $this->get_default_ips(); } @@ -437,19 +390,15 @@ public function get_cloudflare_ips() { /** * Get default Cloudflare IPs. * - * @since 1.0 - * - * @return stdClass Default Cloudflare connecting IPs. + * @return object Default Cloudflare connecting IPs. */ private function get_default_ips() { $cf_ips = (object) [ - 'result' => (object) [], - 'success' => true, - 'errors' => [], - 'messages' => [], + 'ipv4_cidrs' => [], + 'ipv6_cidrs' => [], ]; - $cf_ips->result->ipv4_cidrs = [ + $cf_ips->ipv4_cidrs = [ '173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22', @@ -462,11 +411,12 @@ private function get_default_ips() { '198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/12', + '104.24.0.0/14', '172.64.0.0/13', '131.0.72.0/22', ]; - $cf_ips->result->ipv6_cidrs = [ + $cf_ips->ipv6_cidrs = [ '2400:cb00::/32', '2606:4700::/32', '2803:f800::/32', @@ -478,4 +428,46 @@ private function get_default_ips() { return $cf_ips; } + + /** + * Sets the Cloudflare IP Rewrite + * + * @return IpRewrite + */ + public static function set_ip_rewrite() { + static $instance = null; + + if ( is_null( $instance ) ) { + $instance = new IpRewrite(); + + return $instance; + } + + return $instance; + } + + /** + * Fixes Cloudflare Flexible SSL redirect loop + */ + public static function fix_cf_flexible_ssl() { + $ip_rewrite = self::set_ip_rewrite(); + + if ( $ip_rewrite->isCloudFlare() ) { + // Fixes Flexible SSL. + if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) { + $_SERVER['HTTPS'] = 'on'; + } + } + } + + /** + * Change client auth. + * + * @param AuthInterface $auth Client auth. + * + * @return void + */ + public function change_auth( AuthInterface $auth ) { + $this->endpoints->change_auth( $auth ); + } } diff --git a/inc/Addon/Cloudflare/ServiceProvider.php b/inc/Addon/Cloudflare/ServiceProvider.php new file mode 100644 index 0000000000..4e33ea81a5 --- /dev/null +++ b/inc/Addon/Cloudflare/ServiceProvider.php @@ -0,0 +1,63 @@ +getContainer()->get( 'options' ); + + $this->getLeagueContainer()->add( 'cloudflare_auth_factory', APIKeyFactory::class )->addArgument( $options ); + + $this->getContainer()->add( 'cloudflare_client', Client::class ) + ->addArgument( $this->getContainer()->get( 'cloudflare_auth_factory' )->create() ); + $this->getContainer()->add( 'cloudflare_endpoints', Endpoints::class ) + ->addArgument( $this->getContainer()->get( 'cloudflare_client' ) ); + + $this->getContainer()->add( 'cloudflare', Cloudflare::class ) + ->addArgument( $options ) + ->addArgument( $this->getContainer()->get( 'cloudflare_endpoints' ) ); + $this->getContainer()->share( 'cloudflare_subscriber', CloudflareSubscriber::class ) + ->addArgument( $this->getContainer()->get( 'cloudflare' ) ) + ->addArgument( $options ) + ->addArgument( $this->getContainer()->get( 'options_api' ) ) + ->addArgument( $this->getContainer()->get( 'cloudflare_auth_factory' ) ) + ->addTag( 'cloudflare_subscriber' ); + $this->getContainer()->share( + 'cloudflare_admin_subscriber', + CloudflareAdminSubscriber::class + ); + } +} diff --git a/inc/Addon/Cloudflare/Subscriber.php b/inc/Addon/Cloudflare/Subscriber.php index f5e8f35b8c..4bb0bf274f 100644 --- a/inc/Addon/Cloudflare/Subscriber.php +++ b/inc/Addon/Cloudflare/Subscriber.php @@ -1,18 +1,13 @@ options = $options; - $this->options_api = $options_api; - $this->cloudflare = $cloudflare; + public function __construct( Cloudflare $cloudflare, Options_Data $options, Options $options_api, AuthFactoryInterface $auth_factory ) { + $this->options = $options; + $this->options_api = $options_api; + $this->cloudflare = $cloudflare; + $this->auth_factory = $auth_factory; } /** - * Gets the subscribed events. - * - * @since 1.0 + * Returns an array of events that this subscriber wants to listen to. * - * @return array subscribed events => callbacks. + * @return array */ public static function get_subscribed_events() { $slug = rocket_get_constant( 'WP_ROCKET_SLUG', 'wp_rocket_settings' ); @@ -65,20 +67,24 @@ public static function get_subscribed_events() { 'after_rocket_clean_post' => [ 'auto_purge_by_url', 10, 3 ], 'admin_post_rocket_purge_cloudflare' => 'purge_cache', 'init' => [ 'set_real_ip', 1 ], - 'update_option_' . $slug => [ 'save_cloudflare_options', 10, 2 ], - 'pre_update_option_' . $slug => [ 'save_cloudflare_old_settings', 10, 2 ], - 'admin_notices' => [ - [ 'maybe_display_purge_notice' ], - [ 'maybe_print_update_settings_notice' ], + 'update_option_' . $slug => [ + [ 'save_cloudflare_options', 10, 2 ], + [ 'update_dev_mode', 11, 2 ], + [ 'display_settings_notice', 11, 2 ], + ], + 'pre_update_option_' . $slug => [ + [ 'change_auth', 8, 2 ], + [ 'delete_connection_transient', 10, 2 ], + [ 'save_cloudflare_old_settings', 10, 2 ], ], + 'rocket_buffer' => [ 'protocol_rewrite', PHP_INT_MAX ], + 'wp_calculate_image_srcset' => [ 'protocol_rewrite_srcset', PHP_INT_MAX ], ]; } /** * Sets the Varnish IP to localhost if Cloudflare is active. * - * @since 1.0 - * * @param string|array $varnish_ip Varnish IP. * * @return array @@ -100,8 +106,6 @@ public function set_varnish_localhost( $varnish_ip ) { /** * Sets the Host header to the website domain if Cloudflare is active. * - * @since 1.0 - * * @param string $host the host header value. * * @return string @@ -117,40 +121,45 @@ public function set_varnish_purge_request_host( $host ) { /** * Checks if we should filter the value for the Varnish purge. * - * @since 1.0 - * * @return bool */ - private function should_filter_varnish() { - // This filter is documented in inc/classes/subscriber/Addons/Varnish/VarnishSubscriber.php. - if ( ! apply_filters( 'do_rocket_varnish_http_purge', false ) && ! $this->options->get( 'varnish_auto_purge', 0 ) ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals - return false; - } - - return true; + private function should_filter_varnish(): bool { + // This filter is documented in inc/Addon/Varnish.php. + return apply_filters( 'do_rocket_varnish_http_purge', false ) // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals + || + $this->options->get( 'varnish_auto_purge', 0 ); } - /** * Automatically set Cloudflare development mode value to off after 3 hours to reflect Cloudflare behaviour. - * - * @since 1.0 */ public function deactivate_devmode() { - $this->options->set( 'cloudflare_devmode', 'off' ); + $this->options->set( 'cloudflare_devmode', 0 ); $this->options_api->set( 'settings', $this->options->get_options() ); } /** * Purge Cloudflare cache automatically if Cache Everything is set as a Page Rule. * - * @since 1.0 + * @return void */ public function auto_purge() { if ( ! current_user_can( 'rocket_purge_cloudflare_cache' ) ) { return; } + $settings = $this->options_api->get( 'settings', [] ); + + $this->options->set_values( $settings ); + + $auth = $this->auth_factory->create( $settings ); + + $this->cloudflare->change_auth( $auth ); + + if ( is_wp_error( $this->cloudflare->check_connection( $this->options->get( 'cloudflare_zone_id', '' ) ) ) ) { + return; + } + $cf_cache_everything = $this->cloudflare->has_page_rule( 'cache_everything' ); if ( is_wp_error( $cf_cache_everything ) || ! $cf_cache_everything ) { @@ -164,8 +173,6 @@ public function auto_purge() { /** * Purge Cloudflare cache URLs automatically if Cache Everything is set as a Page Rule. * - * @since 1.0 - * * @param WP_Post $post The post object. * @param array $purge_urls URLs cache files to remove. * @param string $lang The post language. @@ -175,6 +182,10 @@ public function auto_purge_by_url( $post, $purge_urls, $lang ) { return; } + if ( is_wp_error( $this->cloudflare->check_connection() ) ) { + return; + } + $cf_cache_everything = $this->cloudflare->has_page_rule( 'cache_everything' ); if ( is_wp_error( $cf_cache_everything ) || ! $cf_cache_everything ) { @@ -197,16 +208,32 @@ public function auto_purge_by_url( $post, $purge_urls, $lang ) { /** * Purge CloudFlare cache. - * - * @since 1.0 */ public function purge_cache_no_die() { if ( ! current_user_can( 'rocket_purge_cloudflare_cache' ) ) { return; } + $connection = $this->cloudflare->check_connection(); + + if ( is_wp_error( $connection ) ) { + $cf_purge_result = [ + 'result' => 'error', + // translators: %s = CloudFare API return message. + 'message' => sprintf( __( 'WP Rocket: %s', 'rocket' ), $connection->get_error_message() ), + ]; + + set_transient( get_current_user_id() . '_cloudflare_purge_result', $cf_purge_result ); + + return; + } + // Purge CloudFlare. - $cf_purge = $this->cloudflare->purge_cloudflare(); + $cf_purge = $this->cloudflare->purge_cloudflare(); + $cf_purge_result = [ + 'result' => 'success', + 'message' => __( 'WP Rocket: Cloudflare cache successfully purged.', 'rocket' ), + ]; if ( is_wp_error( $cf_purge ) ) { $cf_purge_result = [ @@ -214,11 +241,6 @@ public function purge_cache_no_die() { // translators: %s = CloudFare API return message. 'message' => sprintf( __( 'WP Rocket: %s', 'rocket' ), $cf_purge->get_error_message() ), ]; - } else { - $cf_purge_result = [ - 'result' => 'success', - 'message' => __( 'WP Rocket: Cloudflare cache successfully purged.', 'rocket' ), - ]; } set_transient( get_current_user_id() . '_cloudflare_purge_result', $cf_purge_result ); @@ -226,8 +248,6 @@ public function purge_cache_no_die() { /** * Purge CloudFlare cache. - * - * @since 1.0 */ public function purge_cache() { if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'rocket_purge_cloudflare' ) ) { @@ -242,367 +262,421 @@ public function purge_cache() { /** * Set Real IP from CloudFlare. - * - * @since 1.0 - * @source cloudflare.php - https://wordpress.org/plugins/cloudflare/ */ public function set_real_ip() { - // only run this logic if the REMOTE_ADDR is populated, to avoid causing notices in CLI mode. - if ( ! isset( $_SERVER['HTTP_CF_CONNECTING_IP'], $_SERVER['REMOTE_ADDR'] ) ) { - return; - } - - $cf_ips_values = $this->cloudflare->get_cloudflare_ips(); - $cf_ip_ranges = $cf_ips_values->result->ipv6_cidrs; - $ip = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ); - $ipv6 = get_rocket_ipv6_full( $ip ); - if ( false === strpos( $ip, ':' ) ) { - // IPV4: Update the REMOTE_ADDR value if the current REMOTE_ADDR value is in the specified range. - $cf_ip_ranges = $cf_ips_values->result->ipv4_cidrs; - } - - foreach ( $cf_ip_ranges as $range ) { - if ( - ( strpos( $ip, ':' ) && rocket_ipv6_in_range( $ipv6, $range ) ) - || - ( false === strpos( $ip, ':' ) && rocket_ipv4_in_range( $ip, $range ) ) - ) { - $_SERVER['REMOTE_ADDR'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ); - break; - } - } - } - - /** - * This notice is displayed after purging the CloudFlare cache. - * - * @since 1.0 - */ - public function maybe_display_purge_notice() { - if ( ! current_user_can( 'rocket_purge_cloudflare_cache' ) ) { - return; - } - - $user_id = get_current_user_id(); - $notice = get_transient( $user_id . '_cloudflare_purge_result' ); - if ( ! $notice ) { - return; - } - - delete_transient( $user_id . '_cloudflare_purge_result' ); - - rocket_notice_html( - [ - 'status' => $notice['result'], - 'message' => $notice['message'], - ] - ); - } - - /** - * This notice is displayed after modifying the CloudFlare settings. - * - * @since 1.0 - */ - public function maybe_print_update_settings_notice() { - $screen = get_current_screen(); - - if ( ! current_user_can( 'rocket_manage_options' ) || 'settings_page_wprocket' !== $screen->id ) { - return; - } - - $user_id = get_current_user_id(); - $notices = get_transient( $user_id . '_cloudflare_update_settings' ); - if ( ! $notices ) { - return; - } - - $errors = ''; - $success = ''; - delete_transient( $user_id . '_cloudflare_update_settings' ); - foreach ( $notices as $notice ) { - if ( 'error' === $notice['result'] ) { - $errors .= $notice['message'] . '
'; - } elseif ( 'success' === $notice['result'] ) { - $success .= $notice['message'] . '
'; - } - } - - if ( ! empty( $success ) ) { - rocket_notice_html( - [ - 'message' => $success, - ] - ); - } - - if ( ! empty( $errors ) ) { - rocket_notice_html( - [ - 'status' => 'error', - 'message' => $errors, - ] - ); - } - + Cloudflare::set_ip_rewrite(); } /** * Save Cloudflare dev mode admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param string $devmode New value for Cloudflare dev mode. + * @param string $value New value for Cloudflare dev mode. */ - private function save_cloudflare_devmode( $devmode ) { - $cloudflare_dev_mode_return = $this->cloudflare->set_devmode( $devmode ); - if ( is_wp_error( $cloudflare_dev_mode_return ) ) { + private function save_cloudflare_devmode( $value ) { + $result = $this->cloudflare->set_devmode( $value ); + + if ( is_wp_error( $result ) ) { return [ 'result' => 'error', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare development mode error: %s', 'rocket' ), $cloudflare_dev_mode_return->get_error_message() ), + 'message' => sprintf( __( 'Cloudflare development mode error: %s', 'rocket' ), $result->get_error_message() ), ]; } + return [ 'result' => 'success', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare development mode %s', 'rocket' ), $cloudflare_dev_mode_return ), + 'message' => sprintf( __( 'Cloudflare development mode %s', 'rocket' ), $result ), ]; } /** * Save Cloudflare cache_level admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param string $cache_level New value for Cloudflare cache_level. + * @param string $value New value for Cloudflare cache_level. */ - private function save_cache_level( $cache_level ) { + private function save_cache_level( $value ) { // Set Cache Level to Aggressive. - $cf_cache_level_return = $this->cloudflare->set_cache_level( $cache_level ); + $result = $this->cloudflare->set_cache_level( $value ); - if ( is_wp_error( $cf_cache_level_return ) ) { + if ( is_wp_error( $result ) ) { return [ 'result' => 'error', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare cache level error: %s', 'rocket' ), $cf_cache_level_return->get_error_message() ), + 'message' => sprintf( __( 'Cloudflare cache level error: %s', 'rocket' ), $result->get_error_message() ), ]; } - if ( 'aggressive' === $cf_cache_level_return ) { - $cf_cache_level_return = _x( 'Standard', 'Cloudflare caching level', 'rocket' ); + $level = $value; + + if ( 'aggressive' === $result ) { + $level = _x( 'standard', 'Cloudflare caching level', 'rocket' ); } return [ 'result' => 'success', // translators: %s is the caching level returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare cache level set to %s', 'rocket' ), $cf_cache_level_return ), + 'message' => sprintf( __( 'Cloudflare cache level set to %s', 'rocket' ), $level ), ]; } /** * Save Cloudflare minify admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param string $minify New value for Cloudflare minify. + * @param string $value New value for Cloudflare minify. */ - private function save_minify( $minify ) { - $cf_minify_return = $this->cloudflare->set_minify( $minify ); + private function save_minify( $value ) { + $result = $this->cloudflare->set_minify( $value ); - if ( is_wp_error( $cf_minify_return ) ) { + if ( is_wp_error( $result ) ) { return [ 'result' => 'error', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare minification error: %s', 'rocket' ), $cf_minify_return->get_error_message() ), + 'message' => sprintf( __( 'Cloudflare minification error: %s', 'rocket' ), $result->get_error_message() ), ]; } + return [ 'result' => 'success', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare minification %s', 'rocket' ), $cf_minify_return ), + 'message' => sprintf( __( 'Cloudflare minification %s', 'rocket' ), $result ), ]; } /** * Save Cloudflare rocket loader admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param string $rocket_loader New value for Cloudflare rocket loader. + * @param string $value New value for Cloudflare rocket loader. */ - private function save_rocket_loader( $rocket_loader ) { - $cf_rocket_loader_return = $this->cloudflare->set_rocket_loader( $rocket_loader ); + private function save_rocket_loader( $value ) { + $result = $this->cloudflare->set_rocket_loader( $value ); - if ( is_wp_error( $cf_rocket_loader_return ) ) { + if ( is_wp_error( $result ) ) { return [ 'result' => 'error', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare rocket loader error: %s', 'rocket' ), $cf_rocket_loader_return->get_error_message() ), + 'message' => sprintf( __( 'Cloudflare rocket loader error: %s', 'rocket' ), $result->get_error_message() ), ]; } + return [ 'result' => 'success', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare rocket loader %s', 'rocket' ), $cf_rocket_loader_return ), + 'message' => sprintf( __( 'Cloudflare rocket loader %s', 'rocket' ), $result ), ]; } /** * Save Cloudflare browser cache ttl admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param int $browser_cache_ttl New value for Cloudflare browser cache ttl. + * @param int $value New value for Cloudflare browser cache ttl. */ - private function save_browser_cache_ttl( $browser_cache_ttl ) { - $cf_browser_cache_return = $this->cloudflare->set_browser_cache_ttl( $browser_cache_ttl ); + private function save_browser_cache_ttl( $value ) { + $result = $this->cloudflare->set_browser_cache_ttl( $value ); - if ( is_wp_error( $cf_browser_cache_return ) ) { + if ( is_wp_error( $result ) ) { return [ 'result' => 'error', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare browser cache error: %s', 'rocket' ), $cf_browser_cache_return->get_error_message() ), + 'message' => sprintf( __( 'Cloudflare browser cache error: %s', 'rocket' ), $result->get_error_message() ), ]; } + return [ 'result' => 'success', // translators: %s is the message returned by the CloudFlare API. - 'message' => '' . __( 'WP Rocket: ', 'rocket' ) . '' . sprintf( __( 'Cloudflare browser cache set to %s seconds', 'rocket' ), $cf_browser_cache_return ), + 'message' => sprintf( __( 'Cloudflare browser cache set to %s', 'rocket' ), $result ), ]; } /** * Save Cloudflare auto settings admin option. * - * @since 3.5.2 - * @author Soponar Cristina - * - * @param array $auto_settings New value for Cloudflare auto_settings. - * @param array $old_settings Cloudflare cloudflare_old_settings. + * @param int $auto_settings New value for Cloudflare auto_settings. + * @param string $old_settings Cloudflare cloudflare_old_settings. */ private function save_cloudflare_auto_settings( $auto_settings, $old_settings ) { - $cf_old_settings = explode( ',', $old_settings ); - $cloudflare_update_result = []; + $cf_old_settings = explode( ',', $old_settings ); + + $result = []; // Set Cache Level to Aggressive. - $cf_cache_level = isset( $cf_old_settings[0] ) && 0 === $auto_settings ? 'basic' : 'aggressive'; - $cloudflare_update_result[] = $this->save_cache_level( $cf_cache_level ); + $cf_cache_level = isset( $cf_old_settings[0] ) && 0 === $auto_settings ? $cf_old_settings[0] : 'aggressive'; + $result[] = $this->save_cache_level( $cf_cache_level ); // Active Minification for HTML, CSS & JS. - $cf_minify = isset( $cf_old_settings[1] ) && 0 === $auto_settings ? $cf_old_settings[1] : 'on'; - $cloudflare_update_result[] = $this->save_minify( $cf_minify ); + $cf_minify = isset( $cf_old_settings[1] ) && 0 === $auto_settings ? $cf_old_settings[1] : 'on'; + $result[] = $this->save_minify( $cf_minify ); // Deactivate Rocket Loader to prevent conflicts. - $cf_rocket_loader = isset( $cf_old_settings[2] ) && 0 === $auto_settings ? $cf_old_settings[2] : 'off'; - $cloudflare_update_result[] = $this->save_rocket_loader( $cf_rocket_loader ); + $cf_rocket_loader = isset( $cf_old_settings[2] ) && 0 === $auto_settings ? $cf_old_settings[2] : 'off'; + $result[] = $this->save_rocket_loader( $cf_rocket_loader ); // Set Browser cache to 1 year. - $cf_browser_cache_ttl = isset( $cf_old_settings[3] ) && 0 === $auto_settings ? $cf_old_settings[3] : '31536000'; - $cloudflare_update_result[] = $this->save_browser_cache_ttl( $cf_browser_cache_ttl ); + $cf_browser_cache_ttl = isset( $cf_old_settings[3] ) && 0 === $auto_settings ? $cf_old_settings[3] : 31536000; + $result[] = $this->save_browser_cache_ttl( $cf_browser_cache_ttl ); - return $cloudflare_update_result; + return $result; } /** - * Save Cloudflare admin options. + * Update the development mode value on Cloudflare * - * @since 1.0 + * @param array $old_value An array of previous values for the settings. + * @param array $value An array of submitted values for the settings. + * + * @return void + */ + public function update_dev_mode( $old_value, $value ) { + if ( ! current_user_can( 'rocket_manage_options' ) ) { + return; + } + + if ( ! isset( $old_value['cloudflare_devmode'], $value['cloudflare_devmode'] ) ) { + return; + } + + if ( (int) $old_value['cloudflare_devmode'] === (int) $value['cloudflare_devmode'] ) { + return; + } + + $connection = $this->cloudflare->check_connection( $value['cloudflare_zone_id'] ); + + if ( is_wp_error( $connection ) ) { + return; + } + + $result = [ + 'pre' => sprintf( + // translators: %1$s = strong opening tag, %2$s = strong closing tag. + __( '%1$sWP Rocket:%2$s', 'rocket' ), + '', + ' ' + ), + ]; + $update = get_transient( get_current_user_id() . '_cloudflare_update_settings' ); + + if ( false !== $update ) { + $result = $update; + } + + $result[] = $this->save_cloudflare_devmode( $value['cloudflare_devmode'] ); + + set_transient( get_current_user_id() . '_cloudflare_update_settings', $result ); + } + + /** + * Save Cloudflare admin options. * * @param array $old_value An array of previous values for the settings. * @param array $value An array of submitted values for the settings. + * + * @return void */ public function save_cloudflare_options( $old_value, $value ) { if ( ! current_user_can( 'rocket_manage_options' ) ) { return; } - $is_api_keys_valid_cloudflare = get_transient( 'rocket_cloudflare_is_api_keys_valid' ); - $submit_cloudflare_view = false; - if ( - ( isset( $old_value['cloudflare_email'], $value['cloudflare_email'] ) && $old_value['cloudflare_email'] !== $value['cloudflare_email'] ) - || - ( isset( $old_value['cloudflare_api_key'], $value['cloudflare_api_key'] ) && $old_value['cloudflare_api_key'] !== $value['cloudflare_api_key'] ) - || - ( isset( $old_value['cloudflare_zone_id'], $value['cloudflare_zone_id'] ) && $old_value['cloudflare_zone_id'] !== $value['cloudflare_zone_id'] ) - ) { - delete_transient( 'rocket_cloudflare_is_api_keys_valid' ); - $is_api_keys_valid_cloudflare = $this->cloudflare->is_api_keys_valid( $value['cloudflare_email'], $value['cloudflare_api_key'], $value['cloudflare_zone_id'], true ); - set_transient( 'rocket_cloudflare_is_api_keys_valid', $is_api_keys_valid_cloudflare, 2 * WEEK_IN_SECONDS ); - $submit_cloudflare_view = true; - } - - if ( ( isset( $old_value['cloudflare_devmode'], $value['cloudflare_devmode'] ) && (int) $old_value['cloudflare_devmode'] !== (int) $value['cloudflare_devmode'] ) || - ( isset( $old_value['cloudflare_auto_settings'], $value['cloudflare_auto_settings'] ) && (int) $old_value['cloudflare_auto_settings'] !== (int) $value['cloudflare_auto_settings'] ) ) { - $submit_cloudflare_view = true; - } - - // Revalidate Cloudflare credentials if transient is false. - if ( false === $is_api_keys_valid_cloudflare ) { - if ( isset( $value['cloudflare_email'], $value['cloudflare_api_key'], $value['cloudflare_zone_id'] ) ) { - $is_api_keys_valid_cloudflare = $this->cloudflare->is_api_keys_valid( $value['cloudflare_email'], $value['cloudflare_api_key'], $value['cloudflare_zone_id'] ); - } else { - $is_api_keys_valid_cloudflare = false; - } - set_transient( 'rocket_cloudflare_is_api_keys_valid', $is_api_keys_valid_cloudflare, 2 * WEEK_IN_SECONDS ); - } - - // If is submit CF view & CF Credentials are invalid, display error and bail out. - if ( is_wp_error( $is_api_keys_valid_cloudflare ) && $submit_cloudflare_view ) { - $cloudflare_error_message = $is_api_keys_valid_cloudflare->get_error_message(); - add_settings_error( 'general', 'cloudflare_api_key_invalid', __( 'WP Rocket: ', 'rocket' ) . '' . $cloudflare_error_message . '', 'error' ); - set_transient( get_current_user_id() . '_cloudflare_update_settings', [] ); + if ( ! isset( $old_value['cloudflare_auto_settings'], $value['cloudflare_auto_settings'] ) ) { return; } - // Update CloudFlare Development Mode. - $cloudflare_update_result = []; - if ( isset( $old_value['cloudflare_devmode'], $value['cloudflare_devmode'] ) && (int) $old_value['cloudflare_devmode'] !== (int) $value['cloudflare_devmode'] ) { - $cloudflare_update_result[] = $this->save_cloudflare_devmode( $value['cloudflare_devmode'] ); + if ( (int) $old_value['cloudflare_auto_settings'] === (int) $value['cloudflare_auto_settings'] ) { + return; + } + + $connection = $this->cloudflare->check_connection( $value['cloudflare_zone_id'] ); + + if ( is_wp_error( $connection ) ) { + return; } - // Update CloudFlare settings. - if ( isset( $old_value['cloudflare_auto_settings'], $value['cloudflare_auto_settings'] ) && (int) $old_value['cloudflare_auto_settings'] !== (int) $value['cloudflare_auto_settings'] ) { - $cloudflare_update_result = array_merge( $cloudflare_update_result, $this->save_cloudflare_auto_settings( $value['cloudflare_auto_settings'], $value['cloudflare_old_settings'] ) ); + $result = [ + 'pre' => sprintf( + // translators: %1$s = strong opening tag, %2$s = strong closing tag. + __( '%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:', 'rocket' ), + '', + '' + ) . '
', + ]; + + if ( 0 === (int) $value['cloudflare_auto_settings'] ) { + $result['pre'] = sprintf( + // translators: %1$s = strong opening tag, %2$s = strong closing tag. + __( '%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to previous settings:', 'rocket' ), + '', + '' + ) . '
'; } - set_transient( get_current_user_id() . '_cloudflare_update_settings', $cloudflare_update_result ); + $result = array_merge( $result, $this->save_cloudflare_auto_settings( $value['cloudflare_auto_settings'], $value['cloudflare_old_settings'] ) ); + + set_transient( get_current_user_id() . '_cloudflare_update_settings', $result ); } /** * Save Cloudflare old settings when the auto settings option is enabled. * - * @since 1.0 - * * @param array $value An array of previous values for the settings. * @param array $old_value An array of submitted values for the settings. * - * @return array settings with old settings. + * @return array */ public function save_cloudflare_old_settings( $value, $old_value ) { if ( ! current_user_can( 'rocket_manage_options' ) ) { return $value; } - // Save old CloudFlare settings. - if ( - isset( $value['cloudflare_auto_settings'], $old_value ['cloudflare_auto_settings'] ) - && - $value['cloudflare_auto_settings'] !== $old_value ['cloudflare_auto_settings'] - && - 1 === $value['cloudflare_auto_settings'] - ) { - $cf_settings = $this->cloudflare->get_settings(); - $value['cloudflare_old_settings'] = ! is_wp_error( $cf_settings ) - ? implode( ',', array_filter( $cf_settings ) ) - : ''; + if ( ! isset( $value['cloudflare_auto_settings'], $old_value ['cloudflare_auto_settings'] ) ) { + return $value; + } + + if ( $value['cloudflare_auto_settings'] === $old_value ['cloudflare_auto_settings'] ) { + return $value; + } + + if ( 0 === (int) $value['cloudflare_auto_settings'] ) { + return $value; + } + + $cloudflare_zone_id = key_exists( 'cloudflare_zone_id', $value ) ? $value['cloudflare_zone_id'] : ''; + + if ( is_wp_error( $this->cloudflare->check_connection( $cloudflare_zone_id ) ) ) { + return $value; + } + + $cf_settings = $this->cloudflare->get_settings(); + $value['cloudflare_old_settings'] = ! is_wp_error( $cf_settings ) + ? implode( ',', array_filter( $cf_settings ) ) + : ''; + + return $value; + } + + /** + * Change the authentification. + * + * @param array $value An array of previous values for the settings. + * @param array $old_value An array of submitted values for the settings. + * + * @return mixed + */ + public function change_auth( $value, $old_value ) { + $auth = $this->auth_factory->create( $value ); + $this->cloudflare->change_auth( $auth ); + return $value; + } + + /** + * Delete the transient CF connection status when API Key, Email or Zone ID is changed + * + * @param array $value An array of previous values for the settings. + * @param array $old_value An array of submitted values for the settings. + * + * @return array + */ + public function delete_connection_transient( $value, $old_value ) { + + $fields = [ + 'cloudflare_api_key', + 'cloudflare_email', + 'cloudflare_zone_id', + 'cloudflare_devmode', + 'cloudflare_auto_settings', + 'cloudflare_protocol_rewrite', + ]; + + $out = false; + + foreach ( $fields as $field ) { + $out &= ! isset( $old_value[ $field ], $value[ $field ] ) || $old_value[ $field ] !== $value[ $field ]; + } + + if ( $out ) { + return $value; } + delete_transient( get_current_user_id() . '_cloudflare_update_settings' ); + delete_transient( 'rocket_cloudflare_is_api_keys_valid' ); + return $value; } + + /** + * Display the error notice. + * + * @param array $old_value An array of submitted values for the settings. + * @param array $value An array of previous values for the settings. + * + * @return mixed + */ + public function display_settings_notice( $old_value, $value ) { + $connection = $this->cloudflare->check_connection( $value['cloudflare_zone_id'] ); + + if ( is_wp_error( $connection ) ) { + add_settings_error( 'general', 'cloudflare_api_key_invalid', __( 'WP Rocket: ', 'rocket' ) . '
' . $connection->get_error_message() . '', 'error' ); + } + + return $old_value; + } + + /** + * Remove HTTP protocol on script, link, img and form tags. + * + * @param string $buffer HTML content. + * + * @return string + */ + public function protocol_rewrite( $buffer ) { + if ( ! $this->can_protocol_rewrite() ) { + return $buffer; + } + + $return = preg_replace( "/(<(script|link|img|form)(?!.*?[\"']\bcanonical\b[\"'])([^>]*)(href|src|action)=[\"'])https?:\\/\\//i", '$1//', $buffer ); + + if ( $return ) { + $buffer = $return; + } + + return $buffer; + } + + /** + * Remove HTTP protocol on srcset attribute generated by WordPress + * + * @param array $sources an Array of images sources for srcset. + * + * @return array + */ + public function protocol_rewrite_srcset( $sources ) { + if ( ! $this->can_protocol_rewrite() ) { + return $sources; + } + + if ( empty( $sources ) ) { + return $sources; + } + + foreach ( $sources as $i => $source ) { + $sources[ $i ]['url'] = str_replace( [ 'http:', 'https:' ], '', $source['url'] ); + } + + return $sources; + } + + /** + * Can rewrite protocol + * + * @return bool + */ + private function can_protocol_rewrite(): bool { + return $this->options->get( 'do_cloudflare', 0 ) + && + ( + $this->options->get( 'cloudflare_protocol_rewrite', 0 ) + || + apply_filters( 'do_rocket_protocol_rewrite', false ) // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + ); + } } diff --git a/inc/Addon/Cloudflare/UnauthorizedException.php b/inc/Addon/Cloudflare/UnauthorizedException.php deleted file mode 100644 index a06570e19d..0000000000 --- a/inc/Addon/Cloudflare/UnauthorizedException.php +++ /dev/null @@ -1,7 +0,0 @@ -getContainer()->get( 'options' ); @@ -46,9 +37,6 @@ public function register() { ->addArgument( $options ) ->addTag( 'common_subscriber' ); - // Cloudflare Addon. - $this->addon_cloudflare( $options ); - $this->getContainer()->share( 'webp_admin_subscriber', WebPAdminSubscriber::class ) ->addArgument( $options ) ->addArgument( $this->getContainer()->get( 'cdn_subscriber' ) ) @@ -61,31 +49,4 @@ public function register() { ->addArgument( $this->getContainer()->get( 'cdn_subscriber' ) ) ->addTag( 'common_subscriber' ); } - - /** - * Adds Cloudflare Addon into the Container when the addon is enabled. - * - * @since 3.5 - * - * @param Options_Data $options Instance of options. - */ - protected function addon_cloudflare( Options_Data $options ) { - // If the option is not enabled, bail out. Don't load the addon. - if ( ! (bool) $options->get( 'do_cloudflare', false ) ) { - return; - } - - $this->provides[] = 'cloudflare_subscriber'; - - $this->getContainer()->add( 'cloudflare_api', APIClient::class ) - ->addArgument( rocket_get_constant( 'WP_ROCKET_VERSION' ) ); - $this->getContainer()->add( 'cloudflare', Cloudflare::class ) - ->addArgument( $options ) - ->addArgument( $this->getContainer()->get( 'cloudflare_api' ) ); - $this->getContainer()->share( 'cloudflare_subscriber', CloudflareSubscriber::class ) - ->addArgument( $this->getContainer()->get( 'cloudflare' ) ) - ->addArgument( $options ) - ->addArgument( $this->getContainer()->get( 'options_api' ) ) - ->addTag( 'cloudflare_subscriber' ); - } } diff --git a/inc/Engine/Admin/Beacon/Beacon.php b/inc/Engine/Admin/Beacon/Beacon.php index 63507b2c04..6bd59408bc 100644 --- a/inc/Engine/Admin/Beacon/Beacon.php +++ b/inc/Engine/Admin/Beacon/Beacon.php @@ -645,6 +645,16 @@ public function get_suggest( $doc_id ) { 'url' => 'https://fr.docs.wp-rocket.me/article/247-utiliser-wp-rocket-avec-cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on', ], ], + 'cloudflare_apo' => [ + 'en' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'fr' => [ + 'id' => '6486cb4147772865db893c7c', + 'url' => 'https://fr.docs.wp-rocket.me/article/1757-utiliser-cloudflare-apo-avec-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + ], 'sucuri_credentials' => [ 'en' => [ 'id' => '5bce07be2c7d3a04dd5bf94d', diff --git a/inc/Engine/Admin/Settings/Page.php b/inc/Engine/Admin/Settings/Page.php index 34774b2efa..2c0fc4597d 100644 --- a/inc/Engine/Admin/Settings/Page.php +++ b/inc/Engine/Admin/Settings/Page.php @@ -1811,26 +1811,42 @@ private function addons_section() { ] ); - $this->settings->add_settings_fields( - [ - 'do_cloudflare' => [ - 'type' => 'rocket_addon', - 'label' => __( 'Cloudflare', 'rocket' ), - 'logo' => [ - 'url' => WP_ROCKET_ASSETS_IMG_URL . 'logo-cloudflare2.svg', - 'width' => 153, - 'height' => 51, - ], - 'title' => __( 'Integrate your Cloudflare account with this add-on.', 'rocket' ), - 'description' => __( 'Provide your account email, global API key, and domain to use options such as clearing the Cloudflare cache and enabling optimal settings with WP Rocket.', 'rocket' ), - 'section' => 'addons', - 'page' => 'addons', - 'settings_page' => 'cloudflare', - 'default' => 0, - 'sanitize_callback' => 'sanitize_checkbox', - ], - ] - ); + $default_cf_settings = [ + 'do_cloudflare' => [ + 'type' => 'rocket_addon', + 'label' => __( 'Cloudflare', 'rocket' ), + 'logo' => [ + 'url' => rocket_get_constant( 'WP_ROCKET_ASSETS_IMG_URL', '' ) . 'logo-cloudflare2.svg', + 'width' => 153, + 'height' => 51, + ], + 'title' => __( 'Integrate your Cloudflare account with this add-on.', 'rocket' ), + 'description' => __( 'Provide your account email, global API key, and domain to use options such as clearing the Cloudflare cache and enabling optimal settings with WP Rocket.', 'rocket' ), + 'helper' => sprintf( + // translators: %1$s = opening span tag, %2$s = closing span tag. + __( '%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just activate the official Cloudflare plugin and configure it. WP Rocket will automatically enable compatibility.', 'rocket' ), + '', + '' + ), + 'section' => 'addons', + 'page' => 'addons', + 'settings_page' => 'cloudflare', + 'default' => 0, + 'sanitize_callback' => 'sanitize_checkbox', + ], + ]; + + /** + * Filters the Cloudflare Addon field values + * + * @since 3.14 + * + * @param array $cf_settings Array of values to populate the field. + */ + $cf_settings = (array) apply_filters( 'rocket_cloudflare_field_settings', $default_cf_settings ); + $cf_settings = wp_parse_args( $cf_settings, $default_cf_settings ); + + $this->settings->add_settings_fields( $cf_settings ); /** * Allow to display the "Varnish" tab in the settings page diff --git a/inc/Engine/Admin/Settings/Settings.php b/inc/Engine/Admin/Settings/Settings.php index 8be968d924..d56b0702de 100644 --- a/inc/Engine/Admin/Settings/Settings.php +++ b/inc/Engine/Admin/Settings/Settings.php @@ -344,19 +344,6 @@ public function sanitize_callback( $input ) { // Option : fonts to preload. $input['preload_fonts'] = ! empty( $input['preload_fonts'] ) ? $this->sanitize_fonts( $input['preload_fonts'] ) : []; - // Options : CloudFlare. - $input['do_cloudflare'] = ! empty( $input['do_cloudflare'] ) ? 1 : 0; - $input['cloudflare_email'] = isset( $input['cloudflare_email'] ) ? sanitize_email( $input['cloudflare_email'] ) : ''; - $input['cloudflare_api_key'] = isset( $input['cloudflare_api_key'] ) ? sanitize_text_field( $input['cloudflare_api_key'] ) : ''; - $input['cloudflare_zone_id'] = isset( $input['cloudflare_zone_id'] ) ? sanitize_text_field( $input['cloudflare_zone_id'] ) : ''; - $input['cloudflare_devmode'] = isset( $input['cloudflare_devmode'] ) && is_numeric( $input['cloudflare_devmode'] ) ? (int) $input['cloudflare_devmode'] : 0; - $input['cloudflare_auto_settings'] = ( isset( $input['cloudflare_auto_settings'] ) && is_numeric( $input['cloudflare_auto_settings'] ) ) ? (int) $input['cloudflare_auto_settings'] : 0; - $input['cloudflare_protocol_rewrite'] = ! empty( $input['cloudflare_protocol_rewrite'] ) ? 1 : 0; - - if ( defined( 'WP_ROCKET_CF_API_KEY' ) ) { - $input['cloudflare_api_key'] = WP_ROCKET_CF_API_KEY; - } - // Options: Sucuri cache. And yeah, there's a typo, but now it's too late to fix ^^'. $input['sucury_waf_cache_sync'] = ! empty( $input['sucury_waf_cache_sync'] ) ? 1 : 0; diff --git a/inc/Plugin.php b/inc/Plugin.php index dd951bd095..698b5523f8 100644 --- a/inc/Plugin.php +++ b/inc/Plugin.php @@ -9,6 +9,7 @@ use WP_Rocket\Event_Management\Event_Manager; use WP_Rocket\ThirdParty\Hostings\HostResolver; use WP_Rocket\Addon\ServiceProvider as AddonServiceProvider; +use WP_Rocket\Addon\Cloudflare\ServiceProvider as CloudflareServiceProvider; use WP_Rocket\Addon\Varnish\ServiceProvider as VarnishServiceProvider; use WP_Rocket\Engine\Admin\Beacon\ServiceProvider as BeaconServiceProvider; use WP_Rocket\Engine\Admin\Database\ServiceProvider as AdminDatabaseServiceProvider; @@ -257,6 +258,7 @@ private function init_valid_key_subscribers() { private function init_common_subscribers() { $this->container->addServiceProvider( CapabilitiesServiceProvider::class ); $this->container->addServiceProvider( AddonServiceProvider::class ); + $this->container->addServiceProvider( VarnishServiceProvider::class ); $this->container->addServiceProvider( PreloadServiceProvider::class ); $this->container->addServiceProvider( PreloadLinksServiceProvider::class ); @@ -366,6 +368,9 @@ private function init_common_subscribers() { } if ( $this->options->get( 'do_cloudflare', false ) ) { + $this->container->addServiceProvider( CloudflareServiceProvider::class ); + + $common_subscribers[] = 'cloudflare_admin_subscriber'; $common_subscribers[] = 'cloudflare_subscriber'; } diff --git a/inc/ThirdParty/Plugins/CDN/Cloudflare.php b/inc/ThirdParty/Plugins/CDN/Cloudflare.php index e8f1cb8461..2194948ab6 100644 --- a/inc/ThirdParty/Plugins/CDN/Cloudflare.php +++ b/inc/ThirdParty/Plugins/CDN/Cloudflare.php @@ -1,16 +1,16 @@ options = $options; + public function __construct( Options_Data $options, Options $options_api, Beacon $beacon ) { + $this->options = $options; + $this->options_api = $options_api; + $this->beacon = $beacon; } /** * Return an array of events that this subscriber wants to listen to. * - * @since 3.11.6 - * * @return array */ public static function get_subscribed_events() { return [ - 'admin_notices' => 'display_server_pushing_mode_notice', + 'admin_notices' => [ + [ 'display_server_pushing_mode_notice' ], + [ 'display_apo_cookies_notice' ], + [ 'display_apo_cache_notice' ], + ], + 'rocket_display_input_do_cloudflare' => 'hide_addon_radio', + 'rocket_cloudflare_field_settings' => 'update_addon_field', + 'pre_get_rocket_option_do_cloudflare' => 'disable_cloudflare_option', + 'cloudflare_purge_everything_actions' => 'add_clean_domain_on_purge', + 'cloudflare_purge_by_url' => [ 'add_rocket_purge_url_to_purge_url', 10, 2 ], + 'cloudflare_purge_url_actions' => 'add_after_rocket_clean_to_actions', + 'admin_post_rocket_enable_separate_mobile_cache' => 'enable_separate_mobile_cache', ]; } /** * Display notice for server pushing mode. * - * @since 3.11.6 - * * @return void */ public function display_server_pushing_mode_notice() { - - if ( ! rocket_is_cloudflare() ) { - return; - } - if ( ! rocket_get_constant( 'CLOUDFLARE_PLUGIN_DIR' ) ) { return; } @@ -106,4 +126,296 @@ public function display_server_pushing_mode_notice() { ] ); } + + /** + * Hide WP Rocket CF Addon activation button if the official CF plugin is enabled + * + * @param bool $enable True to display, False otherwise. + * + * @return bool + */ + public function hide_addon_radio( $enable ) { + if ( ! $this->is_plugin_active() ) { + return $enable; + } + + return false; + } + + /** + * Updates WP Rocket CF Addon field when the official CF plugin is enabled + * + * @param array $settings Array of values to populate the field. + * + * @return array + */ + public function update_addon_field( $settings ) { + if ( ! $this->is_plugin_active() ) { + return $settings; + } + + $settings['do_cloudflare']['title'] = __( 'Your site is using the official Cloudflare plugin. We have enabled Cloudflare auto-purge for compatibility. If you have APO activated, it is also compatible.', 'rocket' ); + $settings['do_cloudflare']['description'] = __( 'Cloudflare cache will be purged each time WP Rocket clears its cache to ensure content is always up-to-date.', 'rocket' ); + $settings['do_cloudflare']['helper'] = ''; + $settings['do_cloudflare']['settings_page'] = ''; + + return $settings; + } + + /** + * Disable WP Rocket CF option when Cloudflare plugin is enabled + * + * @param mixed $value Pre option value. + * + * @return bool + */ + public function disable_cloudflare_option( $value ) { + if ( ! $this->is_plugin_active() ) { + return $value; + } + + return false; + } + + /** + * Display a notice when APO is enabled and mandatory/dynamic cookies exists + * + * @return void + */ + public function display_apo_cookies_notice() { + if ( ! $this->can_display_notice() ) { + return; + } + + if ( + empty( get_rocket_cache_mandatory_cookies() ) + && + empty( get_rocket_cache_dynamic_cookies() ) + ) { + return; + } + + $doc = $this->beacon->get_suggest( 'cloudflare_apo' ); + + $message = sprintf( + // Translators: %1$s = strong opening tag, %2$s = strong closing tag. + __( '%1$sWP Rocket:%2$sYou are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.', 'rocket' ) . '
', + '', + '' + ); + $message .= sprintf( + // Translators:%1$s = opening tag, %2$s = closing tag. + __( 'You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. %1$sMore info%2$s', 'rocket' ), + '', + '' + ); + + rocket_notice_html( + [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => $message, + ] + ); + } + + /** + * Display a notice when there is a mismatch between WP Rocket separate cache by mobile value and APO cache by device type + * + * @return void + */ + public function display_apo_cache_notice() { + if ( ! $this->can_display_notice() ) { + return; + } + + $cf_device_type = get_option( 'automatic_platform_optimization_cache_by_device_type', [] ); + + if ( ! key_exists( 'value', $cf_device_type ) ) { + return; + } + + $mobile_cache = $this->options->get( 'do_caching_mobile_files', 0 ); + + if ( (int) $mobile_cache === (int) $cf_device_type['value'] ) { + return; + } + + $doc = $this->beacon->get_suggest( 'cloudflare_apo' ); + + $boxes = get_user_meta( get_current_user_id(), 'rocket_boxes', true ); + + if ( + 1 === (int) $mobile_cache + && + 0 === (int) $cf_device_type['value'] + ) { + rocket_notice_html( + [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => sprintf( + // Translators: %1$s = strong opening tag, %2$s = strong closing tag, %3$s = opening tag, %4$s = closing tag, %5$s = opening tag. + __( '%1$sWP Rocket:%2$s You are using "Separate cache files for mobile devices". You need to activate "Cache by Device Type" %3$ssetting%5$s on Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s', 'rocket' ), + '', + '', + '', + '', + '' + ), + ] + ); + } elseif ( + 0 === (int) $mobile_cache + && + 1 === (int) $cf_device_type['value'] + && + ! in_array( __FUNCTION__, (array) $boxes, true ) + ) { + rocket_notice_html( + [ + 'status' => 'warning', + 'message' => sprintf( + // Translators: %1$s = strong opening tag, %2$s = strong closing tag. + __( '%1$sWP Rocket:%2$sYou have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', 'rocket' ), + '', + '' + ), + 'dismiss_button' => __FUNCTION__, + 'dismissible' => '', + 'action' => 'enable_separate_mobile_cache', + ] + ); + } + } + + /** + * Checks if APO notices should be displayed + * + * @return bool + */ + private function can_display_notice(): bool { + if ( ! current_user_can( 'rocket_manage_options' ) ) { + return false; + } + + $screen = get_current_screen(); + + if ( + isset( $screen->id ) + && + 'settings_page_wprocket' !== $screen->id + ) { + return false; + } + if ( ! $this->is_plugin_active() ) { + return false; + } + + return $this->is_apo_enabled(); + } + + /** + * Adds clear WP Rocket cache on CF purge + * + * @param array $actions Actions to clear Cloudflare. + * + * @return array + */ + public function add_clean_domain_on_purge( $actions ) { + $actions[] = 'after_rocket_clean_domain'; + + return $actions; + } + + /** + * Add WP Rocket purge URLs list to CF purge URLs list + * + * @param array $urls CF purge URLs list. + * @param int $post_id Post ID. + * + * @return array + */ + public function add_rocket_purge_url_to_purge_url( $urls, $post_id ) { + $post = get_post( $post_id ); + + if ( empty( $post ) ) { + return $urls; + } + + $rocket_urls = rocket_get_purge_urls( $post_id, $post ); + + return array_unique( array_merge( $urls, $rocket_urls ) ); + } + + /** + * Adds clear WP Rocket partial cache on CF partial purge + * + * @param array $actions Actions to clear CF URL cache. + * + * @return array + */ + public function add_after_rocket_clean_to_actions( $actions ) { + $actions[] = 'after_rocket_clean_post'; + + return $actions; + } + + /** + * Enable separate cache for mobile option + * + * @return void + */ + public function enable_separate_mobile_cache() { + check_admin_referer( 'rocket_enable_separate_mobile_cache' ); + + if ( ! current_user_can( 'rocket_manage_options' ) ) { + return; + } + + $this->options->set( 'cache_mobile', 1 ); + $this->options->set( 'do_caching_mobile_files', 1 ); + $this->options_api->set( 'settings', $this->options->get_options() ); + + wp_safe_redirect( wp_get_referer() ); + rocket_get_constant( 'WP_ROCKET_IS_TESTING', false ) ? wp_die() : exit; + } + + /** + * Checks if CF plugin is enabled & credentials saved + * + * @return bool + */ + private function is_plugin_active(): bool { + if ( ! is_plugin_active( 'cloudflare/cloudflare.php' ) ) { + return false; + } + + if ( + empty( get_option( 'cloudflare_api_email', '' ) ) + || + empty( get_option( 'cloudflare_api_key', '' ) ) + || + empty( get_option( 'cloudflare_cached_domain_name', '' ) ) + ) { + return false; + } + + return true; + } + + /** + * Checks if CF APO is enabled + * + * @return bool + */ + private function is_apo_enabled(): bool { + $is_apo_enabled = get_option( 'automatic_platform_optimization', [] ); + + if ( ! key_exists( 'value', $is_apo_enabled ) ) { + return false; + } + + return (bool) $is_apo_enabled['value']; + } } diff --git a/inc/ThirdParty/Plugins/Optimization/AMP.php b/inc/ThirdParty/Plugins/Optimization/AMP.php index fc91271dc5..87383ebc9c 100644 --- a/inc/ThirdParty/Plugins/Optimization/AMP.php +++ b/inc/ThirdParty/Plugins/Optimization/AMP.php @@ -134,6 +134,8 @@ public function disable_options_on_amp() { add_filter( 'pre_get_rocket_option_preload_links', '__return_false' ); add_filter( 'pre_get_rocket_option_minify_js', '__return_false' ); add_filter( 'pre_get_rocket_option_minify_google_fonts', '__return_false' ); + add_filter( 'pre_get_cloudflare_protocol_rewrite', '__return_false' ); + add_filter( 'do_rocket_protocol_rewrite', '__return_false' ); unset( $wp_filter['rocket_buffer'] ); @@ -146,19 +148,6 @@ public function disable_options_on_amp() { add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite' ] ); add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite_srcset' ] ); } - - if ( - (bool) $this->options->get( 'do_cloudflare', 0 ) - && - ( - (bool) $this->options->get( 'cloudflare_protocol_rewrite', 0 ) - || - // this filter is documented in inc/front/protocol.php. - (bool) apply_filters( 'do_rocket_protocol_rewrite', false ) // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals - ) - ) { - remove_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset', PHP_INT_MAX ); - } } /** diff --git a/inc/ThirdParty/ServiceProvider.php b/inc/ThirdParty/ServiceProvider.php index 6d0940659a..e990d85ee9 100644 --- a/inc/ThirdParty/ServiceProvider.php +++ b/inc/ThirdParty/ServiceProvider.php @@ -215,6 +215,8 @@ public function register() { $this->getContainer() ->share( 'cloudflare_plugin_subscriber', Cloudflare::class ) ->addArgument( $options ) + ->addArgument( $this->getContainer()->get( 'options_api' ) ) + ->addArgument( $this->getContainer()->get( 'beacon' ) ) ->addTag( 'common_subscriber' ); $this->getContainer() ->share( 'jetpack', Jetpack::class ) diff --git a/inc/admin/ui/notices.php b/inc/admin/ui/notices.php index ab98b4a63a..3ef881e5ed 100755 --- a/inc/admin/ui/notices.php +++ b/inc/admin/ui/notices.php @@ -185,11 +185,6 @@ function rocket_plugins_to_deactivate() { $plugins['scripts-to-footerphp'] = 'scripts-to-footerphp/scripts-to-footer.php'; } - if ( get_rocket_option( 'do_cloudflare' ) ) { - $plugins['cloudflare'] = 'cloudflare/cloudflare.php'; - $plugins_explanations['cloudflare'] = __( 'WP Rocket Cloudflare Add-on provides similar functionalities. They can not be active at the same time.', 'rocket' ); - } - if ( get_rocket_option( 'control_heartbeat' ) ) { $plugins['heartbeat-control'] = 'heartbeat-control/heartbeat-control.php'; } @@ -761,6 +756,12 @@ function rocket_notice_html( $args ) { ]; $args['action'] = '' . __( 'Turn on Remove Unused CSS', 'rocket' ) . ''; break; + case 'enable_separate_mobile_cache': + $params = [ + 'action' => 'rocket_enable_separate_mobile_cache', + ]; + $args['action'] = '' . __( 'Enable “Separate Cache Files for Mobile Devices” now', 'rocket' ) . ''; + break; case 'force_deactivation': /** * Allow a "force deactivation" link to be printed, use at your own risks diff --git a/inc/common/cloudflare-flexible-ssl.php b/inc/common/cloudflare-flexible-ssl.php deleted file mode 100644 index cb54060868..0000000000 --- a/inc/common/cloudflare-flexible-ssl.php +++ /dev/null @@ -1,111 +0,0 @@ - true, - 'result' => (object) [], - ]; - - $cf_ips_values->result->ipv4_cidrs = [ - '103.21.244.0/22', - '103.22.200.0/22', - '103.31.4.0/22', - '104.16.0.0/12', - '108.162.192.0/18', - '131.0.72.0/22', - '141.101.64.0/18', - '162.158.0.0/15', - '172.64.0.0/13', - '173.245.48.0/20', - '188.114.96.0/20', - '190.93.240.0/20', - '197.234.240.0/22', - '198.41.128.0/17', - ]; - - $cf_ips_values->result->ipv6_cidrs = [ - '2400:cb00::/32', - '2405:8100::/32', - '2405:b500::/32', - '2606:4700::/32', - '2803:f800::/32', - '2c0f:f248::/32', - '2a06:98c0::/29', - ]; - } - - if ( strpos( $original_ip, ':' ) === false ) { - $cf_ip_ranges = $cf_ips_values->result->ipv4_cidrs; - foreach ( $cf_ip_ranges as $range ) { - if ( rocket_ipv4_in_range( $original_ip, $range ) ) { - return true; - } - } - } else { - $cf_ip_ranges = $cf_ips_values->result->ipv6_cidrs; - $ipv6 = get_rocket_ipv6_full( $original_ip ); - foreach ( $cf_ip_ranges as $range ) { - if ( rocket_ipv6_in_range( $ipv6, $range ) ) { - return true; - } - } - } - - return false; -} - -/** - * Fixes Cloudflare Flexible SSL redirect loop - * - * @since 3.4.1 - * @author Soponar Cristina - */ -function rocket_fix_cf_flexible_ssl() { - $is_cf = rocket_is_cloudflare(); - if ( $is_cf ) { - // Fixes Flexible SSL. - if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) { - $_SERVER['HTTPS'] = 'on'; - } - } -} diff --git a/inc/common/purge.php b/inc/common/purge.php index bc7ce4bf3d..fd5a9b91ae 100755 --- a/inc/common/purge.php +++ b/inc/common/purge.php @@ -29,126 +29,128 @@ function rocket_widget_update_callback( $instance ) { } add_filter( 'widget_update_callback', 'rocket_widget_update_callback' ); -/** - * Get post purge urls. - * - * @since 3.4.3 - * - * @param int $post_id The post ID. - * @param WP_Post $post WP_Post object. - * @return array Array with all URLs which need to be purged. - */ -function rocket_get_purge_urls( $post_id, $post ) { - $purge_urls = []; +if ( ! function_exists( 'rocket_get_purge_urls' ) ) { + /** + * Get post purge urls. + * + * @since 3.4.3 + * + * @param int $post_id The post ID. + * @param WP_Post $post WP_Post object. + * @return array Array with all URLs which need to be purged. + */ + function rocket_get_purge_urls( $post_id, $post ) { + $purge_urls = []; - // Get the permalink structure. - $permalink_structure = get_rocket_sample_permalink( $post_id ); + // Get the permalink structure. + $permalink_structure = get_rocket_sample_permalink( $post_id ); - // Get permalink. - $permalink = str_replace( [ '%postname%', '%pagename%' ], $permalink_structure[1], $permalink_structure[0] ); + // Get permalink. + $permalink = str_replace( [ '%postname%', '%pagename%' ], $permalink_structure[1], $permalink_structure[0] ); - // Add permalink. - if ( rocket_extract_url_component( $permalink, PHP_URL_PATH ) !== '/' ) { - $purge_urls[] = $permalink; - } + // Add permalink. + if ( rocket_extract_url_component( $permalink, PHP_URL_PATH ) !== '/' ) { + $purge_urls[] = $permalink; + } - // Add Posts page. - if ( 'post' === $post->post_type && (int) get_option( 'page_for_posts' ) > 0 ) { - $purge_urls[] = get_permalink( get_option( 'page_for_posts' ) ); - } + // Add Posts page. + if ( 'post' === $post->post_type && (int) get_option( 'page_for_posts' ) > 0 ) { + $purge_urls[] = get_permalink( get_option( 'page_for_posts' ) ); + } - // Add Post Type archive. - $post_type = $post->post_type; - if ( 'post' !== $post_type ) { - $post_type_archive = get_post_type_archive_link( $post_type ); - if ( $post_type_archive ) { - // Rename the caching filename for SSL URLs. - $filename = 'index'; - if ( is_ssl() ) { - $filename .= '-https'; - } + // Add Post Type archive. + $post_type = $post->post_type; + if ( 'post' !== $post_type ) { + $post_type_archive = get_post_type_archive_link( $post_type ); + if ( $post_type_archive ) { + // Rename the caching filename for SSL URLs. + $filename = 'index'; + if ( is_ssl() ) { + $filename .= '-https'; + } - $post_type_archive = trailingslashit( $post_type_archive ); - $purge_urls[] = $post_type_archive . $filename . '.html'; - $purge_urls[] = $post_type_archive . $filename . '.html_gzip'; - $purge_urls[] = $post_type_archive . $GLOBALS['wp_rewrite']->pagination_base; + $post_type_archive = trailingslashit( $post_type_archive ); + $purge_urls[] = $post_type_archive . $filename . '.html'; + $purge_urls[] = $post_type_archive . $filename . '.html_gzip'; + $purge_urls[] = $post_type_archive . $GLOBALS['wp_rewrite']->pagination_base; + } } - } - // Add next post. - $next_post = get_adjacent_post( false, '', false ); - if ( $next_post ) { - $purge_urls[] = get_permalink( $next_post ); - } - - // Add next post in same category. - $next_in_same_cat_post = get_adjacent_post( true, '', false ); - if ( $next_in_same_cat_post && $next_in_same_cat_post !== $next_post ) { - $purge_urls[] = get_permalink( $next_in_same_cat_post ); - } + // Add next post. + $next_post = get_adjacent_post( false, '', false ); + if ( $next_post ) { + $purge_urls[] = get_permalink( $next_post ); + } - // Add previous post. - $previous_post = get_adjacent_post( false, '', true ); - if ( $previous_post ) { - $purge_urls[] = get_permalink( $previous_post ); - } + // Add next post in same category. + $next_in_same_cat_post = get_adjacent_post( true, '', false ); + if ( $next_in_same_cat_post && $next_in_same_cat_post !== $next_post ) { + $purge_urls[] = get_permalink( $next_in_same_cat_post ); + } - // Add previous post in same category. - $previous_in_same_cat_post = get_adjacent_post( true, '', true ); - if ( $previous_in_same_cat_post && $previous_in_same_cat_post !== $previous_post ) { - $purge_urls[] = get_permalink( $previous_in_same_cat_post ); - } + // Add previous post. + $previous_post = get_adjacent_post( false, '', true ); + if ( $previous_post ) { + $purge_urls[] = get_permalink( $previous_post ); + } - // Add urls page to purge every time a post is save. - $cache_purge_pages = get_rocket_option( 'cache_purge_pages' ); - if ( $cache_purge_pages ) { - global $blog_id; + // Add previous post in same category. + $previous_in_same_cat_post = get_adjacent_post( true, '', true ); + if ( $previous_in_same_cat_post && $previous_in_same_cat_post !== $previous_post ) { + $purge_urls[] = get_permalink( $previous_in_same_cat_post ); + } - $home_url = get_option( 'home' ); + // Add urls page to purge every time a post is save. + $cache_purge_pages = get_rocket_option( 'cache_purge_pages' ); + if ( $cache_purge_pages ) { + global $blog_id; - if ( ! empty( $blog_id ) && is_multisite() ) { - switch_to_blog( $blog_id ); $home_url = get_option( 'home' ); - restore_current_blog(); - } - $home_parts = get_rocket_parse_url( $home_url ); - $home_url = "{$home_parts['scheme']}://{$home_parts['host']}"; - $cache_path = rocket_get_constant( 'WP_ROCKET_CACHE_PATH' ) . $home_parts['host']; - - foreach ( $cache_purge_pages as $page ) { - // Check if it contains regex pattern. - if ( strstr( $page, '*' ) ) { - $matches_files = _rocket_get_recursive_dir_files_by_regex( '#' . $page . '#i' ); - foreach ( $matches_files as $file ) { - // Convert path to URL. - $purge_urls[] = str_replace( $cache_path, untrailingslashit( $home_url ), $file->getPath() ); - } - continue; + if ( ! empty( $blog_id ) && is_multisite() ) { + switch_to_blog( $blog_id ); + $home_url = get_option( 'home' ); + restore_current_blog(); } - $purge_urls[] = trailingslashit( $home_url ) . ltrim( $page, '/' ); + $home_parts = get_rocket_parse_url( $home_url ); + $home_url = "{$home_parts['scheme']}://{$home_parts['host']}"; + $cache_path = rocket_get_constant( 'WP_ROCKET_CACHE_PATH' ) . $home_parts['host']; + + foreach ( $cache_purge_pages as $page ) { + // Check if it contains regex pattern. + if ( strstr( $page, '*' ) ) { + $matches_files = _rocket_get_recursive_dir_files_by_regex( '#' . $page . '#i' ); + foreach ( $matches_files as $file ) { + // Convert path to URL. + $purge_urls[] = str_replace( $cache_path, untrailingslashit( $home_url ), $file->getPath() ); + } + continue; + } + + $purge_urls[] = trailingslashit( $home_url ) . ltrim( $page, '/' ); + } } - } - // Add the author page. - $author_url = trailingslashit( get_author_posts_url( $post->post_author ) ); - if ( trailingslashit( site_url() ) !== $author_url && trailingslashit( home_url() ) !== $author_url ) { - $purge_urls[] = $author_url; - } + // Add the author page. + $author_url = trailingslashit( get_author_posts_url( $post->post_author ) ); + if ( trailingslashit( site_url() ) !== $author_url && trailingslashit( home_url() ) !== $author_url ) { + $purge_urls[] = $author_url; + } - // Add all parents. - $parents = get_post_ancestors( $post_id ); - if ( (bool) $parents ) { - foreach ( $parents as $parent_id ) { - $purge_urls[] = get_permalink( $parent_id ); + // Add all parents. + $parents = get_post_ancestors( $post_id ); + if ( (bool) $parents ) { + foreach ( $parents as $parent_id ) { + $purge_urls[] = get_permalink( $parent_id ); + } } - } - // Remove entries with empty values in array. - $purge_urls = array_filter( $purge_urls, 'is_string' ); + // Remove entries with empty values in array. + $purge_urls = array_filter( $purge_urls, 'is_string' ); - return array_flip( array_flip( $purge_urls ) ); + return array_flip( array_flip( $purge_urls ) ); + } } /** diff --git a/inc/vendors/ip_in_range.php b/inc/deprecated/3.14.php old mode 100755 new mode 100644 similarity index 66% rename from inc/vendors/ip_in_range.php rename to inc/deprecated/3.14.php index 48e73607fd..983a59f5cc --- a/inc/vendors/ip_in_range.php +++ b/inc/deprecated/3.14.php @@ -1,5 +1,165 @@ ]*)(href|src|action)=[\"'])https?:\\/\\//i"; + $subst = '$1//'; + $return = preg_replace( $re, $subst, $buffer ); + + if ( $return ) { + $buffer = $return; + } + + return $buffer; +} + +/** + * Remove HTTP protocol on srcset attribute generated by WordPress + * + * @since 2.7 + * @deprecated 3.14 + * + * @param array $sources an Array of images sources for srcset. + * @return array Updated array of images sources + */ +function rocket_protocol_rewrite_srcset( $sources ) { + _deprecated_function( __FUNCTION__, '3.14' ); + + if ( (bool) $sources ) { + foreach ( $sources as $i => $source ) { + $sources[ $i ]['url'] = str_replace( [ 'http:', 'https:' ], '', $source['url'] ); + } + } + + return $sources; +} + +/** + * Check if request is from Cloudflare + * + * @since 3.4.1 + * @author Soponar Cristina + * + * @return bool + */ +function rocket_is_cloudflare() { + _deprecated_function( __FUNCTION__, '3.14' ); + + if ( ! isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) { + return false; + } + // Check if original ip has already been restored, e.g. by nginx - assume it was from cloudflare then. + if ( isset( $_SERVER['REMOTE_ADDR'] ) && $_SERVER['REMOTE_ADDR'] === $_SERVER['HTTP_CF_CONNECTING_IP'] ) { + return true; + } + + return rocket_is_cf_ip(); +} + +/** + * Check if a request comes from a CloudFlare IP. + * + * @since 3.4.1 + * @author Soponar Cristina + * + * @return bool + */ +function rocket_is_cf_ip() { + _deprecated_function( __FUNCTION__, '3.14' ); + + // Store original remote address in $original_ip. + $original_ip = filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP ); + if ( ! isset( $original_ip ) ) { + return false; + } + + $cf_ips_values = get_transient( 'rocket_cloudflare_ips' ); + + // Cloudflare IPS should always be populated because the code runs before loading Cloudflare addon. + if ( false === $cf_ips_values ) { + $cf_ips_values = (object) [ + 'success' => true, + 'result' => (object) [], + ]; + + $cf_ips_values->result->ipv4_cidrs = [ + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '104.16.0.0/12', + '108.162.192.0/18', + '131.0.72.0/22', + '141.101.64.0/18', + '162.158.0.0/15', + '172.64.0.0/13', + '173.245.48.0/20', + '188.114.96.0/20', + '190.93.240.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + ]; + + $cf_ips_values->result->ipv6_cidrs = [ + '2400:cb00::/32', + '2405:8100::/32', + '2405:b500::/32', + '2606:4700::/32', + '2803:f800::/32', + '2c0f:f248::/32', + '2a06:98c0::/29', + ]; + } + + if ( strpos( $original_ip, ':' ) === false ) { + $cf_ip_ranges = $cf_ips_values->result->ipv4_cidrs; + foreach ( $cf_ip_ranges as $range ) { + if ( rocket_ipv4_in_range( $original_ip, $range ) ) { + return true; + } + } + } else { + $cf_ip_ranges = $cf_ips_values->result->ipv6_cidrs; + $ipv6 = get_rocket_ipv6_full( $original_ip ); + foreach ( $cf_ip_ranges as $range ) { + if ( rocket_ipv6_in_range( $ipv6, $range ) ) { + return true; + } + } + } + + return false; +} + +/** + * Fixes Cloudflare Flexible SSL redirect loop + * + * @since 3.4.1 + * @author Soponar Cristina + */ +function rocket_fix_cf_flexible_ssl() { + _deprecated_function( __FUNCTION__, '3.14' ); + + $is_cf = rocket_is_cloudflare(); + if ( $is_cf ) { + // Fixes Flexible SSL. + if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) { + $_SERVER['HTTPS'] = 'on'; + } + } +} + /* * ip_in_range.php - Function to determine if an IP is located in a * specific range as specified via several alternative @@ -37,6 +197,8 @@ // netmasks, it is easier to ensure that the binary strings are padded // with zeros out to 32 characters - IP addresses are 32 bit numbers function rocket_decbin32($dec) { + _deprecated_function( __FUNCTION__, '3.14' ); + return str_pad(decbin($dec), 32, '0', STR_PAD_LEFT); } @@ -50,6 +212,8 @@ function rocket_decbin32($dec) { // Note little validation is done on the range inputs - it expects you to // use one of the above 3 formats. function rocket_ipv4_in_range($ip, $range) { + _deprecated_function( __FUNCTION__, '3.14' ); + if (strpos($range, '/') !== false) { // $range is in IP/NETMASK format list($range, $netmask) = explode('/', $range, 2); @@ -98,6 +262,8 @@ function rocket_ipv4_in_range($ip, $range) { } function rocket_ip2long6($ip) { + _deprecated_function( __FUNCTION__, '3.14' ); + if (substr_count($ip, '::')) { $ip = str_replace('::', str_repeat(':0000', 8 - substr_count($ip, ':')) . ':', $ip); } @@ -113,6 +279,8 @@ function rocket_ip2long6($ip) { // Get the ipv6 full format and return it as a decimal value. function get_rocket_ipv6_full($ip) { + _deprecated_function( __FUNCTION__, '3.14' ); + $pieces = explode ("/", $ip, 2); $left_piece = $pieces[0]; $right_piece = null; @@ -160,6 +328,8 @@ function get_rocket_ipv6_full($ip) { // $ip and $range_ip are converted to full IPV6 format. // Returns true if the IPV6 address, $ip, is within the range from $range_ip. False otherwise. function rocket_ipv6_in_range($ip, $range_ip) { + _deprecated_function( __FUNCTION__, '3.14' ); + $pieces = explode ("/", $range_ip, 2); $left_piece = $pieces[0]; $right_piece = $pieces[1]; diff --git a/inc/front/protocol.php b/inc/front/protocol.php deleted file mode 100644 index 418a9469e7..0000000000 --- a/inc/front/protocol.php +++ /dev/null @@ -1,55 +0,0 @@ -]*)(href|src|action)=[\"'])https?:\\/\\//i"; - $subst = '$1//'; - $return = preg_replace( $re, $subst, $buffer ); - - if ( $return ) { - $buffer = $return; - } - - return $buffer; -} - -/** - * Remove HTTP protocol on srcset attribute generated by WordPress - * - * @since 2.7 - * - * @param array $sources an Array of images sources for srcset. - * @return array Updated array of images sources - */ -function rocket_protocol_rewrite_srcset( $sources ) { - if ( (bool) $sources ) { - foreach ( $sources as $i => $source ) { - $sources[ $i ]['url'] = str_replace( [ 'http:', 'https:' ], '', $source['url'] ); - } - } - - return $sources; -} diff --git a/inc/main.php b/inc/main.php index 6dfc9852fe..a201ca2208 100644 --- a/inc/main.php +++ b/inc/main.php @@ -1,5 +1,6 @@ =4" } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-schema-traverse": { @@ -11950,9 +11950,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", + "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -11968,35 +11968,35 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "node_modules/webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.64.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", + "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", + "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", + "enhanced-resolve": "^5.8.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "watchpack": "^2.3.0", + "webpack-sources": "^3.2.2" }, "bin": { "webpack": "bin/webpack.js" @@ -12101,9 +12101,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", "dev": true, "engines": { "node": ">=10.13.0" @@ -13631,9 +13631,9 @@ } }, "@types/eslint": { - "version": "8.21.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.2.tgz", - "integrity": "sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", + "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", "dev": true, "requires": { "@types/estree": "*", @@ -13641,9 +13641,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "dev": true, "requires": { "@types/eslint": "*", @@ -13651,9 +13651,9 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/json-schema": { @@ -13856,9 +13856,9 @@ "dev": true }, "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, "acorn-import-assertions": { @@ -16146,9 +16146,9 @@ } }, "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -17315,9 +17315,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "gulp": { @@ -18427,10 +18427,10 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema-traverse": { @@ -21845,9 +21845,9 @@ } }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", + "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -21860,35 +21860,35 @@ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.64.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", + "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", + "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", + "enhanced-resolve": "^5.8.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "watchpack": "^2.3.0", + "webpack-sources": "^3.2.2" }, "dependencies": { "schema-utils": { @@ -21958,9 +21958,9 @@ } }, "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", "dev": true }, "whatwg-fetch": { diff --git a/package.json b/package.json index f58060cee2..b19efbcacf 100644 --- a/package.json +++ b/package.json @@ -11,39 +11,39 @@ "author": "", "license": "ISC", "dependencies": { - "isomorphic-fetch": "^3.0", - "prop-types": "^15.6.2", - "react": "^16.5.2", - "react-dom": "^16.5.2" + "isomorphic-fetch": "^3.0", + "prop-types": "^15.6.2", + "react": "^16.5.2", + "react-dom": "^16.5.2" }, "devDependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "babel-loader": "^8.2.3", - "babel-preset-env": "^1.7.0", - "babelify": "^10.0.0", - "browserify": "^17.0.0", - "eslint": "^8.3.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-react": "^7.27.1", - "gulp": "^4.0.2", - "gulp-babel": "^8.0.0", - "gulp-concat": "2.6.1", - "gulp-iife": "^0.4.0", - "gulp-rename": "^2.0.0", - "gulp-sass": "^5.0.0", - "gulp-sourcemaps": "^3.0.0", - "gulp-uglify": "^3.0.2", - "lodash": "^4.17.21", - "vinyl-buffer": "^1.0.1", - "vinyl-source-stream": "^2.0.0", - "watchify": "^4.0.0", - "webpack": "^5.76.0", - "webpack-cli": "^4.9.1", - "yargs": "^17.3.0", - "sass": "^1.44.0" + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "babel-loader": "^8.2.3", + "babel-preset-env": "^1.7.0", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "eslint": "^8.3.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-react": "^7.27.1", + "gulp": "^4.0.2", + "gulp-babel": "^8.0.0", + "gulp-concat": "2.6.1", + "gulp-iife": "^0.4.0", + "gulp-rename": "^2.0.0", + "gulp-sass": "^5.0.0", + "gulp-sourcemaps": "^3.0.0", + "gulp-uglify": "^3.0.2", + "lodash": "^4.17.21", + "sass": "^1.44.0", + "vinyl-buffer": "^1.0.1", + "vinyl-source-stream": "^2.0.0", + "watchify": "^4.0.0", + "webpack": "^5.76.0", + "webpack-cli": "^4.9.1", + "yargs": "^17.3.0" } } diff --git a/src/scss/components/_addon.scss b/src/scss/components/_addon.scss index 0a291c3c0c..fed4b29720 100644 --- a/src/scss/components/_addon.scss +++ b/src/scss/components/_addon.scss @@ -30,6 +30,22 @@ font-style: normal; } + .wpr-field-helper { + @include font-size(13,20); + color: $cGreyDark2; + background-color: $cGrey; + padding: $space; + margin: $space 0; + + span.wpr-helper-title { + font-weight: 600; + &::after { + content: "\a"; + white-space: pre; + } + } + } + .wpr-addon-logo{ text-align: center; flex: 0 0 160px; diff --git a/tests/Fixtures/WP_Error.php b/tests/Fixtures/WP_Error.php index 09992379d3..1457c1a1f0 100644 --- a/tests/Fixtures/WP_Error.php +++ b/tests/Fixtures/WP_Error.php @@ -6,7 +6,7 @@ class WP_Error { private $message; private $error_data; - public function __construct( $code, $message, $error_data = null ) { + public function __construct( $code = '', $message = '', $error_data = '' ) { $this->code = $code; $this->message = $message; $this->error_data = $error_data; diff --git a/tests/Fixtures/WP_Post.php b/tests/Fixtures/WP_Post.php new file mode 100644 index 0000000000..e267ff58ff --- /dev/null +++ b/tests/Fixtures/WP_Post.php @@ -0,0 +1,8 @@ + [ + 'config' => [ + 'email' => '', + 'api_key' => '', + 'valid_credentials' => new WP_Error( 'cloudflare_credentials_empty', '' ), + 'valid_error' => true, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_credentials_empty', + 'result' => 'error', + ], + ], + 'testShouldReturnIncorrectCredentialsWPError' => [ + 'config' => [ + 'email' => 'roger', + 'api_key' => 'test12345', + 'valid_credentials' => false, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_invalid_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenRequestError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => new WP_Error( 'request_error', 'message' ), + 'request_error' => true, + ], + 'expected' => [ + 'error_code' => 'request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnEmptyResponseWPError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_no_reply', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenIncorrectResponseCode' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 6003, + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_incorrect_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenCFError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 4000, + 'message' => 'error', + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnResult' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'result' => [], + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/API/Client/get.php b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/get.php new file mode 100644 index 0000000000..c8b3e3ef79 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/get.php @@ -0,0 +1,163 @@ + [ + 'config' => [ + 'email' => '', + 'api_key' => '', + 'valid_credentials' => new WP_Error( 'cloudflare_credentials_empty', '' ), + 'valid_error' => true, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_credentials_empty', + 'result' => 'error', + ], + ], + 'testShouldReturnIncorrectCredentialsWPError' => [ + 'config' => [ + 'email' => 'roger', + 'api_key' => 'test12345', + 'valid_credentials' => false, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_invalid_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenRequestError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => new WP_Error( 'request_error', 'message' ), + 'request_error' => true, + ], + 'expected' => [ + 'error_code' => 'request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnEmptyResponseWPError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_no_reply', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenIncorrectResponseCode' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 6003, + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_incorrect_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenCFError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 4000, + 'message' => 'error', + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnResult' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'result' => [], + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/API/Client/patch.php b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/patch.php new file mode 100644 index 0000000000..c8b3e3ef79 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/patch.php @@ -0,0 +1,163 @@ + [ + 'config' => [ + 'email' => '', + 'api_key' => '', + 'valid_credentials' => new WP_Error( 'cloudflare_credentials_empty', '' ), + 'valid_error' => true, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_credentials_empty', + 'result' => 'error', + ], + ], + 'testShouldReturnIncorrectCredentialsWPError' => [ + 'config' => [ + 'email' => 'roger', + 'api_key' => 'test12345', + 'valid_credentials' => false, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_invalid_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenRequestError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => new WP_Error( 'request_error', 'message' ), + 'request_error' => true, + ], + 'expected' => [ + 'error_code' => 'request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnEmptyResponseWPError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_no_reply', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenIncorrectResponseCode' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 6003, + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_incorrect_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenCFError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 4000, + 'message' => 'error', + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnResult' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'result' => [], + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/API/Client/post.php b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/post.php new file mode 100644 index 0000000000..c8b3e3ef79 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/API/Client/post.php @@ -0,0 +1,163 @@ + [ + 'config' => [ + 'email' => '', + 'api_key' => '', + 'valid_credentials' => new WP_Error( 'cloudflare_credentials_empty', '' ), + 'valid_error' => true, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_credentials_empty', + 'result' => 'error', + ], + ], + 'testShouldReturnIncorrectCredentialsWPError' => [ + 'config' => [ + 'email' => 'roger', + 'api_key' => 'test12345', + 'valid_credentials' => false, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_invalid_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenRequestError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => new WP_Error( 'request_error', 'message' ), + 'request_error' => true, + ], + 'expected' => [ + 'error_code' => 'request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnEmptyResponseWPError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => '', + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_no_reply', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenIncorrectResponseCode' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 6003, + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_incorrect_credentials', + 'result' => 'error', + ], + ], + 'testShouldReturnWPErrorWhenCFError' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => false, + 'errors' => [ + (object) [ + 'code' => 4000, + 'message' => 'error', + ], + ], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'error_code' => 'cloudflare_request_error', + 'result' => 'error', + ], + ], + 'testShouldReturnResult' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => 'test12345', + 'valid_credentials' => true, + 'valid_error' => false, + 'path' => '', + 'data' => [], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [], + ] ), + 'response' => [], + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'result' => [], + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php b/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php new file mode 100644 index 0000000000..8fe1a39572 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php @@ -0,0 +1,31 @@ + [ + 'config' => [ + 'cap' => false, + 'transient' => [ + 'result' => '', + 'message' => '', + ], + ], + 'expected' => '', + ], + 'testShouldReturnNullWhenNoTransient' => [ + 'config' => [ + 'cap' => true, + 'transient' => false, + ], + 'expected' => '', + ], + 'testShouldReturnNoticeWhenTransient' => [ + 'config' => [ + 'cap' => true, + 'transient' => [ + 'result' => 'success', + 'message' => 'WP Rocket: Cloudflare cache successfully purged.', + ], + ], + 'expected' => 'WP Rocket: Cloudflare cache successfully purged.', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php b/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php new file mode 100644 index 0000000000..47caec5a29 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php @@ -0,0 +1,60 @@ + [ + 'config' => [ + 'current_screen' => (object) [ + 'id' => 'dashboard', + ], + 'cap' => true, + 'transient' => [ + 'pre' => '', + 'result' => '', + 'message' => '', + ], + ], + 'expected' => '', + ], + 'testShouldReturnNullWhenNoCap' => [ + 'config' => [ + 'current_screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'cap' => false, + 'transient' => [ + 'pre' => '', + [ + 'result' => '', + 'message' => '', + ], + ], + ], + 'expected' => '', + ], + 'testShouldReturnNullWhenNoTransient' => [ + 'config' => [ + 'current_screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'cap' => true, + 'transient' => false, + ], + 'expected' => '', + ], + 'testShouldReturnNoticeWhenTransient' => [ + 'config' => [ + 'current_screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'cap' => true, + 'transient' => [ + 'pre' => 'WP Rocket: Optimal settings activated for Cloudflare:', + [ + 'result' => 'success', + 'message' => 'test', + ], + ], + ], + 'expected' => 'WP Rocket: Optimal settings activated for Cloudflare:', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php b/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php new file mode 100644 index 0000000000..aae6e94b52 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php @@ -0,0 +1,14 @@ + [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => '12345', + ], + 'expected' => [ + 'X-Auth-Email' => 'roger@wp-rocket.me', + 'X-Auth-Key' => '12345', + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php b/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php new file mode 100644 index 0000000000..572452e343 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php @@ -0,0 +1,39 @@ + [ + 'config' => [ + 'email' => '', + 'api_key' => '', + ], + 'expected' => 'error', + ], + 'testShouldReturnWPErrorWhenEmptyEmail' => [ + 'config' => [ + 'email' => '', + 'api_key' => '12345', + ], + 'expected' => 'error', + ], + 'testShouldReturnWPErrorWhenEmptyAPIKey' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => '', + ], + 'expected' => 'error', + ], + 'testShouldReturnFalseWhenInvalidEmail' => [ + 'config' => [ + 'email' => 'randomstring', + 'api_key' => '12345', + ], + 'expected' => false, + ], + 'testShouldReturnTrueWhenCredentialsValid' => [ + 'config' => [ + 'email' => 'roger@wp-rocket.me', + 'api_key' => '12345', + ], + 'expected' => true, + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php new file mode 100644 index 0000000000..0f6aa89873 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php @@ -0,0 +1,225 @@ + [ + 'config' => [ + 'transient' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'ipv4_cidrs' => [], + 'ipv6_cidrs' => [], + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'wp_error' => false, + ], + 'expected' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + ], + 'shouldReturnDefaultValueWhenEmptyResponse' => [ + 'config' => [ + 'transient' => false, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'wp_error' => false, + ], + 'expected' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + ], + 'shouldReturnDefaultValueWhenWPError' => [ + 'config' => [ + 'transient' => false, + 'response' => new WP_Error( 'error' ), + 'wp_error' => true, + ], + 'expected' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + ], + 'shouldReturntValueWhenSuccess' => [ + 'config' => [ + 'transient' => false, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'wp_error' => false, + ], + 'expected' => (object) [ + 'ipv4_cidrs' => [ + '173.245.48.0/20', + '103.21.244.0/22', + '103.22.200.0/22', + '103.31.4.0/22', + '141.101.64.0/18', + '108.162.192.0/18', + '190.93.240.0/20', + '188.114.96.0/20', + '197.234.240.0/22', + '198.41.128.0/17', + '162.158.0.0/15', + '104.16.0.0/12', + '104.24.0.0/14', + '172.64.0.0/13', + '131.0.72.0/22', + ], + 'ipv6_cidrs' => [ + '2400:cb00::/32', + '2606:4700::/32', + '2803:f800::/32', + '2405:b500::/32', + '2405:8100::/32', + '2a06:98c0::/29', + '2c0f:f248::/32', + ], + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getSettings.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getSettings.php new file mode 100644 index 0000000000..c6f2642629 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/getSettings.php @@ -0,0 +1,94 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [ + (object) [ + 'id' =>'browser_cache_ttl', + 'value'=> 31536000 , + ], + (object) [ + 'id' =>'cache_level', + 'value'=> 'aggressive', + ], + (object) [ + 'id' =>'rocket_loader', + 'value'=> 'off', + ], + (object) [ + 'id' =>'minify', + 'value'=> (object) [ + 'js' => 'off', + 'css' => 'off', + 'html' => 'off', + ], + ], + ], + ] ), + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'cache_level' => 'aggressive', + 'minify' => 'off', + 'rocket_loader' => 'off', + 'browser_cache_ttl' => 31536000, + ], + ], + 'shouldReturnArrayWhenMinifyOn' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [ + (object) [ + 'id' =>'browser_cache_ttl', + 'value'=> 31536000 , + ], + (object) [ + 'id' =>'cache_level', + 'value'=> 'aggressive', + ], + (object) [ + 'id' =>'rocket_loader', + 'value'=> 'off', + ], + (object) [ + 'id' =>'minify', + 'value'=> (object) [ + 'js' => 'on', + 'css' => 'on', + 'html' => 'on', + ], + ], + ], + ] ), + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => [ + 'cache_level' => 'aggressive', + 'minify' => 'on', + 'rocket_loader' => 'off', + 'browser_cache_ttl' => 31536000, + ], + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php new file mode 100644 index 0000000000..caa1b9ead5 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php @@ -0,0 +1,55 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'actions' => [ + 'id' => 'cache_everything', + ], + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + 'action_value' => 'cache_everything', + ], + 'expected' => true, + ], + 'shouldReturnFalseWhenNotHasPageRule' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'actions' => [ + 'id' => 'browser_check', + ], + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'action_value' => 'cache_everything', + 'request_error' => false, + ], + 'expected' => false, + ], + 'shouldReturnWPErrorWhenException' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => new WP_Error( 'error' ), + 'action_value' => 'cache_everything', + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php new file mode 100644 index 0000000000..14b53a4e88 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php @@ -0,0 +1,56 @@ + [ + 'config' => [ + 'zone_id' => '', + 'response' => [], + 'request_error' => false, + ], + 'expected' => 'error', + ], + 'shouldReturnWPErrorWhenEmptyResult' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], + 'shouldReturnWPErrorWhenNotFound' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'name' => 'test.com', + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'error', + ], + 'shouldReturnTrueWhenFound' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'name' => 'example.org', + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => true, + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php new file mode 100644 index 0000000000..214bcf7030 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php @@ -0,0 +1,36 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + 'urls' => [ + 'about', + 'contact', + ], + ], + 'expected' => true, + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => new WP_Error( 'error' ), + 'urls' => [ + 'about', + 'contact', + ], + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php new file mode 100644 index 0000000000..0b33df448c --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php @@ -0,0 +1,28 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => true, + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php new file mode 100644 index 0000000000..18bf1cbb9a --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php @@ -0,0 +1,85 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 30, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => '30 seconds', + ], + 'shouldReturnMinutesWhenRequestSuccessful' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 120, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => '2 minutes', + ], + 'shouldReturnHoursWhenRequestSuccessful' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 7200, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'succcess' => true, + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => '2 hours', + ], + 'shouldReturnDaysWhenRequestSuccessful' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 172800, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => (object) [ + 'succcess' => true, + ], + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => '2 days', + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 30, + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php new file mode 100644 index 0000000000..d2ffe89ff2 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php @@ -0,0 +1,30 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'aggressive', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'aggressive', + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'off', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setDevMode.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setDevMode.php new file mode 100644 index 0000000000..c31b836fc1 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setDevMode.php @@ -0,0 +1,50 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 1, + 'setting' => 'on', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'on', + ], + 'shouldReturnValueOffWhenRequestSuccessful' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 0, + 'setting' => 'off', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'off', + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 1, + 'setting' => 'on', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setMinify.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setMinify.php new file mode 100644 index 0000000000..98cd2949b3 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setMinify.php @@ -0,0 +1,40 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'on', + 'setting' => [ + 'css' => 'on', + 'html' => 'on', + 'js' => 'on', + ], + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'on', + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'off', + 'setting' => [ + 'css' => 'off', + 'html' => 'off', + 'js' => 'off', + ], + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php new file mode 100644 index 0000000000..4cb9abc45c --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php @@ -0,0 +1,30 @@ + [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'on', + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => '', + ] ), + 'response' => '', + 'cookies' => [], + ], + 'request_error' => false, + ], + 'expected' => 'on', + ], + 'shouldReturnWPErrorWhenError' => [ + 'config' => [ + 'zone_id' => '12345', + 'value' => 'off', + 'response' => new WP_Error( 'error' ), + 'request_error' => true, + ], + 'expected' => 'error', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurge.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurge.php new file mode 100644 index 0000000000..5573dbb5e6 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurge.php @@ -0,0 +1,58 @@ + [ + 'config' => [ + 'cap' => false, + 'error' => false, + 'page_rule' => true, + 'settings' => [ + 'cloudflare_zone_id' => true + ], + 'cloudflare_zone_id' => 'cf_id', + 'auth' => Mockery::mock(AuthInterface::class) + ], + 'expected' => null, + ], + 'testShouldDoNothingWhenNoRule' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'page_rule' => false, + 'settings' => [ + 'cloudflare_zone_id' => true + ], + 'cloudflare_zone_id' => 'cf_id', + 'auth' => Mockery::mock(AuthInterface::class) + ], + 'expected' => null, + ], + 'testShouldDoNothingWhenError' => [ + 'config' => [ + 'cap' => true, + 'error' => true, + 'page_rule' => true, + 'settings' => [ + 'cloudflare_zone_id' => true + ], + 'cloudflare_zone_id' => 'cf_id', + 'auth' => Mockery::mock(AuthInterface::class) + ], + 'expected' => null, + ], + 'testShouldPurgeWhenHasRule' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'page_rule' => true, + 'settings' => [ + 'cloudflare_zone_id' => true + ], + 'cloudflare_zone_id' => 'cf_id', + 'auth' => Mockery::mock(AuthInterface::class) + ], + 'expected' => 'expected', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php new file mode 100644 index 0000000000..ea6fa56ed6 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php @@ -0,0 +1,52 @@ + [ + 'config' => [ + 'cap' => false, + 'error' => false, + 'page_rule' => true, + 'urls' => [ + 'http://example.org', + 'http://example.org/feed/', + ], + ], + 'expected' => null, + ], + 'testShouldDoNothingWhenNoRule' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'page_rule' => false, + 'urls' => [ + 'http://example.org', + 'http://example.org/feed/', + ], + ], + 'expected' => null, + ], + 'testShouldDoNothingWhenError' => [ + 'config' => [ + 'cap' => true, + 'error' => true, + 'page_rule' => true, + 'urls' => [ + 'http://example.org', + 'http://example.org/feed/', + ], + ], + 'expected' => null, + ], + 'testShouldPurgeWhenHasRule' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'page_rule' => true, + 'urls' => [ + 'http://example.org', + 'http://example.org/feed/', + ], + ], + 'expected' => 'expected', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php new file mode 100644 index 0000000000..cb490e53dc --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php @@ -0,0 +1,62 @@ + + + + + + +
+ + +'; + +$updated = ' + + + + + +
+ + +'; + +return [ + 'testShouldDoNothingWhenCfDisabled' => [ + 'config' => [ + 'cloudflare' => 0, + 'rewrite' => 1, + 'filter' => true, + ], + 'value' => $html, + 'expected' => $html, + ], + 'testShouldDoNothingWhenRewriteAndFilterDisabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 0, + 'filter' => false, + ], + 'value' => $html, + 'expected' => $html, + ], + 'testShouldRewriteWhenRewriteEnabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 1, + 'filter' => false, + ], + 'value' => $html, + 'expected' => $updated, + ], + 'testShouldRewriteWhenFilterEnabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 0, + 'filter' => true, + ], + 'value' => $html, + 'expected' => $updated, + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php new file mode 100644 index 0000000000..34bc229136 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php @@ -0,0 +1,73 @@ + 'http://example.org/image-128x128.jpg', + ], + [ + 'url' => 'http://example.org/image-256x256.jpg', + ], + [ + 'url' => 'http://example.org/image-1024x768.jpg', + ], +]; + +$updated = [ + [ + 'url' => '//example.org/image-128x128.jpg', + ], + [ + 'url' => '//example.org/image-256x256.jpg', + ], + [ + 'url' => '//example.org/image-1024x768.jpg', + ], +]; + +return [ + 'testShouldDoNothingWhenCfDisabled' => [ + 'config' => [ + 'cloudflare' => 0, + 'rewrite' => 1, + 'filter' => true, + ], + 'value' => $value, + 'expected' => $value, + ], + 'testShouldDoNothingWhenRewriteAndFilterDisabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 0, + 'filter' => false, + ], + 'value' => $value, + 'expected' => $value, + ], + 'testShouldDoNothingWhenEmptyValue' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 0, + 'filter' => false, + ], + 'value' => [], + 'expected' => [], + ], + 'testShouldRewriteWhenRewriteEnabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 1, + 'filter' => false, + ], + 'value' => $value, + 'expected' => $updated, + ], + 'testShouldRewriteWhenFilterEnabled' => [ + 'config' => [ + 'cloudflare' => 1, + 'rewrite' => 0, + 'filter' => true, + ], + 'value' => $value, + 'expected' => $updated, + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php new file mode 100644 index 0000000000..2d2b0f2901 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php @@ -0,0 +1,31 @@ + [ + 'config' => [ + 'connection' => false, + 'cap' => false, + 'error' => false, + 'result' => '', + ], + 'expected' => null, + ], + 'testShouldDoExpectedWhenError' => [ + 'config' => [ + 'connection' => false, + 'cap' => true, + 'error' => true, + 'result' => new WP_Error( '401', 'error' ), + ], + 'expected' => 'expected', + ], + 'testShouldPurgeWhenSuccess' => [ + 'config' => [ + 'connection' => false, + 'cap' => true, + 'error' => false, + 'result' => '' + ], + 'expected' => 'expected', + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php new file mode 100644 index 0000000000..7718a5eb3c --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php @@ -0,0 +1,168 @@ + [ + 'config' => [ + 'cap' => false, + 'error' => false, + 'response' => [], + 'result' => [], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + 'old_value' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + ], + ], + 'expected' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + ], + 'testShouldReturnSameWhenAutoSettingsNotSet' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'response' => [], + 'result' => [], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_zone_id' => 'cf_zone_id', + 'cloudflare_old_settings' => '', + ], + 'old_value' => [ + 'cloudflare_old_settings' => '', + ], + ], + 'expected' => [ + 'cloudflare_zone_id' => 'cf_zone_id', + 'cloudflare_old_settings' => '', + ], + ], + 'testShouldReturnSameWhenAutoSettingsSameValue' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'response' => [], + 'result' => [], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + 'old_value' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + ], + ], + 'expected' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + ], + 'testShouldReturnSameWhenAutoSettingsZero' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'response' => [], + 'result' => [], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + 'old_value' => [ + 'cloudflare_auto_settings' => 1, + 'cloudflare_old_settings' => '', + ], + ], + 'expected' => [ + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + 'cloudflare_zone_id' => 'cf_zone_id', + ], + ], + 'testShouldReturnUpdatedEmptyWhenError' => [ + 'config' => [ + 'cap' => true, + 'error' => true, + 'response' => new WP_Error( 'error' ), + 'result' => [], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_auto_settings' => 1, + 'cloudflare_zone_id' => 'cf_zone_id', + ], + 'old_value' => [ + 'cloudflare_auto_settings' => 0, + ], + ], + 'expected' => [ + 'cloudflare_auto_settings' => 1, + 'cloudflare_zone_id' => 'cf_zone_id', + 'cloudflare_old_settings' => '', + ], + ], + 'testShouldReturnUpdatedWhenSuccess' => [ + 'config' => [ + 'cap' => true, + 'error' => false, + 'response' => [ + 'headers' => [], + 'body' => json_encode( (object) [ + 'success' => true, + 'result' => [ + (object) [ + 'id' =>'browser_cache_ttl', + 'value'=> 14400 , + ], + (object) [ + 'id' =>'cache_level', + 'value'=> 'aggressive', + ], + (object) [ + 'id' =>'rocket_loader', + 'value'=> 'off', + ], + (object) [ + 'id' =>'minify', + 'value'=> (object) [ + 'js' => 'on', + 'css' => 'on', + 'html' => 'on', + ], + ], + ], + ] ), + 'cookies' => [], + ], + 'result' => [ + 'cache_level' => 'aggressive', + 'minify' => 'on', + 'rocket_loader' => 'off', + 'browser_cache_ttl' => 14400, + ], + 'cloudflare_zone_id' => 'cf_zone_id', + 'value' => [ + 'cloudflare_auto_settings' => 1, + 'cloudflare_zone_id' => 'cf_zone_id', + ], + 'old_value' => [ + 'cloudflare_auto_settings' => 0, + ], + ], + 'expected' => [ + 'cloudflare_auto_settings' => 1, + 'cloudflare_zone_id' => 'cf_zone_id', + 'cloudflare_old_settings' => 'aggressive,on,off,14400', + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php new file mode 100644 index 0000000000..08faa2b9d3 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php @@ -0,0 +1,62 @@ + [ + 'config' => [ + 'cap' => false, + 'connection' => false, + 'transient' => true, + 'error' => false, + 'devmode' => [], + 'value' => [ + 'cloudflare_zone_id' => '12345', + ], + 'old_value' => [ + 'cloudflare_zone_id' => '12345', + ], + ], + 'expected' => null, + ], + 'testShouldReturnNullWhenError' => [ + 'config' => [ + 'cap' => true, + 'connection' => true, + 'transient' => new WP_Error( 400, 'message' ), + 'error' => true, + 'devmode' => [], + 'value' => [ + 'cloudflare_zone_id' => '12345', + 'cloudflare_auto_settings' => 1 + ], + 'old_value' => [ + 'cloudflare_zone_id' => '12345', + 'cloudflare_auto_settings' => 0 + ], + ], + 'expected' => 'error', + ], + 'testShouldSetTransientWhenSuccess' => [ + 'config' => [ + 'cap' => true, + 'connection' => false, + 'transient' => true, + 'error' => false, + 'devmode' => [], + 'value' => [ + 'cloudflare_zone_id' => '12345', + 'cloudflare_devmode' => 0, + 'cloudflare_auto_settings' => 1, + 'cloudflare_old_settings' => '', + ], + 'old_value' => [ + 'cloudflare_zone_id' => '12345', + 'cloudflare_devmode' => 0, + 'cloudflare_auto_settings' => 0, + 'cloudflare_old_settings' => '', + ], + ], + 'expected' => [ + 'pre' => 'WP Rocket: Optimal settings deactivated for Cloudflare, reverted to previous settings.', + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php new file mode 100644 index 0000000000..6140634989 --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php @@ -0,0 +1,43 @@ + [ + 'config' => [ + 'filter' => false, + 'option' => false, + 'value' => [], + ], + 'expected' => [], + ], + 'testShouldReturnUpdatedWhenOptionEnabled' => [ + 'config' => [ + 'filter' => false, + 'option' => true, + 'value' => [], + ], + 'expected' => [ + 'localhost', + ], + ], + 'testShouldReturnUpdatedWhenFilterEnabled' => [ + 'config' => [ + 'filter' => true, + 'option' => false, + 'value' => [], + ], + 'expected' => [ + 'localhost', + ], + ], + 'testShouldReturnUpdatedWhenValueIsString' => [ + 'config' => [ + 'filter' => true, + 'option' => false, + 'value' => '192.168.0.1', + ], + 'expected' => [ + '192.168.0.1', + 'localhost', + ], + ], +]; diff --git a/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php new file mode 100644 index 0000000000..43053f7ddb --- /dev/null +++ b/tests/Fixtures/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php @@ -0,0 +1,28 @@ + [ + 'config' => [ + 'filter' => false, + 'option' => false, + 'value' => 'localhost', + ], + 'expected' => 'localhost', + ], + 'testShouldReturnUpdatedWhenOptionEnabled' => [ + 'config' => [ + 'filter' => false, + 'option' => true, + 'value' => 'localhost', + ], + 'expected' => 'example.org', + ], + 'testShouldReturnUpdatedWhenFilterEnabled' => [ + 'config' => [ + 'filter' => true, + 'option' => false, + 'value' => 'localhost', + ], + 'expected' => 'example.org', + ], +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php new file mode 100644 index 0000000000..dd1b8be9e1 --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -0,0 +1,12 @@ + [ + 'config' => [ + + ], + 'expected' => [ + 'after_rocket_clean_post' + ] + ], + +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php new file mode 100644 index 0000000000..5b71767bf1 --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php @@ -0,0 +1,12 @@ + [ + 'config' => [ + + ], + 'expected' => [ + 'after_rocket_clean_domain' + ] + ], + +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php new file mode 100644 index 0000000000..f4794aca05 --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php @@ -0,0 +1,39 @@ + [ + 'config' => [ + 'post' => false, + 'purge_urls' => [], + 'post_id' => 145, + 'filtered_purge_urls' => [ + 'http://example.org/author/' + ], + ], + 'expected' => [ + 'post_id' => 145, + 'result' => [], + 'purge_urls' => [], + 'post' => false, + ] + ], + 'postShouldReturnAddURL' => [ + 'config' => [ + 'post' => $post, + 'purge_urls' => [], + 'post_id' => 145, + 'filtered_purge_urls' => [ + 'http://example.org/author/' + ], + ], + 'expected' => [ + 'post_id' => 145, + 'result' => [ + 'http://example.org/author/' + ], + 'purge_urls' => [], + 'post' => $post, + ] + ], +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php new file mode 100644 index 0000000000..8bd2ffbd6d --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -0,0 +1,63 @@ + [ + 'config' => [ + 'enabled' => false, + 'plugin_active' => false, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + 'enabled' => false, + ] + ], + 'emptyEmailShouldReturnSame' => [ + 'config' => [ + 'enabled' => false, + 'plugin_active' => true, + 'cloudflare_api_email' => '', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + 'enabled' => false, + ] + ], + 'emptyAPIKeyShouldReturnSame' => [ + 'config' => [ + 'enabled' => false, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + 'enabled' => false, + ] + ], + 'emptyDomainShouldReturnSame' => [ + 'config' => [ + 'enabled' => false, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => '', + ], + 'expected' => [ + 'enabled' => false, + ] + ], + 'shouldReturnFalse' => [ + 'config' => [ + 'enabled' => true, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + 'enabled' => false, + ] + ] +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php new file mode 100644 index 0000000000..bfa22614ab --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -0,0 +1,556 @@ + [ + 'config' => [ + 'active_plugins' => [ + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'plugin_enabled' => false, + 'is_plugin_activated' => false, + 'has_apo' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'key' => 'azz12feee', + 'domain' => 'example.org', + 'can' => true, + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'right_screen' => true, + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', + ] + ], + 'noEmailShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'plugin_enabled' => true, + 'can' => true, + 'has_apo' => true, + 'right_screen' => true, + 'is_plugin_activated' => false, + 'cloudflare_api_email' => '', + 'key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'noKeyShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'plugin_enabled' => true, + 'right_screen' => true, + 'can' => true, + 'has_apo' => true, + 'is_plugin_activated' => false, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => '', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'noDomainShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'plugin_enabled' => true, + 'can' => true, + 'has_apo' => true, + 'right_screen' => true, + 'is_plugin_activated' => false, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => '', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'noRightShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'can' => false, + 'plugin_enabled' => true, + 'right_screen' => true, + 'has_apo' => true, + 'is_plugin_activated' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'noAPOShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'user_id' => 10, + 'boxes' => [], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => false + ], + 'can' => true, + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'has_apo' => false, + 'right_screen' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'noScreenShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'user_id' => 10, + 'boxes' => [], + 'can' => true, + 'right_screen' => false, + 'has_apo' => true, + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'random' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false, + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'mobileCacheMatchShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'user_id' => 10, + 'boxes' => [], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'can' => true, + 'right_screen' => true, + 'is_plugin_activated' => true, + 'has_apo' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false + ], + 'mobile_cache' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => true, + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ], + 'mobileCacheMismatchMobileEnabledShouldDisplayNotice' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'user_id' => 10, + 'boxes' => [], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'can' => true, + 'right_screen' => true, + 'is_plugin_activated' => true, + 'has_apo' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => false, + ], + 'mobile_cache' => true, + 'should_display' => true, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket: You are using "Separate cache files for mobile devices". You need to activate "Cache by Device Type" setting on Cloudflare APO to serve the right version of the cache. More info' + ], + 'notice_content' => 'WP Rocket:You are using "Separate cache files for mobile devices". You need to activate "Cache by Device Type" setting on Cloudflare APO to serve the right version of the cache. More info' + ], + ], + 'mobileCacheMismatchMobileDisabledShouldDisplayNotice' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'user_id' => 10, + 'boxes' => [], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'can' => true, + 'right_screen' => true, + 'has_apo' => true, + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'screen' => (object) [ + 'id' => 'settings_page_wprocket' + ], + 'cloudflare_mobile_cache' => [ + 'id' => 'automatic_platform_optimization_cache_by_device_type', + 'value' => true + ], + 'mobile_cache' => false, + 'should_display' => true, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'notice' => [ + 'status' => 'warning', + 'dismiss_button' => 'display_apo_cache_notice', + 'dismissible' => '', + 'action' => 'enable_separate_mobile_cache', + 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ], + 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + ] + ] +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php new file mode 100644 index 0000000000..bd49d06d80 --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -0,0 +1,363 @@ + [ + 'config' => [ + 'active_plugins' => [ + ], + 'home_url' => 'http://example.org', + 'headers' => [ + + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => false + ], + 'response' => [ + 'code' => 200 + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'can' => true, + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'mandatory_cookies' => [], + 'dynamic_cookies' => [], + 'has_apo' => false, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ] + ], + 'noRightShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'home_url' => 'http://example.org', + 'headers' => [ + + ], + 'response' => [ + 'code' => 200 + ], + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'can' => true, + 'mandatory_cookies' => [], + 'dynamic_cookies' => [], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'has_apo' => true, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ] + ], + 'noRightShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'home_url' => 'http://example.org', + 'headers' => [ + + ], + 'response' => [ + 'code' => 200 + ], + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'can' => false, + 'mandatory_cookies' => [], + 'dynamic_cookies' => [], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'has_apo' => true, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [] + ] + ], + 'expected' => [ + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ] + ], + 'emptyCookiesShouldDisplayNothing' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'response' => [ + 'code' => 200 + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'can' => true, + 'mandatory_cookies' => [], + 'dynamic_cookies' => [], + 'has_apo' => true, + 'should_display' => false, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ] + ], + 'mandatoryCookiesShouldDisplayNotice' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'response' => [ + 'code' => 200 + ], + 'can' => true, + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'mandatory_cookies' => [ + 'cookie' + ], + 'dynamic_cookies' => [], + 'has_apo' => true, + 'should_display' => true, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
+You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. +More info', + ] + ], + 'dynamicCookiesShouldDisplayNotice' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'automatic_platform_optimization' => [ + 'id' => 'automatic_platform_optimization', + 'value' => true + ], + 'is_plugin_activated' => true, + 'plugin_enabled' => true, + 'cloudflare_api_email' => 'example@email.mail', + 'cloudflare_api_key' => 'azz12feee', + 'cloudflare_cached_domain_name' => 'example.org', + 'home_url' => 'http://example.org', + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ], + 'screen' => (object) [ + 'id' => 'settings_page_wprocket', + ], + 'right_screen' => true, + 'response' => [ + 'code' => 200 + ], + 'can' => true, + 'mandatory_cookies' => [], + 'dynamic_cookies' => [ + 'cookie' + ], + 'has_apo' => true, + 'should_display' => true, + 'beacon_response' => [ + 'id' => '602593e90a2dae5b58faee1e', + 'url' => 'https://docs.wp-rocket.me/article/1444-using-cloudflare-apo-with-wp-rocket?utm_source=wp_plugin&utm_medium=wp_rocket', + ], + 'response_fixture' => [ + 'headers' => [ + 'CF-Cache-Status' => 'HIT', + 'cf-apo-via' => 'tcache', + 'cf-edge-cache' => 'cache, platform=wordpress', + ] + ] + ], + 'expected' => [ + 'home_url' => 'http://example.org', + 'response' => [ + 'code' => 200 + ], + 'configs' => [ + 'method' => 'GET', + ], + 'notice' => [ + 'status' => 'warning', + 'dismissible' => '', + 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + ], + 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
+You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. +More info', + ] + ] +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php new file mode 100644 index 0000000000..7e06c4c33d --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -0,0 +1,67 @@ + [ + 'config' => [ + 'active_plugins' => [ + ], + 'enable' => true, + 'plugin_active' => false, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => true + ], + 'emptyEmailShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'enable' => true, + 'plugin_active' => true, + 'cloudflare_api_email' => '', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => true + ], + 'emptyAPIKeyShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'enable' => true, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => true + ], + 'emptyDomainShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'enable' => true, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => '', + ], + 'expected' => true + ], + 'shouldReturnFalse' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'enable' => true, + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => false + ] +]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php new file mode 100644 index 0000000000..63d6dedf87 --- /dev/null +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -0,0 +1,87 @@ + [ + 'config' => [ + 'active_plugins' => [ + ], + 'settings' => [ + + ], + 'plugin_active' => false, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + + ] + ], + 'emptyEmailShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'settings' => [], + 'plugin_active' => true, + 'cloudflare_api_email' => '', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + + ] + ], + 'emptyAPIKeyShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'settings' => [], + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + + ] + ], + + 'emptyDomainShouldReturnSame' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'settings' => [], + 'plugin_active' => false, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => '', + ], + 'expected' => [ + + ] + ], + + 'shouldAddNotice' => [ + 'config' => [ + 'active_plugins' => [ + 'cloudflare/cloudflare.php' + ], + 'settings' => [], + 'plugin_active' => true, + 'cloudflare_api_email' => 'email@test.test', + 'cloudflare_api_key' => '1ef242', + 'cloudflare_cached_domain_name' => 'domain', + ], + 'expected' => [ + 'do_cloudflare' => [ + 'title' => 'Your site is using the official Cloudflare plugin. We have enabled Cloudflare auto-purge for compatibility. If you have APO activated, it is also compatible.', + 'description' => 'Cloudflare cache will be purged each time WP Rocket clears its cache to ensure content is always up-to-date.', + 'helper' => '', + 'settings_page' => '', + ] + ] + ], + +]; diff --git a/tests/Fixtures/inc/vendors/ipInRange/rocketIp2Long6.php b/tests/Fixtures/inc/vendors/ipInRange/rocketIp2Long6.php deleted file mode 100644 index b0077bdcd6..0000000000 --- a/tests/Fixtures/inc/vendors/ipInRange/rocketIp2Long6.php +++ /dev/null @@ -1,43 +0,0 @@ - 1, 'cloudflare_protocol_rewrite' => 1, + 'cloudflare_email' => 'roger@wp-rocket.me', + 'cloudflare_api_key' => '12345', ] ); } @@ -125,8 +127,30 @@ function() { // Overload the license key for testing. redefine( 'rocket_valid_key', '__return_true' ); - if ( BootstrapManager::isGroup( 'DoCloudflare' ) ) { - update_option( 'wp_rocket_settings', [ 'do_cloudflare' => 1 ] ); + if ( BootstrapManager::isGroup( 'Cloudflare' ) ) { + set_transient( 'rocket_cloudflare_is_api_keys_valid', true ); + + update_option( + 'wp_rocket_settings', + [ + 'do_cloudflare' => 1, + 'cloudflare_email' => 'roger@wp-rocket.me', + 'cloudflare_api_key' => '12345', + 'cloudflare_zone_id' => '12234', + ] + ); + } + + if ( BootstrapManager::isGroup( 'CloudflareAdmin' ) ) { + define( 'WP_ADMIN', true ); + update_option( + 'wp_rocket_settings', + [ + 'do_cloudflare' => 1, + 'cloudflare_email' => 'roger@wp-rocket.me', + 'cloudflare_api_key' => '12345', + ] + ); } if ( BootstrapManager::isGroup( 'WPEngine' ) ) { diff --git a/tests/Integration/inc/Addon/Cloudflare/API/Client/delete.php b/tests/Integration/inc/Addon/Cloudflare/API/Client/delete.php new file mode 100644 index 0000000000..a4359cce66 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/API/Client/delete.php @@ -0,0 +1,55 @@ +response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $auth = new APIKey( $config['email'], $config['api_key'] ); + $client = new Client( $auth ); + $result = $client->delete( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/API/Client/get.php b/tests/Integration/inc/Addon/Cloudflare/API/Client/get.php new file mode 100644 index 0000000000..abd717a1e4 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/API/Client/get.php @@ -0,0 +1,55 @@ +response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $auth = new APIKey( $config['email'], $config['api_key'] ); + $client = new Client( $auth ); + $result = $client->get( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/API/Client/patch.php b/tests/Integration/inc/Addon/Cloudflare/API/Client/patch.php new file mode 100644 index 0000000000..e688e8d7cc --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/API/Client/patch.php @@ -0,0 +1,55 @@ +response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $auth = new APIKey( $config['email'], $config['api_key'] ); + $client = new Client( $auth ); + $result = $client->patch( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/API/Client/post.php b/tests/Integration/inc/Addon/Cloudflare/API/Client/post.php new file mode 100644 index 0000000000..c8d28cfe86 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/API/Client/post.php @@ -0,0 +1,57 @@ +response = $config['response']; + $email = 'roger@wp-rocket.me'; + $api_key = '12345'; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $auth = new APIKey( $config['email'], $config['api_key'] ); + $client = new Client( $auth ); + $result = $client->post( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php b/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php new file mode 100644 index 0000000000..fba104a079 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php @@ -0,0 +1,57 @@ +unregisterAllCallbacksExcept( 'admin_notices', 'maybe_display_purge_notice', 10 ); + } + + public function tear_down() { + $this->restoreWpFilter( 'admin_notices' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoExpected( $config, $expected ) { + $role = get_role( 'administrator' ); + $role->add_cap( 'rocket_purge_cloudflare_cache' ); + + if ( $config['cap'] ) { + $user_id = self::factory()->user->create( [ 'role' => 'administrator' ] ); + } else { + $user_id = self::factory()->user->create( [ 'role' => 'editor' ] ); + } + + set_current_screen( 'settings_page_wprocket' ); + wp_set_current_user( $user_id ); + + if ( false !== $config['transient'] ) { + set_transient( $user_id . '_cloudflare_purge_result', $config['transient'] ); + } + + $this->assertStringContainsStringIgnoringCase( + $this->format_the_html( $expected ), + $this->getActualHtml() + ); + } + + private function getActualHtml() { + ob_start(); + do_action( 'admin_notices' ); + + return $this->format_the_html( ob_get_clean() ); + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php b/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php new file mode 100644 index 0000000000..e7e74f0365 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php @@ -0,0 +1,57 @@ +unregisterAllCallbacksExcept( 'admin_notices', 'maybe_display_update_settings_notice', 10 ); + } + + public function tear_down() { + $this->restoreWpFilter( 'admin_notices' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoExpected( $config, $expected ) { + $role = get_role( 'administrator' ); + $role->add_cap( 'rocket_manage_options' ); + + if ( $config['cap'] ) { + $user_id = self::factory()->user->create( [ 'role' => 'administrator' ] ); + } else { + $user_id = self::factory()->user->create( [ 'role' => 'editor' ] ); + } + + wp_set_current_user( $user_id ); + set_current_screen( $config['current_screen']->id ); + + if ( false !== $config['transient'] ) { + set_transient( $user_id . '_cloudflare_update_settings', $config['transient'] ); + } + + $this->assertStringContainsStringIgnoringCase( + $this->format_the_html( $expected ), + $this->getActualHtml() + ); + } + + private function getActualHtml() { + ob_start(); + do_action( 'admin_notices' ); + + return $this->format_the_html( ob_get_clean() ); + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php new file mode 100644 index 0000000000..39407eb53c --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php @@ -0,0 +1,54 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + if ( $config['transient'] ) { + set_transient( 'rocket_cloudflare_ips', $config['transient'] ); + } + + $result = $this->cloudflare->get_cloudflare_ips(); + + $this->assertNotFalse( get_transient( 'rocket_cloudflare_ips' ) ); + $this->assertEquals( + $expected, + $result + ); + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getSettings.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getSettings.php new file mode 100644 index 0000000000..80f8b10675 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/getSettings.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->get_settings(); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php new file mode 100644 index 0000000000..f8e7ab76e6 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->has_page_rule( $config['action_value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php new file mode 100644 index 0000000000..a59c669c1f --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php @@ -0,0 +1,54 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->is_auth_valid( $config['zone_id'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertTrue( $result ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php new file mode 100644 index 0000000000..2dba9bc904 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->purge_by_url( '', $config['urls'], '' ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php new file mode 100644 index 0000000000..8160ecd06a --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->purge_cloudflare(); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php new file mode 100644 index 0000000000..d7695d5884 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->set_browser_cache_ttl( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php new file mode 100644 index 0000000000..e6ac1b060c --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->set_cache_level( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setDevMode.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setDevMode.php new file mode 100644 index 0000000000..975f522c9b --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setDevMode.php @@ -0,0 +1,65 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->set_devmode( $config['value'] ); + + if ( 'error' !== $expected ) { + if ( 1 === $config['value'] ) { + $this->assertNotFalse( wp_next_scheduled( 'rocket_cron_deactivate_cloudflare_devmode' ) ); + } else { + $this->assertFalse( wp_next_scheduled( 'rocket_cron_deactivate_cloudflare_devmode' ) ); + } + } + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setMinify.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setMinify.php new file mode 100644 index 0000000000..5aabfc36fa --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setMinify.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->set_minify( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php new file mode 100644 index 0000000000..514470fa34 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php @@ -0,0 +1,57 @@ +cloudflare = $container->get( 'cloudflare' ); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $result = $this->cloudflare->set_rocket_loader( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/TestCase.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/TestCase.php deleted file mode 100644 index 9579d8f87a..0000000000 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/TestCase.php +++ /dev/null @@ -1,148 +0,0 @@ - '', - 'email' => '', - 'zone_id' => '', - 'site_url' => '', - ]; - - public static function set_up_before_class() { - parent::set_up_before_class(); - - self::$api_credentials_config_file = WP_ROCKET_PLUGIN_ROOT . '/tests/env/local/cloudflare.php'; - - self::$container = apply_filters( 'rocket_container', '' ); - self::setApiCredentials(); - self::resetTransients(); - self::$subscriber = self::$container->get( 'cloudflare_subscriber' ); - - // Store original state. Why? We'll restore it before exiting this class. - $class = new ReflectionClass( self::$subscriber ); - self::$cf_property = $class->getProperty( 'cloudflare' ); - self::$cf_property->setAccessible( true ); - self::$subscriber_cf = self::$cf_property->getValue( self::$subscriber ); - self::$options_property = $class->getProperty( 'options' ); - self::$options_property->setAccessible( true ); - self::$subscriber_options = self::$options_property->getValue( self::$subscriber ); - } - - public static function tear_down_after_class() { - // Restore original state. - self::$cf_property->setValue( self::$subscriber, self::$subscriber_cf ); - self::$cf_property->setAccessible( false ); - self::$options_property->setValue( self::$subscriber, self::$subscriber_options ); - self::$options_property->setAccessible( false ); - - parent::tear_down_after_class(); - } - - protected static function setApiCredentials() { - self::$api_credentials['email'] = static::getApiCredential( 'ROCKET_CLOUDFLARE_EMAIL' ); - self::$api_credentials['api_key'] = static::getApiCredential( 'ROCKET_CLOUDFLARE_API_KEY' ); - self::$api_credentials['zone_id'] = static::getApiCredential( 'ROCKET_CLOUDFLARE_ZONE_ID' ); - self::$api_credentials['site_url'] = static::getApiCredential( 'ROCKET_CLOUDFLARE_SITE_URL' ); - } - - public function set_up() { - parent::set_up(); - - add_filter( 'site_url', [ $this, 'setSiteUrl' ] ); - } - - public function tear_down() { - self::resetTransients(); - - remove_filter( 'site_url', [ $this, 'setSiteUrl' ] ); - - parent::tear_down(); - } - - protected static function resetTransients() { - // Reset the transients. - $transients = [ - 'rocket_cloudflare_is_api_keys_valid', - 'rocket_cloudflare_ips', - ]; - foreach ( $transients as $transient => $value ) { - delete_transient( $transient ); - } - } - - protected function setApiCredentialsInOptions( array $options = [] ) { - $options = array_merge( - [ - 'cloudflare_email' => self::$api_credentials['email'], - 'cloudflare_api_key' => self::$api_credentials['api_key'], - 'cloudflare_zone_id' => self::$api_credentials['zone_id'], - ], - $options - ); - $this->setOptions( $options ); - } - - protected function getConcrete( $key ) { - return self::$container->get( $key ); - } - - protected function setOptions( $data ) { - update_option( 'wp_rocket_settings', $data ); - - $cf_options = $this->getConcrete( 'options' ); - $cf_options->set_values( $data ); - delete_transient( 'rocket_cloudflare_is_api_keys_valid' ); - $cf = new Cloudflare( $cf_options, $this->getConcrete( 'cloudflare_api' ) ); - self::$cf_property->setValue( self::$subscriber, $cf ); - self::$options_property->setValue( self::$subscriber, $cf_options ); - } - - public function setSiteUrl() { - return self::$api_credentials['site_url']; - } - - /** - * Gets the credential's value from either an environment variable (stored locally on the machine or CI) or from a - * local constant defined in `tests/env/local/cloudflare.php`. - * - * @param string $name Name of the environment variable or constant to find. - * - * @return string returns the value if available; else an empty string. - */ - protected static function getApiCredential( $name ) { - $var = getenv( $name ); - if ( ! empty( $var ) ) { - return $var; - } - - if ( ! static::$api_credentials_config_file ) { - return ''; - } - - if ( ! is_readable( self::$api_credentials_config_file ) ) { - return ''; - } - - // This file is local to the developer's machine and not stored in the repo. - require_once self::$api_credentials_config_file; - - return rocket_get_constant( $name, '' ); - } -} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurge.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurge.php deleted file mode 100644 index 2c761878c0..0000000000 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurge.php +++ /dev/null @@ -1,43 +0,0 @@ -setApiCredentialsInOptions(); - - $user = $this->factory->user->create( [ 'role' => 'contributor' ] ); - wp_set_current_user( $user ); - - Functions\expect( 'is_wp_error' )->never(); - - do_action( 'after_rocket_clean_domain' ); - } - - public function testShouldBailoutWhenNoPageRule() { - $this->setApiCredentialsInOptions(); - - $admin = get_role( 'administrator' ); - $admin->add_cap( 'rocket_purge_cloudflare_cache' ); - $user = $this->factory->user->create( [ 'role' => 'administrator' ] ); - wp_set_current_user( $user ); - - Functions\expect( 'is_wp_error' ) - ->ordered() - ->once() - ->with( null ) - ->andAlsoExpectIt() - ->once() - ->with( 0 ); - - do_action( 'after_rocket_clean_domain' ); - } -} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php deleted file mode 100644 index 9041882548..0000000000 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php +++ /dev/null @@ -1,41 +0,0 @@ -post->create_and_get(); - } - - public function testShouldBailoutWhenUserCantPurgeCF() { - $user = $this->factory->user->create( [ 'role' => 'contributor' ] ); - wp_set_current_user( $user ); - - - do_action( 'after_rocket_clean_post', self::$post, [], 'en' ); - } - - public function testShouldBailoutWhenNoPageRule() { - $this->setApiCredentialsInOptions(); - - // Set the user who can purge Cloudflare. - $admin = get_role( 'administrator' ); - $admin->add_cap( 'rocket_purge_cloudflare_cache' ); - $user = $this->factory->user->create( [ 'role' => 'administrator' ] ); - wp_set_current_user( $user ); - $this->assertTrue( current_user_can( 'rocket_purge_cloudflare_cache' ) ); - - // Why? Because our test site doesn't have page rules. - - do_action( 'after_rocket_clean_post', self::$post, [], 'en' ); - } -} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/deactivateDevMode.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/deactivateDevMode.php index 75ae257962..07b83edd0b 100644 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/deactivateDevMode.php +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/deactivateDevMode.php @@ -1,32 +1,23 @@ setApiCredentialsInOptions( [ 'cloudflare_devmode' => 'off' ] ); - +class TestDeactivateDevmode extends TestCase { + public function testShouldDoExpected() { do_action( 'rocket_cron_deactivate_cloudflare_devmode' ); - $settings = get_option( 'wp_rocket_settings' ); - $this->assertSame( 'off', $settings['cloudflare_devmode'] ); - } - - public function testShouldDeactivateDevMode() { - $this->setApiCredentialsInOptions( [ 'cloudflare_devmode' => 'on' ] ); - - do_action( 'rocket_cron_deactivate_cloudflare_devmode' ); + $options = get_option( 'wp_rocket_settings', [] ); - $options = $this->get_reflective_property( 'options', self::$subscriber ); - $options = $options->getValue( self::$subscriber ); - $this->assertSame( 'off', $options->get( 'cloudflare_devmode' ) ); - $settings = get_option( 'wp_rocket_settings' ); - $this->assertSame( 'off', $settings['cloudflare_devmode'] ); + $this->assertSame( + 0, + $options['cloudflare_devmode'] + ); } } diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php new file mode 100644 index 0000000000..96df681291 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php @@ -0,0 +1,62 @@ +unregisterAllCallbacksExcept( 'rocket_buffer', 'protocol_rewrite', PHP_INT_MAX ); + } + + public function tear_down() { + remove_filter( 'pre_get_rocket_option_do_cloudflare', [ $this, 'set_cloudflare'] ); + remove_filter( 'pre_get_rocket_option_cloudflare_protocol_rewrite', [ $this, 'set_rewrite'] ); + remove_filter( 'do_rocket_protocol_rewrite', [ $this, 'set_filter'] ); + + $this->restoreWpFilter( 'rocket_buffer' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $value, $expected ) { + $this->cf_option = $config['cloudflare']; + $this->cf_rewrite = $config['rewrite']; + $this->filter = $config['filter']; + + add_filter( 'pre_get_rocket_option_do_cloudflare', [ $this, 'set_cloudflare'] ); + add_filter( 'pre_get_rocket_option_cloudflare_protocol_rewrite', [ $this, 'set_rewrite'] ); + add_filter( 'do_rocket_protocol_rewrite', [ $this, 'set_filter'] ); + + $this->assertSame( + $expected, + apply_filters( 'rocket_buffer', $value ) + ); + } + + public function set_cloudflare() { + return $this->cf_option; + } + + public function set_rewrite() { + return $this->cf_rewrite; + } + + public function set_filter() { + return $this->filter; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php new file mode 100644 index 0000000000..818cd0d6ae --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php @@ -0,0 +1,62 @@ +unregisterAllCallbacksExcept( 'wp_calculate_image_srcset', 'protocol_rewrite_srcset', PHP_INT_MAX ); + } + + public function tear_down() { + remove_filter( 'pre_get_rocket_option_do_cloudflare', [ $this, 'set_cloudflare'] ); + remove_filter( 'pre_get_rocket_option_cloudflare_protocol_rewrite', [ $this, 'set_rewrite'] ); + remove_filter( 'do_rocket_protocol_rewrite', [ $this, 'set_filter'] ); + + $this->restoreWpFilter( 'wp_calculate_image_srcset' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $value, $expected ) { + $this->cf_option = $config['cloudflare']; + $this->cf_rewrite = $config['rewrite']; + $this->filter = $config['filter']; + + add_filter( 'pre_get_rocket_option_do_cloudflare', [ $this, 'set_cloudflare'] ); + add_filter( 'pre_get_rocket_option_cloudflare_protocol_rewrite', [ $this, 'set_rewrite'] ); + add_filter( 'do_rocket_protocol_rewrite', [ $this, 'set_filter'] ); + + $this->assertSame( + $expected, + apply_filters( 'wp_calculate_image_srcset', $value ) + ); + } + + public function set_cloudflare() { + return $this->cf_option; + } + + public function set_rewrite() { + return $this->cf_rewrite; + } + + public function set_filter() { + return $this->filter; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/purgeCache.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/purgeCache.php deleted file mode 100644 index e8de2ecb9e..0000000000 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/purgeCache.php +++ /dev/null @@ -1,117 +0,0 @@ -never(); - Functions\expect( 'sanitize_key' )->never(); - $this->expectException( WPDieException::class ); - $this->expectExceptionMessage( 'The link you followed has expired.' ); - do_action( 'admin_post_rocket_purge_cloudflare' ); - } - - public function testShouldWPNonceAysWhenNonceInvalid() { - $_GET['_wpnonce'] = 'invalid'; - - Functions\expect( 'current_user_can' )->never(); - Functions\expect( 'wp_safe_redirect' )->never(); - - $this->expectException( WPDieException::class ); - $this->expectExceptionMessage( 'The link you followed has expired.' ); - do_action( 'admin_post_rocket_purge_cloudflare' ); - } - - public function testShouldBailoutWhenUserCantPurgeCF() { - $this->setApiCredentialsInOptions(); - - $user_id = $this->factory->user->create( [ 'role' => 'contributor' ] ); - wp_set_current_user( $user_id ); - $this->assertFalse( current_user_can( 'rocket_purge_cloudflare' ) ); - - $this->setRedirect(); - $this->setNonce(); - - // Run it. - do_action( 'admin_post_rocket_purge_cloudflare' ); - - // Just to make sure the transient did not get set. - $this->assertFalse( get_transient( "{$user_id}_cloudflare_purge_result" ) ); - - $this->cleanUp( $user_id ); - } - - public function testShouldPurgeWhenUserCanPurgeCF() { - $this->setApiCredentialsInOptions(); - - // Set the user who can purge Cloudflare. - $admin = get_role( 'administrator' ); - $admin->add_cap( 'rocket_purge_cloudflare_cache' ); - $user_id = $this->factory->user->create( [ 'role' => 'administrator' ] ); - wp_set_current_user( $user_id ); - $this->assertTrue( current_user_can( 'rocket_purge_cloudflare_cache' ) ); - - // Set the nonce and redirect. - $this->setRedirect(); - $this->setNonce(); - - // Run it. - do_action( 'admin_post_rocket_purge_cloudflare' ); - - // Check that the transient was set. - $this->assertSame( - [ - 'result' => 'success', - 'message' => 'WP Rocket: Cloudflare cache successfully purged.', - ], - get_transient( "{$user_id}_cloudflare_purge_result" ) - ); - - $this->cleanUp( $user_id ); - } - - private function setNonce() { - $_REQUEST['_wp_http_referer'] = addslashes( 'http://example.com/wp-admin/options-general.php?page=wprocket#page_cloudflare' ); - $_SERVER['REQUEST_URI'] = $_REQUEST['_wp_http_referer']; - $_GET['_wpnonce'] = wp_create_nonce( 'rocket_purge_cloudflare' ); - - // Just checking. - $this->assertEquals( 1, wp_verify_nonce( sanitize_key( $_GET['_wpnonce'] ), 'rocket_purge_cloudflare' ) ); - Functions\expect( 'wp_nonce_ays' )->never(); - } - - private function setRedirect() { - // Let's redirect anywhere. - add_filter( 'wp_redirect', '__return_empty_string' ); - - // Yes, we do expect wp_die() when running tests. - Functions\expect( 'wp_die' )->once()->andReturn(); - } - - private function cleanUp( $user_id = 0 ) { - if ( 0 === $user_id ) { - $user_id = get_current_user_id(); - } - - remove_filter( 'wp_redirect', '__return_empty_string' ); - unset( $_REQUEST['_wp_http_referer'], $_SERVER['REQUEST_URI'], $_GET['_wpnonce'] ); - delete_transient( "{$user_id}_cloudflare_purge_result" ); - } -} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php new file mode 100644 index 0000000000..b4d15735d2 --- /dev/null +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php @@ -0,0 +1,57 @@ +unregisterAllCallbacksExcept('pre_update_option_wp_rocket_settings', 'save_cloudflare_old_settings'); + } + + public function tear_down() { + remove_filter( 'pre_http_request', [ $this, 'http_request'] ); + $this->restoreWpFilter('pre_update_option_wp_rocket_settings'); + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->response = $config['response']; + + add_filter( 'pre_http_request', [ $this, 'http_request'] ); + + $role = get_role( 'administrator' ); + $role->add_cap( 'rocket_manage_options' ); + + if ( $config['cap'] ) { + $user_id = self::factory()->user->create( [ 'role' => 'administrator' ] ); + } else { + $user_id = self::factory()->user->create( [ 'role' => 'editor' ] ); + } + + wp_set_current_user( $user_id ); + + $this->assertSame( + $expected, + apply_filters( 'pre_update_option_wp_rocket_settings', $config['value'], $config['old_value'] ) + ); + } + + public function http_request() { + return $this->response; + } +} diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php index afddabde25..1e38c2ddfc 100644 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php @@ -1,49 +1,47 @@ assertSame( [], apply_filters( 'rocket_varnish_ip', [] ) ); + public function tear_down() { + remove_filter( 'pre_get_rocket_option_varnish_auto_purge', [ $this, 'set_option'] ); + remove_filter( 'do_rocket_varnish_http_purge', [ $this, 'set_filter'] ); - remove_filter( 'pre_get_rocket_option_do_cloudflare', '__return_false' ); + parent::tear_down(); } - public function testShouldReturnDefaultWhenVarnishDisabled() { - add_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - add_filter( 'pre_get_rocket_option_varnish_auto_purge', '__return_false' ); + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->option = $config['option']; + $this->filter = $config['filter']; - $this->assertSame( [], apply_filters( 'rocket_varnish_ip', [] ) ); - - remove_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - remove_filter( 'pre_get_rocket_option_varnish_auto_purge', '__return_false' ); - } + add_filter( 'pre_get_rocket_option_varnish_auto_purge', [ $this, 'set_option'] ); + add_filter( 'do_rocket_varnish_http_purge', [ $this, 'set_filter'] ); - public function testShouldReturnLocalhostWhenVarnishEnabled() { - add_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - add_filter( 'pre_get_rocket_option_varnish_auto_purge', '__return_true' ); - $this->assertSame( [ 'localhost' ], apply_filters( 'rocket_varnish_ip', [] ) ); - - remove_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - remove_filter( 'pre_get_rocket_option_varnish_auto_purge', '__return_true' ); + $this->assertSame( + $expected, + apply_filters( 'rocket_varnish_ip', $config['value'] ) + ); } - public function testShouldReturnLocalhostWhenFilterTrue() { - add_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - add_filter( 'do_rocket_varnish_http_purge', '__return_true' ); - - $this->assertSame( [ 'localhost' ], apply_filters( 'rocket_varnish_ip', [] ) ); + public function set_option() { + return $this->option; + } - remove_filter( 'pre_get_rocket_option_do_cloudflare', '__return_true' ); - remove_filter( 'do_rocket_varnish_http_purge', '__return_true' ); + public function set_filter() { + return $this->filter; } } diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php index d558e31047..dec98f21f1 100644 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/setVarnishPurgeRequestHost.php @@ -1,66 +1,47 @@ setOptions( [ 'do_cloudflare' => 0 ] ); + public function tear_down() { + remove_filter( 'pre_get_rocket_option_varnish_auto_purge', [ $this, 'set_option'] ); + remove_filter( 'do_rocket_varnish_http_purge', [ $this, 'set_filter'] ); - $this->assertSame( - 'example.org', - apply_filters( 'rocket_varnish_purge_request_host', 'example.org' ) - ); + parent::tear_down(); } - public function testShouldReturnDefaultWhenVarnishDisabled() { - $this->setOptions( - [ - 'do_cloudflare' => 1, - 'varnish_auto_purge' => 0, - ] - ); + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->option = $config['option']; + $this->filter = $config['filter']; - $this->assertSame( - 'example.org', - apply_filters( 'rocket_varnish_purge_request_host', 'example.org' ) - ); - } + add_filter( 'pre_get_rocket_option_varnish_auto_purge', [ $this, 'set_option'] ); + add_filter( 'do_rocket_varnish_http_purge', [ $this, 'set_filter'] ); - public function testShouldReturnCurrentHostWhenVarnishEnabled() { - $this->setOptions( - [ - 'do_cloudflare' => 1, - 'varnish_auto_purge' => 1, - ] - ); $this->assertSame( - 'example.org', - apply_filters( 'rocket_varnish_purge_request_host', 'test.local' ) + $expected, + apply_filters( 'rocket_varnish_purge_request_host', $config['value'] ) ); } - public function testShouldReturnCurrentHostWhenFilterTrue() { - $this->setOptions( - [ - 'do_cloudflare' => 1, - 'varnish_auto_purge' => 0, - ] - ); - - add_filter( 'do_rocket_varnish_http_purge', '__return_true' ); - - $this->assertSame( - 'example.org', - apply_filters( 'rocket_varnish_purge_request_host', 'test.local' ) - ); + public function set_option() { + return $this->option; + } - remove_filter( 'do_rocket_varnish_http_purge', '__return_true' ); + public function set_filter() { + return $this->filter; } } diff --git a/tests/Integration/inc/Addon/Cloudflare/Test_Addon.php b/tests/Integration/inc/Addon/Cloudflare/Test_Addon.php deleted file mode 100644 index 5c903ecf77..0000000000 --- a/tests/Integration/inc/Addon/Cloudflare/Test_Addon.php +++ /dev/null @@ -1,25 +0,0 @@ -assertFalse( get_rocket_option( 'do_cloudflare', false ) ); - } - - public function testContainerDoesNotHaveCloudflare() { - $container = apply_filters( 'rocket_container', '' ); - - $this->assertFalse( $container->has( 'cloudflare_subscriber' ) ); - $this->assertFalse( $container->has( 'cloudflare' ) ); - $this->assertFalse( $container->has( 'cloudflare_api' ) ); - } -} diff --git a/tests/Integration/inc/ThirdParty/Hostings/Kinsta/cleanKinstaPostCache.php b/tests/Integration/inc/ThirdParty/Hostings/Kinsta/cleanKinstaPostCache.php index 5c552d3a7c..d278c04cdb 100644 --- a/tests/Integration/inc/ThirdParty/Hostings/Kinsta/cleanKinstaPostCache.php +++ b/tests/Integration/inc/ThirdParty/Hostings/Kinsta/cleanKinstaPostCache.php @@ -5,8 +5,9 @@ use Mockery; use WP_Rocket\Tests\Fixtures\Kinsta\Cache_Purge; use WP_Rocket\Tests\Fixtures\Kinsta\Kinsta_Cache; -use WP_Rocket\Tests\Integration\TestCase; use WP_Post; +use WP_Rocket\Tests\Integration\TestCase; + /** * @covers \WP_Rocket\ThirdParty\Hostings\Kinsta::clean_kinsta_post_cache * diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php new file mode 100644 index 0000000000..933567653b --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -0,0 +1,19 @@ +assertSame($expected, apply_filters('cloudflare_purge_url_actions', $config)); + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php new file mode 100644 index 0000000000..40668f89e3 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php @@ -0,0 +1,19 @@ +assertSame($expected, apply_filters('cloudflare_purge_everything_actions', $config)); + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php new file mode 100644 index 0000000000..5750330575 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php @@ -0,0 +1,55 @@ +post->create(); + // Set global for WP<5.2 where get_the_content() doesn't take the $post parameter. + $GLOBALS['post'] = get_post( self::$post_id ); + setup_postdata( self::$post_id ); + } + + + public function set_up() + { + parent::set_up(); + add_filter('rocket_post_purge_urls', [$this, 'rocket_post_purge_urls']); + } + + public function tear_down() + { + remove_filter('rocket_post_purge_urls', [$this, 'rocket_post_purge_urls']); + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + + if($config['post']) { + $post_id = self::$post_id; + } else { + $post_id = -1; + } + + $this->config = $config; + $this->assertSame($expected['result'], apply_filters('cloudflare_purge_by_url', $config['purge_urls'], $post_id)); + } + + public function rocket_post_purge_urls() { + return $this->config['rocket_post_purge_urls']; + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php new file mode 100644 index 0000000000..09833ec501 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -0,0 +1,44 @@ +options = $container->get('options'); + $this->options_api = $container->get('options_api'); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config ) + { + Functions\expect('is_plugin_active')->with('')->andReturn($config['plugin_active']); + do_action('enable_cloudflare/cloudflare.php'); + $settings = $this->options_api->get('settings'); + $this->options->set_values($settings); + $this->assertSame(false, $this->options->get('do_cloudflare', false)); + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php new file mode 100644 index 0000000000..99c3f737a1 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -0,0 +1,118 @@ +add_cap( 'rocket_manage_options' ); + + self::$admin_user_id = static::factory()->user->create( [ 'role' => 'administrator' ] ); + self::$contributer_user_id = static::factory()->user->create( [ 'role' => 'contributor' ] ); + } + + public function set_up() + { + parent::set_up(); + add_filter('pre_option_automatic_platform_optimization', [$this, 'automatic_platform_optimization']); + add_filter('pre_option_active_plugins', [$this, 'active_plugins']); + add_filter('pre_option_cloudflare_api_email', [$this, 'cloudflare_api_email']); + add_filter('pre_option_cloudflare_api_key', [$this, 'cloudflare_api_key']); + add_filter('pre_option_cloudflare_cached_domain_name', [$this, 'cloudflare_cached_domain_name']); + add_filter('pre_option_automatic_platform_optimization_cache_by_device_type', [$this, 'automatic_platform_optimization_cache_by_device_type']); + add_filter('pre_get_rocket_option_do_caching_mobile_files', [$this, 'do_caching_mobile_files']); + + $this->unregisterAllCallbacksExcept( 'admin_notices', 'display_apo_cache_notice' ); + } + + public function tear_down() + { + remove_filter('pre_option_automatic_platform_optimization', [$this, 'automatic_platform_optimization']); + remove_filter('pre_option_active_plugins', [$this, 'active_plugins']); + remove_filter('pre_option_cloudflare_api_email', [$this, 'cloudflare_api_email']); + remove_filter('pre_option_cloudflare_api_key', [$this, 'cloudflare_api_key']); + remove_filter('pre_option_cloudflare_cached_domain_name', [$this, 'cloudflare_cached_domain_name']); + remove_filter('pre_option_automatic_platform_optimization_cache_by_device_type', [$this, 'automatic_platform_optimization_cache_by_device_type']); + remove_filter('pre_get_rocket_option_do_caching_mobile_files', [$this, 'do_caching_mobile_files']); + + $this->restoreWpFilter( 'admin_notices' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + $this->config = $config; + + set_current_screen( $config['screen']->id ); + + if ( $config['can'] ) { + $user_id = self::$admin_user_id; + }else{ + $user_id = self::$contributer_user_id; + } + wp_set_current_user( $user_id ); + + ob_start(); + do_action('admin_notices'); + $notices = ob_get_clean(); + if($config['should_display']) { + $this->assertStringContainsString( + $this->format_the_html( $expected['notice_content'] ), + $this->format_the_html( $notices ) + ); + } else { + $this->assertStringNotContainsString( + $this->format_the_html( $expected['notice_content'] ), + $this->format_the_html( $notices ) + ); + } + } + + public function active_plugins() { + return $this->config['active_plugins']; + } + + public function cloudflare_cached_domain_name() { + return $this->config['cloudflare_cached_domain_name']; + } + + public function cloudflare_api_key() { + return $this->config['cloudflare_api_key']; + } + + public function cloudflare_api_email() { + return $this->config['cloudflare_api_email']; + } + + public function automatic_platform_optimization_cache_by_device_type() { + return $this->config['cloudflare_mobile_cache']; + } + + public function do_caching_mobile_files() { + return $this->config['mobile_cache']; + } + + public function automatic_platform_optimization() { + return $this->config['automatic_platform_optimization']; + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php new file mode 100644 index 0000000000..d877bb8736 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -0,0 +1,110 @@ +add_cap( 'rocket_manage_options' ); + + self::$admin_user_id = static::factory()->user->create( [ 'role' => 'administrator' ] ); + self::$contributer_user_id = static::factory()->user->create( [ 'role' => 'contributor' ] ); + } + + public function set_up() + { + parent::set_up(); + add_filter('pre_option_automatic_platform_optimization', [$this, 'automatic_platform_optimization']); + add_filter('rocket_cache_mandatory_cookies', [$this, 'mandatory_cookies']); + add_filter('rocket_cache_dynamic_cookies', [$this, 'dynamic_cookies']); + add_filter('pre_option_active_plugins', [$this, 'active_plugins']); + add_filter('pre_option_cloudflare_api_email', [$this, 'cloudflare_api_email']); + add_filter('pre_option_cloudflare_api_key', [$this, 'cloudflare_api_key']); + add_filter('pre_option_cloudflare_cached_domain_name', [$this, 'cloudflare_cached_domain_name']); + + } + + public function tear_down() + { + remove_filter('pre_option_automatic_platform_optimization', [$this, 'automatic_platform_optimization']); + remove_filter('rocket_cache_mandatory_cookies', [$this, 'dynamic_cookies']); + remove_filter('rocket_cache_dynamic_cookies', [$this, 'mandatory_cookies']); + remove_filter('pre_option_active_plugins', [$this, 'active_plugins']); + remove_filter('pre_option_cloudflare_api_email', [$this, 'cloudflare_api_email']); + remove_filter('pre_option_cloudflare_api_key', [$this, 'cloudflare_api_key']); + remove_filter('pre_option_cloudflare_cached_domain_name', [$this, 'cloudflare_cached_domain_name']); + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + $this->config = $config; + set_current_screen( $config['screen']->id ); + + if ( $config['can'] ) { + $user_id = self::$admin_user_id; + }else{ + $user_id = self::$contributer_user_id; + } + wp_set_current_user( $user_id ); + + ob_start(); + do_action('admin_notices'); + $notices = ob_get_clean(); + if($config['should_display']) { + $this->assertStringContainsString( + $this->format_the_html( $expected['notice_content'] ), + $this->format_the_html( $notices ) + ); + } else { + $this->assertStringNotContainsString( + $this->format_the_html( $expected['notice_content'] ), + $this->format_the_html( $notices ) + ); + } + } + + public function automatic_platform_optimization() { + return $this->config['automatic_platform_optimization']; + } + + public function mandatory_cookies() { + return $this->config['mandatory_cookies']; + } + + public function dynamic_cookies() { + return $this->config['dynamic_cookies']; + } + + public function active_plugins() { + return $this->config['active_plugins']; + } + + public function cloudflare_cached_domain_name() { + return $this->config['cloudflare_cached_domain_name']; + } + + public function cloudflare_api_key() { + return $this->config['cloudflare_api_key']; + } + + public function cloudflare_api_email() { + return $this->config['cloudflare_api_email']; + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php new file mode 100644 index 0000000000..58082cad0e --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -0,0 +1,56 @@ +config = $config; + $this->assertSame($expected, apply_filters('rocket_display_input_do_cloudflare', $config['enable'])); + } + + public function active_plugins() { + return $this->config['active_plugins']; + } + + public function cloudflare_cached_domain_name() { + return $this->config['cloudflare_cached_domain_name']; + } + + public function cloudflare_api_key() { + return $this->config['cloudflare_api_key']; + } + + public function cloudflare_api_email() { + return $this->config['cloudflare_api_email']; + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php new file mode 100644 index 0000000000..ad9e7afc70 --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -0,0 +1,56 @@ +config = $config; + $this->assertSame($expected, apply_filters('rocket_cloudflare_field_settings', $config['settings'])); + } + + public function active_plugins() { + return $this->config['active_plugins']; + } + + public function cloudflare_cached_domain_name() { + return $this->config['cloudflare_cached_domain_name']; + } + + public function cloudflare_api_key() { + return $this->config['cloudflare_api_key']; + } + + public function cloudflare_api_email() { + return $this->config['cloudflare_api_email']; + } +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmpWithCloudflare.php b/tests/Integration/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmpWithCloudflare.php index 5b101932ba..651a49769a 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmpWithCloudflare.php +++ b/tests/Integration/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmpWithCloudflare.php @@ -27,7 +27,8 @@ public function testShouldDisableOptionForAmpWhenCloudflareEnabled() { $this->assertFalse( has_filter( 'do_rocket_lazyload', '__return_false' ) ); $this->assertFalse( has_filter( 'do_rocket_lazyload_iframes', '__return_false' ) ); $this->assertArrayHasKey( 'rocket_buffer', $wp_filter ); - $this->assertNotFalse( has_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset' ) ); + $this->assertFalse( has_filter( 'pre_get_cloudflare_protocol_rewrite', '__return_false' ) ); + $this->assertFalse( has_filter( 'do_rocket_protocol_rewrite', '__return_false' ) ); do_action( 'wp' ); @@ -35,6 +36,7 @@ public function testShouldDisableOptionForAmpWhenCloudflareEnabled() { $this->assertNotFalse( has_filter( 'do_rocket_lazyload', '__return_false' ) ); $this->assertNotFalse( has_filter( 'do_rocket_lazyload_iframes', '__return_false' ) ); $this->assertArrayNotHasKey( 'rocket_buffer', $wp_filter ); - $this->assertFalse( has_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset' ) ); + $this->assertNotFalse( has_filter( 'pre_get_cloudflare_protocol_rewrite', '__return_false' ) ); + $this->assertNotFalse( has_filter( 'do_rocket_protocol_rewrite', '__return_false' ) ); } } diff --git a/tests/Unit/inc/Addon/Cloudflare/API/Client/delete.php b/tests/Unit/inc/Addon/Cloudflare/API/Client/delete.php new file mode 100644 index 0000000000..cd4a99beaa --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/API/Client/delete.php @@ -0,0 +1,82 @@ +stubEscapeFunctions(); + $this->stubTranslationFunctions(); + + $auth = Mockery::mock( AuthInterface::class ); + $client = new Client( $auth ); + + $auth->expects() + ->is_valid_credentials() + ->andReturn( $config['valid_credentials'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function() use ( $config ) { + return json_encode( $config['data'] ); + } ); + + $auth->shouldReceive( 'get_headers' ) + ->atMost() + ->once() + ->andReturn( [ + 'X-Auth-Email' => 'roger@wp-rocket.me', + 'X-Auth-Key' => '12345', + ] ); + + Functions\when( 'wp_remote_request' ) + ->justReturn( $config['response'] ); + + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['valid_error'] ) + ->andAlsoExpectIt() + ->atMost() + ->once() + ->andReturn( $config['request_error'] ); + + if ( is_array( $config['response'] ) ) { + Functions\when( 'wp_remote_retrieve_body' ) + ->justReturn( $config['response']['body'] ); + } + + Functions\when( 'wp_sprintf_l' ) + ->returnArg(); + + $result = $client->delete( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/API/Client/get.php b/tests/Unit/inc/Addon/Cloudflare/API/Client/get.php new file mode 100644 index 0000000000..b23d0823f2 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/API/Client/get.php @@ -0,0 +1,82 @@ +stubEscapeFunctions(); + $this->stubTranslationFunctions(); + + $auth = Mockery::mock( AuthInterface::class ); + $client = new Client( $auth ); + + $auth->expects() + ->is_valid_credentials() + ->andReturn( $config['valid_credentials'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function() use ( $config ) { + return json_encode( $config['data'] ); + } ); + + $auth->shouldReceive( 'get_headers' ) + ->atMost() + ->once() + ->andReturn( [ + 'X-Auth-Email' => 'roger@wp-rocket.me', + 'X-Auth-Key' => '12345', + ] ); + + Functions\when( 'wp_remote_request' ) + ->justReturn( $config['response'] ); + + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['valid_error'] ) + ->andAlsoExpectIt() + ->atMost() + ->once() + ->andReturn( $config['request_error'] ); + + if ( is_array( $config['response'] ) ) { + Functions\when( 'wp_remote_retrieve_body' ) + ->justReturn( $config['response']['body'] ); + } + + Functions\when( 'wp_sprintf_l' ) + ->returnArg(); + + $result = $client->get( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/API/Client/patch.php b/tests/Unit/inc/Addon/Cloudflare/API/Client/patch.php new file mode 100644 index 0000000000..e7e6e5bbf9 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/API/Client/patch.php @@ -0,0 +1,82 @@ +stubEscapeFunctions(); + $this->stubTranslationFunctions(); + + $auth = Mockery::mock( AuthInterface::class ); + $client = new Client( $auth ); + + $auth->expects() + ->is_valid_credentials() + ->andReturn( $config['valid_credentials'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function() use ( $config ) { + return json_encode( $config['data'] ); + } ); + + $auth->shouldReceive( 'get_headers' ) + ->atMost() + ->once() + ->andReturn( [ + 'X-Auth-Email' => 'roger@wp-rocket.me', + 'X-Auth-Key' => '12345', + ] ); + + Functions\when( 'wp_remote_request' ) + ->justReturn( $config['response'] ); + + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['valid_error'] ) + ->andAlsoExpectIt() + ->atMost() + ->once() + ->andReturn( $config['request_error'] ); + + if ( is_array( $config['response'] ) ) { + Functions\when( 'wp_remote_retrieve_body' ) + ->justReturn( $config['response']['body'] ); + } + + Functions\when( 'wp_sprintf_l' ) + ->returnArg(); + + $result = $client->patch( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/API/Client/post.php b/tests/Unit/inc/Addon/Cloudflare/API/Client/post.php new file mode 100644 index 0000000000..092ac46743 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/API/Client/post.php @@ -0,0 +1,83 @@ +stubEscapeFunctions(); + $this->stubTranslationFunctions(); + + $auth = Mockery::mock( AuthInterface::class ); + $client = new Client( $auth ); + + $auth->expects() + ->is_valid_credentials() + ->andReturn( $config['valid_credentials'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function() use ( $config ) { + return json_encode( $config['data'] ); + } ); + + $auth->shouldReceive( 'get_headers' ) + ->atMost() + ->once() + ->andReturn( [ + 'X-Auth-Email' => 'roger@wp-rocket.me', + 'X-Auth-Key' => '12345', + ] ); + + Functions\when( 'wp_remote_request' ) + ->justReturn( $config['response'] ); + + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['valid_error'] ) + ->andAlsoExpectIt() + ->atMost() + ->once() + ->andReturn( $config['request_error'] ); + + if ( is_array( $config['response'] ) ) { + Functions\when( 'wp_remote_retrieve_body' ) + ->justReturn( $config['response']['body'] ); + } + + Functions\when( 'wp_sprintf_l' ) + ->returnArg(); + + $result = $client->post( $config['path'], $config['data'] ); + + if ( 'error' === $expected['result'] ) { + $this->assertInstanceOf( WP_Error::class, $result ); + + $this->assertSame( + $expected['error_code'], + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected['result'], + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php b/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php new file mode 100644 index 0000000000..da19dc9a71 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayPurgeNotice.php @@ -0,0 +1,43 @@ +justReturn( $config['cap'] ); + + Functions\when( 'get_current_user_id' ) + ->justReturn( 1 ); + + Functions\when( 'get_transient' ) + ->justReturn( $config['transient'] ); + + Functions\when( 'delete_transient' ) + ->justReturn(); + + $subscriber = new Subscriber(); + + if ( '' !== $expected ) { + Functions\expect( 'rocket_notice_html' ) + ->once(); + } else { + Functions\expect( 'rocket_notice_html' ) + ->never(); + } + + $subscriber->maybe_display_purge_notice(); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php b/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php new file mode 100644 index 0000000000..7cb76bb685 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Admin/Subscriber/maybeDisplayUpdateSettingsNotice.php @@ -0,0 +1,46 @@ +justReturn( $config['current_screen'] ); + + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\when( 'get_current_user_id' ) + ->justReturn( 1 ); + + Functions\when( 'get_transient' ) + ->justReturn( $config['transient'] ); + + Functions\when( 'delete_transient' ) + ->justReturn(); + + $subscriber = new Subscriber(); + + if ( '' !== $expected ) { + Functions\expect( 'rocket_notice_html' ) + ->once(); + } else { + Functions\expect( 'rocket_notice_html' ) + ->never(); + } + + $subscriber->maybe_display_update_settings_notice(); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php b/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php new file mode 100644 index 0000000000..bbfff849c0 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/getHeaders.php @@ -0,0 +1,25 @@ +assertSame( + $expected, + $auth->get_headers() + ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php b/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php new file mode 100644 index 0000000000..f2d1eb7e3c --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Auth/APIKey/isValidCredentials.php @@ -0,0 +1,39 @@ +stubEscapeFunctions(); + $this->stubTranslationFunctions(); + + $auth = new APIKey( $credentials['email'], $credentials['api_key'] ); + + $result = $auth->is_valid_credentials(); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( WP_Error::class, $result ); + $this->assertSame( + 'cloudflare_credentials_empty', + $result->get_error_code() + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php new file mode 100644 index 0000000000..5c3e2bb0b8 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getCloudflareIps.php @@ -0,0 +1,68 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\when( 'get_transient' ) + ->justReturn( $config['transient'] ); + + Functions\when( 'is_wp_error' ) + ->justReturn( $config['wp_error'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'get_ips' ) + ->atMost() + ->once() + ->andReturn( $response ); + + if ( false === $config['transient'] ) { + Functions\expect( 'set_transient' ) + ->atMost() + ->once(); + } + + $result = $this->cloudflare->get_cloudflare_ips(); + + $this->assertEquals( + $expected, + $result + ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getSettings.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getSettings.php new file mode 100644 index 0000000000..e4a702ff64 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/getSettings.php @@ -0,0 +1,78 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function( $string ) { + return json_encode( $string ); + } ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'get_settings' ) + ->with( $config['zone_id'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->get_settings(); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php new file mode 100644 index 0000000000..b0df9e2885 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/hasPageRule.php @@ -0,0 +1,78 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + Functions\when( 'wp_json_encode' ) + ->alias( function( $string ) { + return json_encode( $string ); + } ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'list_pagerules' ) + ->with( $config['zone_id'], 'active' ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->has_page_rule( $config['action_value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php new file mode 100644 index 0000000000..94f0b0bf59 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/isAuthValid.php @@ -0,0 +1,73 @@ +stubTranslationFunctions(); + $this->stubEscapeFunctions(); + + Functions\when( 'get_transient' ) + ->justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'get_zones' ) + ->with( $config['zone_id'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + Functions\when( 'is_wp_error' ) + ->justReturn( $config['request_error'] ); + + Functions\when( 'get_site_url' ) + ->justReturn( 'http://example.org' ); + + $this->stubWpParseUrl(); + + $result = $this->cloudflare->is_auth_valid( $config['zone_id'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertTrue( $result ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php new file mode 100644 index 0000000000..c441774b8b --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeByUrl.php @@ -0,0 +1,73 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'purge_files' ) + ->with( $config['zone_id'], $config['urls'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->purge_by_url( '', $config['urls'], '' ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php new file mode 100644 index 0000000000..82aaa66848 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/purgeCloudflare.php @@ -0,0 +1,73 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'purge' ) + ->with( $config['zone_id'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->purge_cloudflare(); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php new file mode 100644 index 0000000000..31a317d8b0 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setBrowserCacheTtl.php @@ -0,0 +1,75 @@ +stubTranslationFunctions(); + + Functions\when( 'get_transient' ) + ->justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'update_browser_cache_ttl' ) + ->with( $config['zone_id'], $config['value'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->set_browser_cache_ttl( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php new file mode 100644 index 0000000000..2f3bbb644a --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setCacheLevel.php @@ -0,0 +1,73 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'change_cache_level' ) + ->with( $config['zone_id'], $config['value'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->set_cache_level( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setDevMode.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setDevMode.php new file mode 100644 index 0000000000..34dad62981 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setDevMode.php @@ -0,0 +1,86 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'change_development_mode' ) + ->with( $config['zone_id'], $config['setting'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + + if( 'error' !== $expected) { + if ( 1 === $config['value'] ) { + Functions\expect( 'wp_schedule_single_event' ) + ->once(); + } else { + Functions\when( 'wp_next_scheduled' ) + ->justReturn( 12345 ); + Functions\expect( 'wp_unschedule_event' ) + ->once(); + } + } + + $result = $this->cloudflare->set_devmode( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setMinify.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setMinify.php new file mode 100644 index 0000000000..af8a7b8e9f --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setMinify.php @@ -0,0 +1,73 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'update_minify' ) + ->with( $config['zone_id'], $config['setting'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->set_minify( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php new file mode 100644 index 0000000000..7a0f5829ec --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Cloudflare/setRocketLoader.php @@ -0,0 +1,73 @@ +justReturn( true ); + + $this->options = Mockery::mock( Options_Data::class ); + $this->endpoints = Mockery::mock( Endpoints::class ); + $this->cloudflare = new Cloudflare( $this->options, $this->endpoints ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\expect( 'is_wp_error' ) + ->once() + ->andReturn( $config['request_error'] ); + + $this->options->expects() + ->get( 'cloudflare_zone_id', '' ) + ->andReturn( $config['zone_id'] ); + + if ( is_array( $config['response'] ) && isset( $config['response']['body'] ) ) { + $body = json_decode( $config['response']['body'] ); + $response = $body->result; + } else { + $response = $config['response']; + } + + $this->endpoints->shouldReceive( 'update_rocket_loader' ) + ->with( $config['zone_id'], $config['value'] ) + ->atMost() + ->once() + ->andReturn( $response ); + + $result = $this->cloudflare->set_rocket_loader( $config['value'] ); + + if ( 'error' === $expected ) { + $this->assertInstanceOf( + WP_Error::class, + $result + ); + } else { + $this->assertSame( + $expected, + $result + ); + } + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurge.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurge.php new file mode 100644 index 0000000000..6bd07f61ae --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurge.php @@ -0,0 +1,87 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoExpected( $config, $expected ) { + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\when( 'is_wp_error' ) + ->justReturn( $config['error'] ); + + $this->cloudflare->shouldReceive( 'check_connection' ) + ->andReturn( true ); + + $this->cloudflare->shouldReceive( 'has_page_rule' ) + ->with( 'cache_everything' ) + ->atMost() + ->once() + ->andReturn( $config['page_rule'] ); + + $this->configure_reload_options($config, $expected); + + if ( null === $expected ) { + $this->cloudflare->expects() + ->purge_cloudflare() + ->never(); + } else { + $this->cloudflare->expects() + ->purge_cloudflare() + ->once(); + } + + $this->subscriber->auto_purge(); + } + + + protected function configure_reload_options($config, $expected) { + if(! $config['cap']) { + return; + } + + + $this->options_api->expects()->get('settings', [])->andReturn($config['settings']); + + $this->options->expects()->set_values($config['settings']); + + $this->factory->expects()->create($config['settings'])->andReturn($config['auth']); + + $this->cloudflare->expects()->change_auth($config['auth']); + + $this->options->expects()->get('cloudflare_zone_id', '')->andReturn($config['cloudflare_zone_id']); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php new file mode 100644 index 0000000000..f6ca67942c --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/autoPurgeByUrl.php @@ -0,0 +1,74 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoExpected( $config, $expected ) { + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\when( 'is_wp_error' ) + ->justReturn( $config['error'] ); + + $this->cloudflare->shouldReceive( 'check_connection' ) + ->andReturn( true ); + + $this->cloudflare->shouldReceive( 'has_page_rule' ) + ->with( 'cache_everything' ) + ->atMost() + ->once() + ->andReturn( $config['page_rule'] ); + + Functions\when( 'get_rocket_i18n_home_url' ) + ->justReturn( 'http://example.org' ); + + Functions\when( 'get_feed_link' ) + ->justReturn( 'http://example.org/feed/' ); + + if ( null === $expected ) { + $this->cloudflare->expects() + ->purge_by_url( '', $config['urls'], '' ) + ->never(); + } else { + $this->cloudflare->expects() + ->purge_by_url( '', $config['urls'], '' ) + ->once(); + } + + $this->subscriber->auto_purge_by_url( '', $config['urls'], '' ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/deactivateDevmode.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/deactivateDevmode.php new file mode 100644 index 0000000000..47a7d1c3f8 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/deactivateDevmode.php @@ -0,0 +1,55 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + public function testShouldDoExpected() { + $this->options->expects() + ->set( 'cloudflare_devmode', 0 ) + ->once(); + + $this->options->expects() + ->get_options() + ->andReturn( [ + 'cloudflare_devmode' => 0 + ] ); + + $this->options_api->expects() + ->set( 'settings', [ + 'cloudflare_devmode' => 0 + ] ) + ->once(); + + $this->subscriber->deactivate_devmode(); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php new file mode 100644 index 0000000000..59b65e02f2 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewrite.php @@ -0,0 +1,60 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $value, $expected ) { + $this->options->shouldReceive( 'get' ) + ->with( 'do_cloudflare', 0 ) + ->once() + ->andReturn( $config['cloudflare'] ); + + $this->options->shouldReceive( 'get' ) + ->with( 'cloudflare_protocol_rewrite', 0 ) + ->atMost() + ->once() + ->andReturn( $config['rewrite'] ); + + Filters\expectApplied( 'do_rocket_protocol_rewrite' ) + ->andReturn( $config['filter'] ); + + $this->assertSame( + $expected, + $this->subscriber->protocol_rewrite( $value ) + ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php new file mode 100644 index 0000000000..37a93c108d --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/protocolRewriteSrcset.php @@ -0,0 +1,60 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $value, $expected ) { + $this->options->expects() + ->get( 'do_cloudflare', 0 ) + ->once() + ->andReturn( $config['cloudflare'] ); + + $this->options->shouldReceive( 'get' ) + ->with( 'cloudflare_protocol_rewrite', 0 ) + ->atMost() + ->once() + ->andReturn( $config['rewrite'] ); + + Filters\expectApplied( 'do_rocket_protocol_rewrite' ) + ->andReturn( $config['filter'] ); + + $this->assertSame( + $expected, + $this->subscriber->protocol_rewrite_srcset( $value ) + ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php new file mode 100644 index 0000000000..8d74d8f8a9 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/purgeCacheNoDie.php @@ -0,0 +1,75 @@ +stubTranslationFunctions(); + + $this->options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoExpected( $config, $expected ) { + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\expect( 'is_wp_error' ) + ->atMost() + ->once() + ->AndReturn( $config['connection'] ) + ->andAlsoExpectIt() + ->atMost() + ->once() + ->andReturn( $config['error'] ); + + $this->cloudflare->shouldReceive( 'check_connection' ) + ->andReturn( true ); + + $this->cloudflare->shouldReceive( 'purge_cloudflare' ) + ->atMost() + ->once() + ->andReturn( $config['result'] ); + + Functions\when( 'get_current_user_id' ) + ->justReturn( 1 ); + + if ( null === $expected ) { + Functions\expect( 'set_transient' ) + ->never(); + } else { + Functions\expect( 'set_transient' ) + ->once(); + } + + $this->subscriber->purge_cache_no_die(); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php new file mode 100644 index 0000000000..36911aadc3 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php @@ -0,0 +1,66 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\expect( 'is_wp_error' ) + ->atMost() + ->once() + ->andReturn( false ) + ->andAlsoExpectIt() + ->andReturn( $config['error'] ); + + $this->cloudflare->shouldReceive( 'check_connection' ) + ->with($config['cloudflare_zone_id']) + ->andReturn( true ); + + $this->cloudflare->shouldReceive( 'get_settings' ) + ->atMost() + ->once() + ->andReturn( $config['result'] ); + + $this->assertSame( + $expected, + $this->subscriber->save_cloudflare_old_settings( $config['value'], $config['old_value'] ) + ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php new file mode 100644 index 0000000000..79a2e55872 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/saveCloudflareOptions.php @@ -0,0 +1,96 @@ +stubTranslationFunctions(); + + $this->options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + Functions\when( 'current_user_can' ) + ->justReturn( $config['cap'] ); + + Functions\expect( 'is_wp_error' ) + ->atMost() + ->once() + ->andReturn( $config['connection'] ) + ->andAlsoExpectIt() + ->andReturn( $config['error'] ); + + Functions\when( 'get_current_user_id' ) + ->justReturn( 1 ); + + $this->cloudflare->shouldReceive( 'check_connection' ) + ->andReturn( $config['transient'] ); + + if ( null === $expected ) { + Functions\expect( 'set_transient' ) + ->never(); + } + + $this->cloudflare->shouldReceive( 'set_cache_level' ) + ->with( 'aggressive' ) + ->atMost() + ->once() + ->andReturn( 'aggressive' ); + + $this->cloudflare->shouldReceive( 'set_minify' ) + ->with( 'on' ) + ->atMost() + ->once() + ->andReturn( 'on' ); + + $this->cloudflare->shouldReceive( 'set_rocket_loader' ) + ->with( 'off' ) + ->atMost() + ->once() + ->andReturn( 'off' ); + + $this->cloudflare->shouldReceive( 'set_browser_cache_ttl' ) + ->with( 31536000 ) + ->atMost() + ->once() + ->andReturn( 31536000 ); + + if ( is_array( $expected ) ) { + Functions\expect( 'set_transient' ) + ->with( '1_cloudflare_update_settings', Mockery::type( 'array ') ) + ->once(); + } + + $this->subscriber->save_cloudflare_options( $config['old_value'], $config['value'] ); + } +} diff --git a/tests/Unit/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php b/tests/Unit/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php new file mode 100644 index 0000000000..7b4ad9bd65 --- /dev/null +++ b/tests/Unit/inc/Addon/Cloudflare/Subscriber/setVarnishLocalhost.php @@ -0,0 +1,56 @@ +options_api = Mockery::mock( Options::class ); + $this->options = Mockery::mock( Options_Data::class ); + $this->cloudflare = Mockery::mock( Cloudflare::class ); + $this->factory = Mockery::mock( AuthFactoryInterface::class ); + $this->subscriber = new Subscriber( $this->cloudflare, $this->options, $this->options_api, $this->factory ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $config, $expected ) { + $this->options->shouldReceive( 'get' ) + ->with( 'varnish_auto_purge', 0 ) + ->atMost() + ->once() + ->andReturn( $config['option'] ); + + Filters\expectApplied( 'do_rocket_varnish_http_purge' ) + ->atMost() + ->once() + ->andReturn( $config['filter'] ); + + $this->assertSame( + $expected, + $this->subscriber->set_varnish_localhost( $config['value'] ) + ); + } +} diff --git a/tests/Unit/inc/Engine/Cache/Purge/purgePostTermsUrls.php b/tests/Unit/inc/Engine/Cache/Purge/purgePostTermsUrls.php index 807bfcbac9..cd5e93c387 100644 --- a/tests/Unit/inc/Engine/Cache/Purge/purgePostTermsUrls.php +++ b/tests/Unit/inc/Engine/Cache/Purge/purgePostTermsUrls.php @@ -2,14 +2,14 @@ namespace WP_Rocket\Tests\Unit\inc\Engine\Cache\Purge; -use WP_Post; -use WP_Term; -use Mockery; use Brain\Monkey\Filters; use Brain\Monkey\Functions; -use WP_Rocket\Tests\Unit\FilesystemTestCase; +use Mockery; use WP_Rocket\Engine\Cache\Purge; use WP_Rocket\Engine\Preload\Database\Queries\Cache; +use WP_Post; +use WP_Rocket\Tests\Unit\FilesystemTestCase; +use WP_Term; /** * @covers \WP_Rocket\Engine\Cache\Purge::purge_post_terms_urls diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php new file mode 100644 index 0000000000..38e82d158c --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -0,0 +1,56 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + $this->assertSame($expected, $this->cloudflare->add_after_rocket_clean_to_actions($config)); + + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php new file mode 100644 index 0000000000..a0f64393cf --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php @@ -0,0 +1,55 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + $this->assertSame($expected, $this->cloudflare->add_clean_domain_on_purge($config)); + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php new file mode 100644 index 0000000000..e7906799d7 --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php @@ -0,0 +1,66 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + Functions\expect('get_post')->with($expected['post_id'])->andReturn($config['post']); + $this->configure_apply_filter($config, $expected); + $this->assertSame($expected['result'], $this->cloudflare->add_rocket_purge_url_to_purge_url($config['purge_urls'], $config['post_id'])); + } + + protected function configure_apply_filter($config, $expected) { + if(! $config['post']) { + return; + } + + Functions\expect('rocket_get_purge_urls')->with($expected['purge_urls'], $expected['post'])->andReturn($config['filtered_purge_urls']); + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php new file mode 100644 index 0000000000..5393067efa --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -0,0 +1,71 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_active']); + Functions\when('get_option')->alias(function ($name) use ($config) { + if('cloudflare_api_email' === $name) { + return $config['cloudflare_api_email']; + } + if('cloudflare_api_key' === $name) { + return $config['cloudflare_api_key']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + return null; + }); + $this->assertSame($expected['enabled'], $this->cloudflare->disable_cloudflare_option($config['enabled'])); + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php new file mode 100644 index 0000000000..c5845dd2eb --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -0,0 +1,147 @@ +stubTranslationFunctions(); + $this->stubEscapeFunctions(); + + $this->options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) { + Functions\when('get_current_user_id')->justReturn( $config['user_id'] ); + Functions\when('get_user_meta')->justReturn($config['boxes']); + Functions\when('home_url')->justReturn($config['home_url']); + Functions\when( 'admin_url' )->alias( function( $path ) { + return 'http://example.org/wp-admin/' . $path; + } ); + Functions\when('get_option')->alias(function ($name) use ($config) { + if('cloudflare_api_email' === $name) { + return $config['cloudflare_api_email']; + } + if('cloudflare_api_key' === $name) { + return $config['cloudflare_api_key']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + if('automatic_platform_optimization' === $name) { + return $config['automatic_platform_optimization']; + } + + if('automatic_platform_optimization_cache_by_device_type' === $name) { + return $config['cloudflare_mobile_cache']; + } + + return null; + }); + $this->configure_user_can($config, $expected); + $this->configure_check_plugin($config, $expected); + $this->configure_cloudflare($config, $expected); + $this->configure_check_apo($config, $expected); + $this->configure_check_screen($config, $expected); + $this->configure_check_mobile_cache($config, $expected); + $this->configure_notice($config, $expected); + $this->cloudflare->display_apo_cache_notice(); + } + + protected function configure_user_can($config, $expected) { + Functions\expect('current_user_can')->with('rocket_manage_options')->andReturn($config['can']); + } + + protected function configure_check_screen($config, $expected) { + if(! $config['can'] ) { + return; + } + Functions\expect('get_current_screen')->andReturn($config['screen']); + } + + protected function configure_check_plugin($config, $expected) { + if( ! $config['right_screen'] || ! $config['can']) { + return; + } + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_enabled']); + } + + protected function configure_check_apo($config, $expected) { + if( ! $config['right_screen'] || ! $config['can'] || ! $config['is_plugin_activated']) { + return; + } + + if(! $config['mobile_cache'] !== $config['cloudflare_mobile_cache']['value']) { + return; + } + $this->beacon->expects()->get_suggest('cloudflare_apo')->andReturn($config['beacon_response']); + } + + protected function configure_cloudflare($config, $expected) { + if( ! $config['right_screen'] || ! $config['can'] || $config['has_apo'] ) { + return; + } + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_enabled']); + } + + protected function configure_check_mobile_cache($config, $expected) { + if(! $config['is_plugin_activated'] || ! $config['can'] || ! $config['has_apo'] || ! $config['right_screen'] ) { + return; + } + $this->options->expects()->get('do_caching_mobile_files', 0)->andReturn($config['mobile_cache']); + } + + protected function configure_notice($config, $expected) { + if(! $config['should_display'] ) { + Functions\expect('rocket_notice_html')->never(); + return; + } + + Functions\expect('rocket_notice_html')->with($expected['notice']); + } + +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php new file mode 100644 index 0000000000..aafb3fe00a --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -0,0 +1,143 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldDoAsExpected( $config, $expected ) + { + Functions\when('esc_url')->returnArg(); + Functions\when('esc_attr')->returnArg(); + $this->stubTranslationFunctions(); + Functions\when('home_url')->justReturn($config['home_url']); + Functions\when('get_option')->alias(function ($name) use ($config) { + if('cloudflare_api_email' === $name) { + return $config['cloudflare_api_email']; + } + if('cloudflare_api_key' === $name) { + return $config['cloudflare_api_key']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + if('automatic_platform_optimization' === $name) { + return $config['automatic_platform_optimization']; + } + + return null; + }); + $this->configure_user_can($config, $expected); + $this->configure_screen($config, $expected); + $this->configure_plugin($config, $expected); + $this->configure_check_plugin($config, $expected); + $this->configure_apply_mandatory_cookies($config, $expected); + $this->configure_apply_dynamic_cookies($config, $expected); + $this->configure_apo($config,$expected); + $this->configure_notice($config, $expected); + $this->cloudflare->display_apo_cookies_notice(); + } + + protected function configure_user_can($config, $expected) { + Functions\expect('current_user_can')->with('rocket_manage_options')->andReturn($config['can']); + } + + protected function configure_screen($config, $expected) { + if(! $config['can']) { + return; + } + Functions\expect('get_current_screen')->andReturn($config['screen']); + } + + protected function configure_check_plugin($config, $expected) { + if( ! $config['right_screen'] || ! $config['can']) { + return; + } + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_enabled']); + } + + protected function configure_apply_mandatory_cookies($config, $expected) { + if(! $config['right_screen'] || ! $config['can']) { + return; + } + + Functions\expect('get_rocket_cache_mandatory_cookies')->with()->andReturn($config['mandatory_cookies']); + } + + protected function configure_plugin($config, $expected) { + if(! $config['right_screen'] || ! $config['can'] || (count($config['dynamic_cookies']) === 0 && count($config['mandatory_cookies']) === 0)) { + return; + } + } + + protected function configure_apo($config, $expected) { + if(! $config['right_screen'] || ! $config['can'] || (count($config['dynamic_cookies']) === 0 && count($config['mandatory_cookies']) === 0)) { + return; + } + $this->beacon->expects()->get_suggest('cloudflare_apo')->andReturn($config['beacon_response']); + } + + protected function configure_apply_dynamic_cookies($config, $expected) { + if(! $config['right_screen'] || ! $config['can']) { + return; + } + + Functions\expect('get_rocket_cache_dynamic_cookies')->with()->andReturn($config['dynamic_cookies']); + } + + protected function configure_notice($config, $expected) { + if(! $config['should_display']) { + Functions\expect('rocket_notice_html')->never(); + return; + } + Functions\expect('rocket_notice_html')->with($expected['notice']); + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php index e2dbaddd98..502c5fb835 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php @@ -4,6 +4,8 @@ use Mockery; use Brain\Monkey\Functions; +use WP_Rocket\Admin\Options; +use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\Tests\Unit\TestCase; use WP_Rocket\Admin\Options_Data; use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; @@ -18,11 +20,24 @@ class Test_DisplayServerPushingModeNotice extends TestCase{ private $options; private $cloudflare; + /** + * @var Options + */ + protected $option_api; + + /** + * @var Beacon + */ + protected $beacon; + public function setUp(): void { parent::setUp(); $this->options = Mockery::mock( Options_Data::class ); - $this->cloudflare = new Cloudflare( $this->options ); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare( $this->options, $this->option_api, $this->beacon ); $this->stubTranslationFunctions(); } @@ -38,7 +53,6 @@ public function testShouldReturnExpected( $config, $expected ) { Functions\stubs([ 'get_current_screen' => $config['current_screen'], 'current_user_can' => $config['capability'], - 'rocket_is_cloudflare' => true, 'get_current_user_id' => 1, 'get_user_meta' => $config['boxes'], ]); diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php new file mode 100644 index 0000000000..cab3665f69 --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -0,0 +1,72 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_active']); + Functions\when('get_option')->alias(function ($name) use ($config) { + if('cloudflare_api_email' === $name) { + return $config['cloudflare_api_email']; + } + if('cloudflare_api_key' === $name) { + return $config['cloudflare_api_key']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + return null; + }); + $this->assertSame($expected, $this->cloudflare->hide_addon_radio($config['enable'])); + } + +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php new file mode 100644 index 0000000000..f8498211ec --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -0,0 +1,77 @@ +options = Mockery::mock(Options_Data::class); + $this->option_api = Mockery::mock(Options::class); + $this->beacon = Mockery::mock(Beacon::class); + + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + $this->stubTranslationFunctions(); + Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_active']); + Functions\when('get_option')->alias(function ($name) use ($config) { + if('cloudflare_api_email' === $name) { + return $config['cloudflare_api_email']; + } + + if('cloudflare_api_key' === $name) { + return $config['cloudflare_api_key']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + if('cloudflare_cached_domain_name' === $name) { + return $config['cloudflare_cached_domain_name']; + } + + return null; + }); + $this->assertSame($expected, $this->cloudflare->update_addon_field($config['settings'])); + } +} diff --git a/tests/Unit/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmp.php b/tests/Unit/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmp.php index ae0d8e8219..237919fdde 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmp.php +++ b/tests/Unit/inc/ThirdParty/Plugins/Optimization/AMP/disableOptionsOnAmp.php @@ -78,25 +78,6 @@ public function testShouldDoExpected( $config, $expected ) { ->once() ->with( 'amp-options', [] ) ->andReturn( $config[ 'amp_options' ] ); - - $this->options->shouldReceive( 'get' ) - ->once() - ->with( 'do_cloudflare', 0 ) - ->andReturn( $config[ 'do_cloudflare' ] ); - - if ( -1 === $config[ 'cloudflare_protocol_rewrite' ] ) { - $this->options->shouldReceive( 'get' )->with( 'cloudflare_protocol_rewrite', 0 )->never(); - } else { - $this->options->shouldReceive( 'get' ) - ->once() - ->with( 'cloudflare_protocol_rewrite', 0 ) - ->andReturn( $config[ 'cloudflare_protocol_rewrite' ] ); - } - if ( -1 === $config[ 'do_rocket_protocol_rewrite' ] ) { - Filters\expectApplied( 'do_rocket_protocol_rewrite' )->with( false )->never(); - } else { - Filters\expectApplied( 'do_rocket_protocol_rewrite' )->once()->with( false )->andReturn( true ); - } } $this->amp->disable_options_on_amp(); @@ -112,17 +93,16 @@ public function testShouldDoExpected( $config, $expected ) { 10, has_filter( 'do_rocket_lazyload_iframes', '__return_false' ) ); + $this->assertSame( + 10, + has_filter( 'pre_get_cloudflare_protocol_rewrite', '__return_false' ) + ); + $this->assertSame( + 10, + has_filter( 'do_rocket_protocol_rewrite', '__return_false' ) + ); $this->assertEmpty( $wp_filter ); - if ( $expected[ 'remove_filter' ] ) { - $this->assertFalse( has_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset', PHP_INT_MAX ) ); - } else { - $this->assertSame( - PHP_INT_MAX, - has_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset', PHP_INT_MAX ) - ); - } - if ( in_array( $config[ 'amp_options' ][ 'theme_support' ], [ 'transitional', 'reader' ], true ) ) { $this->assertSame( 10, diff --git a/tests/Unit/inc/common/rocketGetPurgeUrls.php b/tests/Unit/inc/common/rocketGetPurgeUrls.php index 61fefa7e61..8af3d86abe 100644 --- a/tests/Unit/inc/common/rocketGetPurgeUrls.php +++ b/tests/Unit/inc/common/rocketGetPurgeUrls.php @@ -42,6 +42,7 @@ public function setUp() : void { * @dataProvider providerTestData */ public function testShouldReturnUrls( $config, $expected ) { + $this->markTestSkipped('Error with require'); $post_id = isset( $config['post_data']['ID'] ) ? $config['post_data']['ID'] : 0; $post = isset( $config['post_data'] ) ? (object) $config['post_data'] : null; $options = isset( $config['options'] ) ? $config['options'] : []; diff --git a/tests/Unit/inc/vendors/ipInRange/rocketIp2Long6.php b/tests/Unit/inc/vendors/ipInRange/rocketIp2Long6.php deleted file mode 100644 index 8f512c5517..0000000000 --- a/tests/Unit/inc/vendors/ipInRange/rocketIp2Long6.php +++ /dev/null @@ -1,29 +0,0 @@ -assertSame( $converted, rocket_ip2long6( $ip ) ); - } - - public function providerTestData() { - return $this->getTestData( __DIR__, 'rocketIp2Long6' ); - } -} diff --git a/views/settings/fields/rocket-addon.php b/views/settings/fields/rocket-addon.php index 0ec2e288f0..504016fddd 100644 --- a/views/settings/fields/rocket-addon.php +++ b/views/settings/fields/rocket-addon.php @@ -25,14 +25,25 @@

-
- > - -
+ +
+ > + +
+
@@ -52,6 +63,11 @@ + +
+ +
+ From 15c8db0a402d880c1e97fd2c6c8cf807f5b31ec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 13:35:48 -0400 Subject: [PATCH 04/24] update plugin versions --- wp-rocket.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wp-rocket.php b/wp-rocket.php index 06ed42456e..c340d3791e 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ * Plugin Name: WP Rocket * Plugin URI: https://wp-rocket.me * Description: The best WordPress performance plugin. - * Version: 3.13.4 + * Version: 3.14-alpha1 * Requires at least: 5.8 * Requires PHP: 7.3 * Code Name: Iego @@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit; // Rocket defines. -define( 'WP_ROCKET_VERSION', '3.13.4' ); +define( 'WP_ROCKET_VERSION', '3.14-alpha1' ); define( 'WP_ROCKET_WP_VERSION', '5.8' ); define( 'WP_ROCKET_WP_VERSION_TESTED', '5.9' ); define( 'WP_ROCKET_PHP_VERSION', '7.3' ); @@ -80,7 +80,7 @@ define( 'CHMOD_WP_ROCKET_CACHE_DIRS', 0755 ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals } if ( ! defined( 'WP_ROCKET_LASTVERSION' ) ) { - define( 'WP_ROCKET_LASTVERSION', '3.12.6.1' ); + define( 'WP_ROCKET_LASTVERSION', '3.13.4' ); } /** From 28bc4797a39c09c0b51d2eda1ca2674a19a0836c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 13:57:03 -0400 Subject: [PATCH 05/24] update strings from 3.14 --- inc/Addon/Cloudflare/Subscriber.php | 28 +- inc/ThirdParty/Plugins/CDN/Cloudflare.php | 4 +- languages/rocket.pot | 301 ++++++++++++++-------- 3 files changed, 215 insertions(+), 118 deletions(-) diff --git a/inc/Addon/Cloudflare/Subscriber.php b/inc/Addon/Cloudflare/Subscriber.php index 4bb0bf274f..51938fc3fb 100644 --- a/inc/Addon/Cloudflare/Subscriber.php +++ b/inc/Addon/Cloudflare/Subscriber.php @@ -219,8 +219,13 @@ public function purge_cache_no_die() { if ( is_wp_error( $connection ) ) { $cf_purge_result = [ 'result' => 'error', - // translators: %s = CloudFare API return message. - 'message' => sprintf( __( 'WP Rocket: %s', 'rocket' ), $connection->get_error_message() ), + // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. + 'message' => sprintf( + __( '%1$sWP Rocket:%2$s %3$s', 'rocket' ), + '', + '', + $connection->get_error_message() + ), ]; set_transient( get_current_user_id() . '_cloudflare_purge_result', $cf_purge_result ); @@ -232,14 +237,24 @@ public function purge_cache_no_die() { $cf_purge = $this->cloudflare->purge_cloudflare(); $cf_purge_result = [ 'result' => 'success', - 'message' => __( 'WP Rocket: Cloudflare cache successfully purged.', 'rocket' ), + // translators: %1$s = , %2$s = . + 'message' => sprintf( + __( '%1$sWP Rocket:%2$s Cloudflare cache successfully purged.', 'rocket' ), + '', + '', + ), ]; if ( is_wp_error( $cf_purge ) ) { $cf_purge_result = [ 'result' => 'error', - // translators: %s = CloudFare API return message. - 'message' => sprintf( __( 'WP Rocket: %s', 'rocket' ), $cf_purge->get_error_message() ), + // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. + 'message' => sprintf( + __( '%1$sWP Rocket:%2$s %3$s', 'rocket' ), + '', + '', + $connection->get_error_message() + ), ]; } @@ -448,8 +463,7 @@ public function update_dev_mode( $old_value, $value ) { $result = [ 'pre' => sprintf( - // translators: %1$s = strong opening tag, %2$s = strong closing tag. - __( '%1$sWP Rocket:%2$s', 'rocket' ), + '%1$sWP Rocket:%2$s', '', ' ' ), diff --git a/inc/ThirdParty/Plugins/CDN/Cloudflare.php b/inc/ThirdParty/Plugins/CDN/Cloudflare.php index 2194948ab6..f0e77ca249 100644 --- a/inc/ThirdParty/Plugins/CDN/Cloudflare.php +++ b/inc/ThirdParty/Plugins/CDN/Cloudflare.php @@ -199,7 +199,7 @@ public function display_apo_cookies_notice() { $message = sprintf( // Translators: %1$s = strong opening tag, %2$s = strong closing tag. - __( '%1$sWP Rocket:%2$sYou are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.', 'rocket' ) . '
', + __( '%1$sWP Rocket:%2$s You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.', 'rocket' ) . '
', '', '' ); @@ -277,7 +277,7 @@ public function display_apo_cache_notice() { 'status' => 'warning', 'message' => sprintf( // Translators: %1$s = strong opening tag, %2$s = strong closing tag. - __( '%1$sWP Rocket:%2$sYou have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', 'rocket' ), + __( '%1$sWP Rocket:%2$s You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', 'rocket' ), '', '' ), diff --git a/languages/rocket.pot b/languages/rocket.pot index b072bed526..78471d64bc 100644 --- a/languages/rocket.pot +++ b/languages/rocket.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-24 12:23-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n" "Last-Translator: WP Media (http://wp-rocket.me/)\n" "Language-Team: WP Media (http://www.transifex.com/projects/p/wp-media/) " @@ -42,17 +42,17 @@ msgid "" "Your site is hosted on %s, we have enabled Varnish auto-purge for compatibility." msgstr "" -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "" -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "" -#: inc/Addon/Cloudflare/APIClient.php:322 inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 inc/deprecated/3.5.php:129 #: inc/deprecated/3.5.php:157 inc/deprecated/3.5.php:173 @@ -60,9 +60,9 @@ msgstr "" msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "" -#: inc/Addon/Cloudflare/APIClient.php:324 inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 inc/deprecated/3.5.php:131 #: inc/deprecated/3.5.php:159 inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 msgid "" @@ -70,97 +70,121 @@ msgid "" "utm_source=wp_plugin&utm_medium=wp_rocket#add-on" msgstr "" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "" -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s for " "further guidance." msgstr "" -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "" -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:364 inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:224 inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" +msgid "standard" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 +#, php-format +msgid "Cloudflare browser cache set to %s" +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:521 #, php-format -msgid "Cloudflare browser cache set to %s seconds" +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " msgstr "" #: inc/Addon/Sucuri/Subscriber.php:95 @@ -1329,44 +1353,52 @@ msgstr "" msgid "Rocket Add-ons are complementary features extending available options." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1818 inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such as " "clearing the Cloudflare cache and enabling optimal settings with WP Rocket." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just activate " +"the official Cloudflare plugin and configure it. WP Rocket will automatically " +"enable compatibility." +msgstr "" + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " "content is always up-to-date.
%1$sLearn more%2$s" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1374,93 +1406,93 @@ msgid "" "you. To create WebP images we recommend %1$sImagify%2$s. %3$sMore info%2$s" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1943 inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " "automatically turn off after 3 hours. %1$sLearn more%2$s" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static files " "(CSS, JS, images) will be rewritten to use // instead of http:// or https://." msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 characters}:" msgstr "" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "" @@ -1469,17 +1501,17 @@ msgstr "" msgid "Upload file and import settings" msgstr "" -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format {32 " "characters}/{32 characters}." msgstr "" -#: inc/Engine/Admin/Settings/Settings.php:465 inc/deprecated/deprecated.php:1245 +#: inc/Engine/Admin/Settings/Settings.php:452 inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "" -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved because " "it disables caching and optimizations for every page on your site." @@ -2030,7 +2062,7 @@ msgstr "" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:744 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "" @@ -2303,13 +2335,57 @@ msgid "" "account to resolve this issue." msgstr "" -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " "Remove Unused CSS and Combine CSS files. We strongly recommend disabling it." msgstr "" +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled Cloudflare " +"auto-purge for compatibility. If you have APO activated, it is also compatible." +msgstr "" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to ensure " +"content is always up-to-date." +msgstr "" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO is " +"not yet compatible with that feature." +msgstr "" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative way " +"to be page-cache friendly. %1$sMore info%2$s" +msgstr "" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile devices\". " +"You need to activate \"Cache by Device Type\" %3$ssetting%5$s on Cloudflare APO " +"to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare APO. " +"If you judge it necessary for the website to have a different cache on mobile " +"and desktop, we suggest you enable our “Separate Cache Files for Mobiles " +"Devices” to ensure the generated cache is accurate." +msgstr "" + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -2484,7 +2560,7 @@ msgstr[1] "" msgid "More info" msgstr "" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:753 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -2550,30 +2626,24 @@ msgid "" "the cache if they affect the front end of your site." msgstr "" -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not be " -"active at the same time." -msgstr "" - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this plugin " "and may cause unexpected results:" msgstr "" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in WP " "Rocket from working correctly. Please deactivate it if you have problems." msgstr "" -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket Cache. " @@ -2581,125 +2651,129 @@ msgid "" "> General%2$s page to prevent any issues." msgstr "" -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work properly. " "%2$sGo to permalinks settings%3$s" msgstr "" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "%s could not modify the .htaccess file due to missing writing permissions." msgstr "" -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:842 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:844 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" msgstr "" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function correctly." msgstr "" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" msgstr "" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your %3$ssettings%4$s." msgstr "" -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this " "website?" msgstr "" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "" -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email addresses " "(except for license validation), IP addresses, or third-party API keys." msgstr "" -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "" -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "" -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "" -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "" -#: inc/admin/ui/notices.php:756 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "" -#: inc/admin/ui/notices.php:762 +#: inc/admin/ui/notices.php:757 msgid "Turn on Remove Unused CSS" msgstr "" -#: inc/admin/ui/notices.php:780 +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "" -#: inc/admin/ui/notices.php:799 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "" -#: inc/admin/ui/notices.php:830 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "" -#: inc/admin/ui/notices.php:836 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "" @@ -2906,6 +2980,15 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "" + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -3380,11 +3463,11 @@ msgid "Import settings" msgstr "" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "" From f320a8207de4c4cbc539124937d2372397d2c0f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 15:19:41 -0400 Subject: [PATCH 06/24] fix tests --- inc/Addon/Cloudflare/Subscriber.php | 2 +- ...reconnect-cdn.php => addPreconnectCdn.php} | 14 +---------- .../CDN/Cloudflare/displayApoCacheNotice.php | 8 +++---- .../Cloudflare/displayApoCookiesNotice.php | 24 +++++++++---------- .../Subscriber/saveCloudflareOldSettings.php | 5 ++++ .../CDN/Subscriber/addPreconnectCdn.php | 18 ++++---------- 6 files changed, 28 insertions(+), 43 deletions(-) rename tests/Fixtures/inc/Engine/CDN/Subscriber/{add-preconnect-cdn.php => addPreconnectCdn.php} (59%) diff --git a/inc/Addon/Cloudflare/Subscriber.php b/inc/Addon/Cloudflare/Subscriber.php index 51938fc3fb..b38e3d31f6 100644 --- a/inc/Addon/Cloudflare/Subscriber.php +++ b/inc/Addon/Cloudflare/Subscriber.php @@ -253,7 +253,7 @@ public function purge_cache_no_die() { __( '%1$sWP Rocket:%2$s %3$s', 'rocket' ), '', '', - $connection->get_error_message() + $cf_purge->get_error_message() ), ]; } diff --git a/tests/Fixtures/inc/Engine/CDN/Subscriber/add-preconnect-cdn.php b/tests/Fixtures/inc/Engine/CDN/Subscriber/addPreconnectCdn.php similarity index 59% rename from tests/Fixtures/inc/Engine/CDN/Subscriber/add-preconnect-cdn.php rename to tests/Fixtures/inc/Engine/CDN/Subscriber/addPreconnectCdn.php index 1bca1ce6da..3b93dbbc4c 100644 --- a/tests/Fixtures/inc/Engine/CDN/Subscriber/add-preconnect-cdn.php +++ b/tests/Fixtures/inc/Engine/CDN/Subscriber/addPreconnectCdn.php @@ -7,15 +7,6 @@ HTML; -$legacy = << - - - - - -HTML; - return [ 'shouldAddPreconnectLinkForCdn' => [ 'cdn-cnames' => [ @@ -27,9 +18,6 @@ '8901.wicked-fast-cdn.com/path/to/my/files', 'https://another.cdn.com/with/a/path', ], - 'expected' => [ - 'new' => $new, - 'legacy' => $legacy, - ] + 'expected' => $new, ], ]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php index bfa22614ab..50d755f912 100644 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -50,9 +50,9 @@ 'status' => 'warning', 'dismiss_button' => true, 'action' => 'enable_separate_mobile_cache', - 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + 'message' => 'WP Rocket: You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' ], - 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', + 'notice_content' => 'WP Rocket: You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.', ] ], 'noEmailShouldDisplayNothing' => [ @@ -548,9 +548,9 @@ 'dismiss_button' => 'display_apo_cache_notice', 'dismissible' => '', 'action' => 'enable_separate_mobile_cache', - 'message' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + 'message' => 'WP Rocket: You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' ], - 'notice_content' => 'WP Rocket:You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' + 'notice_content' => 'WP Rocket: You have "Cache by Device Type" enabled on Cloudflare APO. If you judge it necessary for the website to have a different cache on mobile and desktop, we suggest you enable our “Separate Cache Files for Mobiles Devices” to ensure the generated cache is accurate.' ] ] ]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php index bd49d06d80..d489e7b9b1 100644 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -52,9 +52,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] ], 'noRightShouldDisplayNothing' => [ @@ -113,9 +113,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] ], 'noRightShouldDisplayNothing' => [ @@ -167,9 +167,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] ], 'emptyCookiesShouldDisplayNothing' => [ @@ -227,9 +227,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] ], 'mandatoryCookiesShouldDisplayNotice' => [ @@ -289,9 +289,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
+ 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] @@ -353,9 +353,9 @@ 'notice' => [ 'status' => 'warning', 'dismissible' => '', - 'message' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', + 'message' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ], - 'notice_content' => 'WP Rocket:You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
+ 'notice_content' => 'WP Rocket: You are using "Dynamic Cookies Cache". Cloudflare APO is not yet compatible with that feature.
You should either disable Cloudflare APO or check with the theme/plugin requiring the use of “Dynamic Cookies Cache” developers for an alternative way to be page-cache friendly. More info', ] diff --git a/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php b/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php index b4d15735d2..8b87e34636 100644 --- a/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php +++ b/tests/Integration/inc/Addon/Cloudflare/Subscriber/saveCloudflareOldSettings.php @@ -23,6 +23,9 @@ public function set_up() public function tear_down() { remove_filter( 'pre_http_request', [ $this, 'http_request'] ); $this->restoreWpFilter('pre_update_option_wp_rocket_settings'); + + delete_transient( 'rocket_cloudflare_is_api_keys_valid' ); + parent::tear_down(); } @@ -32,6 +35,8 @@ public function tear_down() { public function testShouldReturnExpected( $config, $expected ) { $this->response = $config['response']; + set_transient( 'rocket_cloudflare_is_api_keys_valid', 1 ); + add_filter( 'pre_http_request', [ $this, 'http_request'] ); $role = get_role( 'administrator' ); diff --git a/tests/Integration/inc/Engine/CDN/Subscriber/addPreconnectCdn.php b/tests/Integration/inc/Engine/CDN/Subscriber/addPreconnectCdn.php index a31e1b489f..c39b25a2d5 100644 --- a/tests/Integration/inc/Engine/CDN/Subscriber/addPreconnectCdn.php +++ b/tests/Integration/inc/Engine/CDN/Subscriber/addPreconnectCdn.php @@ -8,7 +8,6 @@ * @group CDN */ class Test_addPreconnectCdn extends TestCase { - public function set_up() { $this->unregisterAllCallbacksExcept( 'wp_resource_hints', 'add_preconnect_cdn', 10 ); @@ -22,7 +21,7 @@ public function tear_down() { } /** - * @dataProvider providerTestData + * @dataProvider configTestData */ public function testShouldAddPreconnectCdn($cnames, $expected) { $this->cnames = $cnames; @@ -32,17 +31,10 @@ public function testShouldAddPreconnectCdn($cnames, $expected) { ob_start(); wp_resource_hints(); - $expected_str = $expected['new']; - if ( substr( get_bloginfo( 'version' ), 0, 3 ) === '5.7') { - $expected_str = $expected['legacy']; - } - $this->assertSame( - $this->format_the_html($expected_str), - $this->format_the_html(ob_get_clean()) - ); - } - public function providerTestData() { - return $this->getTestData( __DIR__, 'add-preconnect-cdn' ); + $this->assertStringContainsString( + $this->format_the_html( $expected ), + $this->format_the_html( ob_get_clean() ) + ); } } From 446a7845a4c034e078c3483514b3df49b0b46d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 15:50:34 -0400 Subject: [PATCH 07/24] add after_rocket_clean_file to CF partial clear action --- inc/ThirdParty/Plugins/CDN/Cloudflare.php | 1 + 1 file changed, 1 insertion(+) diff --git a/inc/ThirdParty/Plugins/CDN/Cloudflare.php b/inc/ThirdParty/Plugins/CDN/Cloudflare.php index f0e77ca249..5090f3978e 100644 --- a/inc/ThirdParty/Plugins/CDN/Cloudflare.php +++ b/inc/ThirdParty/Plugins/CDN/Cloudflare.php @@ -357,6 +357,7 @@ public function add_rocket_purge_url_to_purge_url( $urls, $post_id ) { */ public function add_after_rocket_clean_to_actions( $actions ) { $actions[] = 'after_rocket_clean_post'; + $actions[] = 'after_rocket_clean_file'; return $actions; } From 57c75ac4e6f7cfce4e56dcddbda338e7b2f9198b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 16:00:02 -0400 Subject: [PATCH 08/24] update tests --- .../Cloudflare/addAfterRocketCleanToActions.php | 10 ++++------ .../Cloudflare/addAfterRocketCleanToActions.php | 3 +++ .../CDN/Cloudflare/addCleanDomainOnPurge.php | 3 +++ .../CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php | 3 +++ .../CDN/Cloudflare/disableCloudflareOption.php | 3 +++ .../CDN/Cloudflare/displayApoCacheNotice.php | 5 +++-- .../CDN/Cloudflare/displayApoCookiesNotice.php | 4 +++- .../Cloudflare/displayServerPushingModeNotice.php | 8 ++++---- .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 3 +++ .../Plugins/CDN/Cloudflare/updateAddonField.php | 3 +++ .../CDN/Cloudflare/addCleanDomainOnPurge.php | 5 +++-- .../CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php | 5 +++-- .../CDN/Cloudflare/disableCloudflareOption.php | 5 +++-- .../CDN/Cloudflare/displayApoCacheNotice.php | 3 ++- .../CDN/Cloudflare/displayApoCookiesNotice.php | 14 +++++++------- .../Cloudflare/displayServerPushingModeNotice.php | 4 ++-- .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 5 +++-- .../Plugins/CDN/Cloudflare/updateAddonField.php | 9 ++++++--- 18 files changed, 61 insertions(+), 34 deletions(-) diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php index dd1b8be9e1..4bfef59ade 100644 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -1,12 +1,10 @@ [ - 'config' => [ - - ], + 'config' => [], 'expected' => [ - 'after_rocket_clean_post' - ] + 'after_rocket_clean_post', + 'after_rocket_clean_file', + ], ], - ]; diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php index 933567653b..cd4694702a 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -6,6 +6,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_after_rocket_clean_to_actions + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addAfterRocketCleanToActions extends TestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php index 40668f89e3..2c698dd65f 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php @@ -6,6 +6,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_clean_domain_on_purge + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addCleanDomainOnPurge extends TestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php index 5750330575..9e13a12f05 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php @@ -6,6 +6,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_rocket_purge_url_to_purge_url + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addRocketPurgeUrlToPurgeUrl extends TestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php index 09833ec501..ebf2e1a076 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -9,6 +9,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::disable_cloudflare_option + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_disableCloudflareOption extends TestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php index 99c3f737a1..ff715ab462 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -3,12 +3,13 @@ namespace WP_Rocket\Tests\Integration\inc\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Tests\Integration\AdminTestCase; -use WP_Rocket\Tests\Integration\TestCase; -use function Crontrol\Schedule\add; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_apo_cache_notice + * * @group AdminOnly + * @group ThirdParty + * @group CloudflarePlugin */ class Test_displayApoCacheNotice extends AdminTestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php index d877bb8736..49fd5c926a 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -3,11 +3,13 @@ namespace WP_Rocket\Tests\Integration\inc\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Tests\Integration\AdminTestCase; -use WP_Rocket\Tests\Integration\TestCase; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_apo_cookies_notice + * * @group AdminOnly + * @group ThirdParty + * @group CloudflarePlugin */ class Test_displayApoCookiesNotice extends AdminTestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php index d9c3fdc65a..4065823df4 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php @@ -2,15 +2,15 @@ namespace WP_Rocket\Tests\Integration\inc\ThirdParty\Plugins\CDN\Cloudflare; -use Mockery; use Brain\Monkey\Functions; use WP_Rocket\Tests\Integration\TestCase; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_server_pushing_mode_notice * - * @group AdminOnly - * @group ThirdParty + * @group AdminOnly + * @group ThirdParty + * @group CloudflarePlugin */ class Test_DisplayServerPushingModeNotice extends TestCase{ @@ -81,4 +81,4 @@ public function rucss() { public function combine_css() { return $this->combine_css; } -} \ No newline at end of file +} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php index 58082cad0e..02f37c79d5 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -6,6 +6,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::hide_addon_radio + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_hideAddonRadio extends TestCase { diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php index ad9e7afc70..c89fbb93de 100644 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php +++ b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -6,6 +6,9 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::update_addon_field + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_updateAddonField extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php index a0f64393cf..8e0fcbc0db 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php @@ -7,12 +7,13 @@ use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; - - use WP_Rocket\Tests\Unit\TestCase; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_clean_domain_on_purge + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addCleanDomainOnPurge extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php index e7906799d7..34d9a8e1a5 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php @@ -7,13 +7,14 @@ use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; - - use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_rocket_purge_url_to_purge_url + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addRocketPurgeUrlToPurgeUrl extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php index 5393067efa..5232a172c8 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -7,13 +7,14 @@ use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; - - use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::disable_cloudflare_option + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_disableCloudflareOption extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php index c5845dd2eb..c191ae555c 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -13,7 +13,8 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_apo_cache_notice * - * @group CloudflareCDN + * @group ThirdParty + * @group CloudflarePlugin */ class Test_displayApoCacheNotice extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php index aafb3fe00a..178f10c8de 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -2,20 +2,19 @@ namespace WP_Rocket\Tests\Unit\inc\ThirdParty\Plugins\CDN\Cloudflare; -use CoquardcyrWpArticleScheduler\Dependencies\League\Plates\Template\Func; use Mockery; use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; - - use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; -use Brain\Monkey\Filters; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_apo_cookies_notice + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_displayApoCookiesNotice extends TestCase { @@ -41,6 +40,10 @@ class Test_displayApoCookiesNotice extends TestCase { public function set_up() { parent::set_up(); + + $this->stubEscapeFunctions(); + $this->stubTranslationFunctions(); + $this->options = Mockery::mock(Options_Data::class); $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); @@ -53,9 +56,6 @@ public function set_up() { */ public function testShouldDoAsExpected( $config, $expected ) { - Functions\when('esc_url')->returnArg(); - Functions\when('esc_attr')->returnArg(); - $this->stubTranslationFunctions(); Functions\when('home_url')->justReturn($config['home_url']); Functions\when('get_option')->alias(function ($name) use ($config) { if('cloudflare_api_email' === $name) { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php index 502c5fb835..13422328cb 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php @@ -13,8 +13,8 @@ /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_server_pushing_mode_notice * - * @group ThirdParty - * @uses ::rocket_get_constant + * @group ThirdParty + * @group CloudflarePlugin */ class Test_DisplayServerPushingModeNotice extends TestCase{ private $options; diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php index cab3665f69..7dec85b313 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -7,13 +7,14 @@ use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; - - use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::hide_addon_radio + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_hideAddonRadio extends TestCase { diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php index f8498211ec..db38f212d6 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -7,13 +7,14 @@ use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; - - use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::update_addon_field + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_updateAddonField extends TestCase { @@ -39,6 +40,9 @@ class Test_updateAddonField extends TestCase { public function set_up() { parent::set_up(); + + $this->stubTranslationFunctions(); + $this->options = Mockery::mock(Options_Data::class); $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); @@ -51,7 +55,6 @@ public function set_up() { */ public function testShouldReturnAsExpected( $config, $expected ) { - $this->stubTranslationFunctions(); Functions\expect('is_plugin_active')->with('cloudflare/cloudflare.php')->andReturn($config['plugin_active']); Functions\when('get_option')->alias(function ($name) use ($config) { if('cloudflare_api_email' === $name) { From ac291bcd49476f44c8a15f45477644ff0085f19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Mon, 12 Jun 2023 16:00:22 -0400 Subject: [PATCH 09/24] update test --- .../Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php index 38e82d158c..f0e8645f96 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php @@ -7,12 +7,13 @@ use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; - - use WP_Rocket\Tests\Unit\TestCase; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::add_after_rocket_clean_to_actions + * + * @group ThirdParty + * @group CloudflarePlugin */ class Test_addAfterRocketCleanToActions extends TestCase { From 1e75246550790bb69bb286e09931f217cdfa4ca0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 08:01:44 +0000 Subject: [PATCH 10/24] Translate languages/rocket.pot in fr_FR 100% translated source file: 'languages/rocket.pot' on 'fr_FR'. --- languages/rocket-fr_FR.po | 360 ++++++++++++++++++++++++-------------- 1 file changed, 232 insertions(+), 128 deletions(-) diff --git a/languages/rocket-fr_FR.po b/languages/rocket-fr_FR.po index 47b9b129ad..12e8b09c5d 100644 --- a/languages/rocket-fr_FR.po +++ b/languages/rocket-fr_FR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-24 12:23-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2019-08-26 15:14+0000\n" "Last-Translator: Romain • WP Rocket , 2023\n" "Language-Team: French (France) (https://app.transifex.com/wp-media/teams/18133/fr_FR/)\n" @@ -51,19 +51,19 @@ msgstr "" "Votre site est hébergé chez %s, nous avons activé l'auto-purge Varnish pour " "la compatibilité." -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "Cloudflare n'a fourni aucune réponse. Veuillez réessayer plus tard." -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "L’email ou l’API key Cloudflare incorrect." -#: inc/Addon/Cloudflare/APIClient.php:322 -#: inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 -#: inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 +#: inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 +#: inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 #: inc/deprecated/3.5.php:129 inc/deprecated/3.5.php:157 @@ -72,11 +72,11 @@ msgstr "L’email ou l’API key Cloudflare incorrect." msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "Lisez la %1$sdocumentation%2$s pour plus d'indication." -#: inc/Addon/Cloudflare/APIClient.php:324 -#: inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 -#: inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 +#: inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 +#: inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 #: inc/deprecated/3.5.php:131 inc/deprecated/3.5.php:159 #: inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 @@ -87,11 +87,11 @@ msgstr "" "https://fr.docs.wp-rocket.me/article/247-utiliser-wp-rocket-avec-" "cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "Le Zone ID de Cloudflare est incorrect." -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s " @@ -100,93 +100,114 @@ msgstr "" "L'email Cloudflare et/ou l’API Key ne sont pas définis. Lisez la " "%1$sdocumentation%2$s pour plus d'informations." -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "Il manque le Zone ID de Cloudflare " -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "Il semble que votre domaine ne soit pas configuré sur Cloudflare." -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" -msgstr "WP Rocket : %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" +msgstr "jours" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." -msgstr "" -"WP Rocket : Le cache Cloudflare a été purgé avec succès." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" +msgstr "secondes" -#: inc/Addon/Cloudflare/Subscriber.php:364 -#: inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 -#: inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 -#: inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 -#: inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 -#: inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " -msgstr "WP Rocket :" +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" +msgstr "minutes" + +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "heures" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Subscriber.php:224 +#: inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "%1$sWP Rocket :%2$s %3$s" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "%1$sWP Rocket :%2$s le cache de Cloudflare a été purgé avec succès." + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "Erreur du mode développement de CloudFlare : %s" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "Mode développement de CloudFlare %s" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "Erreur du niveau de cache de CloudFlare : %s" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" -msgstr "Standard" +msgid "standard" +msgstr "standard" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "Niveau de cache de Cloudflare défini à %s" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "Erreur de la minification CloudFlare : %s" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "Minification CloudFlare %s" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "Erreur du Rocket Loader de CloudFlare : %s" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "Rocket Loader de CloudFlare %s" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "Erreur du cache navigateur CloudFlare : %s" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 +#, php-format +msgid "Cloudflare browser cache set to %s" +msgstr "Cache navigateur de Cloudflare réglé sur %s " + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "%1$sWP Rocket :%2$s Réglages optimaux activés pour Cloudflare :" + +#: inc/Addon/Cloudflare/Subscriber.php:521 #, php-format -msgid "Cloudflare browser cache set to %s seconds" -msgstr "Cache navigateur de Cloudflare défini à %s secondes" +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" +"%1$sWP Rocket :%2$s Réglages optimaux désactivés pour Cloudflare, retour aux" +" réglages précédents :" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " +msgstr "WP Rocket :" #: inc/Addon/Sucuri/Subscriber.php:95 #, php-format @@ -1624,16 +1645,16 @@ msgstr "" "Ce sont de simples fonctionnalités complémentaires étendant les option déjà " "disponibles." -#: inc/Engine/Admin/Settings/Page.php:1818 -#: inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 +#: inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "CloudFlare" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "Intégrez votre compte Cloudflare avec cet add-on" -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such " "as clearing the Cloudflare cache and enabling optimal settings with WP " @@ -1643,15 +1664,26 @@ msgstr "" "CloudFlare pour pouvoir purger le cache Cloudflare et bénéficier des " "réglages optimaux pour WP Rocket." -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just " +"activate the official Cloudflare plugin and configure it. WP Rocket will " +"automatically enable compatibility." +msgstr "" +"%1$sVous envisagez d'utiliser Automatic Platform Optimization (APO) ?%2$s Il" +" suffit d'activer le plugin officiel Cloudflare et de le configurer. WP " +"Rocket activera automatiquement la compatibilité." + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "Varnish" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "Si votre serveur utilise Varnish, vous devez activer cet add-on" -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " @@ -1661,15 +1693,15 @@ msgstr "" "pour vous assurer que le contenu soit toujours à jour.
%1$sEn savoir " "plus%2$s" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "Compatibilité WebP" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "Améliore la compatibilité des navigateurs pour les images WebP." -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1682,11 +1714,11 @@ msgstr "" "d'images WebP pour vous. Pour créer des images WebP, nous vous recommandons " "%1$sImagify%2$s. %3$sPlus d'infos%2$s" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "Effacez le cache Sucuri lorsque le cache de WP Rocket est effacé." -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is " "cleared." @@ -1694,48 +1726,48 @@ msgstr "" "Fournissez votre clé API pour vider le cache Sucuri lorsque le cache de WP " "Rocket est effacé." -#: inc/Engine/Admin/Settings/Page.php:1943 -#: inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 +#: inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "Sucuri" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "Synchronisez le cache Sucuri avec cet add-on." -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "Accès CloudFlare" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "Réglages CloudFlare" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "Clé API globale :" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "Trouver votre clé API" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "E-mail du compte" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "Zone ID" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "Mode développement" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " @@ -1744,11 +1776,11 @@ msgstr "" "Active temporairement le mode développement sur votre site. Ce réglage se " "désactivera automatiquement après 3 heures. %1$sEn savoir plus%2$s" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "Réglages optimaux" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." @@ -1756,11 +1788,11 @@ msgstr "" "Améliore automatiquement votre configuration Cloudflare pour le temps de " "chargement, les notes de performance et la compatibilité." -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "Protocol relatif" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static " "files (CSS, JS, images) will be rewritten to use // instead of http:// or " @@ -1770,11 +1802,11 @@ msgstr "" "URLs de vos fichiers statiques (CSS, JS, images) seront ré-écrites pour " "utiliser // au lieu de http:// ou https:// ." -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "Accès Sucuri" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 " @@ -1783,7 +1815,7 @@ msgstr "" "La clé API du pare-feu (pour cette extension) doit être au format {32 " "caractères}/{32 caractères} :" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "Trouver votre clé API" @@ -1792,7 +1824,7 @@ msgstr "Trouver votre clé API" msgid "Upload file and import settings" msgstr "Envoyer le fichier et importer les réglages" -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format " "{32 characters}/{32 characters}." @@ -1800,12 +1832,12 @@ msgstr "" "Add-on Sucuri : La clé API pour le Sucuri firewall doit être au format " "{32 caractères}/{32 caractères}." -#: inc/Engine/Admin/Settings/Settings.php:465 +#: inc/Engine/Admin/Settings/Settings.php:452 #: inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "Réglages enregistrés." -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved " "because it disables caching and optimizations for every page on your site." @@ -2446,7 +2478,7 @@ msgstr "Mettez à niveau maintenant" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:744 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "Ne pas tenir compte de cet avertissement." @@ -2781,7 +2813,7 @@ msgstr "" "Kinsta par le biais de votre compte %1$sMyKinsta%2$s pour résoudre ce " "problème." -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " @@ -2791,6 +2823,71 @@ msgstr "" "Supprimer les ressources CSS inutilisées et Combiner les fichier CSS. Nous " "vous recommandons vivement de la désactiver." +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled " +"Cloudflare auto-purge for compatibility. If you have APO activated, it is " +"also compatible." +msgstr "" +"Votre site utilise le plugin officiel Cloudflare. Nous avons activé la purge" +" automatique de Cloudflare pour des raisons de compatibilité. Si vous avez " +"activé APO, c'est également compatible." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to " +"ensure content is always up-to-date." +msgstr "" +"Le cache Varnish sera purgé à chaque fois que WP Rocket purgera son cache " +"pour que le contenu soit toujours à jour." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO " +"is not yet compatible with that feature." +msgstr "" +"%1$sWP Rocket :%2$s Vous utilisez \" le cache des cookies dynamiques\". " +"Cloudflare APO n'est pas encore compatible avec cette fonctionnalité." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative " +"way to be page-cache friendly. %1$sMore info%2$s" +msgstr "" +"Vous devez soit désactiver Cloudflare APO, soit vérifier auprès des " +"développeurs du thème/plugin nécessitant l'utilisation de \"cache des " +"cookies dynamiques\" qu'il existe une autre solution pour respecter la mise " +"en cache des pages. %1$sPlus d'infos%2$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile " +"devices\". You need to activate \"Cache by Device Type\" %3$ssetting%5$s on " +"Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" +"%1$sWP Rocket :%2$s Vous utilisez l'option \"Créer un fichier de cache à " +"part pour les mobiles\". Vous devez %3$sl'option%5$s \"Cache by Device " +"Type\" sur Cloudflare APO pour servir la bonne version du cache. %4$sPlus " +"d'infos%5$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare " +"APO. If you judge it necessary for the website to have a different cache on " +"mobile and desktop, we suggest you enable our “Separate Cache Files for " +"Mobiles Devices” to ensure the generated cache is accurate." +msgstr "" +"%1$sWP Rocket :%2$s Vous avez activé la fonction \"Cache by Device Type\" " +"sur Cloudflare APO. Si vous jugez nécessaire que le site web ait un cache " +"différent pour les mobiles et les ordinateurs, nous vous suggérons d'activer" +" notre option \"Créer un fichier de cache à part pour les mobiles\" afin de " +"garantir la bonne version du cache." + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -3013,7 +3110,7 @@ msgstr[2] "Les patterns suivants sont invalides et ont été supprimés :" msgid "More info" msgstr "Plus d'infos" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:753 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -3083,15 +3180,7 @@ msgstr "" "%s: Une ou plusieurs extensions ont été activées ou " "désactivées, videz le cache si elles influent sur le front de votre site." -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not " -"be active at the same time." -msgstr "" -"l’Add-on Cloudflare de WP Rocket fournit les même fonctionnalités. Ils ne " -"peuvent pas être activés en même temps." - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this " @@ -3100,11 +3189,11 @@ msgstr "" "%s: Les extensions suivantes ne sont pas compatibles avec " "WP Rocket et vont générer des résultats inattendus :" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "Désactiver" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in " "WP Rocket from working correctly. Please deactivate it if you have problems." @@ -3113,7 +3202,7 @@ msgstr "" "options de WP Rocket de fonctionner correctement. Veuillez le désactiver si " "vous avez des problèmes." -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket " @@ -3124,7 +3213,7 @@ msgstr "" " WP Rocket. Veuillez régler Endurance Cache sur Off (Niveau 0) sur la page " "%1$sRéglages > Général%2$s pour éviter tout problème." -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work " @@ -3133,7 +3222,7 @@ msgstr "" "%1$s: Une structure de permalien personnalisée est requise pour que WP " "Rocket fonctionne. %2$sRendez-vous aux réglages des permaliens%3$s" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "" "%s could not modify the .htaccess file due to missing writing permissions." @@ -3141,14 +3230,14 @@ msgstr "" "%s n'a pas pu modifier le fichier .htaccess en raison d'un défaut de " "permissions en écriture." -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:842 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" "Pour résoudre le problème : %1$sComment rendre les fichiers systèmes " "accessible à l'écriture%2$s" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:844 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" @@ -3156,7 +3245,7 @@ msgstr "" "https://fr.docs.wp-rocket.me/article/945-fichiers-systemes-accessible-" "ecriture/?utm_source=wp_plugin&utm_medium=wp_rocket" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function " "correctly." @@ -3164,7 +3253,7 @@ msgstr "" "Ne vous inquiétez pas, la mise en cache des pages et les réglages de WP " "Rocket fonctionneront toujours correctement." -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" @@ -3172,7 +3261,7 @@ msgstr "" "Pour des performances optimales, il est recommandé d'ajouter les lignes " "suivantes dans votre fichier .htaccess (pas obligatoire) :" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your " @@ -3181,7 +3270,7 @@ msgstr "" "%1$s est prêt à décoller ! %2$sTestez votre temps de chargement%4$s, ou " "jetez un oeil aux %3$sréglages%4$s." -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this" " website?" @@ -3189,15 +3278,15 @@ msgstr "" "Autorisez-vous WP Rocket à collecter les données de diagnostic non sensibles" " de votre site web ?" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "Cela nous aiderait à améliorer WP Rocket pour vous dans le futur." -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "Quelles infos collecterons-nous ?" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email " @@ -3209,66 +3298,71 @@ msgstr "" "transmettra jamais de noms de domaine ou d'adresses email (sauf pour la " "validation de licence), d'adresses IP ou de clés API tierces." -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "Oui, j'autorise" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "Non, merci" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "Merci !" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "WP Rocket collecte désormais ces données sur votre site web :" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "%s : Cache vidé." -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "%s : Cache Article vidé." -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "%s : Cache Terme vidé." -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "%s : Cache Utilisateur vidé." -#: inc/admin/ui/notices.php:756 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "Arrêter le préchargement" -#: inc/admin/ui/notices.php:762 +#: inc/admin/ui/notices.php:757 msgid "Turn on Remove Unused CSS" msgstr "Activer l'option Supprimer les ressources CSS inutilisées" -#: inc/admin/ui/notices.php:780 +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "" +"Activer “Créer un fichier de cache à part pour les mobiles” maintenant" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "Forcer la désactivation" -#: inc/admin/ui/notices.php:799 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "Le code suivant aurait dû être écrit sur ce fichier :" -#: inc/admin/ui/notices.php:830 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "" "%s ne peut pas se configurer seul en raison de l'absence de permissions en " "écriture." -#: inc/admin/ui/notices.php:836 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "Fichier/dossier affecté : %s" @@ -3508,6 +3602,16 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "La connexion à CloudFlare a échoué" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "WP Rocket : %s" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "" +"WP Rocket : Le cache Cloudflare a été purgé avec succès." + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -4048,11 +4152,11 @@ msgid "Import settings" msgstr "Importer les réglages" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "État de l'Add-on" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "Modifier les options" From b3ca5bd38119b1f214715d19d8d8d48c8d088607 Mon Sep 17 00:00:00 2001 From: Cyrille C <18537428+CrochetFeve0251@users.noreply.github.com> Date: Tue, 13 Jun 2023 10:10:47 +0200 Subject: [PATCH 11/24] Added thirdparty class for translatepress (#5896) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vasilis Manthos Co-authored-by: Rémy Perona Co-authored-by: Michael Lee --- composer.json | 6 ++- inc/Addon/Cloudflare/Subscriber.php | 8 ++-- inc/Plugin.php | 1 + .../Plugins/I18n/TranslatePress.php | 41 +++++++++++++++++++ inc/ThirdParty/ServiceProvider.php | 4 +- tests/Fixtures/classes/TRP_Settings.php | 10 +++++ tests/Fixtures/classes/TRP_Url_Converter.php | 17 ++++++++ .../I18n/TranslatePress/detectHomepage.php | 30 ++++++++++++++ tests/Integration/bootstrap.php | 5 +++ .../I18n/TranslatePress/detectHomepage.php | 23 +++++++++++ tests/Unit/bootstrap.php | 2 + .../I18n/TranslatePress/detectHomepage.php | 40 ++++++++++++++++++ 12 files changed, 180 insertions(+), 7 deletions(-) create mode 100644 inc/ThirdParty/Plugins/I18n/TranslatePress.php create mode 100644 tests/Fixtures/classes/TRP_Settings.php create mode 100644 tests/Fixtures/classes/TRP_Url_Converter.php create mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php create mode 100644 tests/Integration/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php create mode 100644 tests/Unit/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php diff --git a/composer.json b/composer.json index 586657b4d2..2c51516d68 100644 --- a/composer.json +++ b/composer.json @@ -116,7 +116,7 @@ }, "scripts": { "test-unit": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist", - "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --exclude-group AdminOnly,BeaverBuilder,Elementor,Hummingbird,WithSmush,WithWoo,WithAmp,WithAmpAndCloudflare,WithSCCSS,Cloudways,Dreampress,Cloudflare,CloudflareAdmin,Multisite,WPEngine,SpinUpWP,WordPressCom,O2Switch,PDFEmbedder,PDFEmbedderPremium,PDFEmbedderSecure,Godaddy,LiteSpeed,RevolutionSlider,WordFence,ConvertPlug,Kinsta,Jetpack,RankMathSEO,AllInOneSeoPack,SEOPress,TheSEOFramework,OneCom,RocketLazyLoad,WPXCloud,TheEventsCalendar,Perfmatters,RapidLoad,ProIsp,WPGeotargeting", + "test-integration": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --exclude-group AdminOnly,BeaverBuilder,Elementor,Hummingbird,WithSmush,WithWoo,WithAmp,WithAmpAndCloudflare,WithSCCSS,Cloudways,Dreampress,Cloudflare,CloudflareAdmin,Multisite,WPEngine,SpinUpWP,WordPressCom,O2Switch,PDFEmbedder,PDFEmbedderPremium,PDFEmbedderSecure,Godaddy,LiteSpeed,RevolutionSlider,WordFence,ConvertPlug,Kinsta,Jetpack,RankMathSEO,AllInOneSeoPack,SEOPress,TheSEOFramework,OneCom,RocketLazyLoad,WPXCloud,TheEventsCalendar,Perfmatters,RapidLoad,ProIsp,TranslatePress,WPGeotargeting", "test-integration-adminonly": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group AdminOnly", "test-integration-bb": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group BeaverBuilder", "test-integration-cloudflare": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group Cloudflare", @@ -157,6 +157,7 @@ "test-integration-rapidload": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group RapidLoad", "test-integration-proisp": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group ProIsp", "test-integration-wp-geotargeting": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group WPGeotargeting", + "test-integration-translatepress": "\"vendor/bin/phpunit\" --testsuite integration --colors=always --configuration tests/Integration/phpunit.xml.dist --group TranslatePress", "run-tests": [ "@test-unit", "@test-integration", @@ -197,7 +198,8 @@ "@test-integration-perfmatters", "@test-integration-rapidload", "@test-integration-proisp", - "@test-integration-wp-geotargeting" + "@test-integration-wp-geotargeting", + "@test-integration-translatepress" ], "run-stan": "vendor/bin/phpstan analyze --memory-limit=2G --no-progress", "install-codestandards": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run", diff --git a/inc/Addon/Cloudflare/Subscriber.php b/inc/Addon/Cloudflare/Subscriber.php index b38e3d31f6..d6476e1715 100644 --- a/inc/Addon/Cloudflare/Subscriber.php +++ b/inc/Addon/Cloudflare/Subscriber.php @@ -219,8 +219,8 @@ public function purge_cache_no_die() { if ( is_wp_error( $connection ) ) { $cf_purge_result = [ 'result' => 'error', - // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. 'message' => sprintf( + // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. __( '%1$sWP Rocket:%2$s %3$s', 'rocket' ), '', '', @@ -237,19 +237,19 @@ public function purge_cache_no_die() { $cf_purge = $this->cloudflare->purge_cloudflare(); $cf_purge_result = [ 'result' => 'success', - // translators: %1$s = , %2$s = . 'message' => sprintf( + // translators: %1$s = , %2$s = . __( '%1$sWP Rocket:%2$s Cloudflare cache successfully purged.', 'rocket' ), '', - '', + '
' ), ]; if ( is_wp_error( $cf_purge ) ) { $cf_purge_result = [ 'result' => 'error', - // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. 'message' => sprintf( + // translators: %1$s = , %2$s = , %3$s = CloudFare API return message. __( '%1$sWP Rocket:%2$s %3$s', 'rocket' ), '', '', diff --git a/inc/Plugin.php b/inc/Plugin.php index 698b5523f8..33fb3aab9a 100644 --- a/inc/Plugin.php +++ b/inc/Plugin.php @@ -357,6 +357,7 @@ private function init_common_subscribers() { 'admin_api_subscriber', 'perfmatters', 'rapidload', + 'translatepress', 'themify', 'wpgeotargeting', ]; diff --git a/inc/ThirdParty/Plugins/I18n/TranslatePress.php b/inc/ThirdParty/Plugins/I18n/TranslatePress.php new file mode 100644 index 0000000000..8feb547c98 --- /dev/null +++ b/inc/ThirdParty/Plugins/I18n/TranslatePress.php @@ -0,0 +1,41 @@ + [ 'detect_homepage', 10, 2 ], + ]; + } + + /** + * Detect homepage. + * + * @param string $home_url home url. + * @param string $url url of current page. + * @return string + */ + public function detect_homepage( $home_url, $url ) { + + $url_converter = new TRP_Url_Converter( ( new TRP_Settings() )->get_settings() ); + $language = $url_converter->get_lang_from_url_string( $url ); + + $url_language = $url_converter->get_url_for_language( $language, home_url() ); + + return untrailingslashit( $url ) === untrailingslashit( $url_language ) ? $url : $home_url; + } +} diff --git a/inc/ThirdParty/ServiceProvider.php b/inc/ThirdParty/ServiceProvider.php index e990d85ee9..2b3ef2cba8 100644 --- a/inc/ThirdParty/ServiceProvider.php +++ b/inc/ThirdParty/ServiceProvider.php @@ -13,6 +13,7 @@ use WP_Rocket\ThirdParty\Plugins\ConvertPlug; use WP_Rocket\ThirdParty\Plugins\Ecommerce\BigCommerce; use WP_Rocket\ThirdParty\Plugins\Ecommerce\WooCommerceSubscriber; +use WP_Rocket\ThirdParty\Plugins\I18n\TranslatePress; use WP_Rocket\ThirdParty\Plugins\I18n\WPML; use WP_Rocket\ThirdParty\Plugins\InlineRelatedPosts; use WP_Rocket\ThirdParty\Plugins\ModPagespeed; @@ -99,6 +100,7 @@ class ServiceProvider extends AbstractServiceProvider { 'the_events_calendar', 'perfmatters', 'rapidload', + 'translatepress', 'wpgeotargeting', ]; @@ -252,7 +254,7 @@ public function register() { ->addTag( 'common_subscriber' ); $this->getContainer() ->share( 'rapidload', RapidLoad::class ); - + $this->getContainer()->share( 'translatepress', TranslatePress::class ); $this->getContainer()->share( 'wpgeotargeting', WPGeotargeting::class ); } } diff --git a/tests/Fixtures/classes/TRP_Settings.php b/tests/Fixtures/classes/TRP_Settings.php new file mode 100644 index 0000000000..5e0a2fde33 --- /dev/null +++ b/tests/Fixtures/classes/TRP_Settings.php @@ -0,0 +1,10 @@ + [ + 'config' => [ + 'home_url' => 'http://example.org/', + 'url' => 'http://example.org/fr', + 'language' => 'fr', + 'url_language' => 'http://example.org/fr', + ], + 'expected' => [ + 'url' => 'http://example.org/fr', + 'language' => 'fr', + 'result' => 'http://example.org/fr', + ] + ], + 'DifferentURLShouldKeepOriginal' => [ + 'config' => [ + 'home_url' => 'http://example.org/', + 'url' => 'http://example.org/fr', + 'language' => 'fr', + 'url_language' => 'http://example.org/fr2', + ], + 'expected' => [ + 'url' => 'http://example.org/fr', + 'language' => 'fr', + 'result' => 'http://example.org/', + ] + ], + +]; diff --git a/tests/Integration/bootstrap.php b/tests/Integration/bootstrap.php index 605b8f6c46..b3573dc4a9 100644 --- a/tests/Integration/bootstrap.php +++ b/tests/Integration/bootstrap.php @@ -16,6 +16,11 @@ tests_add_filter( 'muplugins_loaded', function() { + if ( BootstrapManager::isGroup( 'TranslatePress' ) ) { + require WP_ROCKET_TESTS_FIXTURES_DIR . '/classes/TRP_Settings.php'; + require WP_ROCKET_TESTS_FIXTURES_DIR . '/classes/TRP_Url_Converter.php'; + } + if ( BootstrapManager::isGroup( 'WithSCCSS' ) ) { // Load Simple Custom CSS plugin. require WP_ROCKET_PLUGIN_ROOT . '/vendor/wpackagist-plugin/simple-custom-css/simple-custom-css.php'; diff --git a/tests/Integration/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php b/tests/Integration/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php new file mode 100644 index 0000000000..6a3409d74b --- /dev/null +++ b/tests/Integration/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php @@ -0,0 +1,23 @@ +assertSame($expected['result'], apply_filters('rocket_rucss_is_home_url', $config['home_url'], $config['url'])); + } +} diff --git a/tests/Unit/bootstrap.php b/tests/Unit/bootstrap.php index fb52ef3f16..ef61a2a6e5 100644 --- a/tests/Unit/bootstrap.php +++ b/tests/Unit/bootstrap.php @@ -45,6 +45,8 @@ function load_original_files_before_mocking() { '/WP_Rewrite.php', '/inc/ThirdParty/Plugins/SEO/RankMathSEO/fixtures.php', '/inc/ThirdParty/Plugins/SEO/TheSEOFramework/fixtures.php', + '/classes/TRP_Url_Converter.php', + '/classes/TRP_Settings.php', ]; foreach ( $fixtures as $file ) { require_once WP_ROCKET_TESTS_FIXTURES_DIR . $file; diff --git a/tests/Unit/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php b/tests/Unit/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php new file mode 100644 index 0000000000..e214215132 --- /dev/null +++ b/tests/Unit/inc/ThirdParty/Plugins/I18n/TranslatePress/detectHomepage.php @@ -0,0 +1,40 @@ +translatepress = new TranslatePress(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnAsExpected( $config, $expected ) + { + TRP_Url_Converter::$url = $config['url_language']; + TRP_Url_Converter::$lang = $config['language']; + Functions\when('home_url')->justReturn('home_url'); + $this->assertSame($expected['result'], $this->translatepress->detect_homepage($config['home_url'], $config['url'])); + } +} From 8ce6b4f0c5e251bcd769f9af8809be2c0f057ea3 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 09:49:07 +0000 Subject: [PATCH 12/24] Translate languages/rocket.pot in pt_PT 100% translated source file: 'languages/rocket.pot' on 'pt_PT'. --- languages/rocket-pt_PT.po | 358 ++++++++++++++++++++++++-------------- 1 file changed, 230 insertions(+), 128 deletions(-) diff --git a/languages/rocket-pt_PT.po b/languages/rocket-pt_PT.po index 3cc13f66f3..faf62a20d2 100644 --- a/languages/rocket-pt_PT.po +++ b/languages/rocket-pt_PT.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-24 12:23-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2019-08-26 15:14+0000\n" "Last-Translator: Pedro Mendonça , 2023\n" "Language-Team: Portuguese (Portugal) (https://app.transifex.com/wp-media/teams/18133/pt_PT/)\n" @@ -50,20 +50,20 @@ msgstr "" "O seu site está alojado em %s, foi activada a limpeza automática do Varnish " "para garantir a compatibilidade." -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "A Cloudflare não forneceu nenhuma resposta. Tente mais tarde." -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "" "O endereço de email ou a chave de API da Cloudflare estão incorrectos." -#: inc/Addon/Cloudflare/APIClient.php:322 -#: inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 -#: inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 +#: inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 +#: inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 #: inc/deprecated/3.5.php:129 inc/deprecated/3.5.php:157 @@ -72,11 +72,11 @@ msgstr "" msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "Leia a %1$sdocumentação%2$s para mais informações." -#: inc/Addon/Cloudflare/APIClient.php:324 -#: inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 -#: inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 +#: inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 +#: inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 #: inc/deprecated/3.5.php:131 inc/deprecated/3.5.php:159 #: inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 @@ -87,11 +87,11 @@ msgstr "" "https://docs.wp-rocket.me/article/18-using-wp-rocket-with-" "cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "O ID da zona da Cloudflare está incorrecto." -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s " @@ -100,93 +100,114 @@ msgstr "" "O email e/ou a chave de API da Cloudflare não estão definidos. Leia a " "%1$sdocumentação%2$s para mais informações." -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "Falta o ID da zona da Cloudflare." -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "Parece que o seu domínio não está configurado na Cloudflare." -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" -msgstr "WP Rocket: %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" +msgstr "dias" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." -msgstr "" -"WP Rocket: A cache da Cloudflare foi limpa com sucesso." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" +msgstr "segundos" -#: inc/Addon/Cloudflare/Subscriber.php:364 -#: inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 -#: inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 -#: inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 -#: inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 -#: inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " -msgstr "WP Rocket: " +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" +msgstr "minutos" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "horas" + +#: inc/Addon/Cloudflare/Subscriber.php:224 +#: inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "%1$sWP Rocket:%2$s %3$s" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "%1$sWP Rocket:%2$s Cache da Cloudflare limpa com sucesso." + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "Erro no modo de desenvolvimento da Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "Modo de desenvolvimento da Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "Erro no nível de cache da Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" -msgstr "Padrão" +msgid "standard" +msgstr "padrão" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "Nível de cache da Cloudflare definido para %s" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "Erro na minificação da Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "Minificação da Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "Erro no Rocket Loader da Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "Rocket Loader da Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "Erro na cache do navegador da Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 #, php-format -msgid "Cloudflare browser cache set to %s seconds" -msgstr "Cache do navegador da Cloudflare definido para %s segundos" +msgid "Cloudflare browser cache set to %s" +msgstr "Cache do navegador da Cloudflare definida como %s" + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "%1$sWP Rocket:%2$s Opções ideais activadas para a Cloudflare:" + +#: inc/Addon/Cloudflare/Subscriber.php:521 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" +"%1$sWP Rocket:%2$s Opções ideais desactivadas para a Cloudflare, foram " +"revertidas as opções anteriores:" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " +msgstr "WP Rocket: " #: inc/Addon/Sucuri/Subscriber.php:95 #, php-format @@ -1614,16 +1635,16 @@ msgstr "" "Os módulos do Rocket são funcionalidades complementares que aumentam as " "opções disponíveis." -#: inc/Engine/Admin/Settings/Page.php:1818 -#: inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 +#: inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "Integre a sua conta da Cloudflare com este módulo." -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such " "as clearing the Cloudflare cache and enabling optimal settings with WP " @@ -1633,15 +1654,26 @@ msgstr "" "opções tais como limpar a cache da Cloudflare e permitir a configuração " "ideal com o WP Rocket." -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just " +"activate the official Cloudflare plugin and configure it. WP Rocket will " +"automatically enable compatibility." +msgstr "" +"%1$sEstá a pensar usar a Automatic Platform Optimization (APO)?%2$s Basta " +"activar e o plugin oficial da Cloudflare e configurar. O WP Rocket activará " +"a compatibilidade automaticamente." + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "Varnish" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "Se utilizar o Varnish no seu servidor, deve activar este módulo." -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " @@ -1650,15 +1682,15 @@ msgstr "" "O cache do Varnish será limpa sempre que limpar a cache do WP Rocket para " "garantir que o conteúdo está sempre actualizado.
%1$sSaiba mais%2$s" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "Compatibilidade com WebP" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "Melhorar a compatibilidade dos navegadores para imagens WebP." -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1671,11 +1703,11 @@ msgstr "" " por si. Para criar imagens WebP recomendamos o %1$sImagify%2$s. %3$sMais " "informações%2$s" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "Limpar a cache do Sucuri ao limpar a cache do WP Rocket." -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is " "cleared." @@ -1683,48 +1715,48 @@ msgstr "" "Forneça a sua chave de API para limpar a cache do Sucuri ao limpar a cache " "do WP Rocket." -#: inc/Engine/Admin/Settings/Page.php:1943 -#: inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 +#: inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "Sucuri" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "Sincronize a cache do Sucuri com este módulo." -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "Credenciais da Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "Opções da Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "Chave global de API:" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "Consulte a sua chave de API" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "Email da conta" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "ID da zona" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "Modo de desenvolvimento" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " @@ -1733,11 +1765,11 @@ msgstr "" "Active temporariamente o modo de desenvolvimento no seu site. Esta opção " "desactiva-se automaticamente após 3 horas. %1$sSaiba mais%2$s" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "Configuração ideal" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." @@ -1745,11 +1777,11 @@ msgstr "" "Melhore automaticamente a sua configuração da Cloudflare para melhor " "velocidade, grau de desempenho e compatibilidade." -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "Protocolo relativo" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static " "files (CSS, JS, images) will be rewritten to use // instead of http:// or " @@ -1759,11 +1791,11 @@ msgstr "" "ficheiros estáticos (CSS, JS, imagens) serão reescritos para usar // em vez " "de http:// ou https://." -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "Credenciais do Sucuri" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 " @@ -1772,7 +1804,7 @@ msgstr "" "A chave de API da firewall (do plugin) tem de estar no formato {32 " "caracteres}/{32 caracteres}:" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "Consulte a sua chave de API" @@ -1781,7 +1813,7 @@ msgstr "Consulte a sua chave de API" msgid "Upload file and import settings" msgstr "Carregar ficheiro e importar opções" -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format " "{32 characters}/{32 characters}." @@ -1789,12 +1821,12 @@ msgstr "" "Módulo do Sucuri. A chave de API para a firewall do Sucuri tem de estar no " "formato {32 caracteres}/{32 caracteres}." -#: inc/Engine/Admin/Settings/Settings.php:465 +#: inc/Engine/Admin/Settings/Settings.php:452 #: inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "Opções guardadas." -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved " "because it disables caching and optimizations for every page on your site." @@ -2431,7 +2463,7 @@ msgstr "Actualize agora" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:744 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "Descartar esta notificação" @@ -2756,7 +2788,7 @@ msgstr "" "Kinsta e do WP Rocket. Para corrigir o problema, por favor entre em contacto" " com o suporte do Kinsta através da sua conta %1$sMyKinsta%2$s." -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " @@ -2766,6 +2798,70 @@ msgstr "" " de Remover CSS não utilizado e de Combinar ficheiros de CSS. Recomendamos " "vivamente a sua desactivação." +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled " +"Cloudflare auto-purge for compatibility. If you have APO activated, it is " +"also compatible." +msgstr "" +"O seu site está a usar o plugin oficial da Cloudflare. Foi activada a " +"limpeza automática da Cloudflare para compatibilidade. Se tiver activado a " +"APO, também é compatível." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to " +"ensure content is always up-to-date." +msgstr "" +"A cache da Cloudflare será limpa sempre que limpar a cache do WP Rocket para" +" garantir que o conteúdo está sempre actualizado." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO " +"is not yet compatible with that feature." +msgstr "" +"%1$sWP Rocket:%2$s Está a usar \"Cache de cookies dinâmicos\". A Cloudflare " +"APO ainda não é compatível com esta funcionalidade." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative " +"way to be page-cache friendly. %1$sMore info%2$s" +msgstr "" +"Deve desactivar a Cloudflare APO ou verificar com os programadores do " +"tema/plugin que requerem a utilização da \"Cache de cookies dinâmicos\" se " +"existe uma forma alternativa para criar cache de páginas facilmente. " +"%1$sMais informações%2$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile " +"devices\". You need to activate \"Cache by Device Type\" %3$ssetting%5$s on " +"Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" +"%1$sWP Rocket:%2$s Está a usar \"Ficheiros de cache separados para " +"dispositivos móveis\". Deve activar a %3$sopção%5$s \"Cache by Device Type\"" +" na Cloudflare APO para fornecer a versão correcta da cache. %4$sMais " +"informações%5$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare " +"APO. If you judge it necessary for the website to have a different cache on " +"mobile and desktop, we suggest you enable our “Separate Cache Files for " +"Mobiles Devices” to ensure the generated cache is accurate." +msgstr "" +"%1$sWP Rocket:%2$s A \"Cache by Device Type\" está activada na Cloudflare " +"APO. Se considerar necessário o site ter uma cache diferente no telemóvel e " +"no computador, sugerimos que active os \"Ficheiros de cache separados para " +"dispositivos móveis\" para garantir que a cache gerada é a correcta." + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -2985,7 +3081,7 @@ msgstr[2] "Estes padrões são inválidos e foram removidos:" msgid "More info" msgstr "Mais informações" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:753 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -3055,15 +3151,7 @@ msgstr "" "%s: Um ou mais plugins foram activados ou desactivados, " "caso afectem a interface do seu site, deve limpar a cache." -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not " -"be active at the same time." -msgstr "" -"O módulo da Cloudflare para o WP Rocket inclui funcionalidades idênticas. " -"Não podem estar activos ao mesmo tempo." - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this " @@ -3072,11 +3160,11 @@ msgstr "" "%s: Os seguintes plugins não são compatíveis com este " "plugin e poderão causar resultados inesperados:" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "Desactivar" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in " "WP Rocket from working correctly. Please deactivate it if you have problems." @@ -3085,7 +3173,7 @@ msgstr "" "correcto de algumas opções do WP Rocket. Deverá ser desactivado caso tenha " "algum problema." -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket " @@ -3097,7 +3185,7 @@ msgstr "" "Cache para Inactivo (Level 0) na página %1$sConfigurações > Geral%2$s para " "evitar quaisquer problemas." -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work " @@ -3107,7 +3195,7 @@ msgstr "" " o plugin funcionar correctamente. %2$sVá para as opções das ligações " "permanentes%3$s" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "" "%s could not modify the .htaccess file due to missing writing permissions." @@ -3115,14 +3203,14 @@ msgstr "" "O %s não pôde modificar o ficheiro .htaccess devido à falta de permissões de" " escrita." -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:842 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" "Resolução de problemas: %1$sComo activar a permissão escrita nos ficheiros " "do sistema%2$s" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:844 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" @@ -3130,7 +3218,7 @@ msgstr "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function " "correctly." @@ -3138,7 +3226,7 @@ msgstr "" "Não se preocupe, a cache de páginas e as opções do WP Rocket continuarão a " "funcionar correctamente." -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" @@ -3146,7 +3234,7 @@ msgstr "" "Para um óptimo desempenho, é recomendado adicionar estas linhas ao seu " "ficheiro .htaccess (não obrigatório):" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your " @@ -3155,7 +3243,7 @@ msgstr "" "O %1$s está pronto! %2$sTeste o tempo de carregamento%4$s ou consulte as " "suas %3$sopções%4$s." -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this" " website?" @@ -3163,15 +3251,15 @@ msgstr "" "Permite que o WP Rocket recolha dados não sensíveis de diagnóstico deste " "site?" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "Isto ajuda-nos a melhorar o WP Rocket no futuro." -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "Que informação vamos recolher?" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email " @@ -3183,65 +3271,69 @@ msgstr "" " de domínio ou endereços de email (excepto para validação de licença), " "endereços de IP ou chaves de API de terceiros." -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "Sim, permitir" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "Não, obrigado" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "Obrigado!" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "O WP Rocket agora recolhe as seguintes métricas do seu site:" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "%s: A cache foi limpa." -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "%s: A cache do conteúdo foi limpa." -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "%s: A cache do termo foi limpa." -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "%s: A cache do utilizador foi limpa." -#: inc/admin/ui/notices.php:756 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "Parar pré-carregamento" -#: inc/admin/ui/notices.php:762 +#: inc/admin/ui/notices.php:757 msgid "Turn on Remove Unused CSS" msgstr "Ligar a remoção de CSS não utilizado" -#: inc/admin/ui/notices.php:780 +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "Active agora os \"Ficheiros de cache separados para dispositivos móveis\"" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "Forçar desactivação " -#: inc/admin/ui/notices.php:799 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "Deveria ter sido escrito neste ficheiro o seguinte código:" -#: inc/admin/ui/notices.php:830 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "" "Não é possível configurar o %s devido à falta de permissões de escrita." -#: inc/admin/ui/notices.php:836 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "Ficheiro/pasta afectados: %s" @@ -3478,6 +3570,16 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "Falhou ao ligar a Cloudflare" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "WP Rocket: %s" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "" +"WP Rocket: A cache da Cloudflare foi limpa com sucesso." + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -4016,11 +4118,11 @@ msgid "Import settings" msgstr "Importar opções" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "Estado do módulo" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "Modificar opções" From f4c91008c8aa87503fb919bb74b53667b4880065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Tue, 13 Jun 2023 14:23:47 -0400 Subject: [PATCH 13/24] update translations files --- languages/rocket-fr_FR.mo | Bin 110114 -> 113637 bytes languages/rocket-pt_PT.mo | Bin 108429 -> 111848 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/languages/rocket-fr_FR.mo b/languages/rocket-fr_FR.mo index c3fc83c447f139acd538fbe76074dfd7a3f7ae22..5343ae97ea78642fb64f76f4ec5f0f8646ca9d78 100644 GIT binary patch delta 19418 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 IEfv=P0fh_`UH||9 delta 16489 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 diff --git a/languages/rocket-pt_PT.mo b/languages/rocket-pt_PT.mo index 453b46e1535e631ff1dd8caa8100af3e043d2bac..a25a14e458447b7933c5b3816cf02351c19a72cb 100644 GIT binary patch delta 19274 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 From 5dfbfc16a42a74d40f731389f02076a07e857e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Tue, 13 Jun 2023 09:29:38 -0400 Subject: [PATCH 14/24] compile admin css --- assets/css/wpr-admin.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/css/wpr-admin.min.css b/assets/css/wpr-admin.min.css index bb6400e8a7..0ad30c5a92 100755 --- a/assets/css/wpr-admin.min.css +++ b/assets/css/wpr-admin.min.css @@ -1 +1 @@ -h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:24px 16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:98px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid #c2cad4}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:transparent}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(255,255,255,.5)}.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(0,0,0,.5)}.wpr-rocketcdn-cta-close--no-promo:before{content:"✕";font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{background-color:#fff;align-items:center;display:flex;flex-direction:column;padding:16px;padding-bottom:32px;width:33.3333333333%;max-width:219px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c;margin-bottom:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail{margin-bottom:16px;font-size:1rem;line-height:1.375}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major{font-weight:700;font-size:3rem;line-height:1.1666666667}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor{font-weight:700;vertical-align:top;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{margin:24px 0;min-height:30px;padding-left:62px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%)}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{content:url(../img/configuration.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{content:url(../img/automatic.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;margin:0 16px 0 0;padding:24px;text-align:center;width:50%}.wpr-Popin-Upgrade .wpr-Popin-flex>div:last-child{margin-right:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-Upgrade-Plus .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-Upgrade-Infinite .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:top}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:block;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link::after{content:"→";font-weight:normal;margin-left:8px}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative}.rocket-renewal-expired-banner-container{display:flex;justify-content:space-around}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{justify-content:center;align-items:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-menuItem{position:relative;display:block;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid transparent;overflow:hidden;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background:#fde0d9;color:#f56640;text-align:center;border-radius:3px}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled{opacity:.55}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:transparent;-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:transparent transparent #19073b transparent}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:24px;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:33.3333333333%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:66.6666666667%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:0;margin-left:40px;list-style-type:">"}.wpr-imagify li{padding-left:7px}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:20px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{font-weight:bold;margin-left:5px}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}} \ No newline at end of file +h1,h2,h3,h4{color:currentColor;margin:0;font-weight:normal}button{padding:0;border:none;background:none;cursor:pointer}a{color:currentColor;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}a:hover{color:currentColor}input[type=submit]{cursor:pointer;border:none}a:active,button:active{outline:none}a:focus,button:focus{color:currentColor;box-shadow:none}.wpr-wrap{padding:16px;margin:0 0 0 -20px}@media(max-width: 783px){.wpr-wrap{padding:0;margin:0 0 0 -10px}}.wpr-body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeQuality;text-rendering:optimizeLegibility;display:flex;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-body *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media(max-width: 783px){#hs-beacon{display:none !important}}.wpr-u-flex{display:flex;align-items:center;justify-content:center}@font-face{font-family:"wpr-icomoon";src:url("../fonts/icomoon.eot");src:url("../fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon.woff") format("woff"),url("../fonts/icomoon.ttf") format("truetype"),url("../fonts/icomoon.svg#icomoon") format("svg");font-weight:normal;font-style:normal}[class^=wpr-icon-]:before,[class*=" wpr-icon-"]:after,[class^=wpr-icon-]:after,[class*=" wpr-icon-"]:before,[id^=wpr-nav-]:before,[id*=" wpr-nav-"]:after,[id^=wpr-nav-]:after,[id*=" wpr-nav-"]:before{font-family:"wpr-icomoon";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=wpr-icon-] span.hidden,[class*=" wpr-icon-"] span.hidden{display:inline-block;height:0;width:0;overflow:hidden}.wpr-icon-chevron-right:before{content:""}.wpr-icon-chevron-left:before{content:"";transform:rotate(180deg)}.wpr-icon-chevron-down:before{content:"";transform:scale(0.6)}.wpr-icon-chevron-up:before{content:"";top:50%;transform:translateY(-50%) scale(0.6)}.wpr-icon-rollback:before{content:""}.wpr-icon-addon:before,.wpr-addonSubMenuItem:before{content:""}.wpr-icon-addons:before,#wpr-nav-addons:before{content:""}.wpr-icon-book:before{content:""}.wpr-icon-cdn:before,#wpr-nav-page_cdn:before{content:""}.wpr-icon-database:before,#wpr-nav-database:before{content:""}.wpr-icon-export:before{content:""}.wpr-icon-files:before,#wpr-nav-cache:before{content:""}.wpr-icon-help:before{content:""}.wpr-icon-home:before,#wpr-nav-dashboard:before{content:""}.wpr-icon-import:before{content:""}.wpr-icon-important:before{content:""}.wpr-icon-information:before{content:""}.wpr-icon-information2:before{content:""}.wpr-icon-interrogation:before{content:""}.wpr-icon-media:before,#wpr-nav-media:before{content:""}.wpr-icon-plus:before{content:""}.wpr-icon-refresh:before,#wpr-nav-preload:before{content:""}.wpr-icon-rules:before,#wpr-nav-advanced_cache:before{content:""}.wpr-icon-stack:before,#wpr-nav-file_optimization:before{content:""}.wpr-icon-tools:before,#wpr-nav-tools:before{content:""}.wpr-icon-trash:before{content:""}.wpr-icon-user:before{content:""}.wpr-icon-check:before{content:""}.wpr-icon-check2:before{content:""}.wpr-icon-close:before{content:""}.wpr-icon-heartbeat:before,#wpr-nav-heartbeat:before{content:url("../img/heartbeat.svg")}.wpr-icon-heartbeat-hover:before,#wpr-nav-heartbeat.isActive:before,#wpr-nav-heartbeat:hover:before{content:url("../img/heartbeat-hover.svg")}.wpr-icon-imagify:before,#wpr-nav-imagify:before{content:url("../img/imagify.svg")}.wpr-icon-imagify-hover:before,#wpr-nav-imagify.isActive:before,#wpr-nav-imagify:hover:before{content:url("../img/imagify-hover.svg")}.wpr-icon-tutorial:before,#wpr-nav-tutorials:before{content:url("../img/play.svg")}.wpr-icon-tutorial-hover:before,#wpr-nav-tutorials.isActive:before,#wpr-nav-tutorials:hover:before{content:url("../img/play-hover.svg")}.wpr-icon-tutorial-alt:before{content:url("../img/play-alt.svg")}.wpr-title1{font-size:1.625rem;line-height:1;font-weight:600;letter-spacing:.01em}.wpr-title2{font-size:1rem;line-height:1.5;font-weight:bold;letter-spacing:-0.02em}.wpr-title3,.wpr-select label,.wpr-select select,.wpr-field--radio label{font-size:0.875rem;line-height:1.7142857143;font-weight:bold;letter-spacing:-0.011em}.wpr-Header{display:flex;flex-direction:column;flex:0 0 225px}@media(max-width: 783px){.wpr-Header{flex:0 0 50px}}.wpr-Header-logo{padding:32px 0 24px;text-align:center}@media(max-width: 783px){.wpr-Header-logo{padding:16px 0 8px}}@media(max-width: 783px){.wpr-Header-logo-desktop{display:none}}.wpr-Header-logo-mobile{display:none}@media(max-width: 783px){.wpr-Header-logo-mobile{display:inline-block}}.wpr-Header-footer{margin-top:auto;padding:48px 20px 0;font-size:0.6875rem;line-height:4.3636363636;color:#666;opacity:.6;font-weight:bold}@media(max-width: 783px){.wpr-Header-footer{display:none}}.wpr-Sidebar{position:relative;display:none;flex:0 0 290px;padding:24px 16px}@media(max-width: 1239px){.wpr-Sidebar{flex:0 0 260px}}@media(max-width: 1083px){.wpr-Sidebar{display:none !important}}.wpr-Sidebar-title{margin-bottom:32px}.wpr-Sidebar-notice{padding:8px 16px;margin-bottom:16px;background:#fff;border:1px solid #e8ebee;border-left:2px solid #1eadbf;border-radius:0 3px 3px 0;color:#666}.wpr-Sidebar-notice p{margin:0}.wpr-Sidebar-notice-link{display:inline-block;margin-top:8px;font-size:0.6875rem;line-height:1.8181818182;color:#02707f;letter-spacing:-0.05em;text-transform:uppercase;text-decoration:none;font-weight:bold}.wpr-Sidebar-notice-link:hover,.wpr-Sidebar-notice-link:focus{color:#40bacb}.wpr-Sidebar-info{padding:16px;background:#ebfaf5;margin-bottom:16px;border-radius:3px}.wpr-Sidebar-info h4{padding-left:48px;font-weight:500}.wpr-Sidebar-info p{margin:8px 0 0;font-size:0.6875rem;line-height:1.4545454545;color:#666}.wpr-Sidebar-info i{position:absolute;display:block;margin-top:-1px;width:40px;height:40px;color:#00a66b;font-size:1.0625rem;line-height:2.3529411765;background:#c6f0de;border-radius:3px;text-align:center}.wpr-Content{position:relative;background:#fff;padding:32px 24px;flex:1 1 auto;max-width:1230px}@media(max-width: 783px){.wpr-Content{padding:24px 16px}}.wpr-Content form>input:last-child{margin-top:24px;color:#fff !important}.wpr-Content.isNotFull{max-width:960px}.wpr-Content-tips{position:absolute;top:48px;right:24px;font-weight:bold;color:#666}@media(max-width: 1083px){.wpr-Content-tips{display:none !important}}.wpr-Page{margin-bottom:32px}.wpr-Page-row{display:flex;flex-direction:row}@media(max-width: 1239px){.wpr-Page-row{flex-direction:column}}.wpr-Page-col{flex:1 1 auto}.wpr-Page-col--fixed{margin-left:24px;flex:0 0 325px}@media(max-width: 1239px){.wpr-Page-col--fixed{margin-left:0}}.wpr-Page#dashboard #wpr-action-refresh_account:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isHidden:before{opacity:0}.wpr-Page#dashboard #wpr-action-refresh_account.wpr-isShown:before{opacity:1}@keyframes loading{from{transform:rotate(0)}to{transform:rotate(360deg)}}.wpr-Page#dashboard .wpr-documentation{margin-top:98px;padding:43px 16px}@media(max-width: 1239px){.wpr-Page#dashboard .wpr-documentation{margin-top:40px}}.wpr-Page#dashboard .wpr-documentation .wpr-button{margin-top:8px}.wpr-Page#dashboard .wpr-documentation i{font-size:3.375rem;line-height:1}.wpr-Page#dashboard .wpr-radio{padding-left:72px}.wpr-Page#dashboard .wpr-field--radio{padding:16px 8px}.wpr-Page#dashboard .wpr-field--radio:first-child{padding-top:0}.wpr-Page#dashboard .wpr-field--radio:last-child{padding-bottom:0}.wpr-Page#dashboard .wpr-field--radio .wpr-field-description{font-style:normal;color:#666;margin-left:72px}.wpr-Page#dashboard .wpr-field-account{padding-bottom:0}.wpr-Page#dashboard .wpr-infoAccount{font-weight:bold;margin-left:8px;color:#444}.wpr-Page#dashboard .wpr-infoAccount:before{content:"";position:relative;display:inline-block;width:13px;height:13px;background:#e0e4e9;border-radius:50%;color:#fff;margin-right:6px;text-align:center;top:2px;font-size:0.5rem;line-height:1.625}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid{color:#00a66b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isValid:before{content:"";font-family:"wpr-icomoon";speak:none;background:#3ece9d;top:-1px}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid{color:#d60e5b}.wpr-Page#dashboard .wpr-infoAccount.wpr-isInvalid:before{content:"!";font-weight:bold;font-size:0.625rem;line-height:1.3;speak:none;background:#d33f49;top:-1px}.wpr-Page#dashboard #wpr-account-data:before{content:none}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss:before{transition:all 200ms ease-out;opacity:1;transform:translateY(0)}.wpr-Page#tools #wpr-action-rocket_enable_mobile_cpcss.wpr-isLoading:before{animation:loading 1.2s infinite}.wpr-Popin{display:none;position:fixed;width:772px;height:auto;top:50%;left:50%;background:#fff;border-radius:3px;transform:translateX(-50%) translateY(-50%);z-index:100000}.wpr-Popin-overlay{display:none;position:fixed;opacity:0;width:100%;height:100%;top:0;left:0;background:rgba(0,0,0,.8);z-index:99999}.wpr-Popin-header{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 32px;background:#2d1656;color:#fff;font-weight:600}.wpr-Popin-close{color:#665090;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-Popin-close:hover,.wpr-Popin-close:focus{color:#fff;outline:none}.wpr-Popin-content{padding:8px 32px;color:#666}.wpr-Popin-flex{display:flex;flex-direction:row;align-items:center}.wpr-Popin-flex div{margin-left:32px}.wpr-Popin p{margin:16px 0}.wpr-Popin .wp-rocket-data-table{padding:12px 24px;background:#f2f3f6 !important;border:none}.wpr-Popin .wp-rocket-data-table td{width:50%;color:#121116;padding:8px 0;padding-left:4px;border-bottom:1px solid #c2cad4}.wpr-Popin .wp-rocket-data-table td:not(.column-primary){font-family:"Monaco";font-size:0.75rem;line-height:1.6666666667;color:#666;letter-spacing:-0.01em}.wpr-Popin .wp-rocket-data-table tr{background:#f2f3f6;border-bottom:1px solid #e0e4e9}.wpr-Popin .wp-rocket-data-table tr:last-child td{border-bottom:none}.wpr-Popin .wp-rocket-data-table strong{font-weight:500}.wpr-Popin .wp-rocket-data-table em{font-style:normal}.wpr-Popin .wp-rocket-data-table code{padding:0;margin:0;background:transparent}.wpr-rocketcdn-cta-small{border-radius:5px;margin:24px 0;padding:16px}.wpr-rocketcdn-cta-small.wpr-isHidden{display:none}.wpr-rocketcdn-cta-small .notice-title{font-weight:700}.wpr-rocketcdn-cta-small .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta-small .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta{margin:10px 0;position:relative}.wpr-rocketcdn-cta.wpr-isHidden{display:none}.wpr-rocketcdn-cta-close{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(255,255,255,.5)}.wpr-rocketcdn-cta-close--no-promo{position:absolute;top:16px;right:16px;background:transparent;border:0;color:rgba(0,0,0,.5)}.wpr-rocketcdn-cta-close--no-promo:before{content:"✕";font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta-close:before{content:"✕";color:#121116;font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo{background:#ffd147;border-top-left-radius:2px;border-top-right-radius:2px;padding:16px 48px 16px 16px}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-title{font-weight:700;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-promo-date{margin:0;font-weight:500;font-size:1rem;line-height:1.5}.wpr-rocketcdn-cta-subtitle{color:#444;margin-top:0;font-size:0.875rem;line-height:1.7142857143}.wpr-rocketcdn-cta-content{background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta-content--no-promo{border-top-left-radius:2px;border-top-right-radius:2px;background:#f9fafb;border-top:1px solid #e8ebee;border-left:1px solid #e8ebee;border-right:1px solid #e8ebee;padding:16px}.wpr-rocketcdn-cta .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-flex{text-align:start;flex-direction:column}}.wpr-rocketcdn-cta .wpr-rocketcdn-features{margin:0;padding-right:16px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-features{border-right:none}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{background-color:#fff;align-items:center;display:flex;flex-direction:column;padding:16px;padding-bottom:32px;width:33.3333333333%;max-width:219px}@media(max-width: 783px){.wpr-rocketcdn-cta .wpr-rocketcdn-pricing{width:auto}}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing-regular{color:#72777c;margin-bottom:8px}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-billing-detail{margin-bottom:16px;font-size:1rem;line-height:1.375}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-major{font-weight:700;font-size:3rem;line-height:1.1666666667}.wpr-rocketcdn-cta .wpr-rocketcdn-pricing .wpr-rocketcdn-cta-currency-minor{font-weight:700;vertical-align:top;font-size:1.5rem;line-height:1.3333333333}.wpr-rocketcdn-cta .wpr-rocketcdn-feature{margin:24px 0;min-height:30px;padding-left:62px;position:relative}.wpr-rocketcdn-cta .wpr-rocketcdn-feature:before{position:absolute;top:50%;left:5px;transform:translateY(-50%)}.wpr-rocketcdn-cta .wpr-rocketcdn-bandwidth:before{content:url(../img/bandwidth.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-configuration:before{content:url(../img/configuration.svg)}.wpr-rocketcdn-cta .wpr-rocketcdn-automatic:before{content:url(../img/automatic.svg)}.wpr-rocketcdn-cta-footer{color:#121116;font-weight:600;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-cta-footer a{position:relative;padding-left:22px}.wpr-rocketcdn-cta-footer a:before{content:"";position:absolute;width:14px;height:15px;background:url("../img/icon-i-circle.svg") no-repeat center center;top:3px;left:0}.wpr-rocketcdn-cta-promo-footer{color:#121116;padding:16px 8px 8px;font-size:0.875rem;line-height:1.5714285714}.wpr-rocketcdn-subscription{text-align:end}.wpr-rocketcdn-subscription .wpr-rocketcdn-open{color:#666;text-decoration:underline}.wpr-license-upgrade-button{font-weight:bold;text-decoration:underline}.wpr-license-upgrade-button:hover{text-decoration:none}.wpr-field.wpr-field-account .wpr-flex{align-items:flex-start}.wpr-infoAccount-License{flex:1 0 60%;margin-right:16px}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div{width:100%}}.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field.wpr-field-account .wpr-flex>div:last-child{text-align:left}}.wpr-Popin-Upgrade .wpr-Popin-content{padding-bottom:32px}.wpr-Popin-Upgrade .wpr-Popin-flex{justify-content:space-between}.wpr-Popin-Upgrade .wpr-Popin-flex>div{align-items:center;border:1px solid #dadada;border-radius:24px;display:flex;flex-direction:column;margin:0 16px 0 0;padding:24px;text-align:center;width:50%}.wpr-Popin-Upgrade .wpr-Popin-flex>div:last-child{margin-right:0}@media(max-width: 783px){.wpr-Popin-Upgrade .wpr-Popin-flex>div{margin:0;width:100%}}.wpr-Upgrade-Plus .wpr-upgrade-title::before{content:url(../img/plus.svg);display:block;width:117px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}.wpr-Upgrade-Infinite .wpr-upgrade-title::before{content:url(../img/infinite.svg);display:block;width:48px;height:31px;top:0;position:absolute;left:50%;transform:translateX(-50%)}div.wpr-upgrade-saving{background:#ffd147;border-radius:44px;color:#121116;font-weight:bold;margin:0 0 24px 0;padding:8px 16px;text-align:center}.wpr-upgrade-title{color:#f56f46;font-size:1.875rem;line-height:1.2;margin-bottom:16px;padding-top:55px;position:relative}div.wpr-upgrade-prices{color:#121116;font-size:3rem;line-height:1;font-weight:bold;margin:0 0 16px 0}.wpr-upgrade-price-symbol{font-size:1.875rem;line-height:1;vertical-align:super}.wpr-upgrade-price-regular{color:#72777c;font-size:1rem;line-height:1;vertical-align:top}div.wpr-upgrade-websites{color:#121116;font-size:0.875rem;line-height:1;font-weight:bold;margin:0 0 24px 0}.wpr-upgrade-link{background:#fff;border:1px solid #f56f46;border-radius:800px;color:#f56f46;display:block;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.wpr-upgrade-link:hover{background:#f56f46;color:#fff}.wpr-upgrade-link::after{content:"→";font-weight:normal;margin-left:8px}.rocket-promo-banner{background:#ffd147;display:flex;justify-content:space-around;margin-top:16px;padding:24px;position:relative}@media(max-width: 783px){.rocket-promo-banner{flex-flow:column}}.rocket-promo-banner>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-promo-banner>div{width:100%}}.rocket-promo-title{font-weight:bold;margin-bottom:24px}.rocket-promo-discount{background:#fff;border-radius:44px;display:inline-block;margin-right:8px;padding:8px 16px;text-transform:uppercase}.rocket-promo-message,.rocket-promo-deal{font-size:1rem;line-height:1.5;margin-bottom:0}.rocket-promo-deal{margin-top:8px}.rocket-promo-cta-block{align-items:center;margin-right:24px}.rocket-promo-countdown{display:flex;flex-flow:row wrap;width:66%}.rocket-promo-countdown>.rocket-countdown-item{background:#fff;border-radius:8px;flex:1;margin-right:8px;padding:8px;text-align:center}.rocket-promo-countdown>.rocket-countdown-item>.rocket-countdown-value{display:block;font-size:1.5rem;line-height:1;font-weight:bold}.rocket-promo-cta{background:#172153;border-radius:44px;color:#fff;font-weight:bold;padding:16px 32px}.rocket-renewal-banner{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;justify-content:space-evenly;margin-top:16px;padding:8px}.rocket-renewal-expired-banner{background:#ffd147;margin-top:16px;padding:24px;position:relative}.rocket-renewal-expired-banner-container{display:flex;justify-content:space-around}@media(max-width: 783px){.rocket-renewal-expired-banner-container{flex-flow:column}}.rocket-renewal-expired-banner-container>div{display:flex;flex-flow:column;width:50%}@media(max-width: 783px){.rocket-renewal-expired-banner-container>div{width:100%}}.rocket-renew-message{margin:0 16px}.rocket-renew-message>p{font-size:0.875rem;line-height:1.5}.rocket-expired-message>p{font-size:0.875rem;line-height:1.5;padding-left:80px}.rocket-expired-title{font-size:1.375rem;line-height:1.5;font-weight:bold}.rocket-expired-title::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle}.rocket-expired-cta-container{justify-content:center;align-items:center}.rocket-renew-cta{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.rocket-renew-cta:hover,.rocket-renew-cta:active,.rocket-renew-cta:focus{color:#fff}.rocket-renew-cta::after{content:"→";font-weight:normal;margin-left:8px}.wpr-menuItem{position:relative;display:block;padding:16px 44px 18px 20px;text-decoration:none;color:#121116;border-top:1px solid #e0e4e9;border-left:2px solid transparent;overflow:hidden;transition:all 100ms ease-out;-webkit-transition:all 100ms ease-out}@media(max-width: 783px){.wpr-menuItem{width:57px;height:50px;padding:0}}.wpr-menuItem:before{position:absolute;top:calc(50% - 12px);right:18px;text-align:center;font-size:1.4375rem;line-height:1;color:#121116;opacity:.4;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-menuItem:hover,.wpr-menuItem.isActive{color:#121116;background:#fff;border-left:2px solid #f56640}.wpr-menuItem:hover .wpr-menuItem-title,.wpr-menuItem.isActive .wpr-menuItem-title{color:#f56640}.wpr-menuItem:hover:before,.wpr-menuItem.isActive:before{color:#f56640;opacity:1}.wpr-menuItem:focus{color:#121116}.wpr-menuItem:focus:before{color:#121116}.wpr-menuItem-title{font-size:0.8125rem;line-height:1.4615384615;font-weight:bold;letter-spacing:-0.08px;text-transform:uppercase;color:#121116}@media(max-width: 783px){.wpr-menuItem-title{display:none !important}}.wpr-menuItem-description{margin-top:2px;color:#72777c;font-size:0.8125rem;line-height:1.2307692308;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}@media(max-width: 783px){.wpr-menuItem-description{display:none}}.wpr-menuItem.wpr-subMenuItem{display:none;padding:10px 20px 8px 25px}@media(max-width: 783px){.wpr-menuItem.wpr-subMenuItem{padding:8px 20px 8px 23px;height:35px}}.wpr-menuItem.wpr-subMenuItem .wpr-menuItem-title{display:inline-block;font-size:0.8125rem;line-height:1.8461538462;text-transform:inherit;font-weight:600}.wpr-menuItem.wpr-subMenuItem:before{position:relative;display:inline-block;top:2px;right:2px;margin-right:8px;font-size:1rem;line-height:1}#wpr-nav-cache:before{right:20px}#wpr-nav-tools:before{right:20px}.wpr-sectionHeader{position:relative;border-bottom:1px solid #e0e4e9;padding-bottom:24px}.wpr-sectionHeader:before{content:"";position:absolute;display:block;width:48px;height:2px;bottom:-1px;left:0;background:#f56640}.wpr-sectionHeader .wpr-title1{line-height:48px}.wpr-sectionHeader .wpr-title1:before{display:inline-block;width:48px;height:48px;margin-right:24px;background:#fde0d9;color:#f56640;text-align:center;border-radius:3px}.wpr-sectionHeader-title{margin-top:8px;padding-left:72px}.wpr-sectionHeader-description{color:#666;margin-top:8px;padding-left:72px}.wpr-sectionHeader-logo{vertical-align:top;margin-right:24px}.wpr-optionHeader{position:relative;display:flex;justify-content:space-between;margin-top:48px;padding-bottom:9px;border-bottom:1px solid #e0e4e9}.wpr-optionHeader .wpr-title2{line-height:24px;color:#f56640;padding-right:40px}.wpr-optionHeader .wpr-infoAction{margin-right:8px}.wpr-optionHeader.wpr-isHidden{display:none}.wpr-fieldsContainer{margin-top:8px}.wpr-fieldsContainer-description{color:#666}.wpr-fieldsContainer-description a:hover,.wpr-fieldsContainer-description a:focus{color:#1eadbf}.wpr-fieldsContainer-fieldset{margin-top:16px;background:#f9fafb;padding:16px;border:1px solid #e8ebee;border-radius:2px}.wpr-fieldsContainer-fieldset--split{display:flex}.wpr-fieldsContainer-fieldset--split .wpr-field+.wpr-field{border:none}.wpr-fieldsContainer-fieldset--split .wpr-field{flex:0 0 50%;padding:0}.wpr-fieldsContainer-fieldset--split .wpr-field:first-child{padding-right:15px}.wpr-fieldsContainer-fieldset--split .wpr-field:last-child{padding-left:15px}.wpr-fieldsContainer-helper{margin-top:16px;color:#d60e5b;font-weight:500}.wpr-fieldsContainer-helper:before{position:relative;top:3px;font-size:1.125rem;line-height:1;margin-right:4px}.wpr-fieldsContainer.wpr-isHidden{display:none}.wpr-infoAction{position:relative;height:24px;font-size:0.8125rem;line-height:1.8461538462;vertical-align:middle;letter-spacing:-0.03em;font-weight:500;color:#666;white-space:nowrap;text-decoration:none;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out}.wpr-infoAction:before{position:absolute;margin-left:-26px;font-size:1.125rem;line-height:1.3333333333;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-infoAction--help{text-transform:uppercase;color:#02707f;font-weight:bold;font-size:0.75rem;line-height:2;letter-spacing:0}@media(max-width: 783px){.wpr-infoAction--help{display:none}}.wpr-infoAction--help:before{color:#1eadbf}.wpr-infoAction:hover,.wpr-infoAction:focus{color:#f56640;outline:none}.wpr-infoAction:hover:before,.wpr-infoAction:focus:before{color:#ffa58b}.wpr-button{position:relative;display:inline-block;width:auto;padding:8px 24px;text-align:center;background:#f56640;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);text-transform:uppercase;text-decoration:none;letter-spacing:-0.08px;font-weight:bold;border-radius:4px;color:#fff !important;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:all 200ms ease-out;-webkit-transition:all 200ms ease-out;font-size:0.8125rem;line-height:1.5384615385}.wpr-button:hover,.wpr-button:focus{color:#fff !important;transform:translateY(-2px);box-shadow:0 7px 14px rgba(50,50,93,.25),0 3px 6px rgba(0,0,0,.2)}.wpr-button--small{padding:5px 0;letter-spacing:-0.08px;font-size:0.6875rem;line-height:1.8181818182}.wpr-button--icon{min-width:160px;padding-left:8px;padding-right:40px;text-align:left}.wpr-button--icon:before{position:absolute;right:8px;font-size:0.9375rem;line-height:1.3333333333}.wpr-button--fixed{position:fixed;display:flex;padding:8px 16px;right:24px;bottom:32px;border-radius:16px}.wpr-button--fixed:before{font-size:1.125rem;line-height:1;margin-right:8px}.wpr-button--purple{background:#2d1656}.wpr-button--blue{min-width:inherit;background:#1eadbf}.wpr-button--lightBlue{min-width:inherit;background:#40bacb}.wpr-button--red{background:#d33f49}.wpr-button--gray{background:#e0e4e9;color:#121116 !important}.wpr-button--gray:hover,.wpr-button--gray:active,.wpr-button--gray:focus{color:#121116 !important}.wpr-button--gray.radio-active{background:#2d1656 !important;color:#fff !important}.wpr-button--gray.radio-active:hover,.wpr-button--gray.radio-active:active,.wpr-button--gray.radio-active:focus{color:#fff !important}.wpr-button--blueDark{background:#02707f}.wpr-button:focus{outline:none;color:#fff !important}.wpr-field{padding:16px 0;transition:opacity 150ms ease-out;-webkit-transition:opacity 150ms ease-out}.wpr-field+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9}.wpr-field:first-child{padding-top:0}.wpr-field:last-child{padding-bottom:0}.wpr-field-description{margin-top:4px;color:#666;font-size:0.8125rem;line-height:1.5384615385}.wpr-field-description .wpr-js-popin{color:#444;text-decoration:underline}.wpr-field-description .wpr-js-popin:hover,.wpr-field-description .wpr-js-popin:focus{color:#1eadbf}.wpr-field-description a:hover,.wpr-field-description a:focus{color:#1eadbf}.wpr-field-description-helper{color:#00a66b}.wpr-field-description-label{font-size:0.875rem;line-height:1.4285714286;font-weight:500;color:#666}.wpr-field-list{margin:0;color:#666;font-weight:500}.wpr-field-list li+li{margin-top:16px}.wpr-field-list li:before{position:relative;top:3px;margin-right:8px;color:#02707f;font-size:1.125rem;line-height:1.1111111111}.wpr-field-list a{text-decoration:none}.wpr-field-list a:hover,.wpr-field-list a:focus{color:#1eadbf}.wpr-field-betweenText{margin:0 16px;font-weight:bold}.wpr-field .wpr-button{margin:8px 0}.wpr-field .wpr-flex{display:flex;justify-content:space-between;align-items:center}@media(max-width: 783px){.wpr-field .wpr-flex{text-align:left;flex-direction:column}}.wpr-field .wpr-flex--egal>div{flex:0 0 50%}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div{width:100%}}.wpr-field .wpr-flex--egal>div:last-child{text-align:right}@media(max-width: 783px){.wpr-field .wpr-flex--egal>div:last-child{text-align:left}}.wpr-field .wpr-flex--egal>div .wpr-field-description{font-style:normal;color:#666}.wpr-field p{margin-bottom:0}.wpr-field label{font-weight:500}.wpr-field h4{font-size:0.875rem;line-height:1.7142857143}.wpr-field.wpr-isDisabled{opacity:.55}.wpr-field.wpr-isParent{padding-bottom:0;margin-bottom:16px}.wpr-field.wpr-Delayjs{margin-top:16px}.wpr-field.wpr-RemoveUnUsedCss{margin-bottom:0}.wpr-field.wpr-NoPaddingBottom{padding-bottom:0}.wpr-field.wpr-isLastElem{margin-top:16px}.wpr-field.wpr-isHidden{display:none}.wpr-field .wpr-isHidden{display:none}.wpr-field--children{display:none;padding-left:32px}.wpr-field--children.wpr-isOpen{display:block}.wpr-field--children.wpr-field--textarea{padding-right:80px}@media(max-width: 1239px){.wpr-field--children.wpr-field--textarea{padding-right:32px}}@media(max-width: 783px){.wpr-field--children.wpr-field--textarea{padding-right:0}}.wpr-field--children.no-space{padding-left:0}.wpr-field--checkbox .wpr-field-description{margin-left:32px}.wpr-field--radio{padding:24px 16px}.wpr-field--radio:first-child{padding-top:8px}.wpr-field--radio:last-child{padding-bottom:8px}.wpr-field--radio .wpr-field-description{margin-left:88px}.wpr-field--radio .wpr-field-description button{color:#666}.wpr-field--split{display:inline-block;width:50%;padding-right:16px;padding-bottom:0}.wpr-field--split+.wpr-field--split{padding-left:16px;padding-right:0}.wpr-field--split+.wpr-field--split:nth-child(2){padding-top:0;border-top:none}.wpr-field--cache .wpr-field--number,.wpr-field--cache .wpr-field--select{display:inline-block;padding-top:0;width:auto;padding-bottom:0;font-weight:bold}.wpr-field--cache .wpr-field--select{position:relative;padding-left:8px;top:-2px;border-top:none}.wpr-field--cache .wpr-field--number .wpr-text input[type=number]{background:#f2f3f6;height:35px;border:1px solid #e0e4e9;font-family:inherit;font-size:1em}.wpr-field--cache .wpr-field-description{margin:8px 0;color:#00a66b}.wpr-field--cache .wpr-field-description-label{color:#121116}.wpr-field--textarea .wpr-field-description pre{background:rgba(0,0,0,.07);padding:1em;margin:1em 0 0;white-space:normal}.wpr-field--textarea .wpr-field-description pre code{background:transparent;-webkit-touch-callout:all;-webkit-user-select:all;-khtml-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;color:#121116}.wpr-fieldWarning{display:none;position:relative;padding:16px 16px 24px 56px;background:#19073b;margin:8px 0 0;color:#fff}.wpr-fieldWarning.wpr-isOpen{display:block}.wpr-fieldWarning:after{content:"";position:absolute;display:block;top:-8px;left:20px;width:0;height:0;border-style:solid;border-width:0 12px 8px 12px;border-color:transparent transparent #19073b transparent}.wpr-fieldWarning:before{content:"";position:absolute;display:block;width:calc(100% + 32px);height:100%;top:0;left:-16px;background:#19073b}.wpr-fieldWarning-title{position:relative;color:#f56640;font-size:0.875rem;line-height:1.4285714286;font-weight:bold}.wpr-fieldWarning-title:before{position:absolute;left:-36px;font-size:1.5rem;line-height:.8333333333}.wpr-fieldWarning-description{position:relative;margin-top:8px}.wpr-fieldWarning .wpr-button{margin-top:16px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning:after{left:40px}.wpr-warningContainer+.wpr-warningContainer,.wpr-warningContainer+.wpr-field,.wpr-field+.wpr-warningContainer{border-top:1px solid #e0e4e9;padding-top:16px}.wpr-warningContainer+.wpr-warningContainer,.wpr-field+.wpr-warningContainer{padding-bottom:16px}@media only screen and (max-width: 400px){.wpr-fieldWarning.wpr-radio-warning{margin-left:-32px}.wpr-fieldWarning.wpr-radio-warning .wpr-button{white-space:normal;padding-right:32px}}@media only screen and (max-width: 350px){.wpr-radio-buttons{padding-left:24px}.wpr-fieldWarning.wpr-radio-warning{margin-left:-24px;padding-left:30px;padding-right:0}.wpr-fieldWarning.wpr-radio-warning .wpr-button{padding-right:24px}}.wpr-documentation{padding:24px 16px;border-radius:4px;color:#fff;text-align:center;background:#40bacb}.wpr-documentation p{margin:8px 0 16px;font-weight:500}.wpr-documentation i{display:block;font-size:2.25rem;line-height:1;margin-bottom:8px}.wpr-documentation .wpr-button{padding-left:16px;padding-right:16px}.wpr-addon{padding:24px 0}.wpr-addon .wpr-flex{align-items:flex-start}@media(max-width: 783px){.wpr-addon .wpr-flex{align-items:center}}.wpr-addon .wpr-flex>div{text-align:left}.wpr-addon .wpr-addon-title{margin-bottom:16px;font-weight:500}.wpr-addon .wpr-field-description{font-style:normal}.wpr-addon .wpr-field-helper{font-size:0.8125rem;line-height:1.5384615385;color:#666;background-color:#e0e4e9;padding:8px;margin:8px 0}.wpr-addon .wpr-field-helper span.wpr-helper-title{font-weight:600}.wpr-addon .wpr-field-helper span.wpr-helper-title::after{content:"\a";white-space:pre}.wpr-addon .wpr-addon-logo{text-align:center;flex:0 0 160px}@media(max-width: 1239px){.wpr-addon .wpr-addon-logo{max-width:100px}.wpr-addon .wpr-addon-logo img{width:100%;height:auto}}@media(max-width: 1083px){.wpr-addon .wpr-addon-logo{max-width:160px}}@media(max-width: 783px){.wpr-addon .wpr-addon-logo{flex:0 0 auto;margin-bottom:16px}}.wpr-addon .wpr-addon-text{margin-left:32px;flex:1 1 auto}@media(max-width: 1239px){.wpr-addon .wpr-addon-text{margin-left:16px}}@media(max-width: 1083px){.wpr-addon .wpr-addon-text{margin-left:32px}}@media(max-width: 783px){.wpr-addon .wpr-addon-text{margin-left:0}}.wpr-addon .wpr-addon-text a{display:inline-block;margin-top:24px}.wpr-addon .wpr-addon-text .button{margin-top:24px}.wpr-addon .wpr-addon-text .wpr-add-on-helper{font-weight:normal;color:#1eadbf}.wpr-addon .wpr-addon-text .wpr-add-on-helper a{margin-top:0}.wpr-webp-addon .wpr-addon .wpr-addon-text a{margin-top:0px}.notice-wpr-warning{background:#ffd147;display:flex;flex-flow:row wrap;align-items:center;margin-top:16px;padding:8px 32px;border:0}.notice-wpr-warning p:first-child{font-size:1rem;line-height:1.125;margin-left:80px}.notice-wpr-warning p:first-child::before{content:url(../img/warning.svg);display:inline-block;height:48px;width:63px;margin-right:17px;vertical-align:middle;margin-left:-80px}@media(max-width: 1239px){.notice-wpr-warning p:first-child::before{margin-bottom:-30px}}.notice-wpr-warning p:last-child{margin-left:63px;flex-basis:100%;align-items:center;justify-content:flex-start;display:flex}@media(max-width: 783px){.notice-wpr-warning p:last-child{align-content:center;flex-direction:column;margin-left:0}}.notice-wpr-warning p:last-child a{margin:0 16px}@media(max-width: 783px){.notice-wpr-warning p:last-child a{margin:8px 16px}}.notice-wpr-warning p:last-child a:first-child{display:block;background:#172153;border-radius:44px;color:#fff;font-size:1rem;line-height:1.125;font-weight:bold;padding:16px 24px;text-decoration:none}.notice-wpr-warning p:last-child a:first-child:hover,.notice-wpr-warning p:last-child a:first-child:active,.notice-wpr-warning p:last-child a:first-child:focus{color:#fff}.notice-wpr-warning p:last-child a:first-child::after{content:"→";font-weight:normal;margin-left:8px}.wpr-notice{position:relative;color:#444;background:#ebfaf5 url("../img/bg-activated.svg") no-repeat 90% bottom;background-size:350px;margin-top:24px;border-radius:4px;overflow:hidden}.wpr-notice-container{padding:24px 25% 24px 40px}.wpr-notice-supTitle{font-size:1rem;line-height:1.375;font-weight:bold}.wpr-notice-title{font-size:1.5rem;line-height:1.3333333333;color:#3ece9d;margin-top:16px;font-weight:bold}.wpr-notice-description{font-size:0.875rem;line-height:1.5714285714;margin:16px 0 24px}.wpr-notice-continue{color:#666}.wpr-notice-close{position:absolute;top:24px;right:24px;color:#666;text-decoration:none;font-size:1.5rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-notice-close:hover{color:#444}.wpr-notice-close:focus{outline:none}.wpr-tools{position:relative;display:flex;flex-direction:row;padding:32px 0}@media(max-width: 1239px){.wpr-tools{flex-direction:column}}@media(max-width: 1083px){.wpr-tools{flex-direction:row}}@media(max-width: 783px){.wpr-tools{flex-direction:column}}.wpr-tools:nth-child(2){margin-top:16px}.wpr-tools+.wpr-tools{border-top:1px solid #e0e4e9}.wpr-tools-label{display:block}.wpr-tools-label:before{position:absolute;left:0;margin-top:5px;font-size:2.25rem;line-height:1;color:#f56640}@media(max-width: 783px){.wpr-tools-label:before{display:block;position:initial}}.wpr-tools-col{flex:1 1 auto}.wpr-tools-col:first-child{padding-left:72px;padding-right:24px;min-width:340px}@media(max-width: 783px){.wpr-tools-col:first-child{padding-left:0;padding-right:0;min-width:auto}}.wpr-tools-col:last-child{text-align:right}@media(max-width: 783px){.wpr-tools-col:last-child{text-align:left}}.wpr-tools .wpr-button{margin-top:24px;white-space:normal}.wpr-tools .wpr-field-description{font-style:normal;color:#666}.wpr-tools #wpr-update-exclusion-msg{min-height:20px}.wpr-imagify{display:flex;justify-content:space-between;flex-wrap:wrap;margin-top:30px}.wpr-imagify-description{width:33.3333333333%;padding-right:60px}@media(max-width: 1239px){.wpr-imagify-description{width:auto;padding-right:0}}.wpr-imagify-screenshot{width:66.6666666667%}@media(max-width: 1239px){.wpr-imagify-screenshot{margin-top:60px;width:auto}}.wpr-imagify-screenshot img{max-width:100%;height:auto}.wpr-imagify-more,.wpr-imagify-name{color:#00a8dc;font-weight:700;margin-bottom:0}.wpr-imagify-more::before{content:"✓";color:#000;font-size:2rem;margin-right:5px}.wpr-imagify p{font-size:1rem}.wpr-imagify p:first-child{margin-top:0}.wpr-imagify ul{margin-top:0;margin-left:40px;list-style-type:">"}.wpr-imagify li{padding-left:7px}.wpr-imagify a{text-decoration:none}.wpr-imagify a:hover{color:#00a8dc}.wpr-imagify .button-primary{background:#2abb9b;border:1px solid #bebebe;box-shadow:none;font-size:1rem;font-weight:700;height:auto;line-height:1;margin-top:60px;padding:20px 45px;text-shadow:none;text-transform:uppercase}.wpr-tutorials-section{display:flex;flex-flow:row wrap}div.wpr-tutorial-item{width:32%;margin-bottom:10px;margin-right:1%}.wpr-tutorial-link{cursor:pointer;transition:color 200ms ease-out}.wpr-tutorial-link:hover{color:#1eadbf}@media(max-width: 1083px){div.wpr-tutorial-item{width:48%}}@media(max-width: 783px){div.wpr-tutorial-item{width:100%}}.wpr-rocketcdn-modal{display:none}.wpr-rocketcdn-modal.is-open{display:block}.wpr-rocketcdn-modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;justify-content:center;align-items:center}.wpr-rocketcdn-modal__container{max-width:674px;max-height:100vh;overflow-y:auto;box-sizing:border-box}.wpr-rocketcdn-modal iframe{max-width:100%}.wpr-checkbox{position:relative;padding-left:32px}.wpr-checkbox label{user-select:none}.wpr-checkbox [type=checkbox]:not(:checked),.wpr-checkbox [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-checkbox [type=checkbox]:not(:checked)+label:before,.wpr-checkbox [type=checkbox]:checked+label:before{content:"";position:absolute;left:0;top:4px;width:14px;height:14px;border:2px solid #444;border-radius:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after,.wpr-checkbox [type=checkbox]:checked+label:after{content:"";position:absolute;top:5px;left:2px;color:#fff;font-family:"wpr-icomoon";speak:none;font-size:0.875rem;line-height:1.2857142857;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-checkbox [type=checkbox]:not(:checked)+label:after{opacity:0;transform:scale(2)}.wpr-checkbox [type=checkbox]:checked+label:after{opacity:1;transform:scale(1)}.wpr-checkbox [type=checkbox]:checked+label:before{background:#19073b;border-color:#19073b}.wpr-checkbox [type=checkbox]:checked:focus+label:before{background:#665090;border:2px dotted #665090}.wpr-checkbox [type=checkbox]:focus+label:before{border:2px dotted #444}.wpr-checkbox-warning{color:#d33f49;margin-left:16px}.wpr-checkbox-warning::before{margin-right:8px}.wpr-radio{position:relative;padding-left:88px}.wpr-radio label{user-select:none;font-weight:bold}.wpr-radio [type=checkbox]:not(:checked),.wpr-radio [type=checkbox]:checked{position:absolute;left:-9999px}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before,.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{content:"";position:absolute}.wpr-radio [type=checkbox]:not(:checked)+label:before,.wpr-radio [type=checkbox]:checked+label:before{left:0;width:52px;height:22px;background:#fff;border-radius:12px;border:1px solid #444;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label:after,.wpr-radio [type=checkbox]:checked+label:after{width:18px;height:18px;border-radius:100%;background:#444;top:3px;left:3px;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:disabled+label:after,.wpr-radio [type=checkbox]:disabled+label:after{background:#e0e4e9}.wpr-radio [type=checkbox]:disabled+label:before,.wpr-radio [type=checkbox]:disabled+label:before{border:1px solid #e0e4e9}.wpr-radio [type=checkbox]:checked+label:before{border-color:#1eadbf}.wpr-radio [type=checkbox]:checked+label:after{background:#1eadbf;left:33px}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{position:absolute;left:4px;width:52px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:bold;font-size:0.6875rem;line-height:2.1818181818;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-radio [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{content:attr(data-l10n-inactive);left:27px;color:#666}.wpr-radio [type=checkbox]:checked+label .wpr-radio-ui:after{content:attr(data-l10n-active);color:#02707f}.wpr-radio--reverse{padding-right:72px;padding-left:0}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:before,.wpr-radio--reverse [type=checkbox]:checked+label:before{right:0;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label:after,.wpr-radio--reverse [type=checkbox]:checked+label:after{right:33px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label:after{right:3px;left:inherit}.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui,.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before,.wpr-radio--reverse [type=checkbox]:checked+label .wpr-radio-ui:after{right:-2px;left:inherit}.wpr-radio--reverse [type=checkbox]:not(:checked)+label .wpr-radio-ui:before{right:-25px;left:inherit}.wpr-radio [type=checkbox]:not(:checked):focus+label:before{border:1px dashed #444}.wpr-radio [type=checkbox]:checked:focus+label:before{border:1px dashed #1eadbf}.wpr-radio--tips [type=checkbox]:checked+label:before{border-color:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label:after{background:#3ece9d}.wpr-radio--tips [type=checkbox]:checked+label .wpr-radio-ui:after{color:#00a66b}.wpr-radio--tips [type=checkbox]:checked:focus+label:before{border:1px dashed #3ece9d}.wpr-select{position:relative}.wpr-select select{margin:0;padding:0 8px;height:36px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;box-shadow:none;border-radius:0;letter-spacing:.011em}.wpr-select select:focus{outline:none;border-color:#444;box-shadow:none}.wpr-select select:disabled{background-image:none}.wpr-select label{font-weight:bold;margin-left:8px}.wpr-textarea{margin-top:8px}.wpr-textarea textarea{padding:8px;width:100%;height:100px;font-family:Monaco;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-size:0.8125rem;line-height:1.2307692308;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-textarea textarea:focus{outline:none;border-color:#444;box-shadow:none}.wpr-textarea+.wpr-field-description{color:#00a66b}.wpr-text label{color:#666}.wpr-text input[type=text],.wpr-text input[type=number]{margin-top:8px;padding:0 8px;width:100%;height:32px;color:#121116;background:#fff;border:2px solid #c2cad4;border-radius:3px;font-family:Monaco;font-size:0.75rem;line-height:1.3333333333;transition:border 200ms ease-out;-webkit-transition:border 200ms ease-out}.wpr-text input[type=text]:focus,.wpr-text input[type=number]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-text input[type=text].wpr-isError,.wpr-text input[type=number].wpr-isError{border-color:#d33f49}.wpr-text input[type=number]{width:80px}.wpr-text--number label{margin-right:8px}.wpr-upload input[type=file]{display:block;width:252px;margin:8px 8px 8px 0;padding:8px;border:1px solid #e0e4e9;background:#f2f3f6;color:#121116;font-size:0.6875rem;line-height:1.4545454545}.wpr-upload input[type=file]:focus{outline:none;border-color:#444;box-shadow:none}.wpr-multiple{display:flex;align-items:center;flex-wrap:wrap}@media(max-width: 783px){.wpr-multiple{align-items:center;flex-direction:column}}.wpr-multiple .wpr-text{flex:1 1 auto;position:relative;top:-2px}@media(max-width: 783px){.wpr-multiple .wpr-text{width:100%}}.wpr-multiple .wpr-button{margin-left:16px;width:auto;min-width:inherit;padding-right:30px}@media(max-width: 783px){.wpr-multiple .wpr-button{margin-left:0}}.wpr-multiple input[type=text]{flex-grow:2}.wpr-multiple select{height:30px}.wpr-multiple-default{margin-right:20px}.wpr-multiple-list{display:none;padding:8px 0;margin:16px 0 0;background:#f2f3f6;border-radius:2px}.wpr-multiple-list li{margin-bottom:0;padding:4px 16px;font-size:0.8125rem;line-height:1.2307692308;font-family:Monaco}.wpr-multiple-list li span{display:inline-block;transition:all 150ms ease-out;-webkit-transition:all 150ms ease-out}.wpr-multiple-close{position:relative;top:3px;font-size:1rem;line-height:1;transition:color 200ms ease-out;-webkit-transition:color 200ms ease-out}.wpr-multiple-close:focus{outline:none}.wpr-multiple-close:hover,.wpr-multiple-close:focus{color:#d33f49}.wpr-multiple-close:hover+span,.wpr-multiple-close:focus+span{color:#d33f49}.wpr-multiple-select .wpr-list{border:2px solid #c2cad4;background-color:#fff;border-radius:5px;padding:10px;margin:8px 0}.wpr-multiple-select .wpr-list .wpr-list-header{display:flex;justify-content:space-between}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_ads:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_plugins:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-multiple-select-exclude_js_themes:before{font-family:"wpr-icomoon";content:"";padding-right:8px}.wpr-multiple-select .wpr-list .wpr-list-header .wpr-list-header-arrow{width:15px;cursor:pointer;display:flex;transform:rotate(180deg)}.wpr-multiple-select .wpr-list .wpr-list-header h3{font-weight:500;color:#121116;font-size:0.875rem;line-height:1.5}.wpr-multiple-select .wpr-list .wpr-list-body{display:none}.wpr-multiple-select .wpr-list .wpr-list-body li{padding-left:30px}.wpr-multiple-select .wpr-list .wpr-list-body li .wpr-checkbox img{width:15px}.wpr-multiple-select .wpr-list.open .wpr-list-body{display:block}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox label{color:#72777c}.wpr-multiple-select .wpr-list.open .wpr-list-body .wpr-checkbox input[checked=checked]+label{color:#121116}.wpr-multiple-select .wpr-list.open .wpr-list-header{border-bottom:1px solid #c2cad4;margin-bottom:10px;padding-bottom:5px}.wpr-multiple-select .wpr-list.open .wpr-list-header-arrow{transform:rotate(0deg)}.wpr-field--categorizedmultiselect .wpr-list{padding-right:15px;padding-left:15px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{padding-bottom:9px;margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list.open .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list .wpr-list-header{max-height:32px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]+label:before{top:4px}.wpr-field--categorizedmultiselect .wpr-list [type=checkbox]:checked+label:after{top:4px}.wpr-field--categorizedmultiselect .wpr-list-header .wpr-checkbox{padding-left:29px}.wpr-field--categorizedmultiselect .wpr-list-body{display:block;max-height:250px;overflow-y:auto}.wpr-field--categorizedmultiselect .wpr-list-body ul{margin:0}.wpr-field--categorizedmultiselect .wpr-list-body ul li{margin-bottom:10px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox{padding-left:25px}.wpr-field--categorizedmultiselect .wpr-list-body ul li .wpr-checkbox label{color:#121116 !important;font-weight:normal}.wpr-field--categorizedmultiselect .dashicons{color:#72777c}.wpr-field--categorizedmultiselect .wpr-multiple-select-title{font-weight:bold;margin-left:5px}@media only screen and (min-width: 782px){.wpr-field--categorizedmultiselect{padding-right:80px}} \ No newline at end of file From 8b6852381a0b52fa5b31702660144cdf0e16015a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Tue, 13 Jun 2023 14:27:32 -0400 Subject: [PATCH 15/24] update version to alpha2 --- wp-rocket.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wp-rocket.php b/wp-rocket.php index c340d3791e..b61f76f5cf 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ * Plugin Name: WP Rocket * Plugin URI: https://wp-rocket.me * Description: The best WordPress performance plugin. - * Version: 3.14-alpha1 + * Version: 3.14-alpha2 * Requires at least: 5.8 * Requires PHP: 7.3 * Code Name: Iego @@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit; // Rocket defines. -define( 'WP_ROCKET_VERSION', '3.14-alpha1' ); +define( 'WP_ROCKET_VERSION', '3.14-alpha2' ); define( 'WP_ROCKET_WP_VERSION', '5.8' ); define( 'WP_ROCKET_WP_VERSION_TESTED', '5.9' ); define( 'WP_ROCKET_PHP_VERSION', '7.3' ); From d9a70e0076eb3efe78c272e1048a96a2b8eb2835 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 04:43:52 +0000 Subject: [PATCH 16/24] Translate languages/rocket.pot in tr_TR 100% translated source file: 'languages/rocket.pot' on 'tr_TR'. --- languages/rocket-tr_TR.po | 375 ++++++++++++++++++++++++-------------- 1 file changed, 239 insertions(+), 136 deletions(-) diff --git a/languages/rocket-tr_TR.po b/languages/rocket-tr_TR.po index 2f5f35c522..1b3b4024eb 100644 --- a/languages/rocket-tr_TR.po +++ b/languages/rocket-tr_TR.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-24 12:23-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2019-08-26 15:14+0000\n" "Last-Translator: BouRock, 2023\n" "Language-Team: Turkish (Turkey) (https://app.transifex.com/wp-media/teams/18133/tr_TR/)\n" @@ -52,19 +52,19 @@ msgstr "" "Siteniz %s üzerinde barındırılıyor, uyumluluk için Varnish oto-temizle’yi " "etkinleştirdik." -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "Cloudflare hiçbir yanıt vermedi. Lütfen daha sonra tekrar deneyin." -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "Yanlış Cloudflare e-posta adresi veya API anahtarı." -#: inc/Addon/Cloudflare/APIClient.php:322 -#: inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 -#: inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 +#: inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 +#: inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 #: inc/deprecated/3.5.php:129 inc/deprecated/3.5.php:157 @@ -73,11 +73,11 @@ msgstr "Yanlış Cloudflare e-posta adresi veya API anahtarı." msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "İleriki rehberlik için %1$sbelgeleri%2$s okuyun." -#: inc/Addon/Cloudflare/APIClient.php:324 -#: inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 -#: inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 +#: inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 +#: inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 #: inc/deprecated/3.5.php:131 inc/deprecated/3.5.php:159 #: inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 @@ -88,11 +88,11 @@ msgstr "" "https://docs.wp-rocket.me/article/18-using-wp-rocket-with-" "cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "Yanlış Cloudflare Bölge Kimliği." -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s " @@ -101,93 +101,114 @@ msgstr "" "Cloudflare e-posta adresi ve/veya API anahtarı ayarlı değil. Daha fazla " "rehberlik için %1$sbelgeleri%2$s okuyun." -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "Eksik Cloudflare Bölge Kimliği." -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "Etki alanınız Cloudflare’de ayarlanmamış gibi görünüyor." -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" -msgstr "WP Rocket: %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" +msgstr "gün" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." -msgstr "" -"WP Rocket: Cloudflare önbelleği başarılı olarak temizlendi." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" +msgstr "saniye" -#: inc/Addon/Cloudflare/Subscriber.php:364 -#: inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 -#: inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 -#: inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 -#: inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 -#: inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " -msgstr "WP Rocket: " +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" +msgstr "dakika" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "saat" + +#: inc/Addon/Cloudflare/Subscriber.php:224 +#: inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "%1$sWP Rocket:%2$s %3$s" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "%1$sWP Rocket:%2$s Cloudflare önbelleği başarılı olarak temizlendi." + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "Cloudflare geliştirme kipi hatası: %s" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "Cloudflare geliştirme kipi %s" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "Cloudflare önbellek seviyesi hatası: %s" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" -msgstr "Standart" +msgid "standard" +msgstr "standart" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "Cloudflare önbellek seviyesi %s olarak ayarlandı" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "Cloudflare küçültme hatası: %s" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "Cloudflare küçültme %s" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "Cloudflare rocket yükleyici hatası: %s" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "Cloudflare rocket yükleyici %s" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "Cloudflare tarayıcı önbelleği hatası: %s" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 +#, php-format +msgid "Cloudflare browser cache set to %s" +msgstr "Cloudflare tarayıcı önbelleği %s olarak ayarlandı" + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "%1$sWP Rocket:%2$s Cloudflare için en uygun ayarlar aktif edildi:" + +#: inc/Addon/Cloudflare/Subscriber.php:521 #, php-format -msgid "Cloudflare browser cache set to %s seconds" -msgstr "Cloudflare tarayıcı önbelleği %s saniyeye ayarlandı" +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" +"%1$sWP Rocket:%2$s Cloudflare için en uygun ayarlar devre dışı bırakıldı, " +"önceki ayarlara geri döndürüldü:" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " +msgstr "WP Rocket: " #: inc/Addon/Sucuri/Subscriber.php:95 #, php-format @@ -741,7 +762,7 @@ msgstr "" #: inc/Engine/Admin/Settings/Page.php:767 msgid "Activate Remove Unused CSS" -msgstr "Kullanılmayan CSS’yi Kaldır’ı Aktif Et" +msgstr "Kullanılmayan CSS’yi Kaldır’ı aktif et" #: inc/Engine/Admin/Settings/Page.php:773 msgid "CSS safelist" @@ -1601,16 +1622,16 @@ msgid "Rocket Add-ons are complementary features extending available options." msgstr "" "Rocket Eklentileri mevcut seçenekleri genişleten tamamlayıcı özelliklerdir." -#: inc/Engine/Admin/Settings/Page.php:1818 -#: inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 +#: inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "Bu eklenti ile Cloudflare hesabınızı bütünleştirin." -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such " "as clearing the Cloudflare cache and enabling optimal settings with WP " @@ -1620,34 +1641,45 @@ msgstr "" "etkinleştirmek gibi seçenekleri kullanmak için hesap e-postanızı, genel API " "anahtarını ve etki alanını sağlar." -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just " +"activate the official Cloudflare plugin and configure it. WP Rocket will " +"automatically enable compatibility." +msgstr "" +"%1$sOtomatik Platform İyileştirmesini (APO) kullanmayı mı " +"planlıyorsunuz?%2$s Sadece resmi Cloudflare eklentisini aktif edin ve " +"yapılandırın. WP Rocket uyumluluğu otomatik olarak etkinleştirecektir." + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "Varnish" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "" "Varnish sunucunuzda çalışıyorsa, bu eklentiyi aktif etmek zorundasınız." -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " "content is always up-to-date.
%1$sLearn more%2$s" msgstr "" "Varnish önbelleği, WP Rocket önbelleğini her temizlediğinde içeriğin her " -"zaman güncel olduğunu garantilemek için temizlenecektir.
%1$sDaha fazla " -"bilgi edinin%2$s" +"zaman güncel olmasını sağlamak için temizlenecektir.
%1$sDaha fazla bilgi" +" edinin%2$s" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "WebP Uyumluluğu" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "WebP resimleri için tarayıcı uyumluluğunu iyileştirin." -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1660,11 +1692,11 @@ msgstr "" "oluşturamayacağını lütfen unutmayın. WebP resimleri oluşturmak için " "%1$sImagify%2$s öneriyoruz. %3$sDaha fazla bilgi%2$s" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "WP Rocket’in önbelleği temizlendiğinde Sucuri önbelleğini temizler." -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is " "cleared." @@ -1672,48 +1704,48 @@ msgstr "" "WP Rocket’in önbelleği temizlendiğinde Sucuri önbelleğini temizlemek için " "API anahtarınızı verin." -#: inc/Engine/Admin/Settings/Page.php:1943 -#: inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 +#: inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "Sucuri" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "Bu eklenti ile Sucuri önbelleğini eşitleyin." -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "Cloudflare kimlik bilgileri" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "Cloudflare ayarları" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "Genel API anahtarı" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "API anahtarınızı bulun" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "Hesap e-postası" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "Bölge Kimliği - Zone ID" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "Geliştirme kipi" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " @@ -1722,11 +1754,11 @@ msgstr "" "Web sitenizde geçici olarak geliştirme kipini aktif edin. Bu ayar otomatik " "olarak 3 saat sonra kapanacak. %1$sDaha fazla bilgi edinin%2$s" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "En uygun ayarlar" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." @@ -1734,11 +1766,11 @@ msgstr "" "Hız, performans puanı ve uyumluluk için Cloudflare yapılandırmanızı otomatik" " olarak iyileştirir." -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "Göreli protokol" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static " "files (CSS, JS, images) will be rewritten to use // instead of http:// or " @@ -1748,11 +1780,11 @@ msgstr "" "dosyaların (CSS, JS, resimler) URL’leri, http:// veya https:// yerine // " "kullanmak için yeniden yazılacaktır." -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "Sucuri kimlik bilgileri" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 " @@ -1761,7 +1793,7 @@ msgstr "" "Güvenlik Duvarı API anahtarı (eklenti için), {32 karakter}/{32 karakter} " "biçiminde olmak zorundadır:" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "API anahtarınızı bulun" @@ -1770,7 +1802,7 @@ msgstr "API anahtarınızı bulun" msgid "Upload file and import settings" msgstr "Dosyayı gönder ve ayarları içe aktar" -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format " "{32 characters}/{32 characters}." @@ -1778,12 +1810,12 @@ msgstr "" "Sucuri Eklentisi: Sucuri güvenlik duvarı için API anahtarı, {32 " "karakter}/{32 karakter} biçiminde olmak zorundadır." -#: inc/Engine/Admin/Settings/Settings.php:465 +#: inc/Engine/Admin/Settings/Settings.php:452 #: inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "Ayarlar kaydedildi." -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved " "because it disables caching and optimizations for every page on your site." @@ -2412,7 +2444,7 @@ msgstr "Şimdi yükselt" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:744 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "Bu bildirimi anımsatma" @@ -2739,7 +2771,7 @@ msgstr "" "dosyalarının eksik olduğu görülüyor. Lütfen bu sorunu çözmek için " "%1$sMyKinsta%2$s hesabınız aracılığıyla Kinsta desteği ile temasa geçin." -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " @@ -2749,6 +2781,71 @@ msgstr "" "CSS Dosyalarını Birleştir’in özellikleriyle uyumlu değil. " "Etkisizleştirmenizi şiddetle öneririz." +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled " +"Cloudflare auto-purge for compatibility. If you have APO activated, it is " +"also compatible." +msgstr "" +"Siteniz resmi Cloudflare eklentisini kullanıyor. Uyumluluk için Cloudflare " +"otomatik temizlemeyi etkinleştirdik. Eğer APO’nuzu aktif ettiyseniz, o da " +"uyumludur." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to " +"ensure content is always up-to-date." +msgstr "" +"Cloudflare önbelleği, WP Rocket önbelleğini her temizlediğinde içeriğin her " +"zaman güncel olmasını sağlamak için temizlenecektir." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO " +"is not yet compatible with that feature." +msgstr "" +"%1$sWP Rocket:%2$s \"Değişken Tanımlama Bilgileri Önbelleği\"ni " +"kullanıyorsunuz. Cloudflare APO henüz bu özellikle uyumlu değil." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative " +"way to be page-cache friendly. %1$sMore info%2$s" +msgstr "" +"Sayfa önbelleği dostu olmanın alternatif bir yolu için ya Cloudflare APO’yu " +"etkisizleştirmeli ya da “Değişken Tanımlama Bilgileri Önbelleği” " +"geliştiricilerinin kullanımını gerektiren temayı/eklentiyi " +"işaretlemelisiniz. %1$sDaha fazla bilgi%2$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile " +"devices\". You need to activate \"Cache by Device Type\" %3$ssetting%5$s on " +"Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" +"%1$sWP Rocket:%2$s \"Mobil cihazlar için önbellek dosyalarını ayır\"ı " +"kullanıyorsunuz. Önbelleğin doğru sürümünü sunmak için Cloudflare APO’da " +"\"Cihaz Türüne Göre Önbellekle\" %3$sayarını%5$s aktif etmeniz " +"gerek.%4$sDaha fazla bilgi%5$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare " +"APO. If you judge it necessary for the website to have a different cache on " +"mobile and desktop, we suggest you enable our “Separate Cache Files for " +"Mobiles Devices” to ensure the generated cache is accurate." +msgstr "" +"%1$sWP Rocket:%2$s Cloudflare APO’da \"Cihaz Türüne Göre Önbellekle\"yi " +"etkinleştirdiniz. Eğer web sitesi için mobil ve masaüstünde farklı bir " +"önbelleğe sahip olmasının gerekli olduğuna karar verirseniz, oluşturulan " +"önbelleğin doğru olduğundan emin olmak için \"Mobil Cihazlar için Önbellek " +"Dosyalarını Ayır\" seçeneğimizi etkinleştirmenizi öneririz." + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -2865,8 +2962,8 @@ msgid "" "Remove Unused CSS is currently activated in Perfmatters. If you want to use " "WP Rocket's Remove Unused CSS feature, disable this option in Perfmatters." msgstr "" -"Kullanılmayan CSS’yi Kaldır şu anda Perfmatters’ta etkin. Eğer WP Rocket’in " -"Kullanılmayan CSS’yi Kaldır özelliğini kullanmak istiyorsanız, " +"Kullanılmayan CSS’yi Kaldır şu anda Perfmatters’ta aktif edildi. Eğer WP " +"Rocket’in Kullanılmayan CSS’yi Kaldır özelliğini kullanmak istiyorsanız, " "Perfmatters’ta bu seçeneği etkisizleştirin." #: inc/ThirdParty/Plugins/Optimization/RapidLoad.php:39 @@ -2876,9 +2973,9 @@ msgid "" "disable the RapidLoad Power-Up for Autoptimize plugin." msgstr "" "Otomatikleştirilmiş kullanılmayan CSS kaldırma şu anda RapidLoad Power-Up " -"for Autoptimize’da etkin. Eğer WP Rocket’in Kullanılmayan CSS’yi Kaldır " -"özelliğini kullanmak istiyorsanız, RapidLoad Power-Up for Autoptimize " -"eklentisini etkisizleştirin." +"for Autoptimize’da aktif edildi. Eğer WP Rocket’in Kullanılmayan CSS’yi " +"Kaldır özelliğini kullanmak istiyorsanız, RapidLoad Power-Up for Autoptimize" +" eklentisini etkisizleştirin." #: inc/ThirdParty/Plugins/Optimization/WPMeteor.php:42 #, php-format @@ -2965,7 +3062,7 @@ msgstr[1] "Aşağıdaki desenler geçersizdir ve kaldırıldı:" msgid "More info" msgstr "Daha fazla bilgi" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:753 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -3035,15 +3132,7 @@ msgstr "" "%s: Bir ya da daha fazla eklenti etkinleştirildi veya " "etkisizleştirildi, sitenizin ön ucunu etkilerse önbelleği temizleyin." -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not " -"be active at the same time." -msgstr "" -"WP Rocket Cloudflare Eklentisi benzer işlevsellikler sağlar. Aynı anda aktif" -" edilemezler." - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this " @@ -3052,11 +3141,11 @@ msgstr "" "%s: Aşağıdaki eklentiler bu eklenti ile uyumlu değil ve " "beklenmeyen sonuçlara neden olabilir:" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "Devre Dışı Bırak" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in " "WP Rocket from working correctly. Please deactivate it if you have problems." @@ -3065,7 +3154,7 @@ msgstr "" "seçeneklerin doğru olarak çalışmasını önler. Eğer sorunlar yaşarsanız lütfen" " devre dşı bırakın." -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket " @@ -3077,7 +3166,7 @@ msgstr "" "Genel%2$s sayfasında Endurance Önbelleğinin önbellek seviyesini Kapalı " "(Seviye 0) olarak ayarlayın." -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work " @@ -3086,20 +3175,20 @@ msgstr "" "%1$s: Özel bir kalıcı bağlantı yapısı eklentinin düzgün bir şekilde " "çalışması için gereklidir. %2$sKalıcı bağlantılar ayarlarına gidin%3$s" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "" "%s could not modify the .htaccess file due to missing writing permissions." msgstr "" "Eksik yazma izinlerinden dolayı %s .htaccess dosyasını yapılandıramadı." -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:842 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" "Sorun giderme: %1$sSistem dosyalarını nasıl yazılabilir yaparsınız%2$s" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:844 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" @@ -3107,7 +3196,7 @@ msgstr "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function " "correctly." @@ -3115,7 +3204,7 @@ msgstr "" "Endişelenmeyin, WP Rocket’in sayfa önbelleklemesi ve ayarları hala düzgün " "çalışacaktır." -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" @@ -3123,7 +3212,7 @@ msgstr "" "En iyi performans için .htaccess dosyanıza aşağıdaki satırları eklemeniz " "önerilir (gerekli değil):" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your " @@ -3132,7 +3221,7 @@ msgstr "" "%1$s gitmeye hazır! %2$sYükleme sürenizi deneyin%4$s, ya da " "%3$sayarlarınızı%4$s ziyaret edin." -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this" " website?" @@ -3140,16 +3229,16 @@ msgstr "" "WP Rocket’in hassas olmayan tanılama verilerini bu web sitesinden " "toplamasına izin verir misiniz?" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "" "Bu bize gelecekte WP Rocket’i sizin için iyileştirmemize yardımcı olacak." -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "Ne tür bilgi toplayacağız?" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email " @@ -3161,64 +3250,68 @@ msgstr "" "e-posta adresini (lisans doğrulaması hariç), IP adresini ya da üçüncü taraf " "API anahtarını iletmez." -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "Evet, izin ver" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "Hayır, teşekkürler" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "Teşekkür ederiz!" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "WP Rocket web sitenizden şimdi şu ölçümleri toplar:" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "%s: Önbellek temizlendi." -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "%s: Yazı önbelleği temizlendi." -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "%s: Terim önbelleği temizlendi." -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "%s: Kullanıcı önbelleği temizlendi." -#: inc/admin/ui/notices.php:756 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "Önyüklemeyi durdur" -#: inc/admin/ui/notices.php:762 +#: inc/admin/ui/notices.php:757 msgid "Turn on Remove Unused CSS" msgstr "Kullanılmayan CSS’yi Kaldır’ı Aç" -#: inc/admin/ui/notices.php:780 +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "“Mobil Cihazlar İçin Önbellek Dosyalarını Ayır”ı şimdi etkinleştir" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "Devre dışı bırakmaya zorla" -#: inc/admin/ui/notices.php:799 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "Aşağıdaki kod bu dosyaya yazılmalıdır:" -#: inc/admin/ui/notices.php:830 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "Eksik yazma izinlerinden dolayı %s kendini yapılandıramıyor." -#: inc/admin/ui/notices.php:836 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "Etkilenen dosya/klasör: %s" @@ -3454,6 +3547,16 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "Cloudflare’a bağlantı başarısız oldu" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "WP Rocket: %s" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "" +"WP Rocket: Cloudflare önbelleği başarılı olarak temizlendi." + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -3987,11 +4090,11 @@ msgid "Import settings" msgstr "Ayarları içe aktarın" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "Eklenti durumu" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "Seçenekleri değiştir" From fa0d1e52af707c81dd4d9f6f59772c235879798a Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 05:23:49 +0000 Subject: [PATCH 17/24] Translate languages/rocket.pot in de_DE 100% translated source file: 'languages/rocket.pot' on 'de_DE'. --- languages/rocket-de_DE.po | 355 ++++++++++++++++++++++++-------------- 1 file changed, 229 insertions(+), 126 deletions(-) diff --git a/languages/rocket-de_DE.po b/languages/rocket-de_DE.po index 9c90b58aad..9a40f2a3e3 100644 --- a/languages/rocket-de_DE.po +++ b/languages/rocket-de_DE.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-24 12:23-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2019-08-26 15:14+0000\n" "Last-Translator: Christian Herrmann, 2023\n" "Language-Team: German (Germany) (https://app.transifex.com/wp-media/teams/18133/de_DE/)\n" @@ -54,20 +54,20 @@ msgstr "" "Deine Website ist bei %s gehostet, wir haben daher das automatische Leeren " "des serverseitigen Varnish-Caches aktiviert." -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "" "Cloudflare hat keine Antwort zurückgegeben. Bitte versuche es später erneut." -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "Ungültige Cloudflare-E-Mail-Adresse oder API-Schlüssel." -#: inc/Addon/Cloudflare/APIClient.php:322 -#: inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 -#: inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 +#: inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 +#: inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 #: inc/deprecated/3.5.php:129 inc/deprecated/3.5.php:157 @@ -76,11 +76,11 @@ msgstr "Ungültige Cloudflare-E-Mail-Adresse oder API-Schlüssel." msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "Lies die %1$sDokumentation%2$s für weitere Hinweise." -#: inc/Addon/Cloudflare/APIClient.php:324 -#: inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 -#: inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 +#: inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 +#: inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 #: inc/deprecated/3.5.php:131 inc/deprecated/3.5.php:159 #: inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 @@ -91,11 +91,11 @@ msgstr "" "https://docs.wp-rocket.me/article/18-using-wp-rocket-with-" "cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "Ungültige Cloudflare Zone ID." -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s " @@ -104,92 +104,114 @@ msgstr "" "Cloudflare-E-Mail und/oder API-Schlüssel sind nicht eingerichtet. Lies die " "%1$sDokumentation%2$s für weitere Anleitung." -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "Fehlende Cloudflare Zone ID." -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "Wie es aussieht, ist deine Domain nicht auf Cloudflare eingerichtet." -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" -msgstr "WP Rocket: %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" +msgstr "Tage" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." -msgstr "WP Rocket: Cloudflare-Cache erfolgreich geleert." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" +msgstr "Sekunden" -#: inc/Addon/Cloudflare/Subscriber.php:364 -#: inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 -#: inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 -#: inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 -#: inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 -#: inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " -msgstr "WP Rocket: " +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" +msgstr "Minuten" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "Stunden" + +#: inc/Addon/Cloudflare/Subscriber.php:224 +#: inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "%1$sWP Rocket:%2$s %3$s" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "%1$sWP Rocket:%2$s Cloudflare-Cache erfolgreich geleert." + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "Fehler mit Cloudflare Development Mode: %s" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "Cloudflare Development Mode: %s" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "Fehler mit Cloudflare Cache Level: %s" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" +msgid "standard" msgstr "Standard" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "Cloudflare Cache Level: %s" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "Fehler mit Cloudflare Minification: %s" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "Cloudflare Minification: %s" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "Fehler mit Cloudflare RocketLoader: %s" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "Cloudflare RocketLoader: %s" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "Fehler mit CloudFlare Browser Cache: %s" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 +#, php-format +msgid "Cloudflare browser cache set to %s" +msgstr "Cloudflare-Browsercache auf %s eingestellt" + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "%1$sWP Rocket:%2$s Optimale Einstellungen für Cloudflare aktiviert:" + +#: inc/Addon/Cloudflare/Subscriber.php:521 #, php-format -msgid "Cloudflare browser cache set to %s seconds" -msgstr "CloudFlare Browser Cache: %s Sekunden" +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" +"%1$sWP Rocket:%2$s Optimale Einstellungen für Cloudflare wurden deaktiviert " +"und die vorherigen Einstellungen wiederhergestellt:" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " +msgstr "WP Rocket: " #: inc/Addon/Sucuri/Subscriber.php:95 #, php-format @@ -1590,16 +1612,16 @@ msgstr "Rocket Add-ons" msgid "Rocket Add-ons are complementary features extending available options." msgstr "Rocket Add-ons erweitern den Funktionsumfang um zusätzliche Features." -#: inc/Engine/Admin/Settings/Page.php:1818 -#: inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 +#: inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "Integriere dein Cloudflare-Konto mit diesem Add-on." -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such " "as clearing the Cloudflare cache and enabling optimal settings with WP " @@ -1609,17 +1631,28 @@ msgstr "" "Rocket auswählen kannst, gib hier die folgenden in deinem Cloudflare-Konto " "hinterlegten Daten ein: E-Mail-Adresse, globaler API-Schlüssel, Domain" -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just " +"activate the official Cloudflare plugin and configure it. WP Rocket will " +"automatically enable compatibility." +msgstr "" +"%1$sPlanst du, Automatic Platform Optimization (APO) einzusetzen?%2$s " +"Aktiviere einfach das offizielle Cloudflare-Plugin und konfiguriere es. WP " +"Rocket wird automatisch für Kompatibilität sorgen." + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "Varnish" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "" "Du musst diese Einstellung aktivieren, wenn Varnish auf deinem Server aktiv " "ist." -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " @@ -1628,15 +1661,15 @@ msgstr "" "Der Varnish-Cache wird automatisch jedes Mal geleert, wenn der Cache von WP " "Rocket geleert wird, damit er immer aktuell ist.
%1$sMehr erfahren%2$s" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "WebP-Kompatibilität" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "Browserkompatibilität für WebP-Bilder verbessern" -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1649,11 +1682,11 @@ msgstr "" "Bilder für dich erstellen kann. Dür das Erstellen von WebP-Bildern empfehlen" " wir %1$sImagify%2$s. %3$sMehr erfahren%2$s" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "Sucuri-Cache leeren, wenn der Cache von WP Rocket geleert wird." -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is " "cleared." @@ -1661,48 +1694,48 @@ msgstr "" "Gib deinen API-Schlüssel an, um auch den Sucuri-Cache zu leeren, sobald der " "Cache von WP Rocket geleert wird." -#: inc/Engine/Admin/Settings/Page.php:1943 -#: inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 +#: inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "Sucuri" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "Sucuri-Cache mit diesem Add-on synchronisieren." -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "Cloudflare-Zugangsdaten" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "Cloudflare-Einstellungen" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "Globaler API-Schlüssel:" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "API-Schlüssel finden" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "E-Mail-Adresse des Kontos" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "Zone ID" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "Entwicklungsmodus" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " @@ -1712,11 +1745,11 @@ msgstr "" "Einstellung wird nach 3 Stunden automatisch deaktiviert. %1$sMehr " "erfahren%2$s" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "Optimale Einstellungen" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." @@ -1724,11 +1757,11 @@ msgstr "" "Verbessert deine Cloudflare-Konfiguration automatischen hinsichtlich " "Geschwindigkeit, Leistungsfähigkeit und Kompatibilität." -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "Relatives Protokoll" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static " "files (CSS, JS, images) will be rewritten to use // instead of http:// or " @@ -1738,11 +1771,11 @@ msgstr "" "statischer Dateien (CSS, JS, Bilder) werden auf // anstatt http:// oder " "https:// umgeschrieben." -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "Sucuri-Zugangsdaten" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 " @@ -1751,7 +1784,7 @@ msgstr "" "Firewall-API-Schlüssel (für Plugin) muss das Format {32 Zeichen}/{32 " "Zeichen} aufweisen:" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "API-Schlüssel finden" @@ -1760,7 +1793,7 @@ msgstr "API-Schlüssel finden" msgid "Upload file and import settings" msgstr "Datei hochladen und Einstellungen importieren." -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format " "{32 characters}/{32 characters}." @@ -1768,12 +1801,12 @@ msgstr "" "Sucuri Add-on: Der API-Schlüssel für die Sucuri-Firewall muss im Format " "{32 Zeichen}/{32 Zeichen} sein:" -#: inc/Engine/Admin/Settings/Settings.php:465 +#: inc/Engine/Admin/Settings/Settings.php:452 #: inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "Einstellungen gespeichert." -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved " "because it disables caching and optimizations for every page on your site." @@ -2411,7 +2444,7 @@ msgstr "Upgrade jetzt durchführen" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:744 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "Diese Meldung ausblenden" @@ -2737,7 +2770,7 @@ msgstr "" "und WP Rocket. Kontaktiere bitte den Support bei Kinsta über dein " "%1$sMyKinsta%2$s-Konto, um dieses Problem zu lösen." -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " @@ -2747,6 +2780,71 @@ msgstr "" " unbenötigten CSS und dem Zusammenfassen von CSS-Dateien nicht kompatibel. " "Wir empfehlen dringend, es zu deaktivieren." +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled " +"Cloudflare auto-purge for compatibility. If you have APO activated, it is " +"also compatible." +msgstr "" +"Deine Website benutzt das offizielle Cloudflare-Plugin. Wir haben das " +"automatische Leeren für Cloudflare aus Kompatibilitätsgründen aktiviert. " +"Wenn du APO aktiviert hast, ist es auch kompatibel." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to " +"ensure content is always up-to-date." +msgstr "" +"Der Cloudflare-Cache wird jedes Mal geleert, wenn WP Rocket seinen Cache " +"leert, damit Inhalte immer auf dem neuesten Stand sind." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO " +"is not yet compatible with that feature." +msgstr "" +"%1$sWP Rocket:%2$s Du nutzt den „Dynamischen Cookie-Cache\". Cloudflare-APO " +"ist derzeit nicht mit dieser Funktion kompatibel." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative " +"way to be page-cache friendly. %1$sMore info%2$s" +msgstr "" +"Du solltest Cloudflare-APO entweder deaktivieren oder dich beim Anbieter des" +" Themes/Plugins, das „Dynamischen Cookie-Cache“ erfordert nach alternativen " +"Methoden erkundigen, das Caching von Seiten zu ermöglichen. %1$sMehr " +"erfahren%2$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile " +"devices\". You need to activate \"Cache by Device Type\" %3$ssetting%5$s on " +"Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" +"%1$sWP Rocket:%2$s Du benutzt die Funktion „Separater Cache für mobile " +"Geräte“. Damit die richtige Version des Caches ausgeliefert wird, musst du " +"die %3$sEinstellung%5$s „Cache nach Gerätetyp“ bei der Cloudflare-APO " +"aktivieren. %4$sMehr erfahren%5$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare " +"APO. If you judge it necessary for the website to have a different cache on " +"mobile and desktop, we suggest you enable our “Separate Cache Files for " +"Mobiles Devices” to ensure the generated cache is accurate." +msgstr "" +"%1$sWP Rocket:%2$s Du hast „Cache nach Gerätetyp“ bei der Cloudflare-APO " +"aktiviert. Falls du es für die Website für notwendig hältst, verschiedene " +"Caches für Mobilgeräte und Desktop zu haben, schlagen wir vor, „Separater " +"Cache für mobile Geräte“ zu aktivieren, um sicherzustellen, dass der Cache " +"korrekt erzeugt wird." + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -2963,7 +3061,7 @@ msgstr[1] "Folgende Muster sind ungültig und wurden entfernt:" msgid "More info" msgstr "Mehr erfahren" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:753 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -3033,15 +3131,7 @@ msgstr "" "%s: Plugin(s) aktiviert oder deaktiviert. Falls dies die " "Darstellung deiner Website betrifft, lösche jetzt den Cache." -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not " -"be active at the same time." -msgstr "" -"WP Rocket Cloudflare Add-on bietet vergleichbare Funktionalitäten. Sie " -"können nicht zur gleichen Zeit aktiv sein." - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this " @@ -3050,11 +3140,11 @@ msgstr "" "%s: Folgende Plugins sind mit diesem Plugin nicht " "kompatibel und können unerwartete Ergebnisse hervorrufen:" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "Deaktivieren" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in " "WP Rocket from working correctly. Please deactivate it if you have problems." @@ -3063,7 +3153,7 @@ msgstr "" "Optionen in WP Rocket korrekt funktionieren. Bitte deaktiviere es, falls du" " Probleme damit hast." -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket " @@ -3075,7 +3165,7 @@ msgstr "" "Seite %1$sEinstellungen > Allgemein%2$sauf „Aus“ (Level 0), um Probleme zu " "verhindern." -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work " @@ -3084,7 +3174,7 @@ msgstr "" "%1$s: Eine angepasste Permalink-Struktur ist erforderlich für die korrekte " "Funktionsweise des Plugins. %2$sPermalink-Einstellungen aufrufen%3$s" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "" "%s could not modify the .htaccess file due to missing writing permissions." @@ -3092,13 +3182,13 @@ msgstr "" "%s konnte die .htaccess-Datei nicht ändern aufgrund fehlender " "Schreibberechtigungen." -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:842 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" "Fehlerbehebung: %1$sFehlende Schreibrechte für System-Dateien beheben%2$s" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:844 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" @@ -3107,7 +3197,7 @@ msgstr "" "system-dateien-beheben-htaccess-wp-" "configphp?utm_source=wp_plugin&utm_medium=wp_rocket" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function " "correctly." @@ -3115,7 +3205,7 @@ msgstr "" "Keine Bange. Das Cachen der Seiten durch WP Rocket und die Einstellungen " "werden weiterhin korrekt funktionieren." -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" @@ -3123,7 +3213,7 @@ msgstr "" "Für optimale Leistung wird das Hinzufügen folgender Zeilen in deine " ".htaccess-Datei empfohlen (nicht erforderlich):" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your " @@ -3132,7 +3222,7 @@ msgstr "" "%1$s ist fertig aktiviert! %2$sTeste deine Ladezeiten%4$s, oder schau dir " "deine %3$sEinstellungen%4$s an." -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this" " website?" @@ -3140,16 +3230,16 @@ msgstr "" "Würdest du WP Rocket erlauben, anonymisierte technische Daten von dieser " "Website zu sammeln?" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "" "Das würde uns dabei unterstützen, WP Rocket in Zukunft weiter zu verbessern." -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "Um welche Art Daten geht es genau?" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email " @@ -3161,65 +3251,69 @@ msgstr "" "Namen, E-Mail-Adressen (außer zur Lizenzprüfung), IP-Adressen oder API-" "Schlüssel von Drittanbietern übermitteln." -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "Ja, erlauben" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "Nein, danke" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "Danke!" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "WP Rocket erhebt jetzt die folgenden Kennzahlen von deiner Website:" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "%s: Cache geleert." -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "%s: Cache für Beitrag/Seite geleert." -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "%s: Cache für Begriff geleert." -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "%s: Cache für Benutzer/-in geleert." -#: inc/admin/ui/notices.php:756 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "Vorladen beenden" -#: inc/admin/ui/notices.php:762 +#: inc/admin/ui/notices.php:757 msgid "Turn on Remove Unused CSS" msgstr "Unbenutztes CSS entfernen aktivieren" -#: inc/admin/ui/notices.php:780 +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "„Separater Cache für mobile Geräte“ jetzt aktivieren" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "Deaktivierung forcieren" -#: inc/admin/ui/notices.php:799 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "Folgender Code hätte in diese Datei geschrieben werden sollen:" -#: inc/admin/ui/notices.php:830 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "" "%s kann sich wegen fehlender Schreibrechte nicht selbst konfigurieren." -#: inc/admin/ui/notices.php:836 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "Betroffene Dateien/Ordner: %s" @@ -3455,6 +3549,15 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "Keine Verbindung mit Cloudflare möglich" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "WP Rocket: %s" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "WP Rocket: Cloudflare-Cache erfolgreich geleert." + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -3994,11 +4097,11 @@ msgid "Import settings" msgstr "Einstellungen importieren" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "Add-on Status" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "Einstellungen bearbeiten" From 82e2347680c10514d40673fb0beec6ee4500eedd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Wed, 14 Jun 2023 11:55:54 -0400 Subject: [PATCH 18/24] Update CF APO compatiblity (#5974) --- inc/ThirdParty/Plugins/CDN/Cloudflare.php | 92 ++++++++++++------- .../Plugins/CDN/CloudflareFacade.php | 52 +++++++++++ inc/ThirdParty/ServiceProvider.php | 7 +- .../addAfterRocketCleanToActions.php | 10 -- .../CDN/Cloudflare/addCleanDomainOnPurge.php | 12 --- .../addRocketPurgeUrlToPurgeUrl.php | 39 -------- .../addAfterRocketCleanToActions.php | 22 ----- .../CDN/Cloudflare/addCleanDomainOnPurge.php | 22 ----- .../addRocketPurgeUrlToPurgeUrl.php | 58 ------------ .../addAfterRocketCleanToActions.php | 57 ------------ .../CDN/Cloudflare/addCleanDomainOnPurge.php | 56 ----------- .../addRocketPurgeUrlToPurgeUrl.php | 67 -------------- .../Cloudflare/disableCloudflareOption.php | 4 +- .../CDN/Cloudflare/displayApoCacheNotice.php | 4 +- .../Cloudflare/displayApoCookiesNotice.php | 4 +- .../displayServerPushingModeNotice.php | 4 +- .../Plugins/CDN/Cloudflare/hideAddonRadio.php | 4 +- .../CDN/Cloudflare/updateAddonField.php | 4 +- 18 files changed, 129 insertions(+), 389 deletions(-) create mode 100644 inc/ThirdParty/Plugins/CDN/CloudflareFacade.php delete mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php delete mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php delete mode 100644 tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php delete mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php delete mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php delete mode 100644 tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php delete mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php delete mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php delete mode 100644 tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php diff --git a/inc/ThirdParty/Plugins/CDN/Cloudflare.php b/inc/ThirdParty/Plugins/CDN/Cloudflare.php index 5090f3978e..0991345323 100644 --- a/inc/ThirdParty/Plugins/CDN/Cloudflare.php +++ b/inc/ThirdParty/Plugins/CDN/Cloudflare.php @@ -32,17 +32,26 @@ class Cloudflare implements Subscriber_Interface { */ private $beacon; + /** + * CloudflareFacade instance. + * + * @var CloudflareFacade + */ + private $facade; + /** * Constructor. * - * @param Options_Data $options Options instance. - * @param Options $options_api Options API instance. - * @param Beacon $beacon Beacon instance. + * @param Options_Data $options Options instance. + * @param Options $options_api Options API instance. + * @param Beacon $beacon Beacon instance. + * @param CloudflareFacade $facade CloudflareFacade instance. */ - public function __construct( Options_Data $options, Options $options_api, Beacon $beacon ) { + public function __construct( Options_Data $options, Options $options_api, Beacon $beacon, CloudflareFacade $facade ) { $this->options = $options; $this->options_api = $options_api; $this->beacon = $beacon; + $this->facade = $facade; } /** @@ -60,9 +69,11 @@ public static function get_subscribed_events() { 'rocket_display_input_do_cloudflare' => 'hide_addon_radio', 'rocket_cloudflare_field_settings' => 'update_addon_field', 'pre_get_rocket_option_do_cloudflare' => 'disable_cloudflare_option', - 'cloudflare_purge_everything_actions' => 'add_clean_domain_on_purge', - 'cloudflare_purge_by_url' => [ 'add_rocket_purge_url_to_purge_url', 10, 2 ], - 'cloudflare_purge_url_actions' => 'add_after_rocket_clean_to_actions', + 'after_rocket_clean_domain' => 'purge_cloudflare', + 'after_rocket_clean_post' => 'purge_cloudflare_post', + 'after_rocket_clean_files' => 'purge_cloudflare_partial', + 'rocket_rucss_complete_job_status' => 'purge_cloudflare_after_usedcss', + 'rocket_rucss_after_clearing_usedcss' => 'purge_cloudflare_after_usedcss', 'admin_post_rocket_enable_separate_mobile_cache' => 'enable_separate_mobile_cache', ]; } @@ -316,50 +327,69 @@ private function can_display_notice(): bool { } /** - * Adds clear WP Rocket cache on CF purge - * - * @param array $actions Actions to clear Cloudflare. + * Purge everything on Cloudflare * - * @return array + * @return void */ - public function add_clean_domain_on_purge( $actions ) { - $actions[] = 'after_rocket_clean_domain'; + public function purge_cloudflare() { + if ( ! $this->is_plugin_active() ) { + return; + } - return $actions; + $this->facade->purge_everything(); } /** - * Add WP Rocket purge URLs list to CF purge URLs list + * Purges post and related URLs on Cloudflare * - * @param array $urls CF purge URLs list. - * @param int $post_id Post ID. + * @param int $post_id Post ID. * - * @return array + * @return void */ - public function add_rocket_purge_url_to_purge_url( $urls, $post_id ) { - $post = get_post( $post_id ); + public function purge_cloudflare_post( $post_id ) { + if ( ! $this->is_plugin_active() ) { + return; + } + + $this->facade->purge_urls( $post_id ); + } - if ( empty( $post ) ) { - return $urls; + /** + * Purges posts when using purge this URL button + * + * @param array $urls Array of URLs. + * + * @return void + */ + public function purge_cloudflare_partial( $urls ) { + if ( ! $this->is_plugin_active() ) { + return; } - $rocket_urls = rocket_get_purge_urls( $post_id, $post ); + $post_ids = array_filter( array_map( 'url_to_postid', $urls ) ); - return array_unique( array_merge( $urls, $rocket_urls ) ); + $this->facade->purge_urls( $post_ids ); } /** - * Adds clear WP Rocket partial cache on CF partial purge + * Purges CF after Used CSS generation or clean * - * @param array $actions Actions to clear CF URL cache. + * @param string $url URL to purge. * - * @return array + * @return void */ - public function add_after_rocket_clean_to_actions( $actions ) { - $actions[] = 'after_rocket_clean_post'; - $actions[] = 'after_rocket_clean_file'; + public function purge_cloudflare_after_usedcss( $url ) { + if ( ! $this->is_plugin_active() ) { + return; + } + + $post_id = url_to_postid( $url ); + + if ( empty( $post_id ) ) { + return; + } - return $actions; + $this->facade->purge_urls( $post_id ); } /** diff --git a/inc/ThirdParty/Plugins/CDN/CloudflareFacade.php b/inc/ThirdParty/Plugins/CDN/CloudflareFacade.php new file mode 100644 index 0000000000..28796876d1 --- /dev/null +++ b/inc/ThirdParty/Plugins/CDN/CloudflareFacade.php @@ -0,0 +1,52 @@ +hooks = new Hooks(); + } + + /** + * Calls purge everything from CF hooks class + * + * @return void + */ + public function purge_everything() { + if ( is_null( $this->hooks ) ) { + $this->set_hooks(); + } + + $this->hooks->purgeCacheEverything(); + } + + /** + * Calls purge relevant URLs from CF hooks class + * + * @param int|array $post_ids Post ID or array of post IDs. + * + * @return void + */ + public function purge_urls( $post_ids ) { + if ( is_null( $this->hooks ) ) { + $this->set_hooks(); + } + + $this->hooks->purgeCacheByRelevantURLs( $post_ids ); + } +} diff --git a/inc/ThirdParty/ServiceProvider.php b/inc/ThirdParty/ServiceProvider.php index 2b3ef2cba8..f5c2180c46 100644 --- a/inc/ThirdParty/ServiceProvider.php +++ b/inc/ThirdParty/ServiceProvider.php @@ -33,11 +33,9 @@ use WP_Rocket\ThirdParty\Plugins\TheEventsCalendar; use WP_Rocket\ThirdParty\Plugins\ThirstyAffiliates; use WP_Rocket\ThirdParty\Plugins\UnlimitedElements; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; use WP_Rocket\ThirdParty\Plugins\Jetpack; -use WP_Rocket\ThirdParty\Plugins\WpDiscuz; use WP_Rocket\ThirdParty\Plugins\WPGeotargeting; -use WP_Rocket\ThirdParty\Themes\MinimalistBlogger; use WP_Rocket\ThirdParty\Plugins\SEO\RankMathSEO; use WP_Rocket\ThirdParty\Plugins\SEO\AllInOneSEOPack; use WP_Rocket\ThirdParty\Plugins\SEO\SEOPress; @@ -95,6 +93,7 @@ class ServiceProvider extends AbstractServiceProvider { 'seopress', 'the_seo_framework', 'wpml', + 'cloudflare_plugin_facade', 'cloudflare_plugin_subscriber', 'rocket_lazy_load', 'the_events_calendar', @@ -214,11 +213,13 @@ public function register() { $this->getContainer() ->share( 'wpml', WPML::class ) ->addTag( 'common_subscriber' ); + $this->getContainer()->add( 'cloudflare_plugin_facade', CloudflareFacade::class ); $this->getContainer() ->share( 'cloudflare_plugin_subscriber', Cloudflare::class ) ->addArgument( $options ) ->addArgument( $this->getContainer()->get( 'options_api' ) ) ->addArgument( $this->getContainer()->get( 'beacon' ) ) + ->addArgument( $this->getContainer()->get( 'cloudflare_plugin_facade' ) ) ->addTag( 'common_subscriber' ); $this->getContainer() ->share( 'jetpack', Jetpack::class ) diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php deleted file mode 100644 index 4bfef59ade..0000000000 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ /dev/null @@ -1,10 +0,0 @@ - [ - 'config' => [], - 'expected' => [ - 'after_rocket_clean_post', - 'after_rocket_clean_file', - ], - ], -]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php deleted file mode 100644 index 5b71767bf1..0000000000 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php +++ /dev/null @@ -1,12 +0,0 @@ - [ - 'config' => [ - - ], - 'expected' => [ - 'after_rocket_clean_domain' - ] - ], - -]; diff --git a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php deleted file mode 100644 index f4794aca05..0000000000 --- a/tests/Fixtures/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php +++ /dev/null @@ -1,39 +0,0 @@ - [ - 'config' => [ - 'post' => false, - 'purge_urls' => [], - 'post_id' => 145, - 'filtered_purge_urls' => [ - 'http://example.org/author/' - ], - ], - 'expected' => [ - 'post_id' => 145, - 'result' => [], - 'purge_urls' => [], - 'post' => false, - ] - ], - 'postShouldReturnAddURL' => [ - 'config' => [ - 'post' => $post, - 'purge_urls' => [], - 'post_id' => 145, - 'filtered_purge_urls' => [ - 'http://example.org/author/' - ], - ], - 'expected' => [ - 'post_id' => 145, - 'result' => [ - 'http://example.org/author/' - ], - 'purge_urls' => [], - 'post' => $post, - ] - ], -]; diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php deleted file mode 100644 index cd4694702a..0000000000 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ /dev/null @@ -1,22 +0,0 @@ -assertSame($expected, apply_filters('cloudflare_purge_url_actions', $config)); - } -} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php deleted file mode 100644 index 2c698dd65f..0000000000 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php +++ /dev/null @@ -1,22 +0,0 @@ -assertSame($expected, apply_filters('cloudflare_purge_everything_actions', $config)); - } -} diff --git a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php deleted file mode 100644 index 9e13a12f05..0000000000 --- a/tests/Integration/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php +++ /dev/null @@ -1,58 +0,0 @@ -post->create(); - // Set global for WP<5.2 where get_the_content() doesn't take the $post parameter. - $GLOBALS['post'] = get_post( self::$post_id ); - setup_postdata( self::$post_id ); - } - - - public function set_up() - { - parent::set_up(); - add_filter('rocket_post_purge_urls', [$this, 'rocket_post_purge_urls']); - } - - public function tear_down() - { - remove_filter('rocket_post_purge_urls', [$this, 'rocket_post_purge_urls']); - parent::tear_down(); - } - - /** - * @dataProvider configTestData - */ - public function testShouldReturnAsExpected( $config, $expected ) - { - - if($config['post']) { - $post_id = self::$post_id; - } else { - $post_id = -1; - } - - $this->config = $config; - $this->assertSame($expected['result'], apply_filters('cloudflare_purge_by_url', $config['purge_urls'], $post_id)); - } - - public function rocket_post_purge_urls() { - return $this->config['rocket_post_purge_urls']; - } -} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php deleted file mode 100644 index f0e8645f96..0000000000 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addAfterRocketCleanToActions.php +++ /dev/null @@ -1,57 +0,0 @@ -options = Mockery::mock(Options_Data::class); - $this->option_api = Mockery::mock(Options::class); - $this->beacon = Mockery::mock(Beacon::class); - - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); - } - - /** - * @dataProvider configTestData - */ - public function testShouldReturnAsExpected( $config, $expected ) - { - $this->assertSame($expected, $this->cloudflare->add_after_rocket_clean_to_actions($config)); - - } -} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php deleted file mode 100644 index 8e0fcbc0db..0000000000 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addCleanDomainOnPurge.php +++ /dev/null @@ -1,56 +0,0 @@ -options = Mockery::mock(Options_Data::class); - $this->option_api = Mockery::mock(Options::class); - $this->beacon = Mockery::mock(Beacon::class); - - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); - } - - /** - * @dataProvider configTestData - */ - public function testShouldReturnAsExpected( $config, $expected ) - { - $this->assertSame($expected, $this->cloudflare->add_clean_domain_on_purge($config)); - } -} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php deleted file mode 100644 index 34d9a8e1a5..0000000000 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/addRocketPurgeUrlToPurgeUrl.php +++ /dev/null @@ -1,67 +0,0 @@ -options = Mockery::mock(Options_Data::class); - $this->option_api = Mockery::mock(Options::class); - $this->beacon = Mockery::mock(Beacon::class); - - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); - } - - /** - * @dataProvider configTestData - */ - public function testShouldReturnAsExpected( $config, $expected ) - { - Functions\expect('get_post')->with($expected['post_id'])->andReturn($config['post']); - $this->configure_apply_filter($config, $expected); - $this->assertSame($expected['result'], $this->cloudflare->add_rocket_purge_url_to_purge_url($config['purge_urls'], $config['post_id'])); - } - - protected function configure_apply_filter($config, $expected) { - if(! $config['post']) { - return; - } - - Functions\expect('rocket_get_purge_urls')->with($expected['purge_urls'], $expected['post'])->andReturn($config['filtered_purge_urls']); - } -} diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php index 5232a172c8..7d7b8a861a 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/disableCloudflareOption.php @@ -4,7 +4,7 @@ use Mockery; use WP_Rocket\Engine\Admin\Beacon\Beacon; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; use WP_Rocket\Tests\Unit\TestCase; @@ -44,7 +44,7 @@ public function set_up() { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class) ); } /** diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php index c191ae555c..4fc980c13b 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCacheNotice.php @@ -8,7 +8,7 @@ use WP_Rocket\Admin\Options; use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\Tests\Unit\TestCase; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_apo_cache_notice @@ -48,7 +48,7 @@ protected function setUp(): void { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class) ); } /** diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php index 178f10c8de..b305568441 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayApoCookiesNotice.php @@ -4,7 +4,7 @@ use Mockery; use WP_Rocket\Engine\Admin\Beacon\Beacon; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Admin\Options; use WP_Rocket\Tests\Unit\TestCase; @@ -48,7 +48,7 @@ public function set_up() { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class) ); } /** diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php index 13422328cb..d51cacc129 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/displayServerPushingModeNotice.php @@ -8,7 +8,7 @@ use WP_Rocket\Engine\Admin\Beacon\Beacon; use WP_Rocket\Tests\Unit\TestCase; use WP_Rocket\Admin\Options_Data; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; /** * @covers \WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare::display_server_pushing_mode_notice @@ -37,7 +37,7 @@ public function setUp(): void { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare( $this->options, $this->option_api, $this->beacon ); + $this->cloudflare = new Cloudflare( $this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class ) ); $this->stubTranslationFunctions(); } diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php index 7dec85b313..c84247fac1 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/hideAddonRadio.php @@ -5,7 +5,7 @@ use Mockery; use WP_Rocket\Admin\Options; use WP_Rocket\Engine\Admin\Beacon\Beacon; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; @@ -44,7 +44,7 @@ public function set_up() { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class ) ); } /** diff --git a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php index db38f212d6..bc7f2062b2 100644 --- a/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php +++ b/tests/Unit/inc/ThirdParty/Plugins/CDN/Cloudflare/updateAddonField.php @@ -5,7 +5,7 @@ use Mockery; use WP_Rocket\Admin\Options; use WP_Rocket\Engine\Admin\Beacon\Beacon; -use WP_Rocket\ThirdParty\Plugins\CDN\Cloudflare; +use WP_Rocket\ThirdParty\Plugins\CDN\{Cloudflare,CloudflareFacade}; use WP_Rocket\Admin\Options_Data; use WP_Rocket\Tests\Unit\TestCase; use Brain\Monkey\Functions; @@ -47,7 +47,7 @@ public function set_up() { $this->option_api = Mockery::mock(Options::class); $this->beacon = Mockery::mock(Beacon::class); - $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon); + $this->cloudflare = new Cloudflare($this->options, $this->option_api, $this->beacon, Mockery::mock( CloudflareFacade::class ) ); } /** From 53c8e99b6cef65b36fc14ed9b78b00ed07a21985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Wed, 14 Jun 2023 11:56:49 -0400 Subject: [PATCH 19/24] update version to 3.14-alpha3 --- wp-rocket.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wp-rocket.php b/wp-rocket.php index b61f76f5cf..96900cb4b8 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ * Plugin Name: WP Rocket * Plugin URI: https://wp-rocket.me * Description: The best WordPress performance plugin. - * Version: 3.14-alpha2 + * Version: 3.14-alpha3 * Requires at least: 5.8 * Requires PHP: 7.3 * Code Name: Iego @@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit; // Rocket defines. -define( 'WP_ROCKET_VERSION', '3.14-alpha2' ); +define( 'WP_ROCKET_VERSION', '3.14-alpha3' ); define( 'WP_ROCKET_WP_VERSION', '5.8' ); define( 'WP_ROCKET_WP_VERSION_TESTED', '5.9' ); define( 'WP_ROCKET_PHP_VERSION', '7.3' ); From 8df5802f0b17c30448e139070836b9f1c6e0aba0 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 19:15:31 +0000 Subject: [PATCH 20/24] Translate languages/rocket.pot in pt_BR 100% translated source file: 'languages/rocket.pot' on 'pt_BR'. --- languages/rocket-pt_BR.po | 418 ++++++++++++++++++++++++-------------- 1 file changed, 271 insertions(+), 147 deletions(-) diff --git a/languages/rocket-pt_BR.po b/languages/rocket-pt_BR.po index 3fc8ae193a..a8c244196d 100644 --- a/languages/rocket-pt_BR.po +++ b/languages/rocket-pt_BR.po @@ -11,9 +11,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WP Rocket 3.13\n" +"Project-Id-Version: WP Rocket 3.13.3\n" "Report-Msgid-Bugs-To: http://wp-rocket.me/\n" -"POT-Creation-Date: 2023-05-05 10:48-0400\n" +"POT-Creation-Date: 2023-06-12 13:56-0400\n" "PO-Revision-Date: 2019-08-26 15:14+0000\n" "Last-Translator: Fabio Fava , 2023\n" "Language-Team: Portuguese (Brazil) (https://app.transifex.com/wp-media/teams/18133/pt_BR/)\n" @@ -55,19 +55,19 @@ msgstr "" "Seu site está hospedado em %s, habilitamos a auto-limpeza do Varnish para " "compatibilidade." -#: inc/Addon/Cloudflare/APIClient.php:309 +#: inc/Addon/Cloudflare/API/Client.php:129 msgid "Cloudflare did not provide any reply. Please try again later." msgstr "O Cloudflare não forneceu nenhuma resposta. Tente mais tarde." -#: inc/Addon/Cloudflare/APIClient.php:318 inc/deprecated/3.5.php:112 +#: inc/Addon/Cloudflare/API/Client.php:186 inc/deprecated/3.5.php:112 #: inc/deprecated/3.5.php:169 msgid "Incorrect Cloudflare email address or API key." msgstr "Endereço de e-mail ou chave da API incorretos do Cloudflare" -#: inc/Addon/Cloudflare/APIClient.php:322 -#: inc/Addon/Cloudflare/APIClient.php:335 -#: inc/Addon/Cloudflare/Cloudflare.php:112 -#: inc/Addon/Cloudflare/Cloudflare.php:144 +#: inc/Addon/Cloudflare/API/Client.php:190 +#: inc/Addon/Cloudflare/API/Client.php:204 +#: inc/Addon/Cloudflare/Cloudflare.php:74 +#: inc/Addon/Cloudflare/Cloudflare.php:109 #: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:157 #: inc/deprecated/3.5.php:92 inc/deprecated/3.5.php:116 #: inc/deprecated/3.5.php:129 inc/deprecated/3.5.php:157 @@ -76,11 +76,11 @@ msgstr "Endereço de e-mail ou chave da API incorretos do Cloudflare" msgid "Read the %1$sdocumentation%2$s for further guidance." msgstr "Leia a %1$sdocumentação%2$s para orientações adicionais." -#: inc/Addon/Cloudflare/APIClient.php:324 -#: inc/Addon/Cloudflare/APIClient.php:337 -#: inc/Addon/Cloudflare/Cloudflare.php:101 -#: inc/Addon/Cloudflare/Cloudflare.php:114 -#: inc/Addon/Cloudflare/Cloudflare.php:146 inc/deprecated/3.5.php:81 +#: inc/Addon/Cloudflare/API/Client.php:192 +#: inc/Addon/Cloudflare/API/Client.php:206 +#: inc/Addon/Cloudflare/Auth/APIKey.php:63 +#: inc/Addon/Cloudflare/Cloudflare.php:76 +#: inc/Addon/Cloudflare/Cloudflare.php:111 inc/deprecated/3.5.php:81 #: inc/deprecated/3.5.php:94 inc/deprecated/3.5.php:118 #: inc/deprecated/3.5.php:131 inc/deprecated/3.5.php:159 #: inc/deprecated/3.5.php:175 inc/deprecated/3.5.php:208 @@ -91,11 +91,11 @@ msgstr "" "https://docs.wp-rocket.me/article/18-using-wp-rocket-with-" "cloudflare/?utm_source=wp_plugin&utm_medium=wp_rocket#add-on" -#: inc/Addon/Cloudflare/APIClient.php:331 inc/deprecated/3.5.php:125 +#: inc/Addon/Cloudflare/API/Client.php:200 inc/deprecated/3.5.php:125 msgid "Incorrect Cloudflare Zone ID." msgstr "ID incorreto da Zona do Cloudflare" -#: inc/Addon/Cloudflare/Cloudflare.php:99 +#: inc/Addon/Cloudflare/Auth/APIKey.php:61 #, php-format msgid "" "Cloudflare email and/or API key are not set. Read the %1$sdocumentation%2$s " @@ -104,93 +104,115 @@ msgstr "" "O e-mail e/ou chave da API do Cloudflare não estão definidos. Leia a " "%1$sdocumentação%2$s para maior orientação." -#: inc/Addon/Cloudflare/Cloudflare.php:108 inc/deprecated/3.5.php:88 +#: inc/Addon/Cloudflare/Cloudflare.php:70 inc/deprecated/3.5.php:88 msgid "Missing Cloudflare Zone ID." msgstr "Falta o ID da Zona do Cloudflare" -#: inc/Addon/Cloudflare/Cloudflare.php:140 inc/deprecated/3.5.php:153 +#: inc/Addon/Cloudflare/Cloudflare.php:105 inc/deprecated/3.5.php:153 msgid "It looks like your domain is not set up on Cloudflare." msgstr "Parece que o seu domínio não está configurado no Cloudflare" -#: inc/Addon/Cloudflare/Subscriber.php:215 inc/deprecated/3.5.php:587 -#, php-format -msgid "WP Rocket: %s" -msgstr "WP Rocket: %s" +#: inc/Addon/Cloudflare/Cloudflare.php:205 +msgid "days" +msgstr "dias" -#: inc/Addon/Cloudflare/Subscriber.php:220 inc/deprecated/3.5.php:592 -msgid "WP Rocket: Cloudflare cache successfully purged." -msgstr "" -"WP Rocket: O cache do Cloudflare foi limpo com sucesso." +#: inc/Addon/Cloudflare/Cloudflare.php:208 +msgid "seconds" +msgstr "segundos" -#: inc/Addon/Cloudflare/Subscriber.php:364 -#: inc/Addon/Cloudflare/Subscriber.php:370 -#: inc/Addon/Cloudflare/Subscriber.php:390 -#: inc/Addon/Cloudflare/Subscriber.php:401 -#: inc/Addon/Cloudflare/Subscriber.php:420 -#: inc/Addon/Cloudflare/Subscriber.php:426 -#: inc/Addon/Cloudflare/Subscriber.php:445 -#: inc/Addon/Cloudflare/Subscriber.php:451 -#: inc/Addon/Cloudflare/Subscriber.php:470 -#: inc/Addon/Cloudflare/Subscriber.php:476 -#: inc/Addon/Cloudflare/Subscriber.php:558 inc/admin/options.php:184 -#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 -msgid "WP Rocket: " -msgstr "WP Rocket: " +#: inc/Addon/Cloudflare/Cloudflare.php:210 +msgid "minutes" +msgstr "minutos" + +#: inc/Addon/Cloudflare/Cloudflare.php:212 +msgid "hours" +msgstr "horas" -#: inc/Addon/Cloudflare/Subscriber.php:364 +#: inc/Addon/Cloudflare/Subscriber.php:224 +#: inc/Addon/Cloudflare/Subscriber.php:253 +#, php-format +msgid "%1$sWP Rocket:%2$s %3$s" +msgstr "%1$sWP Rocket:%2$s %3$s" + +#: inc/Addon/Cloudflare/Subscriber.php:242 +#, php-format +msgid "%1$sWP Rocket:%2$s Cloudflare cache successfully purged." +msgstr "%1$sWP Rocket:%2$s Cache do Cloudflare esvaziado com sucesso." + +#: inc/Addon/Cloudflare/Subscriber.php:297 #, php-format msgid "Cloudflare development mode error: %s" msgstr "Erro no modo de desenvolvimento do Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:370 +#: inc/Addon/Cloudflare/Subscriber.php:304 #, php-format msgid "Cloudflare development mode %s" msgstr "Modo de desenvolvimento do Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:390 +#: inc/Addon/Cloudflare/Subscriber.php:321 #, php-format msgid "Cloudflare cache level error: %s" msgstr "Erro no nível de Cache do Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:395 +#: inc/Addon/Cloudflare/Subscriber.php:328 msgctxt "Cloudflare caching level" -msgid "Standard" -msgstr "Padrão" +msgid "standard" +msgstr "padrão" -#: inc/Addon/Cloudflare/Subscriber.php:401 +#: inc/Addon/Cloudflare/Subscriber.php:334 #, php-format msgid "Cloudflare cache level set to %s" msgstr "Nível de cache do Cloudflare definido para %s" -#: inc/Addon/Cloudflare/Subscriber.php:420 +#: inc/Addon/Cloudflare/Subscriber.php:350 #, php-format msgid "Cloudflare minification error: %s" msgstr "Erro de minificação do Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:426 +#: inc/Addon/Cloudflare/Subscriber.php:357 #, php-format msgid "Cloudflare minification %s" msgstr "Minificação do Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:445 +#: inc/Addon/Cloudflare/Subscriber.php:373 #, php-format msgid "Cloudflare rocket loader error: %s" msgstr "Erro no rocket loader do Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:451 +#: inc/Addon/Cloudflare/Subscriber.php:380 #, php-format msgid "Cloudflare rocket loader %s" msgstr "Rocket loader do Cloudflare %s" -#: inc/Addon/Cloudflare/Subscriber.php:470 +#: inc/Addon/Cloudflare/Subscriber.php:396 #, php-format msgid "Cloudflare browser cache error: %s" msgstr "Erro do cache de navegador no Cloudflare: %s" -#: inc/Addon/Cloudflare/Subscriber.php:476 +#: inc/Addon/Cloudflare/Subscriber.php:403 +#, php-format +msgid "Cloudflare browser cache set to %s" +msgstr "Cache do navegador do Cloudflare definido para %s" + +#: inc/Addon/Cloudflare/Subscriber.php:512 +#, php-format +msgid "%1$sWP Rocket:%2$s Optimal settings activated for Cloudflare:" +msgstr "" +"%1$sWP Rocket:%2$s Configurações otimizadas ativadas para o Cloudflare:" + +#: inc/Addon/Cloudflare/Subscriber.php:521 #, php-format -msgid "Cloudflare browser cache set to %s seconds" -msgstr "Cache de navegador do Cloudflare definido para %s segundos" +msgid "" +"%1$sWP Rocket:%2$s Optimal settings deactivated for Cloudflare, reverted to " +"previous settings:" +msgstr "" +"%1$sWP Rocket:%2$s Configurações otimizadas desativadas para o Cloudflare, " +"revertidas para as configurações anteriores:" + +#: inc/Addon/Cloudflare/Subscriber.php:632 inc/admin/options.php:184 +#: inc/classes/subscriber/Tools/class-detect-missing-tags-subscriber.php:148 +msgid "WP Rocket: " +msgstr "WP Rocket: " #: inc/Addon/Sucuri/Subscriber.php:95 #, php-format @@ -929,21 +951,23 @@ msgstr "Exclusões de um clique" #: inc/Engine/Admin/Settings/Page.php:943 msgid "" -"When using this feature you may notice that it takes some time, or user " -"interaction for specific elements, e.g. a menu, or a form that is located in" -" the viewport, to appear." +"When using the Delay JavaScript Execution, you might experience delay " +"loading elements located in the viewport that need to appear immediately - " +"e.g. slider, header, menu." msgstr "" -"Ao usar este recurso você pode notar que leva algum tempo, ou até a " -"interação do usuário, para elementos específicos - um menu por exemplo - ou " -"formulário que esteja localizado no viewport, para aparecer." +"Ao usar Atrasar a Execução do JavaScript você pode experimentar um atraso no" +" carregamento dos elementos localizados na área de visualização que deveriam" +" aparecer imediatametne - por exemplo slider, header e menu." #: inc/Engine/Admin/Settings/Page.php:944 msgid "" -"If you are using any of the following plugins/themes/services you can " -"prevent that, by selecting them below." +"If you need instant visibility, click below on files that should NOT be " +"delayed. This selection will help users interact with the elements straight " +"away." msgstr "" -"Se estiver usando um dos plugins/temas/serviços a seguir, você pode evitar " -"isso selecionando-os abaixo." +"Se precisa de visualização instantânea, clique abaixo nos arquivos que NÃO " +"devem ser atrasados. Esta seleção irá ajudar os usuários a interagirem com " +"os elementos imediatamente." #: inc/Engine/Admin/Settings/Page.php:961 msgid "" @@ -1615,16 +1639,16 @@ msgstr "" "Os Complementos do Rocket são recursos complementares extendendo as opções " "disponíveis." -#: inc/Engine/Admin/Settings/Page.php:1818 -#: inc/Engine/Admin/Settings/Page.php:1970 +#: inc/Engine/Admin/Settings/Page.php:1817 +#: inc/Engine/Admin/Settings/Page.php:1986 msgid "Cloudflare" msgstr "Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1824 +#: inc/Engine/Admin/Settings/Page.php:1823 msgid "Integrate your Cloudflare account with this add-on." msgstr "Integre a sua conta Cloudflare com este complemento." -#: inc/Engine/Admin/Settings/Page.php:1825 +#: inc/Engine/Admin/Settings/Page.php:1824 msgid "" "Provide your account email, global API key, and domain to use options such " "as clearing the Cloudflare cache and enabling optimal settings with WP " @@ -1634,15 +1658,26 @@ msgstr "" "opções como esvaziar o cache do Cloudflare e ativar as configurações " "otimizadas com o WP Rocket." -#: inc/Engine/Admin/Settings/Page.php:1859 +#: inc/Engine/Admin/Settings/Page.php:1827 +#, php-format +msgid "" +"%1$sPlanning on using Automatic Platform Optimization (APO)?%2$s Just " +"activate the official Cloudflare plugin and configure it. WP Rocket will " +"automatically enable compatibility." +msgstr "" +"%1$sPlanejando usar a Otimização Automática da Plataforma (OAP)?%2$s Basta " +"ativar e configurar o plugin oficial do Cloudflare. O WP Rocket irá ativar a" +" compatibilidade automaticamente." + +#: inc/Engine/Admin/Settings/Page.php:1875 msgid "Varnish" msgstr "Varnish" -#: inc/Engine/Admin/Settings/Page.php:1865 +#: inc/Engine/Admin/Settings/Page.php:1881 msgid "If Varnish runs on your server, you must activate this add-on." msgstr "Você deve ativar este complemento se roda o Varnish no seu servidor." -#: inc/Engine/Admin/Settings/Page.php:1867 +#: inc/Engine/Admin/Settings/Page.php:1883 #, php-format msgid "" "Varnish cache will be purged each time WP Rocket clears its cache to ensure " @@ -1651,15 +1686,15 @@ msgstr "" "O cache Varnish será esvaziado sempre que o WP Rocket esvaziar o seu cache " "para garantir que o conteúdo esteja sempre atualizado.
%1$sSaiba mais%2$s" -#: inc/Engine/Admin/Settings/Page.php:1902 +#: inc/Engine/Admin/Settings/Page.php:1918 msgid "WebP Compatibility" msgstr "Compatibilidade com WebP" -#: inc/Engine/Admin/Settings/Page.php:1908 +#: inc/Engine/Admin/Settings/Page.php:1924 msgid "Improve browser compatibility for WebP images." msgstr "Melhora a compatibilidade com os navegadores para imagens WebP." -#: inc/Engine/Admin/Settings/Page.php:1912 +#: inc/Engine/Admin/Settings/Page.php:1928 #, php-format msgid "" "Enable this option if you would like WP Rocket to serve WebP images to " @@ -1672,11 +1707,11 @@ msgstr "" "para você. Para criar imagens WebP nós recomendamos o %1$sImagify%2$s. " "%3$sMais informações%2$s" -#: inc/Engine/Admin/Settings/Page.php:1932 +#: inc/Engine/Admin/Settings/Page.php:1948 msgid "Clear the Sucuri cache when WP Rocket’s cache is cleared." msgstr "Esvazia o cache Sucuri quando o cache do WP Rocket é esvaziado." -#: inc/Engine/Admin/Settings/Page.php:1935 +#: inc/Engine/Admin/Settings/Page.php:1951 msgid "" "Provide your API key to clear the Sucuri cache when WP Rocket’s cache is " "cleared." @@ -1684,48 +1719,48 @@ msgstr "" "Forneça a sua chave da API para limpar o cache Sucuri quando o cache do WP " "Rocket é limpo." -#: inc/Engine/Admin/Settings/Page.php:1943 -#: inc/Engine/Admin/Settings/Page.php:2087 +#: inc/Engine/Admin/Settings/Page.php:1959 +#: inc/Engine/Admin/Settings/Page.php:2103 msgid "Sucuri" msgstr "Sucuri" -#: inc/Engine/Admin/Settings/Page.php:1949 +#: inc/Engine/Admin/Settings/Page.php:1965 msgid "Synchronize Sucuri cache with this add-on." msgstr "Sincronize o cache Sucuri com este complemento." -#: inc/Engine/Admin/Settings/Page.php:1987 +#: inc/Engine/Admin/Settings/Page.php:2003 msgid "Cloudflare credentials" msgstr "Credenciais do Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:1996 +#: inc/Engine/Admin/Settings/Page.php:2012 msgid "Cloudflare settings" msgstr "Configurações do Cloudflare" -#: inc/Engine/Admin/Settings/Page.php:2010 +#: inc/Engine/Admin/Settings/Page.php:2026 msgctxt "Cloudflare" msgid "Global API key:" msgstr "Chave global da API:" -#: inc/Engine/Admin/Settings/Page.php:2011 +#: inc/Engine/Admin/Settings/Page.php:2027 msgctxt "Cloudflare" msgid "Find your API key" msgstr "Encontre a sua chave da API" -#: inc/Engine/Admin/Settings/Page.php:2023 +#: inc/Engine/Admin/Settings/Page.php:2039 msgctxt "Cloudflare" msgid "Account email" msgstr "E-mail da Conta" -#: inc/Engine/Admin/Settings/Page.php:2032 +#: inc/Engine/Admin/Settings/Page.php:2048 msgctxt "Cloudflare" msgid "Zone ID" msgstr "ID de Zona" -#: inc/Engine/Admin/Settings/Page.php:2042 +#: inc/Engine/Admin/Settings/Page.php:2058 msgid "Development mode" msgstr "Modo de desenvolvimento" -#: inc/Engine/Admin/Settings/Page.php:2044 +#: inc/Engine/Admin/Settings/Page.php:2060 #, php-format msgid "" "Temporarily activate development mode on your website. This setting will " @@ -1734,11 +1769,11 @@ msgstr "" "Ativa temporariamente o modo de desenvolvimento no seu site. Esta opção se " "desativa automaticamente após 3 horas. %1$sSaiba mais%2$s" -#: inc/Engine/Admin/Settings/Page.php:2052 +#: inc/Engine/Admin/Settings/Page.php:2068 msgid "Optimal settings" msgstr "Configurações ótimas" -#: inc/Engine/Admin/Settings/Page.php:2053 +#: inc/Engine/Admin/Settings/Page.php:2069 msgid "" "Automatically enhances your Cloudflare configuration for speed, performance " "grade and compatibility." @@ -1746,11 +1781,11 @@ msgstr "" "Melhora automaticamente as suas configurações no Cloudflare para velocidade," " desempenho e compatibilidade." -#: inc/Engine/Admin/Settings/Page.php:2061 +#: inc/Engine/Admin/Settings/Page.php:2077 msgid "Relative protocol" msgstr "Protocolo relativo" -#: inc/Engine/Admin/Settings/Page.php:2062 +#: inc/Engine/Admin/Settings/Page.php:2078 msgid "" "Should only be used with Cloudflare's flexible SSL feature. URLs of static " "files (CSS, JS, images) will be rewritten to use // instead of http:// or " @@ -1760,11 +1795,11 @@ msgstr "" "arquivos estáticos (CSS, JS, imagens) serão reescritos para usar // ao invés" " de http:// ou https://." -#: inc/Engine/Admin/Settings/Page.php:2100 +#: inc/Engine/Admin/Settings/Page.php:2116 msgid "Sucuri credentials" msgstr "Credenciais Sucuri" -#: inc/Engine/Admin/Settings/Page.php:2113 +#: inc/Engine/Admin/Settings/Page.php:2129 msgctxt "Sucuri" msgid "" "Firewall API key (for plugin), must be in format {32 characters}/{32 " @@ -1773,7 +1808,7 @@ msgstr "" "Chave da API de Firewall (para o plugin), deve ser no formato {32 " "caracteres}/{32 caracteres}:" -#: inc/Engine/Admin/Settings/Page.php:2114 +#: inc/Engine/Admin/Settings/Page.php:2130 msgctxt "Sucuri" msgid "Find your API key" msgstr "Encontre a sua chave da API" @@ -1782,7 +1817,7 @@ msgstr "Encontre a sua chave da API" msgid "Upload file and import settings" msgstr "Enviar e importar configurações" -#: inc/Engine/Admin/Settings/Settings.php:375 +#: inc/Engine/Admin/Settings/Settings.php:362 msgid "" "Sucuri Add-on: The API key for the Sucuri firewall must be in format " "{32 characters}/{32 characters}." @@ -1790,12 +1825,12 @@ msgstr "" "Complemento Sucuri. A chave da API para o firewall Sucuri precisa estar no " "formato {32 caracteres}/{32 caracteres}." -#: inc/Engine/Admin/Settings/Settings.php:465 +#: inc/Engine/Admin/Settings/Settings.php:452 #: inc/deprecated/deprecated.php:1245 msgid "Settings saved." msgstr "Configurações salvas." -#: inc/Engine/Admin/Settings/Settings.php:681 +#: inc/Engine/Admin/Settings/Settings.php:668 msgid "" "Sorry! Adding /(.*) in Advanced Rules > Never Cache URL(s) was not saved " "because it disables caching and optimizations for every page on your site." @@ -1899,8 +1934,8 @@ msgid "To use RocketCDN, replace your CNAME with %1$s%2$s%3$s." msgstr "Para usar a RocketCDN, substitua seu CNAME com %1$s%2$s%3$s." #: inc/Engine/CDN/RocketCDN/AdminPageSubscriber.php:152 -#: inc/Engine/CDN/RocketCDN/NoticesSubscriber.php:226 -#: inc/Engine/CDN/RocketCDN/NoticesSubscriber.php:324 +#: inc/Engine/CDN/RocketCDN/NoticesSubscriber.php:230 +#: inc/Engine/CDN/RocketCDN/NoticesSubscriber.php:334 #, php-format msgid "%1$sMore Info%2$s" msgstr "%1$sMais informações%2$s" @@ -2134,17 +2169,17 @@ msgstr "Ativa o carregamento assíncrono do CSS nas configurações do WP Rocket msgid "Enable Load CSS asynchronously in the options above" msgstr "Ativa o carregamento assíncrono do CSS nas opções acima" -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:154 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:176 msgid "Critical CSS generation is currently running." msgstr "A geração do CSS crítico está sendo executada." -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:159 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:181 #, php-format msgid "Go to the %1$sWP Rocket settings%2$s page to track progress." msgstr "" "Vá até as %1$sConfigurações do WP Rocket%2$s para acompanhar o progresso." -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:374 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:396 #, php-format msgid "" "Critical CSS generation is currently running: %1$d of %2$d page types " @@ -2153,19 +2188,33 @@ msgstr "" "A geração do CSS crítico está sendo executada: %1$d de %2$d tipos de páginas" " concluídos. (Atualize a página para ver o progresso)" -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:450 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:472 #, php-format msgid "Critical CSS generation finished for %1$d of %2$d page types." msgstr "Geração de CSS crítico concluída para %1$d de %2$d tipos de página." -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:457 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:479 msgid "Critical CSS generation encountered one or more errors." msgstr "A geração de CSS crítico encontrou um ou mais erros." -#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:457 +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:479 msgid "Learn more." msgstr "Saiba mais." +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:840 +#, php-format +msgid "" +"We highly recommend the %1$supdated Remove Unused CSS%2$s for a better CSS " +"optimization. Load CSS Asynchronously is always available as a back-up." +msgstr "" +"Recomendamos o %1$sRemover o CSS não usado atualizado%2$s para uma melhor " +"otimização do CSS. Carregar o CSS de Forma Assíncrona sempre está disponível" +" como um backup." + +#: inc/Engine/CriticalPath/CriticalCSSSubscriber.php:845 +msgid "Stay with the old option" +msgstr "Ficar com a opoção antiga" + #: inc/Engine/CriticalPath/DataManager.php:68 #, php-format msgid "" @@ -2420,7 +2469,7 @@ msgstr "Atualize agora" #: inc/Engine/License/views/renewal-expired-banner-ocd-disabled.php:32 #: inc/Engine/License/views/renewal-expired-banner-ocd.php:42 #: inc/Engine/License/views/renewal-expired-banner.php:30 -#: inc/admin/ui/notices.php:802 views/settings/page-sections/dashboard.php:46 +#: inc/admin/ui/notices.php:739 views/settings/page-sections/dashboard.php:46 msgid "Dismiss this notice" msgstr "Descartar essa notificação" @@ -2666,7 +2715,7 @@ msgstr "%1$s: A opção do CSS usado não está ativa!" msgid "%1$s: Used CSS cache cleared!" msgstr "%1$s: Cache do CSS usado limpo!" -#: inc/Engine/Optimization/RUCSS/Controller/UsedCSS.php:752 +#: inc/Engine/Optimization/RUCSS/Controller/UsedCSS.php:776 msgid "Clear Used CSS of this URL" msgstr "Limpar o CSS usado deste URL" @@ -2746,7 +2795,7 @@ msgstr "" "com o suporte Kinsta em sua conta %1$sMyKinsta%2$s para resolver este " "problema." -#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:94 +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:114 #, php-format msgid "" "%1$s: Cloudflare's HTTP/2 Server Push is incompatible with the features of " @@ -2756,6 +2805,71 @@ msgstr "" " de Remover o CSS Não Utilizado e Combinar arquivos de CSS. Recomendamos " "desativá-los." +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:157 +msgid "" +"Your site is using the official Cloudflare plugin. We have enabled " +"Cloudflare auto-purge for compatibility. If you have APO activated, it is " +"also compatible." +msgstr "" +"Seu site está usando o plugin oficial do Cloudflare. Ativamos o esvaziamento" +" automático do Cloudflare para compatibilidade. Se você tem o OAP ativado, " +"ele também é compatível." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:158 +msgid "" +"Cloudflare cache will be purged each time WP Rocket clears its cache to " +"ensure content is always up-to-date." +msgstr "" +"O cache do Cloudflare será esvaziado sempre que o WP Rocket esvaziar o seu " +"cache, para garantir que o conteúdo está sempre atualizado." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:202 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Dynamic Cookies Cache\". Cloudflare APO " +"is not yet compatible with that feature." +msgstr "" +"%1$sWP Rocket:%2$s Se estiver usando \"Cache Dinâmico de Cookies\", o OAP do" +" Cloudflare ainda não é compatível com este recurso." + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:208 +#, php-format +msgid "" +"You should either disable Cloudflare APO or check with the theme/plugin " +"requiring the use of “Dynamic Cookies Cache” developers for an alternative " +"way to be page-cache friendly. %1$sMore info%2$s" +msgstr "" +"Você deve ou desativar o OAP do Cloudflare, ou verificar com o desenvolvedor" +" do seu tema/plugin requerendo o uso de \"Cache Dinâmico de Cookies\" por " +"uma forma alternativa de ser amigável ao cache de páginas. %1$sMais " +"informações%2$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:259 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You are using \"Separate cache files for mobile " +"devices\". You need to activate \"Cache by Device Type\" %3$ssetting%5$s on " +"Cloudflare APO to serve the right version of the cache. %4$sMore info%5$s" +msgstr "" +"%1$sWP Rocket:%2$s Você está usando \"arquivos de cache separados para " +"dispositivos móveis\". É preciso que ativee a %3$sconfiguração%5$s \"Cache " +"por Tipo de Dispositivo\" no OAP do Cloudflare para servir a versão correta " +"do cache. %4$sMais informações%5$s" + +#: inc/ThirdParty/Plugins/CDN/Cloudflare.php:280 +#, php-format +msgid "" +"%1$sWP Rocket:%2$s You have \"Cache by Device Type\" enabled on Cloudflare " +"APO. If you judge it necessary for the website to have a different cache on " +"mobile and desktop, we suggest you enable our “Separate Cache Files for " +"Mobiles Devices” to ensure the generated cache is accurate." +msgstr "" +"%1$sWP Rocket:%2$s Você tem o \"Cache por Tipo de Dispositivo\" ativo no OAP" +" do Cloudflare. Se julgar necessário que o site tenha um cache separado para" +" dispositivos móveis e desktop, sugerimos que ative nosso \"Arquivos " +"Separados de Cache para Dispositivos Móveis\" para garantir que o cache " +"gerado é preciso." + #: inc/ThirdParty/Plugins/ModPagespeed.php:102 #, php-format msgid "" @@ -2975,7 +3089,7 @@ msgstr[2] "Os seguintes padrões são inválidos e foram removidos:" msgid "More info" msgstr "Mais informações" -#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:752 +#: inc/admin/ui/meta-boxes.php:37 inc/admin/ui/notices.php:748 #: inc/common/admin-bar.php:84 inc/common/admin-bar.php:136 #: views/settings/page-sections/dashboard.php:150 msgid "Clear cache" @@ -3045,15 +3159,7 @@ msgstr "" "%s: Um ou mais plugins foram ativados ou desativados, limpe" " o cache se eles afetam a interface do seu site." -#: inc/admin/ui/notices.php:190 -msgid "" -"WP Rocket Cloudflare Add-on provides similar functionalities. They can not " -"be active at the same time." -msgstr "" -"O complemento do Cloudflare para o WP Rocket fornece funcionalidades " -"similares. Eles não podem estar ativos ao mesmo tempo." - -#: inc/admin/ui/notices.php:223 +#: inc/admin/ui/notices.php:218 #, php-format msgid "" "%s: The following plugins are not compatible with this " @@ -3062,11 +3168,11 @@ msgstr "" "%s: Os plugins a seguir não são compatíveis com este plugin" " e podem causar resultados inesperados:" -#: inc/admin/ui/notices.php:229 +#: inc/admin/ui/notices.php:224 msgid "Deactivate" msgstr "Desativar" -#: inc/admin/ui/notices.php:271 +#: inc/admin/ui/notices.php:266 msgid "" "WP Rocket Footer JS is not an official add-on. It prevents some options in " "WP Rocket from working correctly. Please deactivate it if you have problems." @@ -3075,7 +3181,7 @@ msgstr "" "no WP Rocket de funcionarem corretamente. Por favor desative-o se tiver " "problemas." -#: inc/admin/ui/notices.php:311 +#: inc/admin/ui/notices.php:306 #, php-format msgid "" "Endurance Cache is currently enabled, which will conflict with WP Rocket " @@ -3087,7 +3193,7 @@ msgstr "" "Inativo (Level 0) na página %1$sConfigurações > Geral%2$s para evitar " "quaisquer problemas." -#: inc/admin/ui/notices.php:332 +#: inc/admin/ui/notices.php:327 #, php-format msgid "" "%1$s: A custom permalink structure is required for the plugin to work " @@ -3097,7 +3203,7 @@ msgstr "" "plugin funcionar corretamente. %2$sVá para as configurações de links " "permanentes%3$s" -#: inc/admin/ui/notices.php:379 +#: inc/admin/ui/notices.php:374 #, php-format msgid "" "%s could not modify the .htaccess file due to missing writing permissions." @@ -3105,14 +3211,14 @@ msgstr "" "%s não pôde alterar o arquivo .htaccess devido à falta de permissões de " "escrita." -#: inc/admin/ui/notices.php:385 inc/admin/ui/notices.php:835 +#: inc/admin/ui/notices.php:380 inc/admin/ui/notices.php:843 #, php-format msgid "Troubleshoot: %1$sHow to make system files writeable%2$s" msgstr "" "Solução de Problemas: %1$sComo ativar a permissão escrita nos arquivos do " "sistema%2$s" -#: inc/admin/ui/notices.php:387 inc/admin/ui/notices.php:837 +#: inc/admin/ui/notices.php:382 inc/admin/ui/notices.php:845 msgid "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" @@ -3120,7 +3226,7 @@ msgstr "" "https://docs.wp-rocket.me/article/626-how-to-make-system-files-htaccess-wp-" "config-writeable/?utm_source=wp_plugin&utm_medium=wp_rocket" -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "Don’t worry, WP Rocket’s page caching and settings will still function " "correctly." @@ -3128,7 +3234,7 @@ msgstr "" "Não se preocupe, o cache de páginas e as configurações do WP Rocket vão " "continuar funcionando corretamente." -#: inc/admin/ui/notices.php:393 +#: inc/admin/ui/notices.php:388 msgid "" "For optimal performance, adding the following lines into your .htaccess is " "recommended (not required):" @@ -3136,7 +3242,7 @@ msgstr "" "Para um ótimo desempenho, é recomendado adicionar as linhas a seguir ao seu " "arquivo .htaccess (não obrigatório):" -#: inc/admin/ui/notices.php:540 +#: inc/admin/ui/notices.php:535 #, php-format msgid "" "%1$s is good to go! %2$sTest your load time%4$s, or visit your " @@ -3145,7 +3251,7 @@ msgstr "" "%1$s está pronto! %2$sTeste o seu tempo de carregamento%4$s ou visite as " "suas %3$sconfigurações%4$s." -#: inc/admin/ui/notices.php:581 +#: inc/admin/ui/notices.php:576 msgid "" "Would you allow WP Rocket to collect non-sensitive diagnostic data from this" " website?" @@ -3153,15 +3259,15 @@ msgstr "" "Você permite que o WP Rocket colete dados não-sensíveis de diagnóstico deste" " site?" -#: inc/admin/ui/notices.php:582 +#: inc/admin/ui/notices.php:577 msgid "This would help us to improve WP Rocket for you in the future." msgstr "Isto pode nos ajudar a melhorar o WP Rocket para você no futuro." -#: inc/admin/ui/notices.php:588 +#: inc/admin/ui/notices.php:583 msgid "What info will we collect?" msgstr "Que informações iremos coletar?" -#: inc/admin/ui/notices.php:593 +#: inc/admin/ui/notices.php:588 msgid "" "Below is a detailed view of all data WP Rocket will collect if granted " "permission. WP Rocket will never transmit any domain names or email " @@ -3173,61 +3279,69 @@ msgstr "" "domínio ou endereços de e-mail (exceto para validação de licença), endereços" " IP ou chaves de API de terceiros." -#: inc/admin/ui/notices.php:602 +#: inc/admin/ui/notices.php:597 msgid "Yes, allow" msgstr "Sim, permitir" -#: inc/admin/ui/notices.php:605 +#: inc/admin/ui/notices.php:600 msgid "No, thanks" msgstr "Não, obrigado" -#: inc/admin/ui/notices.php:644 +#: inc/admin/ui/notices.php:639 msgid "Thank you!" msgstr "Obrigado!" -#: inc/admin/ui/notices.php:649 +#: inc/admin/ui/notices.php:644 msgid "WP Rocket now collects these metrics from your website:" msgstr "O WP Rocket agora coleta estas métricas do seu website:" -#: inc/admin/ui/notices.php:687 +#: inc/admin/ui/notices.php:682 #, php-format msgid "%s: Cache cleared." msgstr "%s: Cache limpo." -#: inc/admin/ui/notices.php:694 +#: inc/admin/ui/notices.php:689 #, php-format msgid "%s: Post cache cleared." msgstr "%s: Cache do post limpo." -#: inc/admin/ui/notices.php:701 +#: inc/admin/ui/notices.php:696 #, php-format msgid "%s: Term cache cleared." msgstr "%s: Cache de termos limpo." -#: inc/admin/ui/notices.php:708 +#: inc/admin/ui/notices.php:703 #, php-format msgid "%s: User cache cleared." msgstr "%s: Cache de usuário limpo." -#: inc/admin/ui/notices.php:755 +#: inc/admin/ui/notices.php:751 msgid "Stop Preload" msgstr "Parar o Pré-carregamento" -#: inc/admin/ui/notices.php:773 +#: inc/admin/ui/notices.php:757 +msgid "Turn on Remove Unused CSS" +msgstr "Ativar Remoção do CSS Não Usado" + +#: inc/admin/ui/notices.php:763 +msgid "Enable “Separate Cache Files for Mobile Devices” now" +msgstr "Ativar \"Arquivos Separados de Cache para Dispositivos Móveis\" agora" + +#: inc/admin/ui/notices.php:781 msgid "Force deactivation " msgstr "Forçar desativação " -#: inc/admin/ui/notices.php:792 +#: inc/admin/ui/notices.php:800 msgid "The following code should have been written to this file:" msgstr "O código a seguir deveria ter sido escrito neste arquivo:" -#: inc/admin/ui/notices.php:823 +#: inc/admin/ui/notices.php:831 #, php-format msgid "%s cannot configure itself due to missing writing permissions." msgstr "" "%s não pode se auto-configurar devido à falta de permissões de escrita." -#: inc/admin/ui/notices.php:829 +#: inc/admin/ui/notices.php:837 #, php-format msgid "Affected file/folder: %s" msgstr "Arquivo/pasta afetado: %s" @@ -3462,6 +3576,16 @@ msgstr "" msgid "Connection to Cloudflare failed" msgstr "Falha na conexão com o Cloudflare" +#: inc/deprecated/3.5.php:587 +#, php-format +msgid "WP Rocket: %s" +msgstr "WP Rocket: %s" + +#: inc/deprecated/3.5.php:592 +msgid "WP Rocket: Cloudflare cache successfully purged." +msgstr "" +"WP Rocket: O cache do Cloudflare foi limpo com sucesso." + #: inc/deprecated/DeprecatedClassTrait.php:54 #, php-format msgid "" @@ -3996,11 +4120,11 @@ msgid "Import settings" msgstr "Importar configurações" #: views/settings/fields/one-click-addon.php:43 -#: views/settings/fields/rocket-addon.php:33 +#: views/settings/fields/rocket-addon.php:43 msgid "Add-on status" msgstr "Status do complemento" -#: views/settings/fields/rocket-addon.php:56 +#: views/settings/fields/rocket-addon.php:72 msgid "Modify options" msgstr "Modificar opções" From 125489a783b7361ae8e7f9e5ff08c11cf33ebbe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Thu, 15 Jun 2023 10:01:29 -0400 Subject: [PATCH 21/24] update translations --- languages/rocket-de_DE.mo | Bin 106014 -> 109555 bytes languages/rocket-pt_BR.mo | Bin 106794 -> 110904 bytes languages/rocket-tr_TR.mo | Bin 108775 -> 112429 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/languages/rocket-de_DE.mo b/languages/rocket-de_DE.mo index f9612a93ddf74bf656124a429084f866bdf5f751..dcef50c0d51524199a60f189cab8b4ae5620da09 100644 GIT binary patch delta 19524 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 delta 16469 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 diff --git a/languages/rocket-pt_BR.mo b/languages/rocket-pt_BR.mo index c9265d4d42ed63a002f67fcea9719f3a85fc09de..649da7f176c30ec5b6672bc6b340bf207620e22b 100644 GIT binary patch delta 20565 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 delta 16987 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 delta 16513 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 From 195285651e96c3382a72703cd1ac52e8fbc52ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Thu, 15 Jun 2023 10:02:03 -0400 Subject: [PATCH 22/24] update version to 3.14 --- wp-rocket.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wp-rocket.php b/wp-rocket.php index 96900cb4b8..c1783e36f8 100755 --- a/wp-rocket.php +++ b/wp-rocket.php @@ -3,7 +3,7 @@ * Plugin Name: WP Rocket * Plugin URI: https://wp-rocket.me * Description: The best WordPress performance plugin. - * Version: 3.14-alpha3 + * Version: 3.14 * Requires at least: 5.8 * Requires PHP: 7.3 * Code Name: Iego @@ -20,7 +20,7 @@ defined( 'ABSPATH' ) || exit; // Rocket defines. -define( 'WP_ROCKET_VERSION', '3.14-alpha3' ); +define( 'WP_ROCKET_VERSION', '3.14' ); define( 'WP_ROCKET_WP_VERSION', '5.8' ); define( 'WP_ROCKET_WP_VERSION_TESTED', '5.9' ); define( 'WP_ROCKET_PHP_VERSION', '7.3' ); From 960184f9b3cc852e95d4017b9d93033990e61466 Mon Sep 17 00:00:00 2001 From: Tabrisrp Date: Thu, 15 Jun 2023 14:04:23 +0000 Subject: [PATCH 23/24] update dynamic lists --- dynamic-lists.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamic-lists.json b/dynamic-lists.json index 95c58d1366..8de1216153 100644 --- a/dynamic-lists.json +++ b/dynamic-lists.json @@ -1 +1 @@ -{"rucss_inline_atts_exclusions":["rocket-lazyload-inline-css","divi-style-parent-inline-inline-css","gsf-custom-css","extra-style-inline-inline-css","woodmart-inline-css-inline-css","woodmart_shortcodes-custom-css","rs-plugin-settings-inline-css","divi-style-inline-inline-css","tcb-post-list-dynamic-style","n2-ss-","wpcf7-","siteorigin-panels-layouts-footer","xstore-inline-css-inline-css","assets.reviews.io"],"rucss_inline_content_exclusions":[".wp-container-",".wp-elements-","#wpv-expandable-",".custom-content-","#thb-",".et_pb_text_dap_","#gdlr-core-shape-divider","#ultib3-",".uvc-wrap-",".jet-listing-dynamic-post-",".vcex_",".wprm-advanced-list-",".adsslot_",".jnews_",".cp-info-bar.content-","#stockie-custom-","#ohio-custom-",".uid-","#wpfMainWrapper","#penci_","#penci-",".wpbs_s","#apcore_","#apress_","#zolo_",".extended-products-grid#style-",".preloader#style-preloader-",".thegem-button-",".thegem-custom-","#pattern-","#thegem-video-frame-",".qwery_inline_"],"defer_js_inline_exclusions":["DOMContentLoaded","document.write","window.lazyLoadOptions","N.N2_","rev_slider_wrapper","FB3D_CLIENT_LOCALE","ewww_webp_supported","anr_captcha_field_div","renderInvisibleReCaptcha","bookingInProgress"],"defer_js_external_exclusions":["gist.github.com","content.jwplatform.com","js.hsforms.net","www.uplaunch.com","google.com\/recaptcha","widget.reviews.co.uk","verify.authorize.net\/anetseal","lib\/admin\/assets\/lib\/webfont\/webfont.min.js","app.mailerlite.com","widget.reviews.io","simplybook.(.*)\/v2\/widget\/widget.js","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-content\/plugins\/wpfront-notification-bar\/js\/wpfront-notification-bar(.*).js","\/wp-content\/plugins\/oxygen\/component-framework\/vendor\/aos\/aos.js","\/wp-content\/plugins\/ewww-image-optimizer\/includes\/check-webp(.min)?.js","static.mailerlite.com\/data\/(.*).js","cdn.voxpow.com\/static\/libs\/v1\/(.*).js","cdn.voxpow.com\/media\/trackers\/js\/(.*).js","use.typekit.net","www.idxhome.com","\/wp-includes\/js\/dist\/vendor\/lodash(.min)?.js","\/wp-includes\/js\/dist\/api-fetch(.min)?.js","\/wp-includes\/js\/dist\/i18n(.min)?.js","\/wp-includes\/js\/dist\/vendor\/wp-polyfill(.min)?.js","\/wp-includes\/js\/dist\/url(.min)?.js","\/wp-includes\/js\/dist\/hooks(.min)?.js","www.paypal.com\/sdk\/js","js-eu1.hsforms.net","yanovis.Voucher.js","\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","use.typekit.com","\/artale\/modules\/kirki\/assets\/webfont.js","\/api\/scripts\/lb_cs.js","js.hscta.net\/cta\/current.js","widget.refari.co"],"delay_js_exclusions":["nowprocket","\/wp-includes\/js\/wp-embed.min.js","lazyLoadOptions","lazyLoadThumb","wp-rocket\/assets\/js\/lazyload\/(.*)","et_core_page_resource_fallback","window.\\$us === undefined","js-extra","fusionNavIsCollapsed","\/assets\/js\/smush-lazy-load","eio_lazy_vars","\\\/lazysizes(\\.min|-pre|-post)?\\.js","document\\.body\\.classList\\.remove\\(\"no-js\"\\)","document\\.documentElement\\.className\\.replace\\( 'no-js', 'js' \\)","et_animation_data","wpforms_settings","var nfForms","\/\/stats.wp.com","_stq.push","fluent_form_ff_form_instance_","cpLoadCSS","ninja_column_","var rbs_gallery_","var lepopup_","var billing_additional_field","var gtm4wp","var dataLayer_content","\/ewww-image-optimizer\/includes\/load[_-]webp(\\.min)?.js","\/ewww-image-optimizer\/includes\/check-webp(\\.min)?.js","ewww_webp_supported","\/dist\/js\/browser-redirect\/app.js","\/perfmatters\/js\/lazyload.min.js","lazyLoadInstance","scripts.mediavine.com\/tags\/","initCubePortfolio","simpli.fi","gforms_recaptcha_","\/jetpack-boost\/vendor\/automattic\/jetpack-lazy-images\/(.*)","jetpack-lazy-images-js-enabled","jetpack-boost-critical-css","wpformsRecaptchaCallback","booking-suedtirol-js","wpcp_css_disable_selection","\/gravityforms\/js\/conditional_logic.min.js","statcounter.com\/counter\/counter.js","var sc_project","\/jetpack\/jetpack_vendor\/automattic\/jetpack-lazy-images\/(.*)","\/themify-builder\/themify\/js\/modules\/fallback(\\.min)?.js","handlePixMessage","var corner_video","cdn.pixfuture.com\/hb_v2.js","cdn.pixfuture.com\/pbix.js","served-by.pixfuture.com\/www\/delivery\/ads.js","served-by.pixfuture.com\/www\/delivery\/headerbid_sticky_refresh.js","serv-vdo.pixfuture.com\/vpaid\/ads.js","wprRemoveCPCSS","window.jdgmSettings","\/photonic\/include\/js\/front-end\/nomodule\/photonic-baguettebox.min.js","\/photonic\/include\/ext\/baguettebox\/baguettebox.min.js","window.wsf_form_json_config","et_link_options_data","FuseboxPlayerAPIKey","js.hscta.net\/cta\/current.js","hbspt.cta.load","consent.cookiebot.com\/uc.js","\/woofilter-pro\/woofilterpro\/js\/ion.rangeSlider.min.js","barra.r7.com\/barra.js"],"js_minify_external":["html5.js","show_ads.js","histats.com\/js","ws.amazon.com\/widgets","\/ads\/","intensedebate.com","scripts.chitika.net\/","jotform.com\/","gist.github.com","forms.aweber.com","video.unrulymedia.com","stats.wp.com","stats.wordpress.com","widget.rafflecopter.com","widget-prime.rafflecopter.com","releases.flowplayer.org","c.ad6media.fr","cdn.stickyadstv.com","www.smava.de","contextual.media.net","app.getresponse.com","adserver.reklamstore.com","s0.wp.com","wprp.zemanta.com","files.bannersnack.com","smarticon.geotrust.com","js.gleam.io","ir-na.amazon-adsystem.com","web.ventunotech.com","verify.authorize.net","ads.themoneytizer.com","embed.finanzcheck.de","imagesrv.adition.com","js.juicyads.com","form.jotformeu.com","speakerdeck.com","content.jwplatform.com","ads.investingchannel.com","app.ecwid.com","www.industriejobs.de","s.gravatar.com","googlesyndication.com","a.optmstr.com","a.optmnstr.com","a.opmnstr.com","adthrive.com","mediavine.com","js.hsforms.net","googleadservices.com","f.convertkit.com","recaptcha\/api.js","mailmunch.co","apps.shareaholic.com","dsms0mj1bbhn4.cloudfront.net","nutrifox.com","code.tidio.co","www.uplaunch.com","widget.reviewability.com","embed-cdn.gettyimages.com\/widgets.js","app.mailerlite.com","ck.page","cdn.jsdelivr.net\/gh\/AmauriC\/","static.klaviyo.com\/onsite\/js\/klaviyo.js","a.omappapi.com\/app\/js\/api.min.js","static.zdassets.com","feedbackcompany.com\/widgets\/feedback-company-widget.min.js","widget.gleamjs.io","phonewagon.com","simplybook.asia\/v2\/widget\/widget.js","simplybook.it\/v2\/widget\/widget.js","simplybook.me\/v2\/widget\/widget.js","static.botsrv.com\/website\/js\/widget2.36cf1446.js","static.mailerlite.com\/data\/","cdn.voxpow.com","loader.knack.com","embed.lpcontent.net\/leadboxes\/current\/embed.js","cc.cdn.civiccomputing.com\/9\/cookieControl-9.x.min.js","cse.google.com\/cse.js","kit.fontawesome.com","cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-mml-chtml.js","static.leadpages.net\/leadbars\/current\/embed.js","booqable.com\/v2\/booqable.js","googleoptimize.com","cdna.hubpeople.com\/js\/widget_standalone_two_modes.js","s3.tradingview.com","www.vbt.io\/ext\/vbtforms.js","cdn.callrail.com","documentcloud.adobe.com\/view-sdk\/main.js","static.cleverpush.com","js.afterpay.com","cdn.enable.co.il\/licenses\/enable-","hcaptcha.com\/1\/api.js","voucher.getavo.it\/public\/js\/yanovis.Voucher.js","js-eu1.hsforms.net","statcounter.com\/counter\/counter.js","snapppt.com","use.typekit.com","secure.gravatar.com\/js\/gprofiles.js","cdn.jsdelivr.net\/npm\/hockeystack","widget.prod.faslet.net","ga.getresponse.com\/script\/ga.js","cognitoforms.com","usercentrics.eu","cdn.amcharts.com","umami","cdn.popt.in\/pixel.js","m2d.m2.ai","pubguru.net","trustindex.io","cdnjs.cloudflare.com\/ajax\/libs\/prism\/","podigee-podcast-player.js","tarteaucitron.io\/load.js","osm.klarnaservices.com\/lib.js","mein.clickskeks.at\/app.js","barra.r7.com\/barra.js","widget.refari.co","widget.reviews.co.uk"],"js_move_after_combine":["map_fusion_map_","ec:addProduct","ec:addImpression","clear_better_facebook_comments","vc-row-destroy-equal-heights-","dfd-icon-list-","SFM_template","WLTChangeState","wlt_star_","wlt_pop_distance_","smart_list_tip","gd-wgt-pagi-","data-rf-id=","tvc_po=","scrapeazon","startclock","it_logo_field_owl-box_","td_live_css_uid","wpvl_paramReplace","tdAjaxCount","mec_skin_","_wca","_taboola","fbq('trackCustom'","fbq('track'","data.token","sharrre","dfads_ajax_load_ads","tie_postviews","wmp_update","h5ab-print-article","gform_ajax_frame_","gform_post_render","mts_view_count","act_css_tooltip","window.SLB","wpt_view_count","var dateNow","gallery_product_",".flo-block-slideshow-","data='api-key=ct-","ip_common_function()","(\"style#gsf-custom-css\").append","a3revWCDynamicGallery_","#owl-carousel-instagram-","window.FlowFlowOpts","jQuery('.td_uid_","jQuery(\".slider-","#dfd-vcard-widget-","#sf-instagram-widget-",".woocommerce-tabs-","penci_megamenu__","vc_prepareHoverBox","wp-temp-form-div","_wswebinarsystem_already_","#views-extra-css\").text","fusetag.setTargeting","hit.uptrendsdata.com","callback:window.renderBadge","test_run_nf_conditional_logic","cb_nombre","$('.fl-node-","function($){google_maps_","$(\"#myCarousel","et_animation_data=","current_url=\"","CustomEvent.prototype=window.Event.prototype","electro-wc-product-gallery","woof_is_mobile","jQuery('.videonextup","wpp_params","us.templateDirectoryUri=",".fat-gallery-item",".ratingbox","user_rating.prototype.eraseCookie","test_run_nf_conditional","dpsp-networks-btns-wrapper","pa_woo_product_info","sharing_enabled_on_post_via_metabox","#product-search-field-","GOTMLS_login_offset","berocket_aapf_time_to_fix_products_style","window.vc_googleMapsPointer","sinceID_","#ut-background-video-ut-section","+window.comment_tab_width+","dfd-button-hover-in","wpseo-address-wrapper","platform.stumbleupon.com","#woo_pp_ec_button_mini_cart","#supercarousel","blockClass","tdbMenuItem","tdbSearchItem","best_seller_badge","jQuery('#product-top-bar","fb_desc-","FC_regenerate_captcha","wp_post_blocks_vars.listed_posts=[","captcha-hash","mapdata={",".ywpc-char-",").countdowntimer(","jQuery(\"#td_uid_","find('#td_uid_","variation_estimate_msg"],"js_excluded_inline":["document.write","google_ad","edToolbar","gtag","_gaq.push","_gaLt","GoogleAnalyticsObject","syntaxhighlighter","adsbygoogle","ci_cap_","_stq","nonce","post_id","LogHuman","idcomments_acct","ch_client","sc_online_t","_stq","bannersnack_embed","vtn_player_type","ven_video_key","ANS_customer_id","tdBlock","tdLocalCache","wpRestNonce","\"url\":","lazyLoadOptions","adthrive","loadCSS","google_tag_params","clicky_custom","clicky_site_ids","NSLPopupCenter","_paq","gtm","dataLayer","RecaptchaLoad","WPCOM_sharing_counts","jetpack_remote_comment","subscribe-field","contextly","_mmunch","gt_request_uri","doGTranslate","docTitle","bs_ajax_paginate_","bs_deferred_loading_","theChampRedirectionUrl","theChampFBCommentUrl","theChampTwitterRedirect","theChampRegRedirectionUrl","ESSB_CACHE_URL","oneall_social_login_providers_","betterads_screen_width","woocommerce_wishlist_add_to_wishlist_url","arf_conditional_logic","heateorSsHorSharingShortUrl","TL_Const","bimber_front_microshare","setAttribute(\"id\"","setAttribute( \"id\"","TribeEventsPro","peepsotimedata","wphc_data","hc_rand_id","RBL_ADD","AfsAnalyticsObject","_thriveCurrentPost","esc_login_url","fwduvpMainPlaylist","Bibblio.initRelatedContent","showUFC()","#iphorm-","#fancy-","ult-carousel-","theChampLJAuthUrl","f._fbq","Insticator","w2dc_js_objects","cherry_ajax","ad_block_","elementorFrontendConfig","zeen_","disqusIdentifier","currentAjaxUrl","geodir_event_call_calendar_","atatags-","hbspt.forms.create","function(c,h,i,m,p)","dataTable({","rankMath = {","_atrk_opts","quicklinkOptions","ct_checkjs_","WP_Statistics_http","penci_block_","omapi_localized","omapi_data","OptinMonsterApp","tminusnow","nfForms","galleries.gallery_","wcj_evt.prodID","advads_tracking_ads","advadsGATracking.postContext","woopack_config","ulp_content_id","wp-cumulus\/tagcloud.swf?r=","ctSetCookie('ct_checkjs'","woof_really_curr_tax","uLogin.customInit","i18n_no_matching_variations_text","alsp_map_markers_attrs","var inc_opt =","iworks_upprev","yith_wcevti_tickets","window.metrilo.ensure_cbuid","metrilo.event","wordpress_page_root","wcct_info","Springbot.product_id","pysWooProductData","dfd-heading","owl=$(\"#","penci_megamenu","fts_security","algoliaAutocomplete","avia_framework_globals","tabs.easyResponsiveTabs","searchlocationHeader","yithautocomplete","data-parallax-speed","currency_data=","cedexisData","function reenableButton","#wpnbio-show","e.Newsletter2GoTrackingObject","var categories_","\"+nRemaining+\"","cartsguru_cart_token","after_share_easyoptin","location_data.push","thirstyFunctions.isThirstyLink","styles: ' #custom-menu-","function svc_center_","#svc_carousel2_container_","advads.move","elementid","advads_has_ads","wpseo_map_init","mdf_current_page_url","tptn_tracker","dpsp_pin_button_data","searchwp_live_search_params","wpp_params","top.location,thispage","selection+pagelink","ic_window_resolution","PHP.wp_p_id","ShopifyBuy.UI.onReady(client)","orig_request_uri","gie.widgets.load","Adman.Flash","PHP.wp_p_id","window.broadstreetKeywords","var productId =","var flatsomeVars","wc_product_block_data","static.mailerlite.com","amzn_assoc","_bs_getParameterByName","_stq.push","h._remove","var FlowFlowOpts","var WCPFData =","var _beeketing","var _statcounter","var actions =","var current_url","var object_name","var the_ajax_script","var wc_cart_fragments_params","var woocommerce_params","var wpml_cookies","wc_add_to_cart_params","window.broadstreetKeywords","window.wc_ga_pro.available_gateways","xa.prototype","HOUZEZ_ajaxcalls_vars","w2dc_maps_objects","w2dc_controller_args_array","w2dc_map_markers_attrs","YT.Player","WPFC.data","function current_video_","var videodiv","var slider_wppasrotate","wppas_ga","var blockClass","tarteaucitron","pw_brand_product_list","tminusCountDown","pysWooSelectContentData","wpvq_ans89733","_isp_version","price_range_data","window.FeedbackCompanyWidgets","woocs_current_currency","woo_variation_swatches_options","woocommerce_price_slider_params","scriptParams","form-adv-pagination","borlabsCookiePrioritize","urls_wpwidgetpolylang","quickViewNonce","frontendscripts_params","nj-facebook-messenger","var fb_mess_position","init_particles_row_background_script","setREVStartSize","fl-node","PPAccordion","soliloquy_","wprevpublicjs_script_vars","DTGS_NONCE_FRONTEND","et_animation_data","archives-dropdown","loftloaderCache","SmartSliderSimple","var nectarLove","var incOpt","RocketBrowserCompatibilityChecker","RocketPreloadLinksConfig","placementVersionId","var useEdit","var DTGS_NONCE_FRONTEND","n2jQuery","et_core_api_spam_recaptcha","cnArgs","__CF$cv$params","trustbox_settings","aepro","cdn.jst.ai","w2dc_fields_in_categories","jetMenuPublicSettings","JetTricksSettings","aepc_pixel","avadaWooCommerceVars","var isb","fcaPcPost","csrf_token","icwp_wpsf_vars_lpantibot","wpvViewHead","ed_school_plugin","aps_comp_","guaven_woos","__lm_redirect_to","__wpdm_view_count","bookacti.booking_system","nfFrontEnd","view_quote_cart_link","__eae_decode_emails","divioverlays_ajaxurl","var _EPYT_","#ins-heading-","#ins-button-","tve_frontend_options","lb24.src","amazon_Login_accessToken","porto_infinite_scroll",".adace-loader-","adace_load_","tagGroupsAccordiontaggroupscloudaccordion","tagGroupsTabstaggroupscloudtabs","jrRelatedWidgets","UNCODE.initRow","amp_mobile_redirect_disabled","wpgdprcData","wpml_browser_redirect_params","swPreRegister","kboard_settings","ct_ultimate_gdpr_cookie","wcpv_registration_local","www.idxhome.com","arf_footer_cl_logic_call","reload_attached_coupons","var ftpp","forminatorFront","_EPYT_","edd_free_downloads_vars","edd_stripe_vars","var ASP","ecwidOriginalTitle","defaultCategoryId","translation-revision-date","google_conversion_id","hbspt","var marker_locations_","var AdmMyAjax","ifso_page_url","referrer_for_pageload","WoocommerceWidget\/woocommerceWidget.js","var ht_ctc_chat_var","spuvar","var wpilFrontend","urls_polylangREPLACETOID","e.setAttribute('unselectable',on);","try{Typekit.load","iMapsData","var wpforms_user_journey"],"cache_ignored_parameters":["utm_source","utm_medium","utm_campaign","utm_expid","utm_term","utm_content","mtm_source","mtm_medium","mtm_campaign","mtm_keyword","mtm_cid","mtm_content","pk_source","pk_medium","pk_campaign","pk_keyword","pk_cid","pk_content","fb_action_ids","fb_action_types","fb_source","fbclid","campaignid","adgroupid","adid","gclid","age-verified","ao_noptimize","usqp","cn-reloaded","_ga","sscid","gclsrc","_gl","mc_cid","mc_eid","_bta_tid","_bta_c","trk_contact","trk_msg","trk_module","trk_sid","gdfms","gdftrk","gdffi","_ke","redirect_log_mongo_id","redirect_mongo_id","sb_referer_host","mkwid","pcrid","ef_id","s_kwcid","msclkid","dm_i","epik","pp","gbraid","wbraid","ssp_iabi","ssp_iaba","gad"],"preload_exclusions":["void\\(.*;","(.*)__trashed(.*)"]} \ No newline at end of file +{"rucss_inline_atts_exclusions":["rocket-lazyload-inline-css","divi-style-parent-inline-inline-css","gsf-custom-css","extra-style-inline-inline-css","woodmart-inline-css-inline-css","woodmart_shortcodes-custom-css","rs-plugin-settings-inline-css","divi-style-inline-inline-css","tcb-post-list-dynamic-style","n2-ss-","wpcf7-","siteorigin-panels-layouts-footer","xstore-inline-css-inline-css","assets.reviews.io"],"rucss_inline_content_exclusions":[".wp-container-",".wp-elements-","#wpv-expandable-",".custom-content-","#thb-",".et_pb_text_dap_","#gdlr-core-shape-divider","#ultib3-",".uvc-wrap-",".jet-listing-dynamic-post-",".vcex_",".wprm-advanced-list-",".adsslot_",".jnews_",".cp-info-bar.content-","#stockie-custom-","#ohio-custom-",".uid-","#wpfMainWrapper","#penci_","#penci-",".wpbs_s","#apcore_","#apress_","#zolo_",".extended-products-grid#style-",".preloader#style-preloader-",".thegem-button-",".thegem-custom-","#pattern-","#thegem-video-frame-",".qwery_inline_"],"defer_js_inline_exclusions":["DOMContentLoaded","document.write","window.lazyLoadOptions","N.N2_","rev_slider_wrapper","FB3D_CLIENT_LOCALE","ewww_webp_supported","anr_captcha_field_div","renderInvisibleReCaptcha","bookingInProgress"],"defer_js_external_exclusions":["gist.github.com","content.jwplatform.com","js.hsforms.net","www.uplaunch.com","google.com\/recaptcha","widget.reviews.co.uk","verify.authorize.net\/anetseal","lib\/admin\/assets\/lib\/webfont\/webfont.min.js","app.mailerlite.com","widget.reviews.io","simplybook.(.*)\/v2\/widget\/widget.js","\/wp-includes\/js\/dist\/i18n.min.js","\/wp-content\/plugins\/wpfront-notification-bar\/js\/wpfront-notification-bar(.*).js","\/wp-content\/plugins\/oxygen\/component-framework\/vendor\/aos\/aos.js","\/wp-content\/plugins\/ewww-image-optimizer\/includes\/check-webp(.min)?.js","static.mailerlite.com\/data\/(.*).js","cdn.voxpow.com\/static\/libs\/v1\/(.*).js","cdn.voxpow.com\/media\/trackers\/js\/(.*).js","use.typekit.net","www.idxhome.com","\/wp-includes\/js\/dist\/vendor\/lodash(.min)?.js","\/wp-includes\/js\/dist\/api-fetch(.min)?.js","\/wp-includes\/js\/dist\/i18n(.min)?.js","\/wp-includes\/js\/dist\/vendor\/wp-polyfill(.min)?.js","\/wp-includes\/js\/dist\/url(.min)?.js","\/wp-includes\/js\/dist\/hooks(.min)?.js","www.paypal.com\/sdk\/js","js-eu1.hsforms.net","yanovis.Voucher.js","\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","use.typekit.com","\/artale\/modules\/kirki\/assets\/webfont.js","\/api\/scripts\/lb_cs.js","js.hscta.net\/cta\/current.js","widget.refari.co","player.vdocipher.com"],"delay_js_exclusions":["nowprocket","\/wp-includes\/js\/wp-embed.min.js","lazyLoadOptions","lazyLoadThumb","wp-rocket\/assets\/js\/lazyload\/(.*)","et_core_page_resource_fallback","window.\\$us === undefined","js-extra","fusionNavIsCollapsed","\/assets\/js\/smush-lazy-load","eio_lazy_vars","\\\/lazysizes(\\.min|-pre|-post)?\\.js","document\\.body\\.classList\\.remove\\(\"no-js\"\\)","document\\.documentElement\\.className\\.replace\\( 'no-js', 'js' \\)","et_animation_data","wpforms_settings","var nfForms","\/\/stats.wp.com","_stq.push","fluent_form_ff_form_instance_","cpLoadCSS","ninja_column_","var rbs_gallery_","var lepopup_","var billing_additional_field","var gtm4wp","var dataLayer_content","\/ewww-image-optimizer\/includes\/load[_-]webp(\\.min)?.js","\/ewww-image-optimizer\/includes\/check-webp(\\.min)?.js","ewww_webp_supported","\/dist\/js\/browser-redirect\/app.js","\/perfmatters\/js\/lazyload.min.js","lazyLoadInstance","scripts.mediavine.com\/tags\/","initCubePortfolio","simpli.fi","gforms_recaptcha_","\/jetpack-boost\/vendor\/automattic\/jetpack-lazy-images\/(.*)","jetpack-lazy-images-js-enabled","jetpack-boost-critical-css","wpformsRecaptchaCallback","booking-suedtirol-js","wpcp_css_disable_selection","\/gravityforms\/js\/conditional_logic.min.js","statcounter.com\/counter\/counter.js","var sc_project","\/jetpack\/jetpack_vendor\/automattic\/jetpack-lazy-images\/(.*)","\/themify-builder\/themify\/js\/modules\/fallback(\\.min)?.js","handlePixMessage","var corner_video","cdn.pixfuture.com\/hb_v2.js","cdn.pixfuture.com\/pbix.js","served-by.pixfuture.com\/www\/delivery\/ads.js","served-by.pixfuture.com\/www\/delivery\/headerbid_sticky_refresh.js","serv-vdo.pixfuture.com\/vpaid\/ads.js","wprRemoveCPCSS","window.jdgmSettings","\/photonic\/include\/js\/front-end\/nomodule\/photonic-baguettebox.min.js","\/photonic\/include\/ext\/baguettebox\/baguettebox.min.js","window.wsf_form_json_config","et_link_options_data","FuseboxPlayerAPIKey","js.hscta.net\/cta\/current.js","hbspt.cta.load","consent.cookiebot.com\/uc.js","\/woofilter-pro\/woofilterpro\/js\/ion.rangeSlider.min.js","barra.r7.com\/barra.js"],"js_minify_external":["html5.js","show_ads.js","histats.com\/js","ws.amazon.com\/widgets","\/ads\/","intensedebate.com","scripts.chitika.net\/","jotform.com\/","gist.github.com","forms.aweber.com","video.unrulymedia.com","stats.wp.com","stats.wordpress.com","widget.rafflecopter.com","widget-prime.rafflecopter.com","releases.flowplayer.org","c.ad6media.fr","cdn.stickyadstv.com","www.smava.de","contextual.media.net","app.getresponse.com","adserver.reklamstore.com","s0.wp.com","wprp.zemanta.com","files.bannersnack.com","smarticon.geotrust.com","js.gleam.io","ir-na.amazon-adsystem.com","web.ventunotech.com","verify.authorize.net","ads.themoneytizer.com","embed.finanzcheck.de","imagesrv.adition.com","js.juicyads.com","form.jotformeu.com","speakerdeck.com","content.jwplatform.com","ads.investingchannel.com","app.ecwid.com","www.industriejobs.de","s.gravatar.com","googlesyndication.com","a.optmstr.com","a.optmnstr.com","a.opmnstr.com","adthrive.com","mediavine.com","js.hsforms.net","googleadservices.com","f.convertkit.com","recaptcha\/api.js","mailmunch.co","apps.shareaholic.com","dsms0mj1bbhn4.cloudfront.net","nutrifox.com","code.tidio.co","www.uplaunch.com","widget.reviewability.com","embed-cdn.gettyimages.com\/widgets.js","app.mailerlite.com","ck.page","cdn.jsdelivr.net\/gh\/AmauriC\/","static.klaviyo.com\/onsite\/js\/klaviyo.js","a.omappapi.com\/app\/js\/api.min.js","static.zdassets.com","feedbackcompany.com\/widgets\/feedback-company-widget.min.js","widget.gleamjs.io","phonewagon.com","simplybook.asia\/v2\/widget\/widget.js","simplybook.it\/v2\/widget\/widget.js","simplybook.me\/v2\/widget\/widget.js","static.botsrv.com\/website\/js\/widget2.36cf1446.js","static.mailerlite.com\/data\/","cdn.voxpow.com","loader.knack.com","embed.lpcontent.net\/leadboxes\/current\/embed.js","cc.cdn.civiccomputing.com\/9\/cookieControl-9.x.min.js","cse.google.com\/cse.js","kit.fontawesome.com","cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-mml-chtml.js","static.leadpages.net\/leadbars\/current\/embed.js","booqable.com\/v2\/booqable.js","googleoptimize.com","cdna.hubpeople.com\/js\/widget_standalone_two_modes.js","s3.tradingview.com","www.vbt.io\/ext\/vbtforms.js","cdn.callrail.com","documentcloud.adobe.com\/view-sdk\/main.js","static.cleverpush.com","js.afterpay.com","cdn.enable.co.il\/licenses\/enable-","hcaptcha.com\/1\/api.js","voucher.getavo.it\/public\/js\/yanovis.Voucher.js","js-eu1.hsforms.net","statcounter.com\/counter\/counter.js","snapppt.com","use.typekit.com","secure.gravatar.com\/js\/gprofiles.js","cdn.jsdelivr.net\/npm\/hockeystack","widget.prod.faslet.net","ga.getresponse.com\/script\/ga.js","cognitoforms.com","usercentrics.eu","cdn.amcharts.com","umami","cdn.popt.in\/pixel.js","m2d.m2.ai","pubguru.net","trustindex.io","cdnjs.cloudflare.com\/ajax\/libs\/prism\/","podigee-podcast-player.js","tarteaucitron.io\/load.js","osm.klarnaservices.com\/lib.js","mein.clickskeks.at\/app.js","barra.r7.com\/barra.js","widget.refari.co","widget.reviews.co.uk","player.vdocipher.com"],"js_move_after_combine":["map_fusion_map_","ec:addProduct","ec:addImpression","clear_better_facebook_comments","vc-row-destroy-equal-heights-","dfd-icon-list-","SFM_template","WLTChangeState","wlt_star_","wlt_pop_distance_","smart_list_tip","gd-wgt-pagi-","data-rf-id=","tvc_po=","scrapeazon","startclock","it_logo_field_owl-box_","td_live_css_uid","wpvl_paramReplace","tdAjaxCount","mec_skin_","_wca","_taboola","fbq('trackCustom'","fbq('track'","data.token","sharrre","dfads_ajax_load_ads","tie_postviews","wmp_update","h5ab-print-article","gform_ajax_frame_","gform_post_render","mts_view_count","act_css_tooltip","window.SLB","wpt_view_count","var dateNow","gallery_product_",".flo-block-slideshow-","data='api-key=ct-","ip_common_function()","(\"style#gsf-custom-css\").append","a3revWCDynamicGallery_","#owl-carousel-instagram-","window.FlowFlowOpts","jQuery('.td_uid_","jQuery(\".slider-","#dfd-vcard-widget-","#sf-instagram-widget-",".woocommerce-tabs-","penci_megamenu__","vc_prepareHoverBox","wp-temp-form-div","_wswebinarsystem_already_","#views-extra-css\").text","fusetag.setTargeting","hit.uptrendsdata.com","callback:window.renderBadge","test_run_nf_conditional_logic","cb_nombre","$('.fl-node-","function($){google_maps_","$(\"#myCarousel","et_animation_data=","current_url=\"","CustomEvent.prototype=window.Event.prototype","electro-wc-product-gallery","woof_is_mobile","jQuery('.videonextup","wpp_params","us.templateDirectoryUri=",".fat-gallery-item",".ratingbox","user_rating.prototype.eraseCookie","test_run_nf_conditional","dpsp-networks-btns-wrapper","pa_woo_product_info","sharing_enabled_on_post_via_metabox","#product-search-field-","GOTMLS_login_offset","berocket_aapf_time_to_fix_products_style","window.vc_googleMapsPointer","sinceID_","#ut-background-video-ut-section","+window.comment_tab_width+","dfd-button-hover-in","wpseo-address-wrapper","platform.stumbleupon.com","#woo_pp_ec_button_mini_cart","#supercarousel","blockClass","tdbMenuItem","tdbSearchItem","best_seller_badge","jQuery('#product-top-bar","fb_desc-","FC_regenerate_captcha","wp_post_blocks_vars.listed_posts=[","captcha-hash","mapdata={",".ywpc-char-",").countdowntimer(","jQuery(\"#td_uid_","find('#td_uid_","variation_estimate_msg"],"js_excluded_inline":["document.write","google_ad","edToolbar","gtag","_gaq.push","_gaLt","GoogleAnalyticsObject","syntaxhighlighter","adsbygoogle","ci_cap_","_stq","nonce","post_id","LogHuman","idcomments_acct","ch_client","sc_online_t","_stq","bannersnack_embed","vtn_player_type","ven_video_key","ANS_customer_id","tdBlock","tdLocalCache","wpRestNonce","\"url\":","lazyLoadOptions","adthrive","loadCSS","google_tag_params","clicky_custom","clicky_site_ids","NSLPopupCenter","_paq","gtm","dataLayer","RecaptchaLoad","WPCOM_sharing_counts","jetpack_remote_comment","subscribe-field","contextly","_mmunch","gt_request_uri","doGTranslate","docTitle","bs_ajax_paginate_","bs_deferred_loading_","theChampRedirectionUrl","theChampFBCommentUrl","theChampTwitterRedirect","theChampRegRedirectionUrl","ESSB_CACHE_URL","oneall_social_login_providers_","betterads_screen_width","woocommerce_wishlist_add_to_wishlist_url","arf_conditional_logic","heateorSsHorSharingShortUrl","TL_Const","bimber_front_microshare","setAttribute(\"id\"","setAttribute( \"id\"","TribeEventsPro","peepsotimedata","wphc_data","hc_rand_id","RBL_ADD","AfsAnalyticsObject","_thriveCurrentPost","esc_login_url","fwduvpMainPlaylist","Bibblio.initRelatedContent","showUFC()","#iphorm-","#fancy-","ult-carousel-","theChampLJAuthUrl","f._fbq","Insticator","w2dc_js_objects","cherry_ajax","ad_block_","elementorFrontendConfig","zeen_","disqusIdentifier","currentAjaxUrl","geodir_event_call_calendar_","atatags-","hbspt.forms.create","function(c,h,i,m,p)","dataTable({","rankMath = {","_atrk_opts","quicklinkOptions","ct_checkjs_","WP_Statistics_http","penci_block_","omapi_localized","omapi_data","OptinMonsterApp","tminusnow","nfForms","galleries.gallery_","wcj_evt.prodID","advads_tracking_ads","advadsGATracking.postContext","woopack_config","ulp_content_id","wp-cumulus\/tagcloud.swf?r=","ctSetCookie('ct_checkjs'","woof_really_curr_tax","uLogin.customInit","i18n_no_matching_variations_text","alsp_map_markers_attrs","var inc_opt =","iworks_upprev","yith_wcevti_tickets","window.metrilo.ensure_cbuid","metrilo.event","wordpress_page_root","wcct_info","Springbot.product_id","pysWooProductData","dfd-heading","owl=$(\"#","penci_megamenu","fts_security","algoliaAutocomplete","avia_framework_globals","tabs.easyResponsiveTabs","searchlocationHeader","yithautocomplete","data-parallax-speed","currency_data=","cedexisData","function reenableButton","#wpnbio-show","e.Newsletter2GoTrackingObject","var categories_","\"+nRemaining+\"","cartsguru_cart_token","after_share_easyoptin","location_data.push","thirstyFunctions.isThirstyLink","styles: ' #custom-menu-","function svc_center_","#svc_carousel2_container_","advads.move","elementid","advads_has_ads","wpseo_map_init","mdf_current_page_url","tptn_tracker","dpsp_pin_button_data","searchwp_live_search_params","wpp_params","top.location,thispage","selection+pagelink","ic_window_resolution","PHP.wp_p_id","ShopifyBuy.UI.onReady(client)","orig_request_uri","gie.widgets.load","Adman.Flash","PHP.wp_p_id","window.broadstreetKeywords","var productId =","var flatsomeVars","wc_product_block_data","static.mailerlite.com","amzn_assoc","_bs_getParameterByName","_stq.push","h._remove","var FlowFlowOpts","var WCPFData =","var _beeketing","var _statcounter","var actions =","var current_url","var object_name","var the_ajax_script","var wc_cart_fragments_params","var woocommerce_params","var wpml_cookies","wc_add_to_cart_params","window.broadstreetKeywords","window.wc_ga_pro.available_gateways","xa.prototype","HOUZEZ_ajaxcalls_vars","w2dc_maps_objects","w2dc_controller_args_array","w2dc_map_markers_attrs","YT.Player","WPFC.data","function current_video_","var videodiv","var slider_wppasrotate","wppas_ga","var blockClass","tarteaucitron","pw_brand_product_list","tminusCountDown","pysWooSelectContentData","wpvq_ans89733","_isp_version","price_range_data","window.FeedbackCompanyWidgets","woocs_current_currency","woo_variation_swatches_options","woocommerce_price_slider_params","scriptParams","form-adv-pagination","borlabsCookiePrioritize","urls_wpwidgetpolylang","quickViewNonce","frontendscripts_params","nj-facebook-messenger","var fb_mess_position","init_particles_row_background_script","setREVStartSize","fl-node","PPAccordion","soliloquy_","wprevpublicjs_script_vars","DTGS_NONCE_FRONTEND","et_animation_data","archives-dropdown","loftloaderCache","SmartSliderSimple","var nectarLove","var incOpt","RocketBrowserCompatibilityChecker","RocketPreloadLinksConfig","placementVersionId","var useEdit","var DTGS_NONCE_FRONTEND","n2jQuery","et_core_api_spam_recaptcha","cnArgs","__CF$cv$params","trustbox_settings","aepro","cdn.jst.ai","w2dc_fields_in_categories","jetMenuPublicSettings","JetTricksSettings","aepc_pixel","avadaWooCommerceVars","var isb","fcaPcPost","csrf_token","icwp_wpsf_vars_lpantibot","wpvViewHead","ed_school_plugin","aps_comp_","guaven_woos","__lm_redirect_to","__wpdm_view_count","bookacti.booking_system","nfFrontEnd","view_quote_cart_link","__eae_decode_emails","divioverlays_ajaxurl","var _EPYT_","#ins-heading-","#ins-button-","tve_frontend_options","lb24.src","amazon_Login_accessToken","porto_infinite_scroll",".adace-loader-","adace_load_","tagGroupsAccordiontaggroupscloudaccordion","tagGroupsTabstaggroupscloudtabs","jrRelatedWidgets","UNCODE.initRow","amp_mobile_redirect_disabled","wpgdprcData","wpml_browser_redirect_params","swPreRegister","kboard_settings","ct_ultimate_gdpr_cookie","wcpv_registration_local","www.idxhome.com","arf_footer_cl_logic_call","reload_attached_coupons","var ftpp","forminatorFront","_EPYT_","edd_free_downloads_vars","edd_stripe_vars","var ASP","ecwidOriginalTitle","defaultCategoryId","translation-revision-date","google_conversion_id","hbspt","var marker_locations_","var AdmMyAjax","ifso_page_url","referrer_for_pageload","WoocommerceWidget\/woocommerceWidget.js","var ht_ctc_chat_var","spuvar","var wpilFrontend","urls_polylangREPLACETOID","e.setAttribute('unselectable',on);","try{Typekit.load","iMapsData","var wpforms_user_journey"],"cache_ignored_parameters":["utm_source","utm_medium","utm_campaign","utm_expid","utm_term","utm_content","mtm_source","mtm_medium","mtm_campaign","mtm_keyword","mtm_cid","mtm_content","pk_source","pk_medium","pk_campaign","pk_keyword","pk_cid","pk_content","fb_action_ids","fb_action_types","fb_source","fbclid","campaignid","adgroupid","adid","gclid","age-verified","ao_noptimize","usqp","cn-reloaded","_ga","sscid","gclsrc","_gl","mc_cid","mc_eid","_bta_tid","_bta_c","trk_contact","trk_msg","trk_module","trk_sid","gdfms","gdftrk","gdffi","_ke","redirect_log_mongo_id","redirect_mongo_id","sb_referer_host","mkwid","pcrid","ef_id","s_kwcid","msclkid","dm_i","epik","pp","gbraid","wbraid","ssp_iabi","ssp_iaba","gad"],"preload_exclusions":["void\\(.*;","(.*)__trashed(.*)"]} \ No newline at end of file From 4819ee5065c08f16c2ca48e952e81b88adb3bb5c Mon Sep 17 00:00:00 2001 From: Tabrisrp Date: Thu, 15 Jun 2023 14:04:26 +0000 Subject: [PATCH 24/24] update delay JS dynamic lists --- dynamic-lists-delayjs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dynamic-lists-delayjs.json b/dynamic-lists-delayjs.json index 7325a66b5d..c77f3f4779 100644 --- a/dynamic-lists-delayjs.json +++ b/dynamic-lists-delayjs.json @@ -1 +1 @@ -{"themes":{"9c623554-5834-4669-9e96-1b894c1939b2":{"id":"theme:0193ea55fce2ada93b262f2824008c0f","title":"Andaman","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/andaman\/assets\/js\/","\/wp-andaman-plugins\/shortcodes\/vc_extend\/"],"is_default":0,"condition":"andaman","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"7374c5a5-69f8-460f-b44f-dee884a824cd":{"id":"theme:24cbda63f1b898ade5562ab4ec6d97a5","title":"Artale","type":"theme","icon":"","exclusions":["\/artale-elementor\/assets\/js\/modulobox.js","\/artale-elementor\/assets\/js\/artale-elementor.js","\/artale\/js\/jquery-stellar.js","\/artale\/js\/core\/artale-plugins.js","\/artale\/js\/core\/artale-custom.js","var loader"],"is_default":0,"condition":"artale","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"03a9cc62-c167-447d-beb2-65c76c96b056":{"title":"Astra","condition":"astra","exclusions":["\/astra\/assets\/js\/minified\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3cce5f3eaf76e098ba8e28f7bbba3f92","is_default":0,"created_at":1681390022},"2a2b54cb-8e1d-49d2-bfca-93eee231e470":{"id":"theme:72a8d63e59c10bdf512a62b862d143a7","title":"Astra - Carousel","type":"theme","icon":"","exclusions":["var astra","\/astra\/assets\/js\/minified\/style.min.js"],"is_default":0,"condition":"astra","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7783361f-66fc-4d95-a054-4e9545bb5b48":{"title":"Auteur","condition":"g5plus-auteur","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/g5plus-auteur\/assets\/js\/core.min.js","\/g5plus-auteur\/assets\/vendors\/","\/auteur-framework\/libs\/smart-framework\/assets\/vendors\/perfect-scrollbar\/js\/perfect-scrollbar.jquery.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","type":"theme","id":"theme:6207fe478e269e7547bda70a46607a49","is_default":0,"created_at":1679737107},"4c618038-8fc7-4d48-8d41-a32da14e5c1e":{"title":"AutoTrader","condition":"autotrader","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/autotrader\/(.*).js"],"icon_url":"","type":"theme","id":"theme:046dfeee2b77390c53e0e7f93b6a3792","is_default":0,"created_at":1679736741},"18f04f23-35a0-4c45-8cb6-a91d57ca1790":{"id":"theme:835da12f43373029659f766920e81b47","title":"Avada - Animations & mobile-specific actions","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).js","window.off_canvas_","\/plugins\/fusion-builder\/","\/plugins\/fusion-core\/","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90135867-1b95-498b-80d6-f5dbf2f6b318":{"title":"Avada - FAQ shortcode","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/fusion-core\/js\/min\/avada-faqs.js"],"icon_url":"","type":"theme","id":"theme:b084708c80d8582546e5430219aa4670","is_default":0,"created_at":1678277160},"d23b5bb1-1d7f-4109-bf69-b20a2be2d337":{"id":"theme:5e7a2248e1a53d9bb27b187deb541248","title":"Avada - Fusion carousel","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.carouFredSel.js","\/includes\/lib\/assets\/min\/js\/general\/fusion-carousel.js","fusionCarouselVars"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"98dfa8c1-e72a-4cef-a0b2-8f0c322490fc":{"id":"theme:f16fb109027f4994a7649a8b1663e6f7","title":"Avada - Fusion form","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form-logics.js","\/includes\/lib\/assets\/min\/js\/library\/cssua.js","\/includes\/lib\/assets\/min\/js\/general\/fusion.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"026801fa-af67-47ba-b966-347693f0585f":{"id":"theme:33f50696d353d8bd4eb59ff6e8f44c97","title":"Avada - Fusion grid gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-gallery.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c8349314-15a3-481e-973b-e4d936e4420e":{"id":"theme:56fa9993a573540c83eda9c49fae5e3c","title":"Avada - Fusion slider","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-core\/js\/min\/avada-fusion-slider.js","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"55bd510c-78aa-49d5-8304-8be2ee2ab0da":{"id":"theme:2189c1c769d65cfc2182e4822847071b","title":"Avada - Mobile menu","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-menu.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.easing.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ddf00672-c35c-4b68-aeca-925e68bf12b2":{"id":"theme:97a185f08af70c39c7e221faab0f73eb","title":"Avada - OffCanvas","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).min.js","window.off_canvas_"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7a04bc85-0fec-4487-ae05-bb2e5d8d0420":{"id":"theme:e3c0b030e73246225b0609ec32506c47","title":"Avada - portfolio","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/library\/packery.js","\/library\/isotope.js","\/library\/imagesLoaded.js","\/general\/fusion-lightbox.js","\/fusion-core\/js\/min\/avada-portfolio.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"17544cc3-9d3a-4611-bc5d-44d04e2786fa":{"id":"theme:6d49e887153f4b7cad1a3c53bc02d506","title":"Avada - Portfolio","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/fusion-core\/js\/min\/avada-portfolio.js","avadaPortfolioVars"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c6c3347c-14e0-4766-afa5-df33a47f5a5a":{"id":"theme:3ff44421b404c5efffa25e78e479e4ea","title":"Avada - Sticky menu","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Avada\/assets\/min\/js\/general\/avada-menu.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"232596c1-6a6a-4fe8-a5c3-a60fa74a9456":{"id":"theme:0d727d80bb132f17c737e55883fe4be0","title":"Avada - WooCommerce product gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-woo-product-images.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.flexslider.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"95ece7e4-3b19-45e5-aa28-14f833c9afca":{"title":"Avesa","condition":"avesa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/avesa\/js\/main.js","\/avesa\/js\/isotope.js","\/sw_core\/js\/slick.min.js","\/avesa\/js\/bootstrap-datetimepicker.min.js","\/avesa\/js\/bootstrap.min.js"],"icon_url":"","type":"theme","id":"theme:aad8bfcc594eec02e3b0d635198dee5e","is_default":0,"created_at":1679737993},"f2bfe477-4e45-4e52-a7d9-4d0ba3a92258":{"title":"Besa","condition":"besa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/besa\/js\/"],"icon_url":"","type":"theme","id":"theme:c238e89523c46ca28b08e401f42f6ccc","is_default":0,"created_at":1679738204},"bd94908c-8138-4995-986b-47ec66494bdd":{"title":"BeTheme","condition":"betheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/betheme\/","mfn","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","type":"theme","id":"theme:b99156eb9eeb357c0a70bd3bda6861cc","is_default":0,"created_at":1679738639},"6fb2b9d7-6ecc-4260-999c-938fbebdbf01":{"id":"theme:de8504b73ea228d0ea9bbce69752092e","title":"Bridge","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/bridge-creative\/bridge\/js\/","\/wp-includes\/js\/"],"is_default":0,"condition":"bridge","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"65698b6b-85dd-41ef-8fd7-718f1e983dba":{"title":"Car Dealer","condition":"cardealer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/(.*)","\/cardealer\/js\/(.*)"],"icon_url":"","type":"theme","id":"theme:b1111424fff61af8d1e152dcdd6810f6","is_default":0,"created_at":1679737517},"eb86aedb-91e6-480c-b76c-756ac1da41be":{"title":"Clover","condition":"clover-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/clover-theme\/"],"icon_url":"","type":"theme","id":"theme:89372f3d9321ae09c94488592084da29","is_default":0,"created_at":1679738878},"6e90b649-5736-497f-9bc6-515900cfea8a":{"title":"Divi - Animations","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI"],"icon_url":"","type":"theme","id":"theme:c0abf30dba4ff13db836d1b01685953a","is_default":0,"created_at":1679737389},"70916c43-4e02-4932-b6aa-91a1815bc755":{"title":"Divi - Background video","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/custom.unified.js","\/js\/mediaelement\/(.*)","mejs"],"icon_url":"","type":"theme","id":"theme:c7edea41ae6716291e2d32a2ab429209","is_default":0,"created_at":1679738240},"08531785-9818-4e30-903e-564637a2ad7a":{"title":"Divi - Counter module","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js"],"icon_url":"","type":"theme","id":"theme:2c46b9f5a770f260c3f7115bb330b2d5","is_default":0,"created_at":1679736810},"b996762a-84ef-440d-a089-73a187936fbf":{"title":"Divi - Mobile menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js"],"icon_url":"","type":"theme","id":"theme:b9116994f4e4b9b9fa574440c00d2f0d","is_default":0,"created_at":1679738580},"ae096e1e-9c36-46ad-a3d1-c26ea507276b":{"title":"Divi - Sticky elements","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/sticky-elements.js","var DIVI"],"icon_url":"","type":"theme","id":"theme:8b62db03c90245f3e690335b079b05dc","is_default":0,"created_at":1679737191},"349f31f0-dd10-41d3-b0a4-9c5df64879f8":{"title":"Divi - Sticky menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/js\/jquery\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/magnific-popup.js","jqueryParams","firstHeader"],"icon_url":"","type":"theme","id":"theme:b7b84aca0f0dc6a1ced31d38626c50ea","is_default":0,"created_at":1679738821},"59563458-5f04-4959-b3e2-53e49e169d67":{"title":"Divi - WooCommerce Single Product Images","condition":"Divi","exclusions":["\/Divi\/js\/scripts.min.js"],"icon_url":"","type":"theme","id":"theme:f9c5bdba8b39fc877b41dea00fa756f9","is_default":0,"created_at":1684342262},"6426539e-4e43-4fef-ab5a-3eb7b2a8b057":{"title":"Eikra","condition":"eikra","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/eikra\/assets\/js\/","EikraObj"],"icon_url":"","type":"theme","id":"theme:55d2581ad975eb6325bc97fc3d3b0cb8","is_default":0,"created_at":1679738450},"59020bd6-069f-4f2d-afa2-fbdefa03211c":{"title":"Ekko","condition":"ekko","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ekko\/"],"icon_url":"","type":"theme","id":"theme:2c06f4a1949f8ba4e77042a47674fd9e","is_default":0,"created_at":1679737803},"d82f5cdd-c5d3-4596-94dc-1e25aaff2083":{"title":"Elessi","condition":"elessi-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elessi-theme\/assets\/js\/min\/functions.min.js","\/elessi-theme\/assets\/js\/min\/main.min.js"],"icon_url":"","type":"theme","id":"theme:d5d2b7fda7b8a2b5b91d430f7602e230","is_default":0,"created_at":1679737773},"f0587c21-54d0-429d-8efe-18a93dacb18d":{"id":"theme:5fc04cc678cb54567aedb51027933002","title":"Enfold","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/dynamic_avia\/avia-footer-scripts-(.*).js","var avia_is_mobile"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cc0550cb-918e-419d-b4f2-1809cf666dbb":{"id":"theme:eb759a03d0ca292c948f09d004a2963f","title":"Enfold - LayerSlider","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","layerslider"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ec883654-4f63-4fae-a3ef-923dcbc2426d":{"title":"Enfold - Shortcodes","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/enfold\/js\/avia.js","\/enfold\/js\/shortcodes.js","\/enfold\/config-templatebuilder\/avia-shortcodes\/","\/enfold\/js\/avia-compat.js","\/enfold\/js\/waypoints\/waypoints.min.js","\/enfold\/js\/avia-snippet-(.*).js"],"icon_url":"","type":"theme","id":"theme:072fc4077d7071791d774d6ddbf5dc2a","is_default":0,"created_at":1684519716},"fe3546f0-be3e-4173-8992-a7f6f203b82f":{"title":"Envision","condition":"envision","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/envision\/lib\/js\/app.min.js","var CloudFwOp"],"is_default":1,"icon_url":"","type":"theme","id":"theme:fc5f7d69b646ed95835badc0fc23bc11","created_at":1679737494},"d997b942-19de-4710-9c81-79d3c65cbd76":{"id":"theme:047f009f2a1f4cdf2088c46be47e385b","title":"Ewebot","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/gt3-themes-core\/","\/uploads\/gt3-assets\/js\/(.*)","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"ewebot","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"53d29aec-8ae4-4273-b748-f5bd52dfe177":{"title":"Farvis","condition":"farvis","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/farvis\/"],"icon_url":"","type":"theme","id":"theme:26bff2f3a6ff6347d35edf5c77a35687","is_default":0,"created_at":1679737972},"fb01246b-a5f8-4021-b514-c02cf55e80bd":{"title":"Flatsome","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/assets\/libs\/packery.pkgd.min.js","\/flatsome\/assets\/js\/woocommerce.js"],"icon_url":"","type":"theme","id":"theme:26fb1cf80f074ca199d8a7e94c5fc796","is_default":0,"created_at":1679738732},"4d65dc12-9ce7-4171-94a7-9821fd95240e":{"id":"theme:28a6f8b3319c107a34603be0f01a4bcf","title":"Flatsome - Google map","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com","google.maps.LatLng","\/wp-includes\/js\/hoverIntent.min.js"],"is_default":0,"condition":"flatsome","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"890e15b6-c66b-4a9e-9b7d-55417df94916":{"title":"Flatsome - Images","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/inc\/integrations\/wp-rocket\/flatsome-wp-rocket.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/inc\/extensions\/flatsome-lazy-load\/flatsome-lazy-load.js"],"icon_url":"","type":"theme","id":"theme:f2d60aad9f2f5395e3e145cf8f8ab165","is_default":0,"created_at":1679737691},"cb54d070-8ee0-4c35-9fa9-b2bac73ccf39":{"title":"Frida","condition":"frida","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/frida\/"],"icon_url":"","type":"theme","id":"theme:109ddf56796a5133e12279f3daa5ff62","is_default":0,"created_at":1679738013},"9e78539a-03d9-442b-ab94-dd3b7a9658e4":{"id":"theme:80a330247d61d729fcd78dc01de6ed2f","title":"GeneratePress - Mobile menu","type":"theme","icon":"","exclusions":["\/generatepress\/assets\/js\/menu.min.js","generatepressMenu","\/gp-premium\/menu-plus\/functions\/js\/offside.min.js"],"is_default":0,"condition":"generatepress","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"2c72e7e6-cb77-44e9-af87-d5c42ae6db52":{"title":"Honor - WPBakery fix","condition":"honor","exclusions":["\/honor\/js\/__scripts.js","HONOR_STORAGE","\/js_composer\/"],"icon_url":"","type":"theme","id":"theme:9f228373ff4d172655dbf5cb3b1bc23a","is_default":0,"created_at":1679736895},"9309d1d3-1035-4a2c-8ced-075bc3ff9957":{"title":"HotelMaster","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/hotelmaster\/javascript\/gdlr-script.js","\/hotelmaster\/plugins\/dl-menu\/modernizr.custom.js","\/hotelmaster\/plugins\/dl-menu\/jquery.dlmenu.js","\/hotelmaster\/plugins\/superfish\/js\/superfish.js","\/hotelmaster\/plugins\/jquery.easing.js"],"icon_url":"","type":"theme","id":"theme:978eaddad3b1047e479407b6d92197aa","is_default":0,"created_at":1679738595},"4a09f745-cbb1-47c8-b50a-c8014d5d1335":{"id":"theme:e813a548bceac6765a1cdf2316f1a6ab","title":"HotelMaster - Blog","type":"theme","icon":"","exclusions":["\/wp-includes\/js\/masonry.min.js","\/gp-premium\/blog\/functions\/js\/scripts.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"hotelmaster","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f2d8f704-ec68-4278-9ca2-885daa0c1ce5":{"id":"theme:398a264e302e42640553681e8759cd07","title":"HotelMaster - Masonry","type":"theme","icon":"","exclusions":["\/gp-premium\/menu-plus\/functions\/js\/offside.min.js","offSide"],"is_default":0,"condition":"hotelmaster","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"df52436c-53d6-461a-b81a-cd0b21680524":{"title":"JNews","condition":"jnews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/jnews\/assets\/js\/","jnews","jfla"],"icon_url":"","type":"theme","id":"theme:5d90e451984f9d894b1aabb0d00f30a2","is_default":0,"created_at":1679738860},"28a0b1ea-8d2f-4931-a48a-166b8df8a773":{"title":"JOYN","condition":"joyn","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/lib\/modernizr-custom.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/spb-functions.min.js","\/swift-framework\/includes\/swift-slider\/assets\/js\/swift-slider.min.js","\/swift-framework\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/joyn\/js\/owl.carousel.min.js","\/joyn\/js\/theme-scripts.js","\/joyn\/js\/functions.js"],"icon_url":"","type":"theme","id":"theme:c395470ad2d4d681836cd942bbb03120","is_default":0,"created_at":1679738527},"542be60a-2346-4740-9a41-8a580c4f013c":{"title":"Juno Toys","condition":"junotoys","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/junotoys\/fw\/js\/core.init.js","\/junotoys\/fw\/js\/core.utils.js","\/junotoys\/fw\/js\/superfish.js","\/junotoys\/fw\/js\/swiper\/swiper.js","\/trx_utils\/shortcodes\/theme.shortcodes.js","\/wp-includes\/js\/jquery\/ui\/(.*)"],"icon_url":"","type":"theme","id":"theme:2acab38e8356d36355bb81d931e7fba4","is_default":0,"created_at":1679737788},"06167710-10c7-446e-a08b-ce676e444102":{"title":"Jupiter","condition":"jupiter","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiter\/","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:89c5c30498c2989611f9044be006197c","is_default":0,"created_at":1679738430},"5d042e1f-7e62-4ec4-ba31-30d396004522":{"title":"JupiterX","condition":"jupiterx","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiterx\/(.*).js","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:b06632962a4948d4944fd8d79ffbfceb","is_default":0,"created_at":1679737312},"c4b030ea-66a1-4729-85bf-a484e373a316":{"title":"Kadence","condition":"kadence","exclusions":["\/kadence\/assets\/js\/navigation.min.js","mobile_menu_breakpoint ","kadenceConfig"],"icon_url":"","type":"theme","id":"theme:4b7907ee68218db279648da9bf7102d1","is_default":0,"created_at":1679737958},"20c605b4-3e3a-4bb0-a5e5-a08e2cb0f31f":{"title":"Kalium","condition":"kalium","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kalium\/assets\/js\/main.min.js","mobile_menu_breakpoint","var _k"],"icon_url":"","type":"theme","id":"theme:1fcb99a1ab06e1e36635365ed3e59ce5","is_default":0,"created_at":1679737406},"e1e04a7d-635a-4e28-83d9-e345ce40e354":{"title":"Kava","condition":"kava","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kava\/assets\/js\/theme-script.js"],"icon_url":"","type":"theme","id":"theme:359d67efbf530c998245225dd3245a88","is_default":0,"created_at":1679738609},"e833c36e-ee89-4924-b608-3f28327c2f85":{"title":"Lay","condition":"lay","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/underscore.min.js","\/lay\/","\/laytheme-carousel\/","window.laytheme"],"icon_url":"","type":"theme","id":"theme:7c718c6da874ea6e4b27c6d70bc4e7e8","is_default":0,"created_at":1679737453},"2df2ef47-a833-4711-ba54-48dc62586f37":{"id":"theme:85d9922ac61ed833fd047a67029df8e5","title":"LazaNews","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery.custom.js"],"is_default":0,"condition":"lazanews","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"9443304a-34e9-4700-a03a-5f8f62f83ed1":{"title":"Listeo","condition":"listeo","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listeo\/js\/"],"icon_url":"","type":"theme","id":"theme:db7da585545001f5ae614a2810f08f3a","is_default":0,"created_at":1679737244},"77afa73c-c4a8-42a8-aaee-43f6a761364e":{"title":"ListingPro","condition":"listingpro","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listingpro\/assets\/lib\/jquerym.menu\/js\/jquery.mmenu.min.all.js","\/listingpro\/assets\/lib\/Magnific-Popup-master\/jquery.magnific-popup.min.js","\/listingpro\/assets\/js\/select2.full.min.js","\/listingpro\/assets\/js\/jquery.city-autocomplete.js","\/listingpro\/assets\/js\/chosen.jquery.min.js","\/listingpro\/assets\/lib\/bootstrap\/js\/bootstrap-slider.js","\/listingpro\/assets\/js\/jquery-ui.js","\/listingpro\/assets\/js\/mapbox.js","\/listingpro\/assets\/js\/main.js","\/listingpro\/assets\/js\/leaflet.markercluster.js","maps"],"icon_url":"","type":"theme","id":"theme:0b365e43dfc65d2b1b70fac6510c7c9c","is_default":0,"created_at":1679737938},"01b369b5-b578-4314-8e95-40b67a41d75a":{"title":"Master Study","condition":"masterstudy","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/masterstudy\/assets\/js\/custom.js ","\/masterstudy\/assets\/vendors\/jquery.fancybox.min.js ","\/masterstudy\/assets\/js\/select2.full.min.js"],"icon_url":"","type":"theme","id":"theme:0ee224c20e4ef7d546733d933db598f2","is_default":0,"created_at":1679737878},"6b000cc7-d33b-4109-9c39-6119a5d81cde":{"title":"Maya","condition":"maya","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maya\/js\/jquery.mobilemenu.js","\/maya\/js\/jquery.custom.js","\/maya\/core\/includes\/js\/jquery.tipsy.js"],"icon_url":"","type":"theme","id":"theme:719fe28004fcdd81a820602924aa8074","is_default":0,"created_at":1679737916},"ef3c76d6-1041-473d-81ea-a5a6e8c86735":{"title":"MH Magazine","condition":"mh-magazine","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/mh-magazine\/"],"icon_url":"","type":"theme","id":"theme:2a0cd6efc2f46be69de61712729a2ec9","is_default":0,"created_at":1679737743},"9cbb2777-5524-43b8-af36-692b27452c0d":{"title":"Minimog","condition":"minimog","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/minimog\/"],"icon_url":"","type":"theme","id":"theme:61c0c235042359ee7d2a9035e79a7da2","is_default":0,"created_at":1679738135},"7eb81c74-8062-4a6c-bf66-b7c5bc160141":{"title":"Moozo Elementor","condition":"moozo-elementor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/moozo-elementor\/assets\/js\/countdown.js","\/moozo-elementor\/assets\/vendor\/countdown\/countdown.min.js"],"icon_url":"","type":"theme","id":"theme:2ddb538c8e6b6c766fffd0d5c861fd82","is_default":0,"created_at":1679738623},"e90b7bfa-9ff6-4e1a-bf29-6207d55fdd39":{"title":"Motor","condition":"motor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/motor\/js\/"],"icon_url":"","type":"theme","id":"theme:b33538179f5661a86cbe327a1793e199","is_default":0,"created_at":1683973354},"445e625a-f955-41fa-84de-65d9ea19be07":{"title":"My Listing","condition":"my-listing","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/my-listing\/assets\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","maps.googleapis.com","MyListing","_Explore_Settings"],"icon_url":"","type":"theme","id":"theme:afacb777229ddf5cabceacc64948057d","is_default":0,"created_at":1679737725},"00b8cd2d-2781-4fbb-ac5d-00750ba94ac9":{"title":"Neve - Mobile menu","condition":"neve","exclusions":["\/neve\/assets\/js\/build\/modern\/frontend.js"],"icon_url":"","type":"theme","id":"theme:5ae731cc06dd9284f8172675a6fe81ab","is_default":0,"created_at":1679738714},"483abc54-f1fc-47dc-bfc1-a269c7d1c849":{"id":"theme:649ff22527bac2b1c8e0115cd3851d53","title":"Newspaper - Images","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray"],"is_default":0,"condition":"Newspaper","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"50db8d14-d421-4237-be14-a6f7b5c11ec5":{"id":"theme:7e2eeee57ae458c5959342eda6526bf1","title":"Newspaper - Slider & YouTube","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","tdb_globals","td_youtube_list_ids","iosSlider","\/td-cloud-library\/assets\/js\/js_files_for_front.min.js"],"is_default":0,"condition":"Newspaper","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"514f4c30-2b67-4648-960e-dfe1cc401ca5":{"title":"Niva","condition":"niva","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/niva\/js\/","\/sweetthemes-framework\/js\/","mt_typed"],"icon_url":"","type":"theme","id":"theme:c4838f73a344b829ed626635e210dcf4","is_default":0,"created_at":1679738256},"e67ee504-c3b1-455e-88ab-1fae8c830652":{"title":"OceanWP","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/oceanwp\/"],"icon_url":"","type":"theme","id":"theme:db37af4b7d12695d37d9256313a5f37a","is_default":0,"created_at":1679737552},"e44e240a-8765-4f4f-b67e-d54e4b727506":{"title":"OceanWP - Mobile menu","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ocean-side-panel\/assets\/js\/side-panel.min.js","\/oceanwp\/assets\/js\/theme.vanilla.min.js"],"icon_url":"","type":"theme","id":"theme:9babbcd52b2ce558d299a06cd1130a11","is_default":0,"created_at":1679738463},"897b0100-958d-4a02-b6b2-1e753e9869f4":{"title":"PenNews","condition":"pennews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/pennews\/js\/script.min.js","\/pennews\/js\/script.lib.min.js"],"icon_url":"","type":"theme","id":"theme:02811fa00bc1471bb5be0457ce0ee005","is_default":0,"created_at":1679737471},"edd3ba03-e0fd-4b6e-911b-60b29f3471bf":{"title":"Pharmacy Mentor","condition":"pharmacymentor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/pharmacymentor\/"],"icon_url":"","type":"theme","id":"theme:3188aaf1ef2c39937450f2a14ebb1174","is_default":0,"created_at":1679738214},"725415ff-cc76-45cc-a131-3170e5aa30fc":{"title":"Porto","condition":"porto","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme.js","\/porto\/js\/theme.min.js"],"icon_url":"","type":"theme","id":"theme:8493f398f200c8dffe60d46439dd3360","is_default":0,"created_at":1679737758},"31347ccb-f69e-4cd3-bd47-b80ce14ac76e":{"title":"ProPhoto","condition":"prophoto7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/prophoto7\/js\/bundle.front.js","\/wp-includes\/js\/underscore.min.js","PROPHOTO"],"icon_url":"","type":"theme","id":"theme:a5836a56c4472fade4dc6ebfe2281554","is_default":0,"created_at":1679737425},"a8208c04-865c-49aa-ab96-41e378d391c8":{"title":"Publisher","condition":"publisher","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/publisher\/js\/"],"icon_url":"","type":"theme","id":"theme:32c73be0cb175da278c8e2af0811b0d1","is_default":0,"created_at":1679738169},"a0d69f3d-1356-4a1d-a600-2f2f788b8a9a":{"title":"REHub","condition":"rehub-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rehub-theme\/js\/custom_floatpanel.js"],"icon_url":"","type":"theme","id":"theme:321af1febb74f488cf911380893739b2","is_default":0,"created_at":1679738502},"8b74bbe5-7f32-42df-908f-78c99a8cad82":{"title":"Rey","condition":"rey","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rey\/scripts-(.*).js","\/rey-core\/assets\/js\/"],"icon_url":"","type":"theme","id":"theme:e46567cd0f3ec9b37e7230dc87eac367","is_default":0,"created_at":1679737011},"5c9115d3-bcbd-49d6-8feb-4880d2b82bfe":{"title":"Rife Free","condition":"rife-free","exclusions":["\/rife-free\/js\/script.min.js","\/rife-free\/js\/isotope.pkgd.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","var reJS"],"icon_url":"","type":"theme","id":"theme:74a449954de79625eccc6750e87af8f6","is_default":0,"created_at":1679738107},"6542b2fd-1f91-4862-aa18-11eecc02faaf":{"title":"Roisin","condition":"roisin","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/themes\/roisin\/assets\/js\/main.min.js","\/plugins\/roisin-core\/assets\/js\/roisin-core.min.js"],"icon_url":"","type":"theme","id":"theme:8f38fe58034772931110930b91cb6797","is_default":0,"created_at":1685695865},"7ae9d978-d63c-4a58-beb3-418bebb5b23c":{"title":"Salient","condition":"salient","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/salient\/","winW > bodyW"],"icon_url":"","type":"theme","id":"theme:b3e12d57ac23897be1bb2c673e3fc761","is_default":0,"created_at":1679736950},"35aaa6c5-4a37-4161-b504-fb3ebc4b1148":{"id":"theme:d612db1dd8dc76faa6a36a9ebfd336dc","title":"Salient - Nectar slider","type":"theme","icon":"","exclusions":["\/salient-nectar-slider\/js\/nectar-slider.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"salient","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cd44aa56-088a-40dd-bf1e-f835efa68626":{"title":"Shoptimizer","condition":"shoptimizer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shoptimizer\/assets\/js\/lazyload-bg.js","\/shoptimizer\/assets\/js\/main.min.js"],"icon_url":"","type":"theme","id":"theme:6c32b43f4da639e5901574fac6b7d387","is_default":0,"created_at":1679737143},"d2c48a48-430a-4eea-bc05-99b66f1f6a7b":{"title":"SmartMag","condition":"smart-mag","exclusions":["\/smart-mag\/js\/lazyload.js"],"icon_url":"","type":"theme","id":"theme:23d6b7878bd0087addb067db3fa39864","is_default":0,"created_at":1679738490},"dd0d9133-ef17-4dac-b174-9f25d535838f":{"title":"Soledad","condition":"soledad","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/soledad\/js\/main.js","\/soledad\/js\/more-post.js","\/soledad\/js\/libs-script.min.js"],"icon_url":"","type":"theme","id":"theme:d3f78b26c2d11c99230171cc6378d06e","is_default":0,"created_at":1679737664},"d657dc56-5c04-439a-8987-401f89a65bf9":{"title":"Stockholm","condition":"stockholm","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/stockholm\/js\/"],"icon_url":"","type":"theme","id":"theme:fcfff492e00727b63cf5dff9f59bc2a4","is_default":0,"created_at":1679738378},"121f9b1b-d3cd-4dde-915e-0b348abf6687":{"title":"Storefront","condition":"storefront","exclusions":["\/storefront\/assets\/js\/navigation.min.js"],"icon_url":"","type":"theme","id":"theme:f0dca7e4eaedf573d4664be249845942","is_default":0,"created_at":1679738793},"41cfc83f-ff02-4a35-a3b7-e92db213b224":{"title":"StreamTube","condition":"streamtube","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/streamtube\/","\/streamtube-core\/"],"icon_url":"","type":"theme","id":"theme:9772ccddd470688f6bc6aee86e34d29b","is_default":0,"created_at":1679331431},"aec0a548-4c6b-400a-80ed-19a49e0faef0":{"title":"The7","condition":"dt-the7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","loader-removed","\/Ultimate_VC_Addons\/assets\/min-js\/","\/dt-the7\/","\/js_composer\/"],"icon_url":"","type":"theme","id":"theme:7934c689fd20e30b6bfc69bb9d46cb63","is_default":0,"created_at":1679737892},"538354ff-d69f-40be-b0cc-df3790599dd2":{"title":"TheGem","condition":"thegem","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thegem\/js\/","gemSettings","thegemSlideshow","tgpLazyItemsOptions"],"icon_url":"","type":"theme","id":"theme:153c54fe73897da838ce39152b1db5a8","is_default":0,"created_at":1679738477},"68f2de3b-e2b8-4edf-b82f-93fd7834c65f":{"title":"Total","condition":"Total","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Total\/assets\/js\/total.min.js"],"icon_url":"","type":"theme","id":"theme:96b0141273eabab320119c467cdcaf17","is_default":0,"created_at":1679737571},"6dc1cb35-6b50-4da0-9834-dddf169edaa6":{"id":"theme:7c37c885d7fecf788f635734f99e8610","title":"Townhub","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/townhub-add-ons\/assets\/js\/(.*)","\/wp-includes\/js\/dist\/vendor\/react.js","\/wp-includes\/js\/dist\/vendor\/react-dom.js"],"is_default":0,"condition":"townhub","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"14cb0a85-8bee-491e-99d7-5f20a07f4bdd":{"title":"Uncode","condition":"uncode","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uncode\/library\/js\/init(.min)?.js","\/uncode\/library\/js\/plugins(.min)?.js","\/uncode\/library\/js\/app(.min)?.js","\/uncode\/library\/js\/woocommerce-uncode(.min)?.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","initHeader","initBox","fixMenuHeight","initRow"],"icon_url":"","type":"theme","id":"theme:18ba19b98aefbb6c0fde6c6bf92e9cfc","is_default":0,"created_at":1679738154},"88e96479-1aa2-4adc-8f07-20bc0368a63f":{"title":"Werkstatt","condition":"werkstatt","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js\/underscore.min.js","\/werkstatt\/assets\/js\/vendor.min.js","\/werkstatt\/assets\/js\/fullscreen.min.js","\/werkstatt\/assets\/js\/app.min.js"],"icon_url":"","type":"theme","id":"theme:38faa29db5a07b8fef6aee9cc11cafec","is_default":0,"created_at":1679737639},"60c4110b-a960-4d44-b619-6d79514dbf75":{"title":"Woodmart","condition":"woodmart","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/imagesloaded.min.js","\/woodmart\/js\/scripts\/wc\/","\/woodmart\/js\/scripts\/global\/","\/woodmart\/js\/libs\/owl.carousel.min.js","\/woodmart\/js\/libs\/owl.carousel.js","\/woodmart\/js\/libs\/slick.js"],"icon_url":"","type":"theme","id":"theme:06338f13cb89e5309ad2eb7e4d457be4","is_default":0,"created_at":1679738777},"119ebd1c-6b46-4f07-8d6a-3498d9c8814f":{"title":"XStore","condition":"xstore","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/xstore\/js\/","\/et-core-plugin\/packages\/st-woo-swatches\/public\/js\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3de9d9ba385200548f177d9c704ae92a","is_default":0,"created_at":1679738190},"9a7a548c-07a1-4dff-93fc-6e8230b67853":{"id":"theme:119d329456073aa10969d7cbd9760f28","title":"YOOtheme Pro","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","uikit.min.js"],"is_default":0,"condition":"yootheme","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f74c499e-b7d9-4590-8671-379f51f468c8":{"title":"Zeen","condition":"zeen","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/zeen\/assets\/js\/","\/js.cookie.min.js"],"icon_url":"","type":"theme","id":"theme:acb52844f996627788836366404a3245","is_default":0,"created_at":1679737859}},"plugins":{"ffc21030-519a-4853-8cea-49f959e82731":{"id":"plugin:def67a2c1ddd6df2353e4772b6fd4e5b","title":"Additional Variation Images Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woo-variation-gallery\/assets\/js\/slick.min.js","\/woo-variation-gallery\/assets\/js\/frontend.min.js","\/wp-includes\/js\/underscore.min.js","variation_custom_fields"],"is_default":0,"condition":"woo-variation-gallery\/woo-variation-gallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"0e7dc253-acd0-4421-877f-a7101d848717":{"id":"plugin:4b82cc7379d46c6272f5d556bb264eec","title":"Advanced Ads","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/(.*).js","advanced_ads_ready","advadsCfpQueue","adsbygoogle","adservice.google","\/advanced-ads(.*)","advads_items","advads_tracking_ads"],"is_default":0,"condition":"advanced-ads\/advanced-ads.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a4d5c058-9120-47ee-977c-f30f83fb1a75":{"id":"plugin:a076fbb79772f497349a76ee74a7f708","title":"All-in-one Compliance for GDPR \/ CCPA Cookie Consent","type":"plugin","icon":"","exclusions":["iubenda_cs.js","var _iub"],"is_default":0,"condition":"iubenda-cookie-law-solution\/iubenda_cookie_solution.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"79a5082f-821a-4a4b-a0e3-caaf22cf3f75":{"id":"plugin:9bdceaa1bb89135730a3b2aa4db94c22","title":"AMO Team Showcase","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/amo-team-showcase\/public\/js\/wookmark.js","\/amo-team-showcase\/public\/js\/amo-team-showcase-public.js","\/wp-includes\/js\/imagesloaded.min.js","amoTeamVars"],"is_default":0,"condition":"amo-team-showcase\/amo-team-showcase.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1d058cae-4460-4354-bab3-a96445650bd8":{"id":"plugin:b739df50f3f5bf400075f17dca652517","title":"AnyWhere Elementor Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/anywhere-elementor-pro\/build\/index.js"],"is_default":0,"condition":"anywhere-elementor-pro\/anywhere-elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8a1614c7-55b1-4b6d-88e5-6e8ddc630dae":{"id":"plugin:46741e77eaf4d13a0c80be6b86379758","title":"Astra - Pro Addon","type":"plugin","icon":"","exclusions":["\/astra-addon\/astra-addon-(.*).js"],"is_default":0,"condition":"astra-addon\/astra-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"37d96403-f9ea-4481-b2f8-374d7c93e61a":{"id":"plugin:ccd87807930a1856717fd276c336db9a","title":"Beaver Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/bb-plugin\/","\/bb-plugin\/js\/yui3.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/bb-plugin\/js\/fl-slideshow.min.js"],"is_default":0,"condition":"beaver-builder-lite-version\/fl-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f83dbf3b-783e-4ef9-9b18-8a469ca7102d":{"title":"Bloom","condition":"bloom\/bloom.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bloom\/"],"icon_url":"","type":"plugin","id":"plugin:e57cdfbc09f4e0f7445c279d9f580bdd","is_default":0,"created_at":1685189070},"135aadd2-cd4a-44ae-8dcf-801f3f2316c0":{"id":"plugin:055ef01accbad6378e3d1a4965600964","title":"Booked","type":"plugin","icon":"","exclusions":["\/booked\/","\/js\/jquery\/ui\/datepicker.min.js"],"is_default":0,"condition":"booked\/booked.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ddfee9b0-e5a9-4d3f-8c21-b999cbb61c33":{"id":"plugin:492f9b0d55f3bf07c68e915ea1dfb72a","title":"Bookly","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bookly-responsive-appointment-booking-tool\/frontend\/","window.bookly"],"is_default":0,"condition":"bookly-responsive-appointment-booking-tool\/main.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7a013fd6-0881-4dbe-8e93-33edefe7f717":{"id":"plugin:e1ec2daca513de476bd3dae79366e9ab","title":"Borlabs Cookie","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","borlabsCookieConfig","borlabs-cookie.min.js","borlabsCookieContentBlocker","BorlabsCookieBox"],"is_default":0,"condition":"borlabs-cookie\/borlabs-cookie.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3999e680-4049-4494-945c-768cecc1a2c4":{"id":"plugin:43019d66af7b41e65bb602c01e10c6a0","title":"Brizy","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/group-(.*).js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/preview.js","Brizy.emit"],"is_default":0,"condition":"brizy\/brizy.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"af4d9357-3def-42a1-86b7-419553444b4d":{"id":"plugin:5c317f9f244597d8f236ecb7d8e41752","title":"Carousel Upsells and Related Product for WooCommerce","type":"plugin","icon":"","exclusions":["\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","carusel_poduct_related"],"is_default":0,"condition":"carousel-upsells-and-related-product-for-woocommerce\/ffxf-woo-glide-related-and-upsells.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1d866d90-5451-43ba-a4d1-75b64f9235e1":{"id":"plugin:0a3a29603ebac8fe0808f64f5c8edbb2","title":"clickskeks.at Cookiebanner","type":"plugin","icon":"","exclusions":["clickskeks"],"is_default":0,"condition":"clickskeks\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c09695cc-2387-4416-881a-c0b392188a26":{"title":"Complianz","condition":"complianz-gdpr\/complianz-gpdr.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","complianz"],"icon_url":"","type":"plugin","id":"plugin:a766f95208154cd69a3e15150a42f325","is_default":0,"created_at":1685188788},"7e551e3b-fbe4-4235-87a9-b476bc9e2020":{"id":"plugin:949b1b923d51d10a2fb67a2a39d166b3","title":"Content Egg","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/content-egg\/res\/js\/morrisjs\/morris.min.js","\/content-egg\/res\/js\/morrisjs\/raphael.min.js","Morris.Area"],"is_default":0,"condition":"content-egg\/content-egg.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"7fbca6c5-9239-4550-a755-6f041f867a57":{"title":"Cookie Notice & Compliance for GDPR \/ CCPA","condition":"cookie-notice\/cookie-notice.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/cookie-notice\/","var cnArgs"],"icon_url":"","type":"plugin","id":"plugin:213d0f883ae27aefb3a7937656bbd11e","is_default":0,"created_at":1681379736},"26722567-fe35-44b5-a5a7-fb0f3a38c3f2":{"id":"plugin:1d10ad30bbcf0fd4b26e9625a07abcfc","title":"Cookiebot CMP","type":"plugin","icon":"","exclusions":["consent.cookiebot.com"],"is_default":0,"condition":"cookiebot\/cookiebot.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"74110e36-89e5-440d-bec3-7133da3277c2":{"id":"plugin:edcf103293ceab711e999d419d038ca1","title":"Coupon Referral Program","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/coupon-referral-program\/","\/wp-includes\/js\/jquery\/ui\/draggable.min.js"],"is_default":0,"condition":"coupon-referral-program\/coupon-referral-program.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ed63e02f-d6c5-481a-bcb9-aae15f72aa21":{"id":"plugin:c3e26264dcfd25802805b4fd1a2a449c","title":"Crisp - Live Chat and Chatbot","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","CRISP_RUNTIME_CONFIG","l.js"],"is_default":0,"condition":"crisp\/crisp.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"a8eb622b-279c-4f84-86e0-785e9497add7":{"id":"plugin:6e4bf949e12f0bebfefb48f6c316102a","title":"Custom Twitter Feeds pro","type":"plugin","icon":"","exclusions":["\/custom-twitter-feeds-pro\/js\/ctf-scripts.min.js"],"is_default":0,"condition":"custom-twitter-feeds-pro\/custom-twitter-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1624ef15-e25b-406d-bdf9-d4b78d7a59e7":{"id":"plugin:1f893b343e72ce55e6c9013fbda172fa","title":"Customer Reviews for WooCommerce Plugin","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/customer-reviews-woocommerce\/js\/colcade.js"],"is_default":0,"condition":"customer-reviews-woocommerce\/ivole.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c15fe3b3-0eaa-48f9-bf04-0e778b1f8c63":{"title":"Divi - Supreme","condition":"supreme-modules-for-divi\/supreme-modules-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/supreme-modules-for-divi\/"],"icon_url":"","type":"plugin","id":"plugin:b5489ae4d8b949f536d6dd2e5b0c1a95","is_default":0,"created_at":1679738701},"dd31451b-989a-4517-b02a-e2c2e2023366":{"id":"plugin:5caed322df984bbfd3ecb506cf12b688","title":"Divi Den Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ddpro\/build\/freddie\/js\/freddieScriptPageTransition.js","\/ddpro\/build\/freddie\/js\/freddieScriptsHeaders.js","\/ddpro\/build\/freddie\/js\/freddieScriptsContents.js","\/ddpro\/build\/freddie\/js\/gsap\/gsap.min.js"],"is_default":0,"condition":"ddpro\/ddpro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"2b006370-cc90-42c1-9656-a30fbfbc91c6":{"id":"plugin:402d9b241b04934dd30f32e7ba490e63","title":"Divi Mobile","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","divi-menu","dm_nav"],"is_default":0,"condition":"divi-mobile\/divi-mobile.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"666bbed9-7ce3-457c-ad6e-b5e056d05010":{"title":"Divi Overlays","condition":"divi-overlays\/divi-overlays.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","var DIVI","\/divi-overlays\/"],"icon_url":"","type":"plugin","id":"plugin:1c828c93d87298d2a27c76e13d0880ba","is_default":0,"created_at":1679738664},"42a404af-7792-44be-9baa-565dc3baf25d":{"id":"plugin:dd2494945a487a6cc74d3ab1b2137ccb","title":"Divi Pixel","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer"],"is_default":0,"condition":"divi-pixel\/divi-pixel.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"0b78d762-c7be-45de-9aae-0c5078ec0619":{"id":"plugin:b5fc0101608d0b0627268dc49e3e1f8f","title":"Divi Toolbox","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","jQuery('.preloader')","\/divi-toolbox\/assets\/js\/toolbox-scripts.js"],"is_default":0,"condition":"divi-toolbox\/divi-toolbox.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8baba0f8-4449-47d8-a87d-9b6a116e7684":{"title":"Dynamic Pricing & Discounts Lite for WooCommerce","condition":"woo-dynamic-pricing-discounts-lite\/dynamic-pricing-discounts-lite-for-woocommerce.php","exclusions":["\/woo-dynamic-pricing-discounts-lite\/assets\/OwlCarousel\/dist\/owl.carousel.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:185062bf08db42515488e1853d1f4917","is_default":0,"created_at":1677857247},"0fa129f2-5869-4db7-9bf0-69e4b3549ee2":{"id":"plugin:27478327aa44075a86176fad95640d76","title":"Dynamic Product Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-dynamic-gallery\/","a3revWCDynamicGallery"],"is_default":0,"condition":"woocommerce-dynamic-gallery\/wc_dynamic_gallery_woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"9958c6be-2f67-4791-95c3-a7ad96d599c0":{"title":"Dynamic Product Gallery Premium for WooCommerce","condition":"woocommerce-dynamic-gallery-pro\/wc_dynamic_gallery_woocommerce.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/woocommerce-dynamic-gallery-pro\/assets\/js\/mygallery\/jquery.a3-dgallery.js","settings_defaults_","a3revWCDynamicGallery"],"icon_url":"","type":"plugin","id":"plugin:11dc02a76019f00422f4ac85f47f5135","is_default":0,"created_at":1683208937},"ce26ed21-1be5-481f-80d4-31edfac6d890":{"title":"Dynamic.ooo - Dynamic Content for Elementor","condition":"dynamic-content-for-elementor\/dynamic-content-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/dynamic-content-for-elementor\/assets\/","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:d2bd5b348abe016bdc722acce7755062","is_default":0,"created_at":1683355024},"6a3161a6-1a6f-457a-a9ee-54b376981927":{"id":"plugin:ee1dec033c6481a77fe88de5bef1a02d","title":"Easy Table of Contents","type":"plugin","icon":"","exclusions":["\/easy-table-of-contents\/assets\/js\/front.min.js"],"is_default":0,"condition":"easy-table-of-contents\/easy-table-of-contents.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"25a534a0-2c1f-4cf4-9e19-7941bc032b3a":{"id":"plugin:41c8f5f0ab00cb39654aedd783d194e0","title":"Ecwid Ecommerce Shopping Cart","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js ","app.ecwid.com\/script.js ","\/ecwid-shopping-cart\/js\/frontend.js ","\/ecwid-shopping-cart\/js\/static-page.js ","ecwidParamswindow.ec ","jQuery.mobile ","xSearch ","xCategoriesV2 ","xProductBrowser ","Ecwid.init"],"is_default":0,"condition":"ecwid-shopping-cart\/ecwid-shopping-cart.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"40464325-5bae-4a20-bc97-553499e09a73":{"title":"Elementor","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","type":"plugin","id":"plugin:1d15783218a3137bec4ee8df5353e218","is_default":0,"created_at":1679490020},"1948aff5-7850-4979-91fa-0ce181484508":{"id":"plugin:de658ae6c2d05a5a4a947efecf5e0c16","title":"Elementor Custom Skin","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ele-custom-skin(.*)\/assets\/js\/"],"is_default":0,"condition":"ele-custom-skin\/ele-custom-skin.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"25708299-c596-4416-8ad8-740aee0f2752":{"title":"Elementor Pro","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","type":"plugin","id":"plugin:030ad23e3851ed7adfa7b9b6c13cf5a6","is_default":0,"created_at":1679490021},"f34dd874-4b34-41e6-a31c-ece3c1efbffc":{"id":"plugin:305581ad4294a30eeb1247982f626005","title":"Elementor Pro - SmartMenus","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/assets\/lib\/smartmenus\/jquery.smartmenus.min.js","\/elementor-pro\/assets\/js\/preloaded-elements-handlers.min.js"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"111cc8b2-0be9-438b-9aa3-7f1e301a5697":{"id":"plugin:5ae9f5d99224d5ebc7d0c0bbf5b99787","title":"Elementor Pro - User Cache","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/backbone.min.js","elementorAdminBarConfig","elementorCommonConfig","elementorWebCliConfig","elementorDevToolsConfig"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c1713bf8-e0c3-4cb5-8b3f-841b06aa87ed":{"title":"ElementsKit Lite - Megamenu","condition":"elementskit-lite\/elementskit-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/elementskit(.*)\/"],"icon_url":"","type":"plugin","id":"plugin:b91fed2fc4478dbb7067742c1ee4691b","is_default":0,"created_at":1683270249},"706ff35d-8e33-4b04-a986-346faff704e9":{"id":"plugin:417192424139d89fb2a5b1ee1f2b9613","title":"Essential Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"is_default":0,"condition":"essential-addons-for-elementor-lite\/essential_adons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b38556dc-2bc4-430f-9c55-7191cf7773db":{"id":"plugin:057757d0593ad9d2dc58124f0077a5df","title":"Essential Addons for Elementor Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"is_default":0,"condition":"essential-addons-elementor\/essential_adons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"719b988f-0d60-40c2-ba46-88f943119cb1":{"id":"plugin:c8e6c490f6438f566ade600c33531a85","title":"Essential Grid","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/essential-grid\/","lightboxOptions"],"is_default":0,"condition":"essential-grid\/essential-grid.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"47d3d2ab-160d-4b07-ac25-8250b9e6a951":{"id":"plugin:dafd19fa48a1fef890dc4348052fcb75","title":"EventON Lite","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/eventon-lite\/assets\/js\/(.*)"],"is_default":0,"condition":"eventon-lite\/eventon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"219968d7-cf1f-4ee0-917a-db35dcc93a3e":{"id":"plugin:49ff465628fc3cb6d7f23ff81d9b8339","title":"FacetWP","type":"plugin","icon":"","exclusions":["\/facetwp\/assets\/js\/dist\/front.min.js","window.FWP_"],"is_default":0,"condition":"facetwp\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"acce5701-5917-48d5-83ab-3e626aa420c5":{"id":"plugin:78a1c88a56fa957c802074b6418c6fac","title":"FacetWP - Flyout menu","type":"plugin","icon":"","exclusions":["\/facetwp-flyout\/assets\/js\/front.js"],"is_default":0,"condition":"facetwp-flyout\/facetwp-flyout.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f2a5b95f-1a22-46d2-8b72-42a53e46ae3f":{"id":"plugin:5d7555892a3a9968fde3fa3a335fc3d8","title":"FiboSearch - Ajax Search for WooCommerce","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.js","\/wp-includes\/js\/jquery\/jquery-migrate.js","\/ajax-search-for-woocommerce-premium\/assets\/js\/search.js"],"is_default":0,"condition":"ajax-search-for-woocommerce\/ajax-search-for-woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7d1404e9-be76-449c-87aa-919557abe82d":{"id":"plugin:ad46179e8b0584abaf52056b846da227","title":"FlexBlock","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/flo-flex-builder\/dist\/flex-public.min.js","flexDebug"],"is_default":0,"condition":"flo-flex-builder\/flo-flex-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b9c6a2dc-b226-4e2c-b85e-29ee55b8f751":{"id":"plugin:567a2b15db30ef6bd4904e4317139aac","title":"Fluent Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/fluentform\/public\/js\/(.*).js","\/fluentformpro\/public\/js\/(.*).js"],"is_default":0,"condition":"fluentform\/fluentform.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"10874f8a-2855-4e80-bc46-e484589b76a8":{"id":"plugin:e78c153103f698b2b34892332d6b3b62","title":"Flying Images","type":"plugin","icon":"","exclusions":["flyingImages"],"is_default":0,"condition":"nazy-load\/flying-images.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"53958499-dacd-41d6-93bc-1534fe7d9eda":{"id":"plugin:5a0e40a6c5783856893b803189de1404","title":"FooGallery Premium","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/foobox-image-lightbox\/free\/js\/foobox.free.min.js","\/plugins\/foogallery-premium\/pro\/extensions\/default-templates\/shared\/js\/foogallery.min.js"],"is_default":0,"condition":"foogallery-premium\/foogallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7870d704-2024-4622-838c-fad37d5c6753":{"id":"plugin:ebb5efb57b19ae60e734e456ca2df3f8","title":"Formidable Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","frmSigs","\/formidable-signature\/js\/frm.signature.min.js"],"is_default":0,"condition":"formidable\/formidable.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3f24f9b3-e59e-400f-a784-999f93f60fab":{"id":"plugin:0b08523445b8869a67ca40e777704692","title":"Forminator","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","forminatorFront","\/forminator\/build\/front\/front.multi.min.js","\/forminator\/assets\/js\/library\/jquery.validate.min.js","\/forminator\/assets\/forminator-ui\/js\/forminator-form.min.js","\/forminator\/assets\/forminator-ui\/js\/select2.full.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js"],"is_default":0,"condition":"forminator\/forminator.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3a600ded-3454-48fb-9811-46afa2ab3c05":{"id":"plugin:5759bf0d47ac3457485314b381a9b528","title":"GDPR Cookie Compliance","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gdpr-cookie-compliance\/dist\/scripts\/main.js"],"is_default":0,"condition":"gdpr-cookie-compliance\/moove-gdpr.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"e21aaa5e-7354-471d-ab86-85f99f48830c":{"id":"plugin:ffb40036ab0583218561de7c28c6bd9b","title":"GDPR Cookie Consent","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/public\/js\/cookie-law-info-public.js","Cli_Data"],"is_default":0,"condition":"webtoffee-gdpr-cookie-consent\/cookie-law-info.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c11ca4ea-1a23-49ee-9a6b-1e549de50ea2":{"id":"plugin:3877953c5ec1e66db92ad844ae8ebafc","title":"Getwid - Gutenberg Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"is_default":0,"condition":"getwid\/getwid.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3773bb33-b168-4f68-9963-512da24ac4da":{"title":"GoodLayers Core","condition":"goodlayers-core\/goodlayers-core.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js ","\/goodlayers-core\/plugins\/script.js ","\/goodlayers-core\/include\/js\/page-builder.js"],"icon_url":"","type":"plugin","id":"plugin:5f124509a56ca2e0644246919ec70434","is_default":0,"created_at":1677854322},"7bf261ac-89d4-492f-8a3d-1c5809b9579a":{"id":"plugin:7a1c1606d094f6bff83c0ee155908367","title":"Gravity Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/gravityforms\/","gform","recaptcha","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gravityforms\/js\/conditional_logic.min.js"],"is_default":0,"condition":"gravityforms\/gravityforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"12340193-5c35-4b0d-b0bc-bea690cf1cae":{"id":"plugin:2f3112dd98c39aeb6bde618c9026a29f","title":"Green Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","leform.min.js","leform_customjs_handlers","leform_ajax_url"],"is_default":0,"condition":"green-forms\/green-forms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4d20b427-47cf-4cdf-91c7-ff53602d3b2a":{"id":"plugin:0eb769dddc58f998e913345841b1d0b3","title":"GTM4WP","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","dataLayer"],"is_default":0,"condition":"duracelltomi-google-tag-manager\/duracelltomi-google-tag-manager-for-wordpress.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a2b3c237-728c-49d6-882a-e3885444e9b4":{"id":"plugin:3b085ccda851ccf129d9506462f0cd65","title":"GTranslate","type":"plugin","icon":"","exclusions":["translate.google.com","googleTranslateElementInit"],"is_default":0,"condition":"gtranslate\/gtranslate.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"40cd9336-e73f-4a61-a7f6-27ec1ca6892c":{"id":"plugin:e1f17c1eac230219e6fec3ac07406a0d","title":"HBook","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/hbook\/","hb_booking_form_data","hb_max_date"],"is_default":0,"condition":"hbook\/hbook.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"99cfbb2e-5678-42c2-928f-5cb09d7e43da":{"id":"plugin:269c5766fba124a838ac012a4b5a1a13","title":"HUSKY - Products Filter for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-products-filter\/(.*)","woof"],"is_default":0,"condition":"woocommerce-products-filter\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3a964eac-4aeb-49a7-9fd6-4c31b2645dee":{"id":"plugin:d457acfec0f86aac6733f1446f4fc94f","title":"Instagram Feed Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/instagram-feed-pro\/js\/sbi-scripts.min.js","sb_instagram_js_options"],"is_default":0,"condition":"instagram-feed-pro\/instagram-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8f9f4788-1b8d-468b-b291-1fcbd48618b9":{"id":"plugin:513b0c0ec8e12130af9b4bbbb17d7275","title":"Interactive Geo Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/interactive-geo-maps-premium\/assets\/public\/map-service\/app.min.js","\/interactive-geo-maps\/assets\/public\/map-service\/app.js","iMapsData","cdn.amcharts.com\/lib\/"],"is_default":0,"condition":"interactive-geo-maps\/interactive-geo-maps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cf650ca3-afa0-4a13-9e4f-f7cca19abac6":{"title":"Ivory Search","condition":"add-search-to-menu\/add-search-to-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/add-search-to-menu\/public\/js\/ivory-search.min.js"],"icon_url":"","type":"plugin","id":"plugin:7430e9d2c985ae0a3339a7b7e1acc318","is_default":0,"created_at":1677852711},"17a5dd54-1f5e-4d57-a56d-a8a970651954":{"id":"plugin:1c8a1e1ba89a601f88654f094139b469","title":"JetBlocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-blocks\/assets\/js\/jet-blocks.min.js"],"is_default":0,"condition":"jet-blocks\/jet-blocks.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b6f78c90-9823-459a-8dc1-1257e5f0d4e3":{"id":"plugin:dac9ec782180f33d0fcc7c4e0e569b9d","title":"JetBlog","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/","ElementorProFrontendConfig","elementorFrontendConfig","hasJetBlogPlaylist"],"is_default":0,"condition":"jet-blog\/jet-blog.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"e17173d8-6ef8-4e27-ba0f-379c9aea7eda":{"id":"plugin:0fe8895d1da5247b73a5d0b482df4ac4","title":"JetElements","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jet-elements\/","hasJetBlogPlaylist","jetElements","\/wp-includes\/js\/jquery\/ui\/"],"is_default":0,"condition":"jet-elements\/jet-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"36fed829-a2d9-41b5-94f6-2c3b9f07a94e":{"id":"plugin:433a3173f2d06f7d02c7b91c06ed215d","title":"JetMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/assets\/js\/lib\/slick\/slick.min.js","\/jet-elements\/","\/jet-menu\/","elementorFrontendConfig","ElementorProFrontendConfig","hasJetBlogPlaylist","JetEngineSettings","jetMenuPublicSettings","\/jet-reviews\/assets\/js\/lib\/vue.min.js"],"is_default":0,"condition":"jet-menu\/jet-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"580cfed7-f034-4e39-bc7a-cdd01923ce87":{"id":"plugin:51714cfdb43f231a1c93e7cffb1007ab","title":"JetPopup","type":"plugin","icon":"","exclusions":["\/jet-popup\/assets\/js\/lib\/anime-js\/anime.min.js","\/jet-popup\/assets\/js\/jet-popup-frontend.js","\/jet-woo-builder\/","var jetPopupData"],"is_default":0,"condition":"jet-popup\/jet-popup.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d9cd2730-12e2-42d7-a082-6f0efcd466cc":{"id":"plugin:df3bc4b6a8a9f28a5ba24cb7496bbc72","title":"JetProductGallery","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-woo-product-gallery\/assets\/lib\/swiper\/swiper.min.js","\/jet-woo-product-gallery\/assets\/js\/jet-woo-product-gallery.min.js"],"is_default":0,"condition":"jet-woo-product-gallery\/jet-woo-product-gallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"544aa37b-4d52-4182-99e8-abe23585da14":{"id":"plugin:5921fc95965ac7fccb7296957bd9abff","title":"JetReviews","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-reviews\/assets\/js\/jet-reviews-frontend.js","\/jet-reviews\/assets\/js\/lib\/vue.min.js","jetReviewsWidget"],"is_default":0,"condition":"jet-reviews\/jet-reviews.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"fe3c4915-6f8b-49b7-aa9c-c97b264d9f12":{"id":"plugin:a346b60514ef52afeffc6e2ef2793da3","title":"JetSticky","type":"plugin","icon":"","exclusions":["\/jetsticky-for-elementor\/"],"is_default":0,"condition":"jetsticky-for-elementor\/jetsticky-for-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b7f89562-230c-4f63-8360-7aad6df31e02":{"id":"plugin:829272546b040d5aaeeeaf976b6cd4ec","title":"JetTricks","type":"plugin","icon":"","exclusions":["\/jet-tricks\/"],"is_default":0,"condition":"jet-tricks\/jet-tricks.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"90451e2a-553a-4496-9fa4-cffedbe69d43":{"id":"plugin:f44f3dbd09149f57db370e4132b057db","title":"JetWoo Widgets For Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jetwoo-widgets-for-elementor\/assets\/js\/jet-woo-widgets.js","\/jet-woo-builder\/assets\/js\/jet-woo-builder.min.js","\/jet-woo-builder\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"jet-woo-builder\/jet-woo-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"944718c2-48c6-4f53-aaa2-460d07e033cc":{"id":"plugin:ed318a971f8a047bed5b02ad546a9c18","title":"JetWooBuilder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/elementor-pro\/","\/elementor\/","elementorFrontendConfig","ElementorProFrontendConfig","JetEngineSettings","\/jet-woo-builder\/","\/jet-woo-builder-custom-quantity-selectors-main\/assets\/js\/main.js"],"is_default":0,"condition":"jet-woo-builder\/jet-woo-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f5b62f59-1dae-4cdf-ac3f-f5e846fc9918":{"id":"plugin:9562e253cd4ac2b1e1f70e32cb4e32dc","title":"Layer Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.utils.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.kreaturamedia.jquery.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.transitions.js","initLayerSlider"],"is_default":0,"condition":"LayerSlider\/layerslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e2be718d-83a2-4fa0-bc98-f0df52be3dc1":{"id":"plugin:1425e2735306796fe1539d9184a77e10","title":"LoftLoader Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","loftloader.min.js"],"is_default":0,"condition":"loftloader-pro\/loftloader-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cfa18552-656e-453c-9e14-c07522dc6598":{"id":"plugin:0bf67b8ba84771e1a367fe24590ef09c","title":"MailUp for WordPress","type":"plugin","icon":"","exclusions":["\/mailup-email-and-newsletter-subscription-form\/public\/js\/mailup-public.js","mailup-js-extra"],"is_default":0,"condition":"mailup-email-and-newsletter-subscription-form\/mailup.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c5330c66-ba7b-45b1-87e4-ce590ab005dd":{"id":"plugin:10d0de28911c5f66463b9c8783f8148a","title":"Maintenance","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maintenance\/"],"is_default":0,"condition":"maintenance\/maintenance.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"267aef71-afa0-4848-b6f8-3e1ca15c3a23":{"id":"plugin:9460789bdfe77425c895f130991a4cb4","title":"Maps Marker Pro","type":"plugin","icon":"","exclusions":["\/maps-marker-pro\/js\/mapsmarkerpro.js","var mapsMarkerPro"],"is_default":0,"condition":"maps-marker-pro\/maps-marker-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b5a88b63-e906-49b3-8134-420139915ea6":{"title":"Master Popups","condition":"master-popups\/master-popups.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/master-popups\/assets\/public\/js\/master-popups-libs.min.js"],"icon_url":"","type":"plugin","id":"plugin:8fd7bd2c8b0a33e62798573abd12be63","is_default":0,"created_at":1681305305},"4be41549-bf4d-4c49-8346-0f8a3b88fdba":{"id":"plugin:de888634cc4bd51576eed319d5a528fd","title":"Master Slider","type":"plugin","icon":"","exclusions":["masterslider"],"is_default":0,"condition":"master-slider\/master-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"087bee18-7cd1-4c10-8acc-19e1b7c4f4cd":{"id":"plugin:b71309a89bf3c8b558b6fca5d6531919","title":"Max Mega Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/hoverIntent.min.js","\/megamenu\/js\/maxmegamenu.js","var megamenu"],"is_default":0,"condition":"megamenu\/megamenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cf22f0b9-01f4-409e-8a93-ad6743095abd":{"id":"plugin:94a7bae84ef2816494be4af66c577bfc","title":"Meta Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ml-slider\/","var metaslider"],"is_default":0,"condition":"ml-slider\/ml-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bb2cbc0d-20da-415e-8218-c17f1db53579":{"title":"Monarch","condition":"monarch\/monarch.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","dt-place-monarch-icons"],"icon_url":"","type":"plugin","id":"plugin:b7335d6d6d5c5134ea10ac2d9b04226c","is_default":0,"created_at":1677853476},"a98d6a80-4610-4ede-bd33-c3e15bed0a95":{"id":"plugin:4f8651262425ef6d7c223c68a2ec2063","title":"Monster Insights","type":"plugin","icon":"","exclusions":["__gtagTracker","monsterinsights_frontend","\/google-analytics-for-wordpress\/assets\/js\/frontend-gtag.min.js"],"is_default":0,"condition":"google-analytics-for-wordpress\/googleanalytics.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"26e1a36e-7a03-449e-8ecc-e42c41ca291c":{"id":"plugin:f8fc66b302dec2327bdec0434a3b275b","title":"Motion.page","type":"plugin","icon":"","exclusions":["\/motionpage\/core\/includes\/assets\/js\/(.*)","\/motionpage\/core\/includes\/assets\/js\/gsap\/(.*)","\/motionpage\/assets\/js\/(.*)","\/motionpage\/assets\/js\/gsap\/(.*)"],"is_default":0,"condition":"motionpage\/motionpage.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"459fd663-7f80-45fd-8308-d3484981e161":{"title":"Ninja Forms","condition":"ninja-forms\/ninja-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js","\/ninja-forms\/assets\/js\/min\/front-end-deps.js","\/ninja-forms\/assets\/js\/min\/front-end.js","nf-"],"icon_url":"","type":"plugin","id":"plugin:1d3ae9c1a96d5062616968b81eef319d","is_default":0,"created_at":1681377675},"c97440dd-7592-40e7-8c98-dac20d39808f":{"id":"plugin:723a588dcd49285ea9f7404e2379b47f","title":"Ninja Tables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ninja-tables(.*)\/assets\/","\/ninja-tables(.*)\/public\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","ninja_table_instance_","ninja_filter_","ninja_table_ready_init_table_id"],"is_default":0,"condition":"ninja-tables\/ninja-tables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ebc01f06-8c35-47fa-9c63-8959c5cbd915":{"id":"plugin:f41a52ab1dd50a81cd3a5e341af0007c","title":"NotificationX","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/notificationx\/assets\/public\/js\/(.*).js","notificationXArr"],"is_default":0,"condition":"notificationx\/notificationx.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3aaf4a1b-591a-48b7-8d60-e6d65c0f94c9":{"id":"plugin:be8fc72a8b8e8eb5958be13737cff47c","title":"Ocean Elementor Widgets","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ocean-elementor-widgets\/"],"is_default":0,"condition":"ocean-elementor-widgets\/ocean-elementor-widgets.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f053a7d3-62b0-4312-b0ca-6ff63380eb0b":{"id":"plugin:1a14afe852fefe7b22ccad3893672a29","title":"One Click Accessibility","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pojo-accessibility\/assets\/js\/app.min.js"],"is_default":0,"condition":"pojo-accessibility\/pojo-accessibility.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"61e11800-48a9-4354-8a4c-ac9a2b4b033a":{"id":"plugin:b9ed0fe6f2cdbd305691a6b857f4b3dc","title":"OoohBoi Steroids for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ooohboi-steroids-for-elementor\/"],"is_default":0,"condition":"ooohboi-steroids-for-elementor\/ooohboi-steroids.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"560b78a2-f051-490b-9dc6-a602dece0d81":{"id":"plugin:f1ff18a3e04c4e0995fca9cabffe57a7","title":"Optimole","type":"plugin","icon":"","exclusions":["optimoleData"],"is_default":0,"condition":"optimole-wp\/optimole-wp.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b0fda458-4bf2-41e9-a159-60d4bb6102a6":{"id":"plugin:48ec18bd3f59772d98f85dddab75e305","title":"OSM - OpenStreetMap","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/osm\/js\/OL\/","\/osm\/js\/osm-v3-plugin-lib.js","vectorM"],"is_default":0,"condition":"osm\/osm.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3743ed67-e0d1-4243-bb1f-ee48a445dd10":{"id":"plugin:9eacf0b76484af0259cd788f4923f20c","title":"OxyExtras","type":"plugin","icon":"","exclusions":["vime","vime.esm.js"],"is_default":0,"condition":"oxyextras\/plugin.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"52a21e27-af5b-4476-8d6d-54c323fd1443":{"id":"plugin:e852555c4b4789d78a96d76f503b3262","title":"Oxygen Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/component-framework\/vendor\/aos\/aos.js","AOS.init","oxygen_init_pro_menu","oxy-pro-menu-show-dropdown","oxy-shape-divider","oxygenVSBInitToggleJs"],"is_default":0,"condition":"oxygen\/functions.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ebd282b9-e175-4b83-90a2-fe12389ccd11":{"id":"plugin:6f9419e58ec86c94e7698aaaaf9dc715","title":"PageLoader by Bonfire","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pageloader-by-bonfire\/pageloader.js","bonfire-pageloader-overlay"],"is_default":0,"condition":"pageloader-by-bonfire\/pageloader-by-bonfire.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"0baf6353-aa70-41a9-a3bc-d89870a5839b":{"id":"plugin:3a4c4518eb0f60108ab4934fab27d335","title":"PDF Embedder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pdf-embedder\/js\/(.*).js"],"is_default":0,"condition":"pdf-embedder\/pdf_embedder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cba51ec1-87cc-44eb-b12b-d652e3446507":{"id":"plugin:4f90aca5957cccbf623e3bbc31afa204","title":"Perfect Brands for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/perfect-woocommerce-brands\/assets\/lib\/slick\/slick.min.js","\/perfect-woocommerce-brands\/assets\/js\/functions-frontend.min.js"],"is_default":0,"condition":"perfect-woocommerce-brands\/perfect-woocommerce-brands.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"808e7a4e-025c-4fae-bf82-de3716e5eb0d":{"id":"plugin:84fe214646388d7c021dda25003ac165","title":"Photonic","type":"plugin","icon":"","exclusions":["\/photonic\/include\/js\/front-end\/module\/photonic-baguettebox.min.js"],"is_default":0,"condition":"photonic\/photonic.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"936aff7d-a8ac-4473-a7b5-4b1611b6c557":{"id":"plugin:6838be282f853f71be282783cb1c162b","title":"Pixel Caffein","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/pixel-caffeine\/build\/frontend.js","aepc_pixel"],"is_default":0,"condition":"pixel-caffeine\/pixel-caffeine.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ab3a4ef5-2732-4b46-a7c3-17b4e9405cd1":{"id":"plugin:afe0eb7c64d4556a7111c56dd8c4d307","title":"Pixel Manager for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/woocommerce-pixel-manager-pro\/js\/public\/","wpm"],"is_default":0,"condition":"woocommerce-pixel-manager-pro\/woocommerce-pixel-manager.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"2774f964-50b2-425e-8a30-0a02f421b7e4":{"id":"plugin:38d4b2986868f543639cd1ebc3e510aa","title":"Popup Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/popup-builder\/public\/js\/(.*).js","\/popupbuilder-exit-intent\/public\/javascript\/ExitIntent.js","var sgpbPublicUrl","SGPB_POPUP_PARAMS"],"is_default":0,"condition":"popup-builder\/popup-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"82dbb1e5-31f9-43d7-b522-52819aa49ba5":{"id":"plugin:786717922362642f34a7ff58e919bd95","title":"Popup Maker","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/pum\/pum-site-scripts.js","pum","\/plugins\/popup-maker\/assets\/js\/site.min.js"],"is_default":0,"condition":"popup-maker\/popup-maker.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"48e08305-1f1c-4ef4-9f13-24af1b155abc":{"id":"plugin:17831cbb64e469c7f66224c8c63d0a58","title":"PowerPack Addons for Elementor","type":"plugin","icon":"","exclusions":["\/powerpack-lite-for-elementor\/assets\/js\/min\/frontend.min.js"],"is_default":0,"condition":"powerpack-lite-for-elementor\/powerpack-lite-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e037ae2f-e36b-4f1a-ada8-eb8fde6746f2":{"id":"plugin:80e1283ea1afead3ca904fad792643c5","title":"Preloader Plus","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/preloader-plus\/(.*)"],"is_default":0,"condition":"preloader-plus\/preloader-plus.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90fed478-e89a-455c-8371-836bee58fb81":{"title":"Premium Addons for Elementor","condition":"premium-addons-for-elementor\/premium-addons-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-addons.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/isotope.min.js","\/premium-addons-elementor\/pa-frontend-(.*).min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/slick.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/tooltipster.min.js","window.scopes_array","lottie.min.js"],"icon_url":"","type":"plugin","id":"plugin:debbfbbcbdf9ffb465bbc40008d99f02","is_default":0,"created_at":1684175621},"7e43c261-77be-48fc-b25a-8953a654ae85":{"id":"plugin:100a0382fcf3d1b6b22da928bce46ea8","title":"Presto Player","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/dist\/vendor\/regenerator-runtime.min.js","\/presto-player\/dist\/components\/web-components\/web-components.esm.js","\/presto-player\/src\/player\/player-static.js","var player","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"is_default":0,"condition":"presto-player\/presto-player.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3d6f509f-d040-4279-9a2f-a4e6eae1e9df":{"id":"plugin:c0fce700121492b566517e68301db382","title":"Price Based on Country for WooCommerce Pro","type":"plugin","icon":"","exclusions":["\/woocommerce-product-price-based-on-countries\/assets\/js\/ajax-geolocation.min.js","\/woocommerce-price-based-country-pro-addon\/assets\/js\/currency-switcher.min.js","add-to-cart.min.js","cart-fragments.min.js"],"is_default":0,"condition":"woocommerce-price-based-country-pro-addon\/woocommerce-price-based-country-pro-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b970bc8a-bcbe-4d08-8ac0-a6853ab3f036":{"id":"plugin:f1ecfe258440b371124999ca3bfbfff3","title":"Prime Slider","type":"plugin","icon":"","exclusions":["\/plugins\/bdthemes-prime-slider-lite\/assets\/js\/bdt-uikit.min.js"],"is_default":0,"condition":"bdthemes-prime-slider-lite\/bdthemes-prime-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e5458963-f167-4b68-88e4-77dd39af2842":{"id":"plugin:29ea8f4dd72f5a5c5927917fb0665a05","title":"PRO Elements","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pro-elements\/"],"is_default":0,"condition":"pro-elements\/pro-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b119ad72-f498-4576-bb71-9e6d8c37b68f":{"title":"Product Filter by WBW (for WooCommerce)","condition":"woo-product-filter\/woo-product-filter.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-content\/plugins\/woo-product-filter\/modules\/woofilters\/js\/frontend.woofilters.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js"],"icon_url":"","type":"plugin","id":"plugin:e57ad91e0d94fab011353af544873743","is_default":0,"created_at":1685686062},"7b779aca-e497-4da3-8e51-fa12837d15ab":{"title":"Product Filters for WooCommerce","condition":"woocommerce-product-filters\/woocommerce-product-filters.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-product-filters\/assets\/build\/js\/plugin.js"],"icon_url":"","type":"plugin","id":"plugin:719469f1c977f7109d3d6ee21ecd5a16","is_default":0,"created_at":1684784088},"2b2a51f2-bd47-4591-92d8-4a690bce5d99":{"id":"plugin:a898898b2b0ea2cd82e20a6d3a3aa47b","title":"Product Gallery Slider for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/twist\/assets\/js\/slick.min.js","wpgs-public-js-after"],"is_default":0,"condition":"twist\/twist.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"34d225a4-688c-476b-846b-420774160d6b":{"id":"plugin:e0b123d324c6fc85b8682660c34f8829","title":"Rank Math SEO","type":"plugin","icon":"","exclusions":["local_ga_js"],"is_default":0,"condition":"seo-by-rank-math\/rank-math.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"02305ca0-2c2a-4eef-a802-b8a942771ecc":{"title":"Retainful","condition":"retainful-next-order-coupon-for-woocommerce\/retainful-next-order-coupon-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/atc-popup.min.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/exit-intent-popup.js","retainful.com","rnoc-add-to-cart-js-before","rnoc_redirect_coupon_popup"],"icon_url":"","type":"plugin","id":"plugin:f9fdee19ba6aed961d96d86e1521a761","is_default":0,"created_at":1679331508},"b4055250-5813-400f-b663-d390fee989e4":{"id":"plugin:d6a4d07d1b4022d886df52322dcd8a6f","title":"Revolution Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES"],"is_default":0,"condition":"revslider\/revslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"1b19ec89-171a-4f85-8c4b-b1bcfc6b1433":{"id":"plugin:5e3f85d8c82cc184b945415d1a862601","title":"Sassy Social Share","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/sassy-social-share\/public\/js\/sassy-social-share-public.js","heateorSssLoadEvent"],"is_default":0,"condition":"sassy-social-share\/sassy-social-share.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f5899925-2ab7-43b6-abc4-51b76d664ca6":{"title":"Scrollsequence","condition":"scrollsequence-pro\/scrollsequence-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/scrollsequence-pro\/public\/js\/gsap__premium_only.js","\/scrollsequence-pro\/public\/js\/gsap-scrolltrigger__premium_only.js","\/scrollsequence-pro\/public\/js\/ssq-lib__premium_only.js","scrollsequence-input-script"],"icon_url":"","type":"plugin","id":"plugin:3df51830b6b80668fc342c8dcea495cf","is_default":0,"created_at":1678111131},"043827fc-3df8-45d6-9cd2-14fbe962987a":{"id":"plugin:9d60b5d2de4d828b78c7b088024377d6","title":"ShiftNav Pro - Responsive Mobile Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-pro\/assets\/js\/shiftnav(.*).js"],"is_default":0,"condition":"shiftnav-pro\/shiftnav.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bcbaf240-e76f-4620-b7d5-4852c46d4be7":{"id":"plugin:56279bd768c8f27ad1972b6774738bcf","title":"ShiftNav \u2013 Responsive Mobile Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-responsive-mobile-menu\/"],"is_default":0,"condition":"shiftnav-responsive-mobile-menu\/shiftnav-responsive-mobile-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bbe0543b-b5af-467b-a90d-e2975d892d8d":{"id":"plugin:1bc7ac87d8ab2301a1b904919dc7a798","title":"Short Pixel Adaptive Image","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/shortpixel-adaptive-images\/assets\/js\/ai(.*).min.js","spai_settings"],"is_default":0,"condition":"shortpixel-adaptive-images\/short-pixel-ai.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"543ab43a-6bd3-4948-a09e-3b95e7c9209d":{"id":"plugin:ce4dea8ddc3caa8d00e95cec3202d32a","title":"Showcase IDX","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","SIDX","search.showcaseidx.com\/js\/app-(.*).js","cdn.shortpixel.ai"],"is_default":0,"condition":"showcase-idx\/showcaseidx.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a16bcab7-1169-46b9-a425-b091478d8312":{"id":"plugin:3ea7d9f75ad03620b0bce2517bd5b8d1","title":"Side Cart WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/plugins\/woocommerce\/assets\/js\/frontend\/add-to-cart.min.js","\/plugins\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/plugins\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"is_default":0,"condition":"side-cart-woocommerce\/xoo-wsc-main.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"521f748e-cf09-4019-bd28-b52daef5f16f":{"id":"plugin:7843983bf90dbae16c6e889382c71b23","title":"Simple Banner","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/simple-banner\/","simpleBannerScriptParams"],"is_default":0,"condition":"simple-banner\/simple-banner.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"76026e82-d9cf-482c-b480-55c57693a184":{"id":"plugin:b6825f971d35a5515d095564a2e40936","title":"Site Kit by Google","type":"plugin","icon":"","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('","\/gtag\/js","gtag\\(","\/gtm.js"],"is_default":0,"condition":"google-site-kit\/google-site-kit.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"79c458d7-f7f7-4072-919d-ad337bde6ae3":{"id":"plugin:5ce5dfecdc9d3292c69a1413bbd17d3c","title":"Slick Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/slick-menu\/"],"is_default":0,"condition":"slick-menu\/slick-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"dd0ea584-0c99-4c30-b46d-da35b94c9f0a":{"id":"plugin:ffb5f8cc0ea17886dbd05f601ca3eec0","title":"Slider by Soliloquy","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","soliloquy-min.js","soliloquy_slider"],"is_default":0,"condition":"soliloquy-lite\/soliloquy-lite.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ecb2fffc-d289-4f68-ae94-71131f17deee":{"id":"plugin:2f373822dceb191c31c8ad2183d51869","title":"Smart Slider 3","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/smart-slider-3\/(.*).js","_N2"],"is_default":0,"condition":"smart-slider-3\/smart-slider-3.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"284ede43-bf80-419e-8414-46c26cb746f0":{"id":"plugin:720ec9fbbd8a52ce525959a68a5310b3","title":"Smart Slider 3 Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/SmartSlider3\/(.*).js","_N2"],"is_default":0,"condition":"nextend-smart-slider3-pro\/nextend-smart-slider3-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c3334c29-4160-42df-a1ce-f8aeeaee8668":{"title":"Super Socializer","condition":"super-socializer\/super_socializer.php","exclusions":["theChamp","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:660defe26748470c3a47366cd4012579","is_default":0,"created_at":1677853633},"f18b4242-fe3f-4e2b-bfc9-ac2fb3939a90":{"title":"Superfly Menu","condition":"superfly-menu\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate((.*?)(.min?)?).js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/md5.js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/util.js","\/superfly-menu\/js\/public.min.js","window.SFM_is_mobile","var SFM_skew_disabled","var SFM_template"],"icon_url":"","type":"plugin","id":"plugin:ccb15175093bc6c437b78797f0698a7b","is_default":0,"created_at":1684301673},"858d2d7f-bdac-4d27-ba26-baa9ace96ba4":{"id":"plugin:7d93008296bb5c7c43d4cba185ed2632","title":"Tabby Responsive Tabs","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/tabby-responsive-tabs\/js\/tabby.js","RESPONSIVEUI"],"is_default":0,"condition":"tabby-responsive-tabs\/tabby-responsive-tabs.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e44a5c93-bb77-4624-a121-d846905137ea":{"id":"plugin:2f563bbb7e92363ec3fb2989a1c7dffe","title":"The Plus Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/theplus-addons\/(.*)"],"is_default":0,"condition":"the-plus-addons-for-elementor-page-builder\/theplus_elementor_addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"666b45e8-749c-4140-bd17-e1cd589e03ee":{"id":"plugin:b9c418b47c986935a1151ab9b42f8971","title":"ThemeREX Addons","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/trx_addons\/js\/__scripts-full.js","\/trx_addons\/components\/cpt\/layouts\/shortcodes\/menu\/superfish.min.js"],"is_default":0,"condition":"trx_addons\/trx_addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"a750cada-eb58-4df4-9966-21c8a69332ba":{"id":"plugin:75af9efe22c5cc776636266feb55adf1","title":"Thrive Architect","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-visual-editor\/thrive-visual-editor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"13714cde-680e-4ca4-8607-c35952d6a5f2":{"title":"Thrive Comments","condition":"thrive-comments\/thrive-comments.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","type":"plugin","id":"plugin:6a72d06ca2f6a888b0d9d5ea93af2edc","is_default":0,"created_at":1677852974},"aa7ca898-499f-4f04-b419-3de199996969":{"id":"plugin:b84d82c02cade64ade00712b9c5652aa","title":"Thrive Leads","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"is_default":0,"condition":"thrive-leads\/thrive-leads.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"9eee297a-8241-4ef2-af97-46074bd0898c":{"id":"plugin:5bb61b0559b0a3fd578315b553451327","title":"Thrive Quiz Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-quiz-builder\/thrive-quiz-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c2f3ec2a-5b09-4845-aa95-84841783fbfc":{"id":"plugin:a7f3e5206abff19ca7cf142260181738","title":"Thrive Ultimatum","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-ultimatum\/","var TVE_Ult_"],"is_default":0,"condition":"thrive-ultimatum\/thrive-ultimatum.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d48b8d2f-e071-4a30-840a-306154a115a0":{"id":"plugin:f57be2014b6a489d053f8367fa6c0f9f","title":"Tidio Chat","type":"plugin","icon":"","exclusions":["document.tidioChatCode"],"is_default":0,"condition":"tidio-live-chat\/tidio-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cb6d33ed-7eb4-4ff9-9ad0-7fc54fbecf6f":{"id":"plugin:c9e0485ec256d4a6a8d92a98c18d76fc","title":"Toolset Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","toolsetCommonEs.fontToHead","toolsetCommonEs.styleToHead","\/toolset-blocks\/vendor\/toolset\/blocks\/public\/js\/frontend.js","\/toolset-blocks\/vendor\/toolset\/common-es\/public\/toolset-common-es-frontend.js","\/toolset-blocks\/public\/js\/views-frontend.js","\/wp-includes\/js\/underscore.min.js"],"is_default":0,"condition":"toolset-blocks\/wp-views.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"4bac6350-0925-49fb-904a-372f22fd6baf":{"id":"plugin:71beda322b37f7fc7d456822493cb972","title":"Top Bar Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/topbar-pro\/js\/tpbr_front.min.js","\/plugins\/topbar-pro\/js\/jquery.cookie.js"],"is_default":0,"condition":"topbar-pro\/topbar_pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"033486e7-0ddc-4915-a848-31504d00448e":{"title":"Twenty20 Image Before-After","condition":"twenty20\/ttwenty.php","exclusions":["\/twenty20\/assets\/js\/(.*).js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","twentytwenty-container"],"icon_url":"","type":"plugin","id":"plugin:23441bba9d3602bc932d697c7cb8aa1f","is_default":0,"created_at":1677858089},"7675a34d-006e-4672-99d5-a81e1b8e47f9":{"id":"plugin:3d59cc34167a7f8123e66b627148e0b7","title":"UberMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ubermenu\/assets\/js\/ubermenu.min.js"],"is_default":0,"condition":"ubermenu\/ubermenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"8233178a-e7b3-43ce-b193-bd0d9c960933":{"id":"plugin:86424c46157c1c7e2e1571055813beee","title":"Ultimate Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig"],"is_default":0,"condition":"ultimate-elementor\/ultimate-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"028504f7-b1cd-4318-8a6d-ce186197e89d":{"id":"plugin:0f0a91f0c454021a5ff9fc25c3ed419f","title":"Ultimate Addons for WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Ultimate_VC_Addons\/assets\/"],"is_default":0,"condition":"Ultimate_VC_Addons\/Ultimate_VC_Addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"5754af3d-a6af-49eb-b731-bdd82f26dc4e":{"id":"plugin:34db8636812bad84c8aea037c2ddc8c2","title":"Ultimate Responsive Image Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","sliderPro"],"is_default":0,"condition":"ultimate-responsive-image-slider\/ultimate-responsive-image-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"78ae882d-ae31-4179-b677-8893814938c7":{"title":"Unlimited Elements for Elementor Premium - Slider","condition":"unlimited-elements-for-elementor-premium\/unlimited-elements-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/unlimited-elements-for-elementor-premium\/","uc_"],"icon_url":"","type":"plugin","id":"plugin:17260bc347b8c29bee0010e9ec164184","is_default":0,"created_at":1683270377},"051cbfbb-7ad2-4f06-a493-3cf423a80904":{"id":"plugin:6717ef5673a956bc08ca4a5117065d53","title":"Variation Swatches for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery\/ui\/","\/woo-variation-swatches\/","\/woo-variation-swatches-pro\/","underscore.min.js"],"is_default":0,"condition":"woo-variation-swatches\/woo-variation-swatches.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"6879caba-7224-4eca-bcb2-370785b495ea":{"id":"plugin:57597b7683e01892932083413f085134","title":"Web Accessibility By accessiBe","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/accessibe\/","acsbJS"],"is_default":0,"condition":"accessibe\/accessiebe.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"bd6732fe-4c2b-40a1-9035-8464057e2da5":{"title":"WooCommerce - Cart Fragments","condition":"woocommerce\/woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","type":"plugin","id":"plugin:201de694c6fc28c8d580a3b2ca484218","is_default":0,"created_at":1680937567},"d044900d-07e1-4533-9516-33106efcb259":{"title":"WooCommerce - Product description","condition":"woocommerce\/woocommerce.php","exclusions":["\/plugins\/woocommerce\/assets\/js\/frontend\/single-product.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:a82644b4c9417ea3a240939a73344700","is_default":0,"created_at":1679309756},"bff953b1-2213-4666-8112-76a84a3cc207":{"title":"WooCommerce - Product Gallery","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/(.*)\/assets\/js\/zoom\/jquery.zoom.min.js","\/woocommerce\/(.*)\/assets\/js\/photoswipe\/","\/woocommerce\/(.*)\/assets\/js\/flexslider\/jquery.flexslider.min.js","\/woocommerce\/(.*)\/assets\/js\/frontend\/single-product.min.js","wc_single_product_params"],"icon_url":"","type":"plugin","id":"plugin:7665868ff97c265628f376523a4f9ecc","is_default":0,"created_at":1681459729},"016e6ddf-c6e7-49ec-bd3f-2585d9e45895":{"title":"WooCommerce - Select2 library","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/assets\/js\/select2\/select2(.*).js"],"icon_url":"","type":"plugin","id":"plugin:4bca670bd5d55dd24b17fb0193b0891e","is_default":0,"created_at":1681459540},"b9b2c6d7-944f-4ae3-ae04-c9e2204b9dab":{"id":"plugin:9165c768e978d6ad3f696db8c78ccbb2","title":"WooCommerce Attribute Swatches","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/iconic-woo-attribute-swatches-premium\/assets\/frontend\/js\/main.min.js","\/iconic-woo-attribute-swatches-premium\/assets\/vendor\/flickity\/flickity.pkgd.min.js","iconic_was_vars"],"is_default":0,"condition":"iconic-woo-attribute-swatches-premium\/iconic-woo-attribute-swatches.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4506c5e9-7349-44c9-9967-34370c83facb":{"title":"WooCommerce Bookings","condition":"woocommerce-bookings\/woocommerce-bookings.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/woocommerce-bookings\/dist\/frontend.js","\/wp-includes\/js\/dist\/date.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js"],"icon_url":"","type":"plugin","id":"plugin:14dec6d289b9977fa3a74116feecebcc","is_default":0,"created_at":1677856703},"fec9cd04-c358-45da-a1a8-1668b964016b":{"id":"plugin:456f3b849ba3b6647246aca9d7cdaed5","title":"WooCommerce Product Reviews Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","wc_product_reviews_pro","\/woocommerce-product-reviews-pro\/assets\/js\/frontend\/wc-product-reviews-pro-frontend.min.js","\/woocommerce\/assets\/js\/jquery-tiptip\/jquery.tipTip.min.js"],"is_default":0,"condition":"woocommerce-product-reviews-pro\/woocommerce-product-reviews-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"551a9399-627f-4978-9bae-5cc8e0aefc82":{"id":"plugin:c8577e74eef3b082fb6403760d53f68c","title":"WooCommerce TM Extra Product Options","type":"plugin","icon":"","exclusions":["\/woocommerce-tm-extra-product-options\/assets\/js\/epo.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-util.min.js","\/wp-includes\/js\/dist\/hooks.js","\/wp-includes\/js\/dist\/i18n.js"],"is_default":0,"condition":"woocommerce-tm-extra-product-options\/tm-woo-extra-product-options.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3cac4650-6a52-448e-8e48-e99a772a59a2":{"id":"plugin:c6e6cab8c80fa3fe57d609f72d2d5c56","title":"WooLentor","type":"plugin","icon":"","exclusions":["\/woolementor\/assets\/third-party\/slick\/slick.min.js","\/woolentor-addons","woolentor_addons"],"is_default":0,"condition":"woolentor-addons\/woolentor_addons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"67aeb4cb-1a00-4d10-a00c-34888b4c0dba":{"title":"WooThumbs for WooCommerce","condition":"woothumbs-premium\/woothumbs-premium.php","exclusions":["\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-embed.min.js","\/wp-includes\/js\/wp-util.min.js","\/woothumbs-premium\/(.*)"],"icon_url":"","type":"plugin","id":"plugin:b97b1d3f627769e1dd8305aa25af993c","is_default":0,"created_at":1679065404},"c7a14763-88d0-4344-a6af-e0a8dc5fa8d5":{"id":"plugin:31b9e812a025e5750a6ef0980ee7d2db","title":"WordPress Mega Menu \u2013 QuadMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/quadmenu","#private-menu","#public-menu"],"is_default":0,"condition":"quadmenu\/quadmenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f699fdbd-84a7-4f24-b729-3e4a4f83a4dd":{"id":"plugin:601f8fc7d10cad1c2ec2949c0d9b1651","title":"WP Armour","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/honeypot\/includes\/js\/wpa.js","\/wp-armour-extended\/includes\/js\/wpae.js","wpa_hidden_field","wpa_add_test"],"is_default":0,"condition":"wp-armour-extended\/wp-armour-extended.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"6a28aae5-ef91-43fc-8204-92e3a25642b4":{"id":"plugin:5728f3b9856dfe37a36ab15b0a637198","title":"WP Go Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com"],"is_default":0,"condition":"wp-google-maps\/wpGoogleMaps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c9b991d1-a653-404b-be85-e276b1814e7d":{"title":"WP Google Map Pro","condition":"wp-google-map-gold\/wp-google-map-gold.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","maps.google.com\/maps\/api\/js","\/wp-includes\/js\/masonry.min.js","\/wp-google-map-gold\/(.*)"],"icon_url":"","type":"plugin","id":"plugin:dc12a9b7b9c4c7ce3c532b6b377739f2","is_default":0,"created_at":1677858391},"1f8f9fbf-fbf0-4e3a-b77c-af0fa47e950d":{"id":"plugin:87f572f5f0ec143a8fceba77d0616197","title":"WP Google Maps Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-google-maps(.*)","maps.googleapis.com","mgl_","wpgmza"],"is_default":0,"condition":"wp-google-maps-pro\/wp-google-maps-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"41e4b98c-e63f-4800-a478-02592562322b":{"id":"plugin:3735ca768ede98b25795f4cb057ff4ed","title":"WP iCal Availability","type":"plugin","icon":"","exclusions":["\/wp-ical-availability\/js\/custom-select.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-ical-availability\/"],"is_default":0,"condition":"wp-ical-availability\/wp-ical-availability.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"2b06c5b8-dc32-4bb0-8504-3a9f1c3a1ec0":{"title":"WP MapIt","condition":"wp-mapit\/wp_mapit.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-mapit\/wp_mapit\/js\/leaflet.js","\/wp-mapit\/wp_mapit\/js\/wp_mapit_multipin.js"],"icon_url":"","type":"plugin","id":"plugin:ba8d1c7f294a3f5b593556eb3b0bc7d9","is_default":0,"created_at":1679331261},"2039eafd-1c11-4e21-a61b-30857f291ae3":{"id":"plugin:927b8bf7806f2d287559b86a0b455a59","title":"WP Responsive Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-responsive-menu\/(.*)"],"is_default":0,"condition":"wp-responsive-menu\/wp-responsive-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e06be942-cccd-4b2d-a268-06dc78f0b820":{"title":"WP Search with Algolia","condition":"wp-search-with-algolia\/algolia.php","exclusions":["\/wp-search-with-algolia\/js\/algoliasearch\/dist\/algoliasearch-lite.umd.js","\/wp-search-with-algolia\/js\/autocomplete-noconflict.js","\/wp-search-with-algolia\/js\/autocomplete.js\/dist\/autocomplete.min.js","var algolia"],"icon_url":"","type":"plugin","id":"plugin:43267e659d599fbb6b42c719b49bb7a7","is_default":0,"created_at":1677857180},"4fc2a7ae-b9e6-410e-93cf-e6d1962add6a":{"id":"plugin:4fb90fc73fc2b5d1e37ea2dadfd3cef3","title":"WP Smart Preloader","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/wp-smart-preloader\/assets\/js\/wsp-main-script(.min)?.js"],"is_default":0,"condition":"wp-smart-preloader\/wp-preloader.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7ecf40ce-2bcd-412c-bb01-9e71fecf6be8":{"id":"plugin:d37bb5054a24471ca1675d9ab49d01b0","title":"WP Store Locator","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/wp-store-locator\/","\/wp-includes\/js\/underscore.min.js","maps.google.com"],"is_default":0,"condition":"wp-store-locator\/wp-store-locator.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"76c86163-ddf3-4113-b620-de9d5058f505":{"id":"plugin:517d7d24da9a7072ed389d0fb30374a0","title":"WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js"],"is_default":0,"condition":"js_composer\/js_composer.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4f5e5b98-c326-4b9f-9ada-3b257862132c":{"id":"plugin:1ec7138c950c355e7af60d49c81139fc","title":"wpDataTables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wpdatatables\/","highcharts"],"is_default":0,"condition":"wpdatatables\/wpdatatables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"18be1b8c-0bc4-4a01-abc6-a127aff380c6":{"id":"plugin:c62ca58ea081c1271de8dadfa7daac69","title":"WPForms","type":"plugin","icon":"","exclusions":["\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra","wpformsRecaptchaLoad"],"is_default":0,"condition":"wpforms\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8a3cacb6-81bd-456a-a1cc-a4025f8e5234":{"id":"plugin:0992ac952c0a05bb35e18b1d5744d346","title":"WPForms Lite","type":"plugin","icon":"","exclusions":["wpformsRecaptchaLoad","\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra"],"is_default":0,"condition":"wpforms-lite\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"98bbd410-5b01-4244-a8eb-715765180328":{"title":"XL WooCommerce Sales Triggers","condition":"xl-woocommerce-sales-triggers\/xl-woocommerce-sales-triggers.php","exclusions":["\/xl-woocommerce-sales-triggers\/assets\/js\/wcst_combined.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:ba9e526ddb0157e69757530c6b18b714","is_default":0,"created_at":1677856813},"bf9f9620-dd0e-4e6f-9a45-4eb78a148f42":{"id":"plugin:58663fc781232169e865f6fe7cf1afaa","title":"YITH WooCommerce Ajax Product Filter","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-navigation\/assets\/js\/yith-wcan-shortcodes.min.js"],"is_default":0,"condition":"yith-woocommerce-ajax-navigation\/init.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b053279d-e07c-438c-bb3e-3a1f4f5d7c5e":{"id":"plugin:68b637fd247e40c8e135e4771d739b07","title":"YITH WooCommerce AJAX Product Filter Premium","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-product-filter-premium\/assets\/js\/yith-wcan-shortcodes.min.js"],"is_default":0,"condition":"yith-woocommerce-ajax-product-filter-premium\/init.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"d94dbbf3-bcab-4e47-9fbb-6b3a7cf92787":{"title":"Yotpo Social Reviews for Woocommerce","condition":"yotpo-social-reviews-for-woocommerce\/wc_yotpo.php","exclusions":["\/yotpo-social-reviews-for-woocommerce\/assets\/js\/headerScript.js"],"icon_url":"","type":"plugin","id":"plugin:45ab742b3fccbd04d7bc973c8582be87","is_default":0,"created_at":1680686421}},"scripts":{"dd0c5a5b-ec56-49f9-9aa4-89e1e3a6a28a":{"title":"Amazon Ads","exclusions":["amazon-adsystem.com"],"icon_url":"","type":"script","id":"script:b82a5936d8ea0745016caeb71629ae5d","is_default":0,"created_at":1681390276},"980edf32-c64b-4370-bf23-c62b079e71c3":{"title":"Google AdSense","exclusions":["adsbygoogle"],"icon_url":"","type":"script","id":"script:0206e6040c8ff64b8d6ee5fef2ce1c90","is_default":0,"created_at":1681377840},"2499bb90-0753-4b2b-9bd4-1525f94c7437":{"title":"Google Analytics","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('"],"icon_url":"","type":"script","id":"script:d86cf69a8b82547a94ca3f6a307cf9a6","is_default":0,"created_at":1681388311},"6f460036-3106-4b8c-9951-d32de9b1258f":{"title":"Google Maps","exclusions":["maps.googleapis.com","maps.google.com"],"icon_url":"","type":"script","id":"script:4d60ab2c6d11d753267484006c23e54c","is_default":0,"created_at":1681390259},"ac2d5720-9418-468c-80a0-3874ee743c0f":{"title":"Google Optimize","exclusions":["a,s,y,n,c,h,i,d,e","googleoptimize.com\/optimize.js","async-hide"],"icon_url":"","type":"script","id":"script:031a0cece38c4739df67f910dcabf1bd","is_default":0,"created_at":1681390261},"122e6ebb-51fd-477f-97fb-559593f1a48b":{"title":"Google Recaptcha","exclusions":["recaptcha"],"icon_url":"","type":"script","id":"script:032cb16577cbf07bc7c02bac83bd936d","is_default":0,"created_at":1681390264},"219277ae-b2ac-4d42-913d-eaea40985295":{"title":"Google Tag Manager","exclusions":["\/gtag\/js","gtag\\(","\/gtm.js","async-hide"],"icon_url":"","type":"script","id":"script:1d3c65b2b03ef35e14df6b163ea3a1f6","is_default":0,"created_at":1681390266},"f632e3f4-20e6-471e-a78d-86afbea63586":{"title":"HubSpot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","js.hsforms.net","hbspt.forms.create"],"icon_url":"","type":"script","id":"script:de4bd8ef4675ebb85a055955de76d0ee","is_default":0,"created_at":1679331623},"5d606add-ffb8-4a06-b295-5f722710fbfd":{"title":"Refari","exclusions":["widget.refari.co","refari"],"icon_url":"","type":"script","id":"script:a705e197b13b47e72a105c923e044358","is_default":0,"created_at":1683797056},"742ec14a-27a1-4789-b9c8-a9c3a3cf7042":{"title":"Reviews.io","exclusions":["\/carousel-inline-iframeless\/dist.js","carouselInlineWidget"],"icon_url":"","type":"script","id":"script:4df445c576f45889506ba175a4c39fdc","is_default":0,"created_at":1684389426},"05d3eb78-f574-49be-95e1-3f11714005d1":{"id":"script:ce7566d1d08cc094b74cf283cf9c56a5","title":"Stripe","type":"script","icon":"","exclusions":["js.stripe.com"],"is_default":0,"condition":"","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b56bf06c-2f8c-4757-b536-a689fb0e75f9":{"title":"Typekit","exclusions":["typekit"],"icon_url":"","type":"script","id":"script:7815e38b93e3b500a632681bd594bd61","is_default":0,"created_at":1681390268},"49c38c0a-43b9-4237-88cb-57ddd519f0ad":{"title":"Venatus Media","exclusions":["\/ad-manager.min.js","__vm_add"],"icon_url":"","type":"script","id":"script:abe11528732aed9a19a97e73b242faa5","is_default":0,"created_at":1681390272},"2c1d0998-8ab5-478c-8eb9-9e375b46363e":{"title":"Wistia","exclusions":["fast.wistia.com"],"icon_url":"","type":"script","id":"script:9a0111f8c3186c1cb3113587c660c041","is_default":0,"created_at":1681390274},"0627fe24-7e9d-400f-b064-d98bec2ba85e":{"id":"script:dbd1875130c71eb4b2ef768ad18d820c","title":"Yandex Ads","type":"script","icon":"","exclusions":["yandex.ru","window.yaContextCb"],"is_default":0,"condition":"","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""}}} \ No newline at end of file +{"themes":{"9c623554-5834-4669-9e96-1b894c1939b2":{"id":"theme:0193ea55fce2ada93b262f2824008c0f","title":"Andaman","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/andaman\/assets\/js\/","\/wp-andaman-plugins\/shortcodes\/vc_extend\/"],"is_default":0,"condition":"andaman","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"7374c5a5-69f8-460f-b44f-dee884a824cd":{"id":"theme:24cbda63f1b898ade5562ab4ec6d97a5","title":"Artale","type":"theme","icon":"","exclusions":["\/artale-elementor\/assets\/js\/modulobox.js","\/artale-elementor\/assets\/js\/artale-elementor.js","\/artale\/js\/jquery-stellar.js","\/artale\/js\/core\/artale-plugins.js","\/artale\/js\/core\/artale-custom.js","var loader"],"is_default":0,"condition":"artale","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"03a9cc62-c167-447d-beb2-65c76c96b056":{"title":"Astra","condition":"astra","exclusions":["\/astra\/assets\/js\/minified\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3cce5f3eaf76e098ba8e28f7bbba3f92","is_default":0,"created_at":1681390022},"2a2b54cb-8e1d-49d2-bfca-93eee231e470":{"id":"theme:72a8d63e59c10bdf512a62b862d143a7","title":"Astra - Carousel","type":"theme","icon":"","exclusions":["var astra","\/astra\/assets\/js\/minified\/style.min.js"],"is_default":0,"condition":"astra","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7783361f-66fc-4d95-a054-4e9545bb5b48":{"title":"Auteur","condition":"g5plus-auteur","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/g5plus-auteur\/assets\/js\/core.min.js","\/g5plus-auteur\/assets\/vendors\/","\/auteur-framework\/libs\/smart-framework\/assets\/vendors\/perfect-scrollbar\/js\/perfect-scrollbar.jquery.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"icon_url":"","type":"theme","id":"theme:6207fe478e269e7547bda70a46607a49","is_default":0,"created_at":1679737107},"4c618038-8fc7-4d48-8d41-a32da14e5c1e":{"title":"AutoTrader","condition":"autotrader","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/autotrader\/(.*).js"],"icon_url":"","type":"theme","id":"theme:046dfeee2b77390c53e0e7f93b6a3792","is_default":0,"created_at":1679736741},"18f04f23-35a0-4c45-8cb6-a91d57ca1790":{"id":"theme:835da12f43373029659f766920e81b47","title":"Avada - Animations & mobile-specific actions","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).js","window.off_canvas_","\/plugins\/fusion-builder\/","\/plugins\/fusion-core\/","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90135867-1b95-498b-80d6-f5dbf2f6b318":{"title":"Avada - FAQ shortcode","condition":"Avada","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/fusion-core\/js\/min\/avada-faqs.js"],"icon_url":"","type":"theme","id":"theme:b084708c80d8582546e5430219aa4670","is_default":0,"created_at":1678277160},"d23b5bb1-1d7f-4109-bf69-b20a2be2d337":{"id":"theme:5e7a2248e1a53d9bb27b187deb541248","title":"Avada - Fusion carousel","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.carouFredSel.js","\/includes\/lib\/assets\/min\/js\/general\/fusion-carousel.js","fusionCarouselVars"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"98dfa8c1-e72a-4cef-a0b2-8f0c322490fc":{"id":"theme:f16fb109027f4994a7649a8b1663e6f7","title":"Avada - Fusion form","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-form-logics.js","\/includes\/lib\/assets\/min\/js\/library\/cssua.js","\/includes\/lib\/assets\/min\/js\/general\/fusion.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"026801fa-af67-47ba-b966-347693f0585f":{"id":"theme:33f50696d353d8bd4eb59ff6e8f44c97","title":"Avada - Fusion grid gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-builder\/assets\/js\/min\/general\/fusion-gallery.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c8349314-15a3-481e-973b-e4d936e4420e":{"id":"theme:56fa9993a573540c83eda9c49fae5e3c","title":"Avada - Fusion slider","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/fusion-core\/js\/min\/avada-fusion-slider.js","\/Avada\/includes\/"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"55bd510c-78aa-49d5-8304-8be2ee2ab0da":{"id":"theme:2189c1c769d65cfc2182e4822847071b","title":"Avada - Mobile menu","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-menu.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.easing.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ddf00672-c35c-4b68-aeca-925e68bf12b2":{"id":"theme:97a185f08af70c39c7e221faab0f73eb","title":"Avada - OffCanvas","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/fusion-scripts\/(.*).min.js","window.off_canvas_"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7a04bc85-0fec-4487-ae05-bb2e5d8d0420":{"id":"theme:e3c0b030e73246225b0609ec32506c47","title":"Avada - portfolio","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/library\/packery.js","\/library\/isotope.js","\/library\/imagesLoaded.js","\/general\/fusion-lightbox.js","\/fusion-core\/js\/min\/avada-portfolio.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"17544cc3-9d3a-4611-bc5d-44d04e2786fa":{"id":"theme:6d49e887153f4b7cad1a3c53bc02d506","title":"Avada - Portfolio","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/includes\/lib\/assets\/min\/js\/library\/imagesLoaded.js","\/includes\/lib\/assets\/min\/js\/library\/isotope.js","\/includes\/lib\/assets\/min\/js\/library\/lazysizes.js","\/includes\/lib\/assets\/min\/js\/library\/modernizr.js","\/includes\/lib\/assets\/min\/js\/library\/packery.js","\/fusion-core\/js\/min\/avada-portfolio.js","avadaPortfolioVars"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c6c3347c-14e0-4766-afa5-df33a47f5a5a":{"id":"theme:3ff44421b404c5efffa25e78e479e4ea","title":"Avada - Sticky menu","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Avada\/assets\/min\/js\/general\/avada-menu.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"232596c1-6a6a-4fe8-a5c3-a60fa74a9456":{"id":"theme:0d727d80bb132f17c737e55883fe4be0","title":"Avada - WooCommerce product gallery","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/assets\/min\/js\/general\/avada-woo-product-images.js","\/includes\/lib\/assets\/min\/js\/library\/jquery.flexslider.js"],"is_default":0,"condition":"Avada","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"95ece7e4-3b19-45e5-aa28-14f833c9afca":{"title":"Avesa","condition":"avesa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/avesa\/js\/main.js","\/avesa\/js\/isotope.js","\/sw_core\/js\/slick.min.js","\/avesa\/js\/bootstrap-datetimepicker.min.js","\/avesa\/js\/bootstrap.min.js"],"icon_url":"","type":"theme","id":"theme:aad8bfcc594eec02e3b0d635198dee5e","is_default":0,"created_at":1679737993},"f2bfe477-4e45-4e52-a7d9-4d0ba3a92258":{"title":"Besa","condition":"besa","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/besa\/js\/"],"icon_url":"","type":"theme","id":"theme:c238e89523c46ca28b08e401f42f6ccc","is_default":0,"created_at":1679738204},"bd94908c-8138-4995-986b-47ec66494bdd":{"title":"BeTheme","condition":"betheme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/betheme\/","mfn","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"icon_url":"","type":"theme","id":"theme:b99156eb9eeb357c0a70bd3bda6861cc","is_default":0,"created_at":1679738639},"6fb2b9d7-6ecc-4260-999c-938fbebdbf01":{"id":"theme:de8504b73ea228d0ea9bbce69752092e","title":"Bridge","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/bridge-creative\/bridge\/js\/","\/wp-includes\/js\/"],"is_default":0,"condition":"bridge","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"65698b6b-85dd-41ef-8fd7-718f1e983dba":{"title":"Car Dealer","condition":"cardealer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/(.*)","\/cardealer\/js\/(.*)"],"icon_url":"","type":"theme","id":"theme:b1111424fff61af8d1e152dcdd6810f6","is_default":0,"created_at":1679737517},"eb86aedb-91e6-480c-b76c-756ac1da41be":{"title":"Clover","condition":"clover-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/clover-theme\/"],"icon_url":"","type":"theme","id":"theme:89372f3d9321ae09c94488592084da29","is_default":0,"created_at":1679738878},"6e90b649-5736-497f-9bc6-515900cfea8a":{"title":"Divi - Animations","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI"],"icon_url":"","type":"theme","id":"theme:c0abf30dba4ff13db836d1b01685953a","is_default":0,"created_at":1679737389},"70916c43-4e02-4932-b6aa-91a1815bc755":{"title":"Divi - Background video","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/custom.unified.js","\/js\/mediaelement\/(.*)","mejs"],"icon_url":"","type":"theme","id":"theme:c7edea41ae6716291e2d32a2ab429209","is_default":0,"created_at":1679738240},"08531785-9818-4e30-903e-564637a2ad7a":{"title":"Divi - Counter module","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/easypiechart.js"],"icon_url":"","type":"theme","id":"theme:2c46b9f5a770f260c3f7115bb330b2d5","is_default":0,"created_at":1679736810},"b996762a-84ef-440d-a089-73a187936fbf":{"title":"Divi - Mobile menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js"],"icon_url":"","type":"theme","id":"theme:b9116994f4e4b9b9fa574440c00d2f0d","is_default":0,"created_at":1679738580},"ae096e1e-9c36-46ad-a3d1-c26ea507276b":{"title":"Divi - Sticky elements","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/sticky-elements.js","var DIVI"],"icon_url":"","type":"theme","id":"theme:8b62db03c90245f3e690335b079b05dc","is_default":0,"created_at":1679737191},"349f31f0-dd10-41d3-b0a4-9c5df64879f8":{"title":"Divi - Sticky menu","condition":"Divi","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/js\/jquery\/jquery-migrate.min.js","\/Divi\/js\/scripts.min.js","\/Divi\/includes\/builder\/feature\/dynamic-assets\/assets\/js\/magnific-popup.js","jqueryParams","firstHeader"],"icon_url":"","type":"theme","id":"theme:b7b84aca0f0dc6a1ced31d38626c50ea","is_default":0,"created_at":1679738821},"59563458-5f04-4959-b3e2-53e49e169d67":{"title":"Divi - WooCommerce Single Product Images","condition":"Divi","exclusions":["\/Divi\/js\/scripts.min.js"],"icon_url":"","type":"theme","id":"theme:f9c5bdba8b39fc877b41dea00fa756f9","is_default":0,"created_at":1684342262},"6426539e-4e43-4fef-ab5a-3eb7b2a8b057":{"title":"Eikra","condition":"eikra","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/eikra\/assets\/js\/","EikraObj"],"icon_url":"","type":"theme","id":"theme:55d2581ad975eb6325bc97fc3d3b0cb8","is_default":0,"created_at":1679738450},"59020bd6-069f-4f2d-afa2-fbdefa03211c":{"title":"Ekko","condition":"ekko","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ekko\/"],"icon_url":"","type":"theme","id":"theme:2c06f4a1949f8ba4e77042a47674fd9e","is_default":0,"created_at":1679737803},"d82f5cdd-c5d3-4596-94dc-1e25aaff2083":{"title":"Elessi","condition":"elessi-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elessi-theme\/assets\/js\/min\/functions.min.js","\/elessi-theme\/assets\/js\/min\/main.min.js"],"icon_url":"","type":"theme","id":"theme:d5d2b7fda7b8a2b5b91d430f7602e230","is_default":0,"created_at":1679737773},"f0587c21-54d0-429d-8efe-18a93dacb18d":{"id":"theme:5fc04cc678cb54567aedb51027933002","title":"Enfold","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/dynamic_avia\/avia-footer-scripts-(.*).js","var avia_is_mobile"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cc0550cb-918e-419d-b4f2-1809cf666dbb":{"id":"theme:eb759a03d0ca292c948f09d004a2963f","title":"Enfold - LayerSlider","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","layerslider"],"is_default":0,"condition":"enfold","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ec883654-4f63-4fae-a3ef-923dcbc2426d":{"title":"Enfold - Shortcodes","condition":"enfold","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/enfold\/js\/avia.js","\/enfold\/js\/shortcodes.js","\/enfold\/config-templatebuilder\/avia-shortcodes\/","\/enfold\/js\/avia-compat.js","\/enfold\/js\/waypoints\/waypoints.min.js","\/enfold\/js\/avia-snippet-(.*).js"],"icon_url":"","type":"theme","id":"theme:072fc4077d7071791d774d6ddbf5dc2a","is_default":0,"created_at":1684519716},"fe3546f0-be3e-4173-8992-a7f6f203b82f":{"title":"Envision","condition":"envision","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/envision\/lib\/js\/app.min.js","var CloudFwOp"],"is_default":1,"icon_url":"","type":"theme","id":"theme:fc5f7d69b646ed95835badc0fc23bc11","created_at":1679737494},"d997b942-19de-4710-9c81-79d3c65cbd76":{"id":"theme:047f009f2a1f4cdf2088c46be47e385b","title":"Ewebot","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/gt3-themes-core\/","\/uploads\/gt3-assets\/js\/(.*)","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"ewebot","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"53d29aec-8ae4-4273-b748-f5bd52dfe177":{"title":"Farvis","condition":"farvis","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/farvis\/"],"icon_url":"","type":"theme","id":"theme:26bff2f3a6ff6347d35edf5c77a35687","is_default":0,"created_at":1679737972},"fb01246b-a5f8-4021-b514-c02cf55e80bd":{"title":"Flatsome","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/assets\/libs\/packery.pkgd.min.js","\/flatsome\/assets\/js\/woocommerce.js"],"icon_url":"","type":"theme","id":"theme:26fb1cf80f074ca199d8a7e94c5fc796","is_default":0,"created_at":1679738732},"4d65dc12-9ce7-4171-94a7-9821fd95240e":{"id":"theme:28a6f8b3319c107a34603be0f01a4bcf","title":"Flatsome - Google map","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com","google.maps.LatLng","\/wp-includes\/js\/hoverIntent.min.js"],"is_default":0,"condition":"flatsome","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"890e15b6-c66b-4a9e-9b7d-55417df94916":{"title":"Flatsome - Images","condition":"flatsome","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/flatsome\/inc\/integrations\/wp-rocket\/flatsome-wp-rocket.js","\/flatsome\/assets\/js\/flatsome.js","\/flatsome\/inc\/extensions\/flatsome-lazy-load\/flatsome-lazy-load.js"],"icon_url":"","type":"theme","id":"theme:f2d60aad9f2f5395e3e145cf8f8ab165","is_default":0,"created_at":1679737691},"cb54d070-8ee0-4c35-9fa9-b2bac73ccf39":{"title":"Frida","condition":"frida","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/frida\/"],"icon_url":"","type":"theme","id":"theme:109ddf56796a5133e12279f3daa5ff62","is_default":0,"created_at":1679738013},"9e78539a-03d9-442b-ab94-dd3b7a9658e4":{"id":"theme:80a330247d61d729fcd78dc01de6ed2f","title":"GeneratePress - Mobile menu","type":"theme","icon":"","exclusions":["\/generatepress\/assets\/js\/menu.min.js","generatepressMenu","\/gp-premium\/menu-plus\/functions\/js\/offside.min.js"],"is_default":0,"condition":"generatepress","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"2c72e7e6-cb77-44e9-af87-d5c42ae6db52":{"title":"Honor - WPBakery fix","condition":"honor","exclusions":["\/honor\/js\/__scripts.js","HONOR_STORAGE","\/js_composer\/"],"icon_url":"","type":"theme","id":"theme:9f228373ff4d172655dbf5cb3b1bc23a","is_default":0,"created_at":1679736895},"9309d1d3-1035-4a2c-8ced-075bc3ff9957":{"title":"HotelMaster","condition":"hotelmaster","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/hotelmaster\/javascript\/gdlr-script.js","\/hotelmaster\/plugins\/dl-menu\/modernizr.custom.js","\/hotelmaster\/plugins\/dl-menu\/jquery.dlmenu.js","\/hotelmaster\/plugins\/superfish\/js\/superfish.js","\/hotelmaster\/plugins\/jquery.easing.js"],"icon_url":"","type":"theme","id":"theme:978eaddad3b1047e479407b6d92197aa","is_default":0,"created_at":1679738595},"4a09f745-cbb1-47c8-b50a-c8014d5d1335":{"id":"theme:e813a548bceac6765a1cdf2316f1a6ab","title":"HotelMaster - Blog","type":"theme","icon":"","exclusions":["\/wp-includes\/js\/masonry.min.js","\/gp-premium\/blog\/functions\/js\/scripts.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"hotelmaster","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f2d8f704-ec68-4278-9ca2-885daa0c1ce5":{"id":"theme:398a264e302e42640553681e8759cd07","title":"HotelMaster - Masonry","type":"theme","icon":"","exclusions":["\/gp-premium\/menu-plus\/functions\/js\/offside.min.js","offSide"],"is_default":0,"condition":"hotelmaster","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"df52436c-53d6-461a-b81a-cd0b21680524":{"title":"JNews","condition":"jnews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/jnews\/assets\/js\/","jnews","jfla"],"icon_url":"","type":"theme","id":"theme:5d90e451984f9d894b1aabb0d00f30a2","is_default":0,"created_at":1679738860},"28a0b1ea-8d2f-4931-a48a-166b8df8a773":{"title":"JOYN","condition":"joyn","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/lib\/modernizr-custom.js","\/swift-framework\/includes\/page-builder\/frontend-assets\/js\/spb-functions.min.js","\/swift-framework\/includes\/swift-slider\/assets\/js\/swift-slider.min.js","\/swift-framework\/public\/js\/lib\/imagesloaded.pkgd.min.js","\/joyn\/js\/owl.carousel.min.js","\/joyn\/js\/theme-scripts.js","\/joyn\/js\/functions.js"],"icon_url":"","type":"theme","id":"theme:c395470ad2d4d681836cd942bbb03120","is_default":0,"created_at":1679738527},"542be60a-2346-4740-9a41-8a580c4f013c":{"title":"Juno Toys","condition":"junotoys","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate.min.js","\/junotoys\/fw\/js\/core.init.js","\/junotoys\/fw\/js\/core.utils.js","\/junotoys\/fw\/js\/superfish.js","\/junotoys\/fw\/js\/swiper\/swiper.js","\/trx_utils\/shortcodes\/theme.shortcodes.js","\/wp-includes\/js\/jquery\/ui\/(.*)"],"icon_url":"","type":"theme","id":"theme:2acab38e8356d36355bb81d931e7fba4","is_default":0,"created_at":1679737788},"06167710-10c7-446e-a08b-ce676e444102":{"title":"Jupiter","condition":"jupiter","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiter\/","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:89c5c30498c2989611f9044be006197c","is_default":0,"created_at":1679738430},"5d042e1f-7e62-4ec4-ba31-30d396004522":{"title":"JupiterX","condition":"jupiterx","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jupiterx\/(.*).js","\/wp-includes\/js\/underscore.min.js","WebFont.load"],"icon_url":"","type":"theme","id":"theme:b06632962a4948d4944fd8d79ffbfceb","is_default":0,"created_at":1679737312},"c4b030ea-66a1-4729-85bf-a484e373a316":{"title":"Kadence","condition":"kadence","exclusions":["\/kadence\/assets\/js\/navigation.min.js","mobile_menu_breakpoint ","kadenceConfig"],"icon_url":"","type":"theme","id":"theme:4b7907ee68218db279648da9bf7102d1","is_default":0,"created_at":1679737958},"20c605b4-3e3a-4bb0-a5e5-a08e2cb0f31f":{"title":"Kalium","condition":"kalium","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kalium\/assets\/js\/main.min.js","mobile_menu_breakpoint","var _k"],"icon_url":"","type":"theme","id":"theme:1fcb99a1ab06e1e36635365ed3e59ce5","is_default":0,"created_at":1679737406},"e1e04a7d-635a-4e28-83d9-e345ce40e354":{"title":"Kava","condition":"kava","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/kava\/assets\/js\/theme-script.js"],"icon_url":"","type":"theme","id":"theme:359d67efbf530c998245225dd3245a88","is_default":0,"created_at":1679738609},"e833c36e-ee89-4924-b608-3f28327c2f85":{"title":"Lay","condition":"lay","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/backbone.min.js","\/wp-includes\/js\/underscore.min.js","\/lay\/","\/laytheme-carousel\/","window.laytheme"],"icon_url":"","type":"theme","id":"theme:7c718c6da874ea6e4b27c6d70bc4e7e8","is_default":0,"created_at":1679737453},"2df2ef47-a833-4711-ba54-48dc62586f37":{"id":"theme:85d9922ac61ed833fd047a67029df8e5","title":"LazaNews","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery.custom.js"],"is_default":0,"condition":"lazanews","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"9443304a-34e9-4700-a03a-5f8f62f83ed1":{"title":"Listeo","condition":"listeo","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listeo\/js\/"],"icon_url":"","type":"theme","id":"theme:db7da585545001f5ae614a2810f08f3a","is_default":0,"created_at":1679737244},"77afa73c-c4a8-42a8-aaee-43f6a761364e":{"title":"ListingPro","condition":"listingpro","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/listingpro\/assets\/lib\/jquerym.menu\/js\/jquery.mmenu.min.all.js","\/listingpro\/assets\/lib\/Magnific-Popup-master\/jquery.magnific-popup.min.js","\/listingpro\/assets\/js\/select2.full.min.js","\/listingpro\/assets\/js\/jquery.city-autocomplete.js","\/listingpro\/assets\/js\/chosen.jquery.min.js","\/listingpro\/assets\/lib\/bootstrap\/js\/bootstrap-slider.js","\/listingpro\/assets\/js\/jquery-ui.js","\/listingpro\/assets\/js\/mapbox.js","\/listingpro\/assets\/js\/main.js","\/listingpro\/assets\/js\/leaflet.markercluster.js","maps"],"icon_url":"","type":"theme","id":"theme:0b365e43dfc65d2b1b70fac6510c7c9c","is_default":0,"created_at":1679737938},"01b369b5-b578-4314-8e95-40b67a41d75a":{"title":"Master Study","condition":"masterstudy","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/masterstudy\/assets\/js\/custom.js ","\/masterstudy\/assets\/vendors\/jquery.fancybox.min.js ","\/masterstudy\/assets\/js\/select2.full.min.js"],"icon_url":"","type":"theme","id":"theme:0ee224c20e4ef7d546733d933db598f2","is_default":0,"created_at":1679737878},"6b000cc7-d33b-4109-9c39-6119a5d81cde":{"title":"Maya","condition":"maya","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maya\/js\/jquery.mobilemenu.js","\/maya\/js\/jquery.custom.js","\/maya\/core\/includes\/js\/jquery.tipsy.js"],"icon_url":"","type":"theme","id":"theme:719fe28004fcdd81a820602924aa8074","is_default":0,"created_at":1679737916},"ef3c76d6-1041-473d-81ea-a5a6e8c86735":{"title":"MH Magazine","condition":"mh-magazine","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/mh-magazine\/"],"icon_url":"","type":"theme","id":"theme:2a0cd6efc2f46be69de61712729a2ec9","is_default":0,"created_at":1679737743},"9cbb2777-5524-43b8-af36-692b27452c0d":{"title":"Minimog","condition":"minimog","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/minimog\/"],"icon_url":"","type":"theme","id":"theme:61c0c235042359ee7d2a9035e79a7da2","is_default":0,"created_at":1679738135},"7eb81c74-8062-4a6c-bf66-b7c5bc160141":{"title":"Moozo Elementor","condition":"moozo-elementor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/moozo-elementor\/assets\/js\/countdown.js","\/moozo-elementor\/assets\/vendor\/countdown\/countdown.min.js"],"icon_url":"","type":"theme","id":"theme:2ddb538c8e6b6c766fffd0d5c861fd82","is_default":0,"created_at":1679738623},"e90b7bfa-9ff6-4e1a-bf29-6207d55fdd39":{"title":"Motor","condition":"motor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/motor\/js\/"],"icon_url":"","type":"theme","id":"theme:b33538179f5661a86cbe327a1793e199","is_default":0,"created_at":1683973354},"445e625a-f955-41fa-84de-65d9ea19be07":{"title":"My Listing","condition":"my-listing","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/my-listing\/assets\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","maps.googleapis.com","MyListing","_Explore_Settings"],"icon_url":"","type":"theme","id":"theme:afacb777229ddf5cabceacc64948057d","is_default":0,"created_at":1679737725},"00b8cd2d-2781-4fbb-ac5d-00750ba94ac9":{"title":"Neve - Mobile menu","condition":"neve","exclusions":["\/neve\/assets\/js\/build\/modern\/frontend.js"],"icon_url":"","type":"theme","id":"theme:5ae731cc06dd9284f8172675a6fe81ab","is_default":0,"created_at":1679738714},"483abc54-f1fc-47dc-bfc1-a269c7d1c849":{"id":"theme:649ff22527bac2b1c8e0115cd3851d53","title":"Newspaper - Images","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray"],"is_default":0,"condition":"Newspaper","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"50db8d14-d421-4237-be14-a6f7b5c11ec5":{"id":"theme:7e2eeee57ae458c5959342eda6526bf1","title":"Newspaper - Slider & YouTube","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","tagdiv_theme.min.js","tdBlocksArray","tdb_globals","td_youtube_list_ids","iosSlider","\/td-cloud-library\/assets\/js\/js_files_for_front.min.js"],"is_default":0,"condition":"Newspaper","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"514f4c30-2b67-4648-960e-dfe1cc401ca5":{"title":"Niva","condition":"niva","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/niva\/js\/","\/sweetthemes-framework\/js\/","mt_typed"],"icon_url":"","type":"theme","id":"theme:c4838f73a344b829ed626635e210dcf4","is_default":0,"created_at":1679738256},"e67ee504-c3b1-455e-88ab-1fae8c830652":{"title":"OceanWP","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/oceanwp\/"],"icon_url":"","type":"theme","id":"theme:db37af4b7d12695d37d9256313a5f37a","is_default":0,"created_at":1679737552},"e44e240a-8765-4f4f-b67e-d54e4b727506":{"title":"OceanWP - Mobile menu","condition":"oceanwp","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ocean-side-panel\/assets\/js\/side-panel.min.js","\/oceanwp\/assets\/js\/theme.vanilla.min.js"],"icon_url":"","type":"theme","id":"theme:9babbcd52b2ce558d299a06cd1130a11","is_default":0,"created_at":1679738463},"897b0100-958d-4a02-b6b2-1e753e9869f4":{"title":"PenNews","condition":"pennews","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/pennews\/js\/script.min.js","\/pennews\/js\/script.lib.min.js"],"icon_url":"","type":"theme","id":"theme:02811fa00bc1471bb5be0457ce0ee005","is_default":0,"created_at":1679737471},"edd3ba03-e0fd-4b6e-911b-60b29f3471bf":{"title":"Pharmacy Mentor","condition":"pharmacymentor","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/pharmacymentor\/"],"icon_url":"","type":"theme","id":"theme:3188aaf1ef2c39937450f2a14ebb1174","is_default":0,"created_at":1679738214},"725415ff-cc76-45cc-a131-3170e5aa30fc":{"title":"Porto","condition":"porto","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/","\/porto\/js\/theme.js","\/porto\/js\/theme.min.js"],"icon_url":"","type":"theme","id":"theme:8493f398f200c8dffe60d46439dd3360","is_default":0,"created_at":1679737758},"31347ccb-f69e-4cd3-bd47-b80ce14ac76e":{"title":"ProPhoto","condition":"prophoto7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/prophoto7\/js\/bundle.front.js","\/wp-includes\/js\/underscore.min.js","PROPHOTO"],"icon_url":"","type":"theme","id":"theme:a5836a56c4472fade4dc6ebfe2281554","is_default":0,"created_at":1679737425},"a8208c04-865c-49aa-ab96-41e378d391c8":{"title":"Publisher","condition":"publisher","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/publisher\/js\/"],"icon_url":"","type":"theme","id":"theme:32c73be0cb175da278c8e2af0811b0d1","is_default":0,"created_at":1679738169},"a0d69f3d-1356-4a1d-a600-2f2f788b8a9a":{"title":"REHub","condition":"rehub-theme","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rehub-theme\/js\/custom_floatpanel.js"],"icon_url":"","type":"theme","id":"theme:321af1febb74f488cf911380893739b2","is_default":0,"created_at":1679738502},"8b74bbe5-7f32-42df-908f-78c99a8cad82":{"title":"Rey","condition":"rey","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/rey\/scripts-(.*).js","\/rey-core\/assets\/js\/"],"icon_url":"","type":"theme","id":"theme:e46567cd0f3ec9b37e7230dc87eac367","is_default":0,"created_at":1679737011},"5c9115d3-bcbd-49d6-8feb-4880d2b82bfe":{"title":"Rife Free","condition":"rife-free","exclusions":["\/rife-free\/js\/script.min.js","\/rife-free\/js\/isotope.pkgd.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","var reJS"],"icon_url":"","type":"theme","id":"theme:74a449954de79625eccc6750e87af8f6","is_default":0,"created_at":1679738107},"6542b2fd-1f91-4862-aa18-11eecc02faaf":{"title":"Roisin","condition":"roisin","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/themes\/roisin\/assets\/js\/main.min.js","\/plugins\/roisin-core\/assets\/js\/roisin-core.min.js","\/wp-includes\/js\/hoverIntent.min.js"],"icon_url":"","type":"theme","id":"theme:8f38fe58034772931110930b91cb6797","is_default":0,"created_at":1685964523},"7ae9d978-d63c-4a58-beb3-418bebb5b23c":{"title":"Salient","condition":"salient","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/salient\/","winW > bodyW"],"icon_url":"","type":"theme","id":"theme:b3e12d57ac23897be1bb2c673e3fc761","is_default":0,"created_at":1679736950},"35aaa6c5-4a37-4161-b504-fb3ebc4b1148":{"id":"theme:d612db1dd8dc76faa6a36a9ebfd336dc","title":"Salient - Nectar slider","type":"theme","icon":"","exclusions":["\/salient-nectar-slider\/js\/nectar-slider.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"salient","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cd44aa56-088a-40dd-bf1e-f835efa68626":{"title":"Shoptimizer","condition":"shoptimizer","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shoptimizer\/assets\/js\/lazyload-bg.js","\/shoptimizer\/assets\/js\/main.min.js"],"icon_url":"","type":"theme","id":"theme:6c32b43f4da639e5901574fac6b7d387","is_default":0,"created_at":1679737143},"d2c48a48-430a-4eea-bc05-99b66f1f6a7b":{"title":"SmartMag","condition":"smart-mag","exclusions":["\/smart-mag\/js\/lazyload.js"],"icon_url":"","type":"theme","id":"theme:23d6b7878bd0087addb067db3fa39864","is_default":0,"created_at":1679738490},"dd0d9133-ef17-4dac-b174-9f25d535838f":{"title":"Soledad","condition":"soledad","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/soledad\/js\/main.js","\/soledad\/js\/more-post.js","\/soledad\/js\/libs-script.min.js"],"icon_url":"","type":"theme","id":"theme:d3f78b26c2d11c99230171cc6378d06e","is_default":0,"created_at":1679737664},"d657dc56-5c04-439a-8987-401f89a65bf9":{"title":"Stockholm","condition":"stockholm","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/stockholm\/js\/"],"icon_url":"","type":"theme","id":"theme:fcfff492e00727b63cf5dff9f59bc2a4","is_default":0,"created_at":1679738378},"121f9b1b-d3cd-4dde-915e-0b348abf6687":{"title":"Storefront","condition":"storefront","exclusions":["\/storefront\/assets\/js\/navigation.min.js"],"icon_url":"","type":"theme","id":"theme:f0dca7e4eaedf573d4664be249845942","is_default":0,"created_at":1679738793},"41cfc83f-ff02-4a35-a3b7-e92db213b224":{"title":"StreamTube","condition":"streamtube","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/streamtube\/","\/streamtube-core\/"],"icon_url":"","type":"theme","id":"theme:9772ccddd470688f6bc6aee86e34d29b","is_default":0,"created_at":1679331431},"aec0a548-4c6b-400a-80ed-19a49e0faef0":{"title":"The7","condition":"dt-the7","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","loader-removed","\/Ultimate_VC_Addons\/assets\/min-js\/","\/dt-the7\/","\/js_composer\/"],"icon_url":"","type":"theme","id":"theme:7934c689fd20e30b6bfc69bb9d46cb63","is_default":0,"created_at":1679737892},"538354ff-d69f-40be-b0cc-df3790599dd2":{"title":"TheGem","condition":"thegem","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thegem\/js\/","gemSettings","thegemSlideshow","tgpLazyItemsOptions"],"icon_url":"","type":"theme","id":"theme:153c54fe73897da838ce39152b1db5a8","is_default":0,"created_at":1679738477},"68f2de3b-e2b8-4edf-b82f-93fd7834c65f":{"title":"Total","condition":"Total","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Total\/assets\/js\/total.min.js"],"icon_url":"","type":"theme","id":"theme:96b0141273eabab320119c467cdcaf17","is_default":0,"created_at":1679737571},"6dc1cb35-6b50-4da0-9834-dddf169edaa6":{"id":"theme:7c37c885d7fecf788f635734f99e8610","title":"Townhub","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/townhub-add-ons\/assets\/js\/(.*)","\/wp-includes\/js\/dist\/vendor\/react.js","\/wp-includes\/js\/dist\/vendor\/react-dom.js"],"is_default":0,"condition":"townhub","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"14cb0a85-8bee-491e-99d7-5f20a07f4bdd":{"title":"Uncode","condition":"uncode","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uncode\/library\/js\/init(.min)?.js","\/uncode\/library\/js\/plugins(.min)?.js","\/uncode\/library\/js\/app(.min)?.js","\/uncode\/library\/js\/woocommerce-uncode(.min)?.js","\/wp-includes\/js\/mediaelement\/mediaelement-and-player.min.js","initHeader","initBox","fixMenuHeight","initRow"],"icon_url":"","type":"theme","id":"theme:18ba19b98aefbb6c0fde6c6bf92e9cfc","is_default":0,"created_at":1679738154},"88e96479-1aa2-4adc-8f07-20bc0368a63f":{"title":"Werkstatt","condition":"werkstatt","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js\/underscore.min.js","\/werkstatt\/assets\/js\/vendor.min.js","\/werkstatt\/assets\/js\/fullscreen.min.js","\/werkstatt\/assets\/js\/app.min.js"],"icon_url":"","type":"theme","id":"theme:38faa29db5a07b8fef6aee9cc11cafec","is_default":0,"created_at":1679737639},"60c4110b-a960-4d44-b619-6d79514dbf75":{"title":"Woodmart","condition":"woodmart","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/imagesloaded.min.js","\/woodmart\/js\/scripts\/wc\/","\/woodmart\/js\/scripts\/global\/","\/woodmart\/js\/libs\/owl.carousel.min.js","\/woodmart\/js\/libs\/owl.carousel.js","\/woodmart\/js\/libs\/slick.js"],"icon_url":"","type":"theme","id":"theme:06338f13cb89e5309ad2eb7e4d457be4","is_default":0,"created_at":1679738777},"119ebd1c-6b46-4f07-8d6a-3498d9c8814f":{"title":"XStore","condition":"xstore","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/xstore\/js\/","\/et-core-plugin\/packages\/st-woo-swatches\/public\/js\/frontend.min.js"],"icon_url":"","type":"theme","id":"theme:3de9d9ba385200548f177d9c704ae92a","is_default":0,"created_at":1679738190},"9a7a548c-07a1-4dff-93fc-6e8230b67853":{"id":"theme:119d329456073aa10969d7cbd9760f28","title":"YOOtheme Pro","type":"theme","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","uikit.min.js"],"is_default":0,"condition":"yootheme","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f74c499e-b7d9-4590-8671-379f51f468c8":{"title":"Zeen","condition":"zeen","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/zeen\/assets\/js\/","\/js.cookie.min.js"],"icon_url":"","type":"theme","id":"theme:acb52844f996627788836366404a3245","is_default":0,"created_at":1679737859}},"plugins":{"ffc21030-519a-4853-8cea-49f959e82731":{"id":"plugin:def67a2c1ddd6df2353e4772b6fd4e5b","title":"Additional Variation Images Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woo-variation-gallery\/assets\/js\/slick.min.js","\/woo-variation-gallery\/assets\/js\/frontend.min.js","\/wp-includes\/js\/underscore.min.js","variation_custom_fields"],"is_default":0,"condition":"woo-variation-gallery\/woo-variation-gallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"0e7dc253-acd0-4421-877f-a7101d848717":{"id":"plugin:4b82cc7379d46c6272f5d556bb264eec","title":"Advanced Ads","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/(.*).js","advanced_ads_ready","advadsCfpQueue","adsbygoogle","adservice.google","\/advanced-ads(.*)","advads_items","advads_tracking_ads"],"is_default":0,"condition":"advanced-ads\/advanced-ads.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a4d5c058-9120-47ee-977c-f30f83fb1a75":{"id":"plugin:a076fbb79772f497349a76ee74a7f708","title":"All-in-one Compliance for GDPR \/ CCPA Cookie Consent","type":"plugin","icon":"","exclusions":["iubenda_cs.js","var _iub"],"is_default":0,"condition":"iubenda-cookie-law-solution\/iubenda_cookie_solution.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"79a5082f-821a-4a4b-a0e3-caaf22cf3f75":{"id":"plugin:9bdceaa1bb89135730a3b2aa4db94c22","title":"AMO Team Showcase","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/amo-team-showcase\/public\/js\/wookmark.js","\/amo-team-showcase\/public\/js\/amo-team-showcase-public.js","\/wp-includes\/js\/imagesloaded.min.js","amoTeamVars"],"is_default":0,"condition":"amo-team-showcase\/amo-team-showcase.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1d058cae-4460-4354-bab3-a96445650bd8":{"id":"plugin:b739df50f3f5bf400075f17dca652517","title":"AnyWhere Elementor Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/anywhere-elementor-pro\/build\/index.js"],"is_default":0,"condition":"anywhere-elementor-pro\/anywhere-elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8a1614c7-55b1-4b6d-88e5-6e8ddc630dae":{"id":"plugin:46741e77eaf4d13a0c80be6b86379758","title":"Astra - Pro Addon","type":"plugin","icon":"","exclusions":["\/astra-addon\/astra-addon-(.*).js"],"is_default":0,"condition":"astra-addon\/astra-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"37d96403-f9ea-4481-b2f8-374d7c93e61a":{"id":"plugin:ccd87807930a1856717fd276c336db9a","title":"Beaver Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/uploads\/bb-plugin\/","\/bb-plugin\/js\/yui3.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/bb-plugin\/js\/fl-slideshow.min.js"],"is_default":0,"condition":"beaver-builder-lite-version\/fl-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f83dbf3b-783e-4ef9-9b18-8a469ca7102d":{"title":"Bloom","condition":"bloom\/bloom.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bloom\/"],"icon_url":"","type":"plugin","id":"plugin:e57cdfbc09f4e0f7445c279d9f580bdd","is_default":0,"created_at":1685189070},"135aadd2-cd4a-44ae-8dcf-801f3f2316c0":{"id":"plugin:055ef01accbad6378e3d1a4965600964","title":"Booked","type":"plugin","icon":"","exclusions":["\/booked\/","\/js\/jquery\/ui\/datepicker.min.js"],"is_default":0,"condition":"booked\/booked.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ddfee9b0-e5a9-4d3f-8c21-b999cbb61c33":{"id":"plugin:492f9b0d55f3bf07c68e915ea1dfb72a","title":"Bookly","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/bookly-responsive-appointment-booking-tool\/frontend\/","window.bookly"],"is_default":0,"condition":"bookly-responsive-appointment-booking-tool\/main.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7a013fd6-0881-4dbe-8e93-33edefe7f717":{"id":"plugin:e1ec2daca513de476bd3dae79366e9ab","title":"Borlabs Cookie","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","borlabsCookieConfig","borlabs-cookie.min.js","borlabsCookieContentBlocker","BorlabsCookieBox"],"is_default":0,"condition":"borlabs-cookie\/borlabs-cookie.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3999e680-4049-4494-945c-768cecc1a2c4":{"id":"plugin:43019d66af7b41e65bb602c01e10c6a0","title":"Brizy","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/group-(.*).js","\/brizy\/public\/editor-build\/(.*)-wp\/editor\/js\/preview.js","Brizy.emit"],"is_default":0,"condition":"brizy\/brizy.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"af4d9357-3def-42a1-86b7-419553444b4d":{"id":"plugin:5c317f9f244597d8f236ecb7d8e41752","title":"Carousel Upsells and Related Product for WooCommerce","type":"plugin","icon":"","exclusions":["\/carousel-upsells-and-related-product-for-woocommerce\/assets\/js\/glide.min.js","carusel_poduct_related"],"is_default":0,"condition":"carousel-upsells-and-related-product-for-woocommerce\/ffxf-woo-glide-related-and-upsells.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1d866d90-5451-43ba-a4d1-75b64f9235e1":{"id":"plugin:0a3a29603ebac8fe0808f64f5c8edbb2","title":"clickskeks.at Cookiebanner","type":"plugin","icon":"","exclusions":["clickskeks"],"is_default":0,"condition":"clickskeks\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c09695cc-2387-4416-881a-c0b392188a26":{"title":"Complianz","condition":"complianz-gdpr\/complianz-gpdr.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","complianz"],"icon_url":"","type":"plugin","id":"plugin:a766f95208154cd69a3e15150a42f325","is_default":0,"created_at":1685188788},"7e551e3b-fbe4-4235-87a9-b476bc9e2020":{"id":"plugin:949b1b923d51d10a2fb67a2a39d166b3","title":"Content Egg","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/content-egg\/res\/js\/morrisjs\/morris.min.js","\/content-egg\/res\/js\/morrisjs\/raphael.min.js","Morris.Area"],"is_default":0,"condition":"content-egg\/content-egg.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"7fbca6c5-9239-4550-a755-6f041f867a57":{"title":"Cookie Notice & Compliance for GDPR \/ CCPA","condition":"cookie-notice\/cookie-notice.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/cookie-notice\/","var cnArgs"],"icon_url":"","type":"plugin","id":"plugin:213d0f883ae27aefb3a7937656bbd11e","is_default":0,"created_at":1681379736},"26722567-fe35-44b5-a5a7-fb0f3a38c3f2":{"id":"plugin:1d10ad30bbcf0fd4b26e9625a07abcfc","title":"Cookiebot CMP","type":"plugin","icon":"","exclusions":["consent.cookiebot.com"],"is_default":0,"condition":"cookiebot\/cookiebot.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"74110e36-89e5-440d-bec3-7133da3277c2":{"id":"plugin:edcf103293ceab711e999d419d038ca1","title":"Coupon Referral Program","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/coupon-referral-program\/","\/wp-includes\/js\/jquery\/ui\/draggable.min.js"],"is_default":0,"condition":"coupon-referral-program\/coupon-referral-program.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ed63e02f-d6c5-481a-bcb9-aae15f72aa21":{"id":"plugin:c3e26264dcfd25802805b4fd1a2a449c","title":"Crisp - Live Chat and Chatbot","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","CRISP_RUNTIME_CONFIG","l.js"],"is_default":0,"condition":"crisp\/crisp.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"a8eb622b-279c-4f84-86e0-785e9497add7":{"id":"plugin:6e4bf949e12f0bebfefb48f6c316102a","title":"Custom Twitter Feeds pro","type":"plugin","icon":"","exclusions":["\/custom-twitter-feeds-pro\/js\/ctf-scripts.min.js"],"is_default":0,"condition":"custom-twitter-feeds-pro\/custom-twitter-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"1624ef15-e25b-406d-bdf9-d4b78d7a59e7":{"id":"plugin:1f893b343e72ce55e6c9013fbda172fa","title":"Customer Reviews for WooCommerce Plugin","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/customer-reviews-woocommerce\/js\/colcade.js"],"is_default":0,"condition":"customer-reviews-woocommerce\/ivole.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c15fe3b3-0eaa-48f9-bf04-0e778b1f8c63":{"title":"Divi - Supreme","condition":"supreme-modules-for-divi\/supreme-modules-for-divi.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","\/js\/magnific-popup.js","var DIVI","\/supreme-modules-for-divi\/"],"icon_url":"","type":"plugin","id":"plugin:b5489ae4d8b949f536d6dd2e5b0c1a95","is_default":0,"created_at":1679738701},"dd31451b-989a-4517-b02a-e2c2e2023366":{"id":"plugin:5caed322df984bbfd3ecb506cf12b688","title":"Divi Den Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ddpro\/build\/freddie\/js\/freddieScriptPageTransition.js","\/ddpro\/build\/freddie\/js\/freddieScriptsHeaders.js","\/ddpro\/build\/freddie\/js\/freddieScriptsContents.js","\/ddpro\/build\/freddie\/js\/gsap\/gsap.min.js"],"is_default":0,"condition":"ddpro\/ddpro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"2b006370-cc90-42c1-9656-a30fbfbc91c6":{"id":"plugin:402d9b241b04934dd30f32e7ba490e63","title":"Divi Mobile","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","divi-menu","dm_nav"],"is_default":0,"condition":"divi-mobile\/divi-mobile.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"666bbed9-7ce3-457c-ad6e-b5e056d05010":{"title":"Divi Overlays","condition":"divi-overlays\/divi-overlays.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer","\/Divi\/js\/scripts.min.js","\/Divi\/js\/custom.unified.js","var DIVI","\/divi-overlays\/"],"icon_url":"","type":"plugin","id":"plugin:1c828c93d87298d2a27c76e13d0880ba","is_default":0,"created_at":1679738664},"42a404af-7792-44be-9baa-565dc3baf25d":{"id":"plugin:dd2494945a487a6cc74d3ab1b2137ccb","title":"Divi Pixel","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js",".dipi_preloader_wrapper_outer"],"is_default":0,"condition":"divi-pixel\/divi-pixel.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"0b78d762-c7be-45de-9aae-0c5078ec0619":{"id":"plugin:b5fc0101608d0b0627268dc49e3e1f8f","title":"Divi Toolbox","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","jQuery('.preloader')","\/divi-toolbox\/assets\/js\/toolbox-scripts.js"],"is_default":0,"condition":"divi-toolbox\/divi-toolbox.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8baba0f8-4449-47d8-a87d-9b6a116e7684":{"title":"Dynamic Pricing & Discounts Lite for WooCommerce","condition":"woo-dynamic-pricing-discounts-lite\/dynamic-pricing-discounts-lite-for-woocommerce.php","exclusions":["\/woo-dynamic-pricing-discounts-lite\/assets\/OwlCarousel\/dist\/owl.carousel.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:185062bf08db42515488e1853d1f4917","is_default":0,"created_at":1677857247},"0fa129f2-5869-4db7-9bf0-69e4b3549ee2":{"id":"plugin:27478327aa44075a86176fad95640d76","title":"Dynamic Product Gallery for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-dynamic-gallery\/","a3revWCDynamicGallery"],"is_default":0,"condition":"woocommerce-dynamic-gallery\/wc_dynamic_gallery_woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"9958c6be-2f67-4791-95c3-a7ad96d599c0":{"title":"Dynamic Product Gallery Premium for WooCommerce","condition":"woocommerce-dynamic-gallery-pro\/wc_dynamic_gallery_woocommerce.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/woocommerce-dynamic-gallery-pro\/assets\/js\/mygallery\/jquery.a3-dgallery.js","settings_defaults_","a3revWCDynamicGallery"],"icon_url":"","type":"plugin","id":"plugin:11dc02a76019f00422f4ac85f47f5135","is_default":0,"created_at":1683208937},"ce26ed21-1be5-481f-80d4-31edfac6d890":{"title":"Dynamic.ooo - Dynamic Content for Elementor","condition":"dynamic-content-for-elementor\/dynamic-content-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/dynamic-content-for-elementor\/assets\/","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"icon_url":"","type":"plugin","id":"plugin:d2bd5b348abe016bdc722acce7755062","is_default":0,"created_at":1683355024},"6a3161a6-1a6f-457a-a9ee-54b376981927":{"id":"plugin:ee1dec033c6481a77fe88de5bef1a02d","title":"Easy Table of Contents","type":"plugin","icon":"","exclusions":["\/easy-table-of-contents\/assets\/js\/front.min.js"],"is_default":0,"condition":"easy-table-of-contents\/easy-table-of-contents.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"25a534a0-2c1f-4cf4-9e19-7941bc032b3a":{"id":"plugin:41c8f5f0ab00cb39654aedd783d194e0","title":"Ecwid Ecommerce Shopping Cart","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js ","app.ecwid.com\/script.js ","\/ecwid-shopping-cart\/js\/frontend.js ","\/ecwid-shopping-cart\/js\/static-page.js ","ecwidParamswindow.ec ","jQuery.mobile ","xSearch ","xCategoriesV2 ","xProductBrowser ","Ecwid.init"],"is_default":0,"condition":"ecwid-shopping-cart\/ecwid-shopping-cart.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"40464325-5bae-4a20-bc97-553499e09a73":{"title":"Elementor","condition":"elementor\/elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","type":"plugin","id":"plugin:1d15783218a3137bec4ee8df5353e218","is_default":0,"created_at":1679490020},"1948aff5-7850-4979-91fa-0ce181484508":{"id":"plugin:de658ae6c2d05a5a4a947efecf5e0c16","title":"Elementor Custom Skin","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ele-custom-skin(.*)\/assets\/js\/"],"is_default":0,"condition":"ele-custom-skin\/ele-custom-skin.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"25708299-c596-4416-8ad8-740aee0f2752":{"title":"Elementor Pro","condition":"elementor-pro\/elementor-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","\/wp-includes\/js\/imagesloaded.min.js","ElementorProFrontendConfig","elementorFrontendConfig","\/happy-elementor-addons-pro\/","\/header-footer-elementor\/inc\/js\/frontend.js"],"icon_url":"","type":"plugin","id":"plugin:030ad23e3851ed7adfa7b9b6c13cf5a6","is_default":0,"created_at":1679490021},"f34dd874-4b34-41e6-a31c-ece3c1efbffc":{"id":"plugin:305581ad4294a30eeb1247982f626005","title":"Elementor Pro - SmartMenus","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/assets\/lib\/smartmenus\/jquery.smartmenus.min.js","\/elementor-pro\/assets\/js\/preloaded-elements-handlers.min.js"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"111cc8b2-0be9-438b-9aa3-7f1e301a5697":{"id":"plugin:5ae9f5d99224d5ebc7d0c0bbf5b99787","title":"Elementor Pro - User Cache","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/backbone.min.js","elementorAdminBarConfig","elementorCommonConfig","elementorWebCliConfig","elementorDevToolsConfig"],"is_default":0,"condition":"elementor-pro\/elementor-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c1713bf8-e0c3-4cb5-8b3f-841b06aa87ed":{"title":"ElementsKit Lite - Megamenu","condition":"elementskit-lite\/elementskit-lite.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/elementskit(.*)\/"],"icon_url":"","type":"plugin","id":"plugin:b91fed2fc4478dbb7067742c1ee4691b","is_default":0,"created_at":1683270249},"706ff35d-8e33-4b04-a986-346faff704e9":{"id":"plugin:417192424139d89fb2a5b1ee1f2b9613","title":"Essential Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"is_default":0,"condition":"essential-addons-for-elementor-lite\/essential_adons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b38556dc-2bc4-430f-9c55-7191cf7773db":{"id":"plugin:057757d0593ad9d2dc58124f0077a5df","title":"Essential Addons for Elementor Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/essential-addons(-for)?-elementor(-lite)?\/.*(.min)?.js"],"is_default":0,"condition":"essential-addons-elementor\/essential_adons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"719b988f-0d60-40c2-ba46-88f943119cb1":{"id":"plugin:c8e6c490f6438f566ade600c33531a85","title":"Essential Grid","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/essential-grid\/","lightboxOptions"],"is_default":0,"condition":"essential-grid\/essential-grid.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"47d3d2ab-160d-4b07-ac25-8250b9e6a951":{"id":"plugin:dafd19fa48a1fef890dc4348052fcb75","title":"EventON Lite","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/eventon-lite\/assets\/js\/(.*)"],"is_default":0,"condition":"eventon-lite\/eventon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"219968d7-cf1f-4ee0-917a-db35dcc93a3e":{"id":"plugin:49ff465628fc3cb6d7f23ff81d9b8339","title":"FacetWP","type":"plugin","icon":"","exclusions":["\/facetwp\/assets\/js\/dist\/front.min.js","window.FWP_"],"is_default":0,"condition":"facetwp\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"acce5701-5917-48d5-83ab-3e626aa420c5":{"id":"plugin:78a1c88a56fa957c802074b6418c6fac","title":"FacetWP - Flyout menu","type":"plugin","icon":"","exclusions":["\/facetwp-flyout\/assets\/js\/front.js"],"is_default":0,"condition":"facetwp-flyout\/facetwp-flyout.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f2a5b95f-1a22-46d2-8b72-42a53e46ae3f":{"id":"plugin:5d7555892a3a9968fde3fa3a335fc3d8","title":"FiboSearch - Ajax Search for WooCommerce","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.js","\/wp-includes\/js\/jquery\/jquery-migrate.js","\/ajax-search-for-woocommerce-premium\/assets\/js\/search.js"],"is_default":0,"condition":"ajax-search-for-woocommerce\/ajax-search-for-woocommerce.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7d1404e9-be76-449c-87aa-919557abe82d":{"id":"plugin:ad46179e8b0584abaf52056b846da227","title":"FlexBlock","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/flo-flex-builder\/dist\/flex-public.min.js","flexDebug"],"is_default":0,"condition":"flo-flex-builder\/flo-flex-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b9c6a2dc-b226-4e2c-b85e-29ee55b8f751":{"id":"plugin:567a2b15db30ef6bd4904e4317139aac","title":"Fluent Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/fluentform\/public\/js\/(.*).js","\/fluentformpro\/public\/js\/(.*).js"],"is_default":0,"condition":"fluentform\/fluentform.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"10874f8a-2855-4e80-bc46-e484589b76a8":{"id":"plugin:e78c153103f698b2b34892332d6b3b62","title":"Flying Images","type":"plugin","icon":"","exclusions":["flyingImages"],"is_default":0,"condition":"nazy-load\/flying-images.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"53958499-dacd-41d6-93bc-1534fe7d9eda":{"id":"plugin:5a0e40a6c5783856893b803189de1404","title":"FooGallery Premium","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/foobox-image-lightbox\/free\/js\/foobox.free.min.js","\/plugins\/foogallery-premium\/pro\/extensions\/default-templates\/shared\/js\/foogallery.min.js"],"is_default":0,"condition":"foogallery-premium\/foogallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7870d704-2024-4622-838c-fad37d5c6753":{"id":"plugin:ebb5efb57b19ae60e734e456ca2df3f8","title":"Formidable Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","frmSigs","\/formidable-signature\/js\/frm.signature.min.js"],"is_default":0,"condition":"formidable\/formidable.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3f24f9b3-e59e-400f-a784-999f93f60fab":{"id":"plugin:0b08523445b8869a67ca40e777704692","title":"Forminator","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","forminatorFront","\/forminator\/build\/front\/front.multi.min.js","\/forminator\/assets\/js\/library\/jquery.validate.min.js","\/forminator\/assets\/forminator-ui\/js\/forminator-form.min.js","\/forminator\/assets\/forminator-ui\/js\/select2.full.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js"],"is_default":0,"condition":"forminator\/forminator.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3a600ded-3454-48fb-9811-46afa2ab3c05":{"id":"plugin:5759bf0d47ac3457485314b381a9b528","title":"GDPR Cookie Compliance","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gdpr-cookie-compliance\/dist\/scripts\/main.js"],"is_default":0,"condition":"gdpr-cookie-compliance\/moove-gdpr.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"e21aaa5e-7354-471d-ab86-85f99f48830c":{"id":"plugin:ffb40036ab0583218561de7c28c6bd9b","title":"GDPR Cookie Consent","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/public\/js\/cookie-law-info-public.js","Cli_Data"],"is_default":0,"condition":"webtoffee-gdpr-cookie-consent\/cookie-law-info.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c11ca4ea-1a23-49ee-9a6b-1e549de50ea2":{"id":"plugin:3877953c5ec1e66db92ad844ae8ebafc","title":"Getwid - Gutenberg Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/wp-includes\/js\/jquery\/ui\/tabs.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js"],"is_default":0,"condition":"getwid\/getwid.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3773bb33-b168-4f68-9963-512da24ac4da":{"title":"GoodLayers Core","condition":"goodlayers-core\/goodlayers-core.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js ","\/goodlayers-core\/plugins\/script.js ","\/goodlayers-core\/include\/js\/page-builder.js"],"icon_url":"","type":"plugin","id":"plugin:5f124509a56ca2e0644246919ec70434","is_default":0,"created_at":1677854322},"7bf261ac-89d4-492f-8a3d-1c5809b9579a":{"id":"plugin:7a1c1606d094f6bff83c0ee155908367","title":"Gravity Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/gravityforms\/","gform","recaptcha","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/gravityforms\/js\/conditional_logic.min.js"],"is_default":0,"condition":"gravityforms\/gravityforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"12340193-5c35-4b0d-b0bc-bea690cf1cae":{"id":"plugin:2f3112dd98c39aeb6bde618c9026a29f","title":"Green Forms","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","leform.min.js","leform_customjs_handlers","leform_ajax_url"],"is_default":0,"condition":"green-forms\/green-forms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4d20b427-47cf-4cdf-91c7-ff53602d3b2a":{"id":"plugin:0eb769dddc58f998e913345841b1d0b3","title":"GTM4WP","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","dataLayer"],"is_default":0,"condition":"duracelltomi-google-tag-manager\/duracelltomi-google-tag-manager-for-wordpress.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a2b3c237-728c-49d6-882a-e3885444e9b4":{"id":"plugin:3b085ccda851ccf129d9506462f0cd65","title":"GTranslate","type":"plugin","icon":"","exclusions":["translate.google.com","googleTranslateElementInit"],"is_default":0,"condition":"gtranslate\/gtranslate.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"40cd9336-e73f-4a61-a7f6-27ec1ca6892c":{"id":"plugin:e1f17c1eac230219e6fec3ac07406a0d","title":"HBook","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/hbook\/","hb_booking_form_data","hb_max_date"],"is_default":0,"condition":"hbook\/hbook.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"99cfbb2e-5678-42c2-928f-5cb09d7e43da":{"id":"plugin:269c5766fba124a838ac012a4b5a1a13","title":"HUSKY - Products Filter for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-products-filter\/(.*)","woof"],"is_default":0,"condition":"woocommerce-products-filter\/index.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3a964eac-4aeb-49a7-9fd6-4c31b2645dee":{"id":"plugin:d457acfec0f86aac6733f1446f4fc94f","title":"Instagram Feed Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/instagram-feed-pro\/js\/sbi-scripts.min.js","sb_instagram_js_options"],"is_default":0,"condition":"instagram-feed-pro\/instagram-feed.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8f9f4788-1b8d-468b-b291-1fcbd48618b9":{"id":"plugin:513b0c0ec8e12130af9b4bbbb17d7275","title":"Interactive Geo Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/interactive-geo-maps-premium\/assets\/public\/map-service\/app.min.js","\/interactive-geo-maps\/assets\/public\/map-service\/app.js","iMapsData","cdn.amcharts.com\/lib\/"],"is_default":0,"condition":"interactive-geo-maps\/interactive-geo-maps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cf650ca3-afa0-4a13-9e4f-f7cca19abac6":{"title":"Ivory Search","condition":"add-search-to-menu\/add-search-to-menu.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/add-search-to-menu\/public\/js\/ivory-search.min.js"],"icon_url":"","type":"plugin","id":"plugin:7430e9d2c985ae0a3339a7b7e1acc318","is_default":0,"created_at":1677852711},"17a5dd54-1f5e-4d57-a56d-a8a970651954":{"id":"plugin:1c8a1e1ba89a601f88654f094139b469","title":"JetBlocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-blocks\/assets\/js\/jet-blocks.min.js"],"is_default":0,"condition":"jet-blocks\/jet-blocks.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b6f78c90-9823-459a-8dc1-1257e5f0d4e3":{"id":"plugin:dac9ec782180f33d0fcc7c4e0e569b9d","title":"JetBlog","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/","ElementorProFrontendConfig","elementorFrontendConfig","hasJetBlogPlaylist"],"is_default":0,"condition":"jet-blog\/jet-blog.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"e17173d8-6ef8-4e27-ba0f-379c9aea7eda":{"id":"plugin:0fe8895d1da5247b73a5d0b482df4ac4","title":"JetElements","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jet-elements\/","hasJetBlogPlaylist","jetElements","\/wp-includes\/js\/jquery\/ui\/"],"is_default":0,"condition":"jet-elements\/jet-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cfd77501-9c9e-4f11-b994-0178a592fc08":{"title":"JetEngine","condition":"jet-engine\/jet-engine.php","exclusions":["\/jet-engine\/"],"icon_url":"","type":"plugin","id":"plugin:bc998e71546860c8c7f70c45a6c18972","is_default":0,"created_at":1686208296},"36fed829-a2d9-41b5-94f6-2c3b9f07a94e":{"id":"plugin:433a3173f2d06f7d02c7b91c06ed215d","title":"JetMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor-pro\/","\/elementor\/","\/jet-blog\/assets\/js\/lib\/slick\/slick.min.js","\/jet-elements\/","\/jet-menu\/","elementorFrontendConfig","ElementorProFrontendConfig","hasJetBlogPlaylist","JetEngineSettings","jetMenuPublicSettings","\/jet-reviews\/assets\/js\/lib\/vue.min.js"],"is_default":0,"condition":"jet-menu\/jet-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"580cfed7-f034-4e39-bc7a-cdd01923ce87":{"id":"plugin:51714cfdb43f231a1c93e7cffb1007ab","title":"JetPopup","type":"plugin","icon":"","exclusions":["\/jet-popup\/assets\/js\/lib\/anime-js\/anime.min.js","\/jet-popup\/assets\/js\/jet-popup-frontend.js","\/jet-woo-builder\/","var jetPopupData"],"is_default":0,"condition":"jet-popup\/jet-popup.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d9cd2730-12e2-42d7-a082-6f0efcd466cc":{"id":"plugin:df3bc4b6a8a9f28a5ba24cb7496bbc72","title":"JetProductGallery","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-woo-product-gallery\/assets\/lib\/swiper\/swiper.min.js","\/jet-woo-product-gallery\/assets\/js\/jet-woo-product-gallery.min.js"],"is_default":0,"condition":"jet-woo-product-gallery\/jet-woo-product-gallery.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"544aa37b-4d52-4182-99e8-abe23585da14":{"id":"plugin:5921fc95965ac7fccb7296957bd9abff","title":"JetReviews","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jet-reviews\/assets\/js\/jet-reviews-frontend.js","\/jet-reviews\/assets\/js\/lib\/vue.min.js","jetReviewsWidget"],"is_default":0,"condition":"jet-reviews\/jet-reviews.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"fe3c4915-6f8b-49b7-aa9c-c97b264d9f12":{"id":"plugin:a346b60514ef52afeffc6e2ef2793da3","title":"JetSticky","type":"plugin","icon":"","exclusions":["\/jetsticky-for-elementor\/"],"is_default":0,"condition":"jetsticky-for-elementor\/jetsticky-for-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b7f89562-230c-4f63-8360-7aad6df31e02":{"id":"plugin:829272546b040d5aaeeeaf976b6cd4ec","title":"JetTricks","type":"plugin","icon":"","exclusions":["\/jet-tricks\/"],"is_default":0,"condition":"jet-tricks\/jet-tricks.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"90451e2a-553a-4496-9fa4-cffedbe69d43":{"id":"plugin:f44f3dbd09149f57db370e4132b057db","title":"JetWoo Widgets For Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/jetwoo-widgets-for-elementor\/assets\/js\/jet-woo-widgets.js","\/jet-woo-builder\/assets\/js\/jet-woo-builder.min.js","\/jet-woo-builder\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js"],"is_default":0,"condition":"jet-woo-builder\/jet-woo-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"944718c2-48c6-4f53-aaa2-460d07e033cc":{"id":"plugin:ed318a971f8a047bed5b02ad546a9c18","title":"JetWooBuilder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js","\/elementor-pro\/","\/elementor\/","elementorFrontendConfig","ElementorProFrontendConfig","JetEngineSettings","\/jet-woo-builder\/","\/jet-woo-builder-custom-quantity-selectors-main\/assets\/js\/main.js"],"is_default":0,"condition":"jet-woo-builder\/jet-woo-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f5b62f59-1dae-4cdf-ac3f-f5e846fc9918":{"id":"plugin:9562e253cd4ac2b1e1f70e32cb4e32dc","title":"Layer Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.utils.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.kreaturamedia.jquery.js","\/LayerSlider\/assets\/static\/layerslider\/js\/layerslider.transitions.js","initLayerSlider"],"is_default":0,"condition":"LayerSlider\/layerslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e2be718d-83a2-4fa0-bc98-f0df52be3dc1":{"id":"plugin:1425e2735306796fe1539d9184a77e10","title":"LoftLoader Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","loftloader.min.js"],"is_default":0,"condition":"loftloader-pro\/loftloader-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cfa18552-656e-453c-9e14-c07522dc6598":{"id":"plugin:0bf67b8ba84771e1a367fe24590ef09c","title":"MailUp for WordPress","type":"plugin","icon":"","exclusions":["\/mailup-email-and-newsletter-subscription-form\/public\/js\/mailup-public.js","mailup-js-extra"],"is_default":0,"condition":"mailup-email-and-newsletter-subscription-form\/mailup.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c5330c66-ba7b-45b1-87e4-ce590ab005dd":{"id":"plugin:10d0de28911c5f66463b9c8783f8148a","title":"Maintenance","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/maintenance\/"],"is_default":0,"condition":"maintenance\/maintenance.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"267aef71-afa0-4848-b6f8-3e1ca15c3a23":{"id":"plugin:9460789bdfe77425c895f130991a4cb4","title":"Maps Marker Pro","type":"plugin","icon":"","exclusions":["\/maps-marker-pro\/js\/mapsmarkerpro.js","var mapsMarkerPro"],"is_default":0,"condition":"maps-marker-pro\/maps-marker-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b5a88b63-e906-49b3-8134-420139915ea6":{"title":"Master Popups","condition":"master-popups\/master-popups.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/master-popups\/assets\/public\/js\/master-popups-libs.min.js"],"icon_url":"","type":"plugin","id":"plugin:8fd7bd2c8b0a33e62798573abd12be63","is_default":0,"created_at":1681305305},"4be41549-bf4d-4c49-8346-0f8a3b88fdba":{"id":"plugin:de888634cc4bd51576eed319d5a528fd","title":"Master Slider","type":"plugin","icon":"","exclusions":["masterslider"],"is_default":0,"condition":"master-slider\/master-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"087bee18-7cd1-4c10-8acc-19e1b7c4f4cd":{"id":"plugin:b71309a89bf3c8b558b6fca5d6531919","title":"Max Mega Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/hoverIntent.min.js","\/megamenu\/js\/maxmegamenu.js","var megamenu"],"is_default":0,"condition":"megamenu\/megamenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cf22f0b9-01f4-409e-8a93-ad6743095abd":{"id":"plugin:94a7bae84ef2816494be4af66c577bfc","title":"Meta Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ml-slider\/","var metaslider"],"is_default":0,"condition":"ml-slider\/ml-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bb2cbc0d-20da-415e-8218-c17f1db53579":{"title":"Monarch","condition":"monarch\/monarch.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","dt-place-monarch-icons"],"icon_url":"","type":"plugin","id":"plugin:b7335d6d6d5c5134ea10ac2d9b04226c","is_default":0,"created_at":1677853476},"a98d6a80-4610-4ede-bd33-c3e15bed0a95":{"id":"plugin:4f8651262425ef6d7c223c68a2ec2063","title":"Monster Insights","type":"plugin","icon":"","exclusions":["__gtagTracker","monsterinsights_frontend","\/google-analytics-for-wordpress\/assets\/js\/frontend-gtag.min.js"],"is_default":0,"condition":"google-analytics-for-wordpress\/googleanalytics.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"26e1a36e-7a03-449e-8ecc-e42c41ca291c":{"id":"plugin:f8fc66b302dec2327bdec0434a3b275b","title":"Motion.page","type":"plugin","icon":"","exclusions":["\/motionpage\/core\/includes\/assets\/js\/(.*)","\/motionpage\/core\/includes\/assets\/js\/gsap\/(.*)","\/motionpage\/assets\/js\/(.*)","\/motionpage\/assets\/js\/gsap\/(.*)"],"is_default":0,"condition":"motionpage\/motionpage.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"459fd663-7f80-45fd-8308-d3484981e161":{"title":"Ninja Forms","condition":"ninja-forms\/ninja-forms.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js","\/ninja-forms\/assets\/js\/min\/front-end-deps.js","\/ninja-forms\/assets\/js\/min\/front-end.js","nf-"],"icon_url":"","type":"plugin","id":"plugin:1d3ae9c1a96d5062616968b81eef319d","is_default":0,"created_at":1681377675},"c97440dd-7592-40e7-8c98-dac20d39808f":{"id":"plugin:723a588dcd49285ea9f7404e2379b47f","title":"Ninja Tables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ninja-tables(.*)\/assets\/","\/ninja-tables(.*)\/public\/","\/wp-includes\/js\/dist\/vendor\/moment.min.js","ninja_table_instance_","ninja_filter_","ninja_table_ready_init_table_id"],"is_default":0,"condition":"ninja-tables\/ninja-tables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"ebc01f06-8c35-47fa-9c63-8959c5cbd915":{"id":"plugin:f41a52ab1dd50a81cd3a5e341af0007c","title":"NotificationX","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/notificationx\/assets\/public\/js\/(.*).js","notificationXArr"],"is_default":0,"condition":"notificationx\/notificationx.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3aaf4a1b-591a-48b7-8d60-e6d65c0f94c9":{"id":"plugin:be8fc72a8b8e8eb5958be13737cff47c","title":"Ocean Elementor Widgets","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ocean-elementor-widgets\/"],"is_default":0,"condition":"ocean-elementor-widgets\/ocean-elementor-widgets.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"f053a7d3-62b0-4312-b0ca-6ff63380eb0b":{"id":"plugin:1a14afe852fefe7b22ccad3893672a29","title":"One Click Accessibility","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pojo-accessibility\/assets\/js\/app.min.js"],"is_default":0,"condition":"pojo-accessibility\/pojo-accessibility.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"61e11800-48a9-4354-8a4c-ac9a2b4b033a":{"id":"plugin:b9ed0fe6f2cdbd305691a6b857f4b3dc","title":"OoohBoi Steroids for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/ooohboi-steroids-for-elementor\/"],"is_default":0,"condition":"ooohboi-steroids-for-elementor\/ooohboi-steroids.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"560b78a2-f051-490b-9dc6-a602dece0d81":{"id":"plugin:f1ff18a3e04c4e0995fca9cabffe57a7","title":"Optimole","type":"plugin","icon":"","exclusions":["optimoleData"],"is_default":0,"condition":"optimole-wp\/optimole-wp.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b0fda458-4bf2-41e9-a159-60d4bb6102a6":{"id":"plugin:48ec18bd3f59772d98f85dddab75e305","title":"OSM - OpenStreetMap","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/osm\/js\/OL\/","\/osm\/js\/osm-v3-plugin-lib.js","vectorM"],"is_default":0,"condition":"osm\/osm.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3743ed67-e0d1-4243-bb1f-ee48a445dd10":{"id":"plugin:9eacf0b76484af0259cd788f4923f20c","title":"OxyExtras","type":"plugin","icon":"","exclusions":["vime","vime.esm.js"],"is_default":0,"condition":"oxyextras\/plugin.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"52a21e27-af5b-4476-8d6d-54c323fd1443":{"id":"plugin:e852555c4b4789d78a96d76f503b3262","title":"Oxygen Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/component-framework\/vendor\/aos\/aos.js","AOS.init","oxygen_init_pro_menu","oxy-pro-menu-show-dropdown","oxy-shape-divider","oxygenVSBInitToggleJs"],"is_default":0,"condition":"oxygen\/functions.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ebd282b9-e175-4b83-90a2-fe12389ccd11":{"id":"plugin:6f9419e58ec86c94e7698aaaaf9dc715","title":"PageLoader by Bonfire","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pageloader-by-bonfire\/pageloader.js","bonfire-pageloader-overlay"],"is_default":0,"condition":"pageloader-by-bonfire\/pageloader-by-bonfire.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"0baf6353-aa70-41a9-a3bc-d89870a5839b":{"id":"plugin:3a4c4518eb0f60108ab4934fab27d335","title":"PDF Embedder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pdf-embedder\/js\/(.*).js"],"is_default":0,"condition":"pdf-embedder\/pdf_embedder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"cba51ec1-87cc-44eb-b12b-d652e3446507":{"id":"plugin:4f90aca5957cccbf623e3bbc31afa204","title":"Perfect Brands for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/perfect-woocommerce-brands\/assets\/lib\/slick\/slick.min.js","\/perfect-woocommerce-brands\/assets\/js\/functions-frontend.min.js"],"is_default":0,"condition":"perfect-woocommerce-brands\/perfect-woocommerce-brands.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"808e7a4e-025c-4fae-bf82-de3716e5eb0d":{"id":"plugin:84fe214646388d7c021dda25003ac165","title":"Photonic","type":"plugin","icon":"","exclusions":["\/photonic\/include\/js\/front-end\/module\/photonic-baguettebox.min.js"],"is_default":0,"condition":"photonic\/photonic.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"936aff7d-a8ac-4473-a7b5-4b1611b6c557":{"id":"plugin:6838be282f853f71be282783cb1c162b","title":"Pixel Caffein","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/pixel-caffeine\/build\/frontend.js","aepc_pixel"],"is_default":0,"condition":"pixel-caffeine\/pixel-caffeine.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ab3a4ef5-2732-4b46-a7c3-17b4e9405cd1":{"id":"plugin:afe0eb7c64d4556a7111c56dd8c4d307","title":"Pixel Manager for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/woocommerce-pixel-manager-pro\/js\/public\/","wpm"],"is_default":0,"condition":"woocommerce-pixel-manager-pro\/woocommerce-pixel-manager.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"2774f964-50b2-425e-8a30-0a02f421b7e4":{"id":"plugin:38d4b2986868f543639cd1ebc3e510aa","title":"Popup Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/popup-builder\/public\/js\/(.*).js","\/popupbuilder-exit-intent\/public\/javascript\/ExitIntent.js","var sgpbPublicUrl","SGPB_POPUP_PARAMS"],"is_default":0,"condition":"popup-builder\/popup-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"82dbb1e5-31f9-43d7-b522-52819aa49ba5":{"id":"plugin:786717922362642f34a7ff58e919bd95","title":"Popup Maker","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/pum\/pum-site-scripts.js","pum","\/plugins\/popup-maker\/assets\/js\/site.min.js"],"is_default":0,"condition":"popup-maker\/popup-maker.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"48e08305-1f1c-4ef4-9f13-24af1b155abc":{"id":"plugin:17831cbb64e469c7f66224c8c63d0a58","title":"PowerPack Addons for Elementor","type":"plugin","icon":"","exclusions":["\/powerpack-lite-for-elementor\/assets\/js\/min\/frontend.min.js"],"is_default":0,"condition":"powerpack-lite-for-elementor\/powerpack-lite-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e037ae2f-e36b-4f1a-ada8-eb8fde6746f2":{"id":"plugin:80e1283ea1afead3ca904fad792643c5","title":"Preloader Plus","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/preloader-plus\/(.*)"],"is_default":0,"condition":"preloader-plus\/preloader-plus.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"90fed478-e89a-455c-8371-836bee58fb81":{"title":"Premium Addons for Elementor","condition":"premium-addons-for-elementor\/premium-addons-for-elementor.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/premium-addons.min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/isotope.min.js","\/premium-addons-elementor\/pa-frontend-(.*).min.js","\/premium-addons-for-elementor\/assets\/frontend\/min-js\/slick.min.js","\/premium-addons-pro\/assets\/frontend\/min-js\/tooltipster.min.js","window.scopes_array","lottie.min.js"],"icon_url":"","type":"plugin","id":"plugin:debbfbbcbdf9ffb465bbc40008d99f02","is_default":0,"created_at":1684175621},"7e43c261-77be-48fc-b25a-8953a654ae85":{"id":"plugin:100a0382fcf3d1b6b22da928bce46ea8","title":"Presto Player","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/dist\/vendor\/regenerator-runtime.min.js","\/presto-player\/dist\/components\/web-components\/web-components.esm.js","\/presto-player\/src\/player\/player-static.js","var player","\/wp-includes\/js\/dist\/api-fetch.min.js","\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/dist\/i18n.min.js"],"is_default":0,"condition":"presto-player\/presto-player.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"3d6f509f-d040-4279-9a2f-a4e6eae1e9df":{"id":"plugin:c0fce700121492b566517e68301db382","title":"Price Based on Country for WooCommerce Pro","type":"plugin","icon":"","exclusions":["\/woocommerce-product-price-based-on-countries\/assets\/js\/ajax-geolocation.min.js","\/woocommerce-price-based-country-pro-addon\/assets\/js\/currency-switcher.min.js","add-to-cart.min.js","cart-fragments.min.js"],"is_default":0,"condition":"woocommerce-price-based-country-pro-addon\/woocommerce-price-based-country-pro-addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b970bc8a-bcbe-4d08-8ac0-a6853ab3f036":{"id":"plugin:f1ecfe258440b371124999ca3bfbfff3","title":"Prime Slider","type":"plugin","icon":"","exclusions":["\/plugins\/bdthemes-prime-slider-lite\/assets\/js\/bdt-uikit.min.js"],"is_default":0,"condition":"bdthemes-prime-slider-lite\/bdthemes-prime-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e5458963-f167-4b68-88e4-77dd39af2842":{"id":"plugin:29ea8f4dd72f5a5c5927917fb0665a05","title":"PRO Elements","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/pro-elements\/"],"is_default":0,"condition":"pro-elements\/pro-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b119ad72-f498-4576-bb71-9e6d8c37b68f":{"title":"Product Filter by WBW (for WooCommerce)","condition":"woo-product-filter\/woo-product-filter.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-content\/plugins\/woo-product-filter\/modules\/woofilters\/js\/frontend.woofilters.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js"],"icon_url":"","type":"plugin","id":"plugin:e57ad91e0d94fab011353af544873743","is_default":0,"created_at":1685686062},"7b779aca-e497-4da3-8e51-fa12837d15ab":{"title":"Product Filters for WooCommerce","condition":"woocommerce-product-filters\/woocommerce-product-filters.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce-product-filters\/assets\/build\/js\/plugin.js"],"icon_url":"","type":"plugin","id":"plugin:719469f1c977f7109d3d6ee21ecd5a16","is_default":0,"created_at":1684784088},"2b2a51f2-bd47-4591-92d8-4a690bce5d99":{"id":"plugin:a898898b2b0ea2cd82e20a6d3a3aa47b","title":"Product Gallery Slider for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/twist\/assets\/js\/slick.min.js","wpgs-public-js-after"],"is_default":0,"condition":"twist\/twist.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"34d225a4-688c-476b-846b-420774160d6b":{"id":"plugin:e0b123d324c6fc85b8682660c34f8829","title":"Rank Math SEO","type":"plugin","icon":"","exclusions":["local_ga_js"],"is_default":0,"condition":"seo-by-rank-math\/rank-math.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"02305ca0-2c2a-4eef-a802-b8a942771ecc":{"title":"Retainful","condition":"retainful-next-order-coupon-for-woocommerce\/retainful-next-order-coupon-for-woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/atc-popup.min.js","\/retainful-next-order-coupon-for-woocommerce\/src\/premium\/assets\/js\/exit-intent-popup.js","retainful.com","rnoc-add-to-cart-js-before","rnoc_redirect_coupon_popup"],"icon_url":"","type":"plugin","id":"plugin:f9fdee19ba6aed961d96d86e1521a761","is_default":0,"created_at":1679331508},"b4055250-5813-400f-b663-d390fee989e4":{"id":"plugin:d6a4d07d1b4022d886df52322dcd8a6f","title":"Revolution Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/revslider\/public\/assets\/js\/","\/revslider-(.*)-addon\/","setREVStartSize","rev_slider_","revslider_","window.RS_MODULES"],"is_default":0,"condition":"revslider\/revslider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"1b19ec89-171a-4f85-8c4b-b1bcfc6b1433":{"id":"plugin:5e3f85d8c82cc184b945415d1a862601","title":"Sassy Social Share","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/sassy-social-share\/public\/js\/sassy-social-share-public.js","heateorSssLoadEvent"],"is_default":0,"condition":"sassy-social-share\/sassy-social-share.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f5899925-2ab7-43b6-abc4-51b76d664ca6":{"title":"Scrollsequence","condition":"scrollsequence-pro\/scrollsequence-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/scrollsequence-pro\/public\/js\/gsap__premium_only.js","\/scrollsequence-pro\/public\/js\/gsap-scrolltrigger__premium_only.js","\/scrollsequence-pro\/public\/js\/ssq-lib__premium_only.js","scrollsequence-input-script"],"icon_url":"","type":"plugin","id":"plugin:3df51830b6b80668fc342c8dcea495cf","is_default":0,"created_at":1678111131},"043827fc-3df8-45d6-9cd2-14fbe962987a":{"id":"plugin:9d60b5d2de4d828b78c7b088024377d6","title":"ShiftNav Pro - Responsive Mobile Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-pro\/assets\/js\/shiftnav(.*).js"],"is_default":0,"condition":"shiftnav-pro\/shiftnav.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bcbaf240-e76f-4620-b7d5-4852c46d4be7":{"id":"plugin:56279bd768c8f27ad1972b6774738bcf","title":"ShiftNav \u2013 Responsive Mobile Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/shiftnav-responsive-mobile-menu\/"],"is_default":0,"condition":"shiftnav-responsive-mobile-menu\/shiftnav-responsive-mobile-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"bbe0543b-b5af-467b-a90d-e2975d892d8d":{"id":"plugin:1bc7ac87d8ab2301a1b904919dc7a798","title":"Short Pixel Adaptive Image","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/shortpixel-adaptive-images\/assets\/js\/ai(.*).min.js","spai_settings"],"is_default":0,"condition":"shortpixel-adaptive-images\/short-pixel-ai.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"543ab43a-6bd3-4948-a09e-3b95e7c9209d":{"id":"plugin:ce4dea8ddc3caa8d00e95cec3202d32a","title":"Showcase IDX","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","SIDX","search.showcaseidx.com\/js\/app-(.*).js","cdn.shortpixel.ai"],"is_default":0,"condition":"showcase-idx\/showcaseidx.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"a16bcab7-1169-46b9-a425-b091478d8312":{"id":"plugin:3ea7d9f75ad03620b0bce2517bd5b8d1","title":"Side Cart WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/plugins\/woocommerce\/assets\/js\/frontend\/add-to-cart.min.js","\/plugins\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js","\/plugins\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"is_default":0,"condition":"side-cart-woocommerce\/xoo-wsc-main.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"521f748e-cf09-4019-bd28-b52daef5f16f":{"id":"plugin:7843983bf90dbae16c6e889382c71b23","title":"Simple Banner","type":"plugin","icon":"","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/simple-banner\/","simpleBannerScriptParams"],"is_default":0,"condition":"simple-banner\/simple-banner.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"76026e82-d9cf-482c-b480-55c57693a184":{"id":"plugin:b6825f971d35a5515d095564a2e40936","title":"Site Kit by Google","type":"plugin","icon":"","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('","\/gtag\/js","gtag\\(","\/gtm.js"],"is_default":0,"condition":"google-site-kit\/google-site-kit.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"79c458d7-f7f7-4072-919d-ad337bde6ae3":{"id":"plugin:5ce5dfecdc9d3292c69a1413bbd17d3c","title":"Slick Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/slick-menu\/"],"is_default":0,"condition":"slick-menu\/slick-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"dd0ea584-0c99-4c30-b46d-da35b94c9f0a":{"id":"plugin:ffb5f8cc0ea17886dbd05f601ca3eec0","title":"Slider by Soliloquy","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","soliloquy-min.js","soliloquy_slider"],"is_default":0,"condition":"soliloquy-lite\/soliloquy-lite.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"ecb2fffc-d289-4f68-ae94-71131f17deee":{"id":"plugin:2f373822dceb191c31c8ad2183d51869","title":"Smart Slider 3","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/smart-slider-3\/(.*).js","_N2"],"is_default":0,"condition":"smart-slider-3\/smart-slider-3.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"284ede43-bf80-419e-8414-46c26cb746f0":{"id":"plugin:720ec9fbbd8a52ce525959a68a5310b3","title":"Smart Slider 3 Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/SmartSlider3\/(.*).js","_N2"],"is_default":0,"condition":"nextend-smart-slider3-pro\/nextend-smart-slider3-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"c3334c29-4160-42df-a1ce-f8aeeaee8668":{"title":"Super Socializer","condition":"super-socializer\/super_socializer.php","exclusions":["theChamp","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:660defe26748470c3a47366cd4012579","is_default":0,"created_at":1677853633},"f18b4242-fe3f-4e2b-bfc9-ac2fb3939a90":{"title":"Superfly Menu","condition":"superfly-menu\/main.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate((.*?)(.min?)?).js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/md5.js","\/superfly-menu\/includes\/vendor\/looks_awesome\/icon_manager\/js\/util.js","\/superfly-menu\/js\/public.min.js","window.SFM_is_mobile","var SFM_skew_disabled","var SFM_template"],"icon_url":"","type":"plugin","id":"plugin:ccb15175093bc6c437b78797f0698a7b","is_default":0,"created_at":1684301673},"858d2d7f-bdac-4d27-ba26-baa9ace96ba4":{"id":"plugin:7d93008296bb5c7c43d4cba185ed2632","title":"Tabby Responsive Tabs","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/tabby-responsive-tabs\/js\/tabby.js","RESPONSIVEUI"],"is_default":0,"condition":"tabby-responsive-tabs\/tabby-responsive-tabs.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e44a5c93-bb77-4624-a121-d846905137ea":{"id":"plugin:2f563bbb7e92363ec3fb2989a1c7dffe","title":"The Plus Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/theplus-addons\/(.*)"],"is_default":0,"condition":"the-plus-addons-for-elementor-page-builder\/theplus_elementor_addon.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"666b45e8-749c-4140-bd17-e1cd589e03ee":{"id":"plugin:b9c418b47c986935a1151ab9b42f8971","title":"ThemeREX Addons","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/trx_addons\/js\/__scripts-full.js","\/trx_addons\/components\/cpt\/layouts\/shortcodes\/menu\/superfish.min.js"],"is_default":0,"condition":"trx_addons\/trx_addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"a750cada-eb58-4df4-9966-21c8a69332ba":{"id":"plugin:75af9efe22c5cc776636266feb55adf1","title":"Thrive Architect","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-visual-editor\/thrive-visual-editor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"13714cde-680e-4ca4-8607-c35952d6a5f2":{"title":"Thrive Comments","condition":"thrive-comments\/thrive-comments.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"icon_url":"","type":"plugin","id":"plugin:6a72d06ca2f6a888b0d9d5ea93af2edc","is_default":0,"created_at":1677852974},"aa7ca898-499f-4f04-b419-3de199996969":{"id":"plugin:b84d82c02cade64ade00712b9c5652aa","title":"Thrive Leads","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-leads\/","window.TL_Const","var ml=","\/thrive-comments\/assets\/js\/","ThriveComments","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/backbone.min.js"],"is_default":0,"condition":"thrive-leads\/thrive-leads.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"9eee297a-8241-4ef2-af97-46074bd0898c":{"id":"plugin:5bb61b0559b0a3fd578315b553451327","title":"Thrive Quiz Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"is_default":0,"condition":"thrive-quiz-builder\/thrive-quiz-builder.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c2f3ec2a-5b09-4845-aa95-84841783fbfc":{"id":"plugin:a7f3e5206abff19ca7cf142260181738","title":"Thrive Ultimatum","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/thrive-ultimatum\/","var TVE_Ult_"],"is_default":0,"condition":"thrive-ultimatum\/thrive-ultimatum.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"d48b8d2f-e071-4a30-840a-306154a115a0":{"id":"plugin:f57be2014b6a489d053f8367fa6c0f9f","title":"Tidio Chat","type":"plugin","icon":"","exclusions":["document.tidioChatCode"],"is_default":0,"condition":"tidio-live-chat\/tidio-elements.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"cb6d33ed-7eb4-4ff9-9ad0-7fc54fbecf6f":{"id":"plugin:c9e0485ec256d4a6a8d92a98c18d76fc","title":"Toolset Blocks","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","toolsetCommonEs.fontToHead","toolsetCommonEs.styleToHead","\/toolset-blocks\/vendor\/toolset\/blocks\/public\/js\/frontend.js","\/toolset-blocks\/vendor\/toolset\/common-es\/public\/toolset-common-es-frontend.js","\/toolset-blocks\/public\/js\/views-frontend.js","\/wp-includes\/js\/underscore.min.js"],"is_default":0,"condition":"toolset-blocks\/wp-views.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"4bac6350-0925-49fb-904a-372f22fd6baf":{"id":"plugin:71beda322b37f7fc7d456822493cb972","title":"Top Bar Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/plugins\/topbar-pro\/js\/tpbr_front.min.js","\/plugins\/topbar-pro\/js\/jquery.cookie.js"],"is_default":0,"condition":"topbar-pro\/topbar_pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"033486e7-0ddc-4915-a848-31504d00448e":{"title":"Twenty20 Image Before-After","condition":"twenty20\/ttwenty.php","exclusions":["\/twenty20\/assets\/js\/(.*).js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","twentytwenty-container"],"icon_url":"","type":"plugin","id":"plugin:23441bba9d3602bc932d697c7cb8aa1f","is_default":0,"created_at":1677858089},"7675a34d-006e-4672-99d5-a81e1b8e47f9":{"id":"plugin:3d59cc34167a7f8123e66b627148e0b7","title":"UberMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ubermenu\/assets\/js\/ubermenu.min.js"],"is_default":0,"condition":"ubermenu\/ubermenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"8233178a-e7b3-43ce-b193-bd0d9c960933":{"id":"plugin:86424c46157c1c7e2e1571055813beee","title":"Ultimate Addons for Elementor","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/ultimate-elementor\/assets\/lib\/slick\/slick.min.js","\/ultimate-elementor\/assets\/min-js\/uael-frontend.min.js","\/ultimate-elementor\/assets\/lib\/isotope\/isotope.min.js","\/ultimate-elementor\/assets\/lib\/jquery-element-resize\/jquery_resize.min.js","\/ultimate-elementor\/assets\/lib\/fancybox\/jquery_fancybox.min.js","\/ultimate-elementor\/assets\/lib\/justifiedgallery\/justifiedgallery.min.js","\/elementor-pro\/assets\/js\/frontend.min.js","\/wp-includes\/js\/imagesloaded.min.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js","\/elementor\/assets\/lib\/swiper\/swiper.min.js","\/nasa-core\/assets\/js\/min\/jquery.slick.min.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig"],"is_default":0,"condition":"ultimate-elementor\/ultimate-elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8bddf484-6c78-4147-a4e6-d3039904e5f6":{"title":"Ultimate Addons for Elementor - Mobile Menu","condition":"ultimate-elementor\/ultimate-elementor.php","exclusions":["\/jquery-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/jquery-migrate(.*)(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/ultimate-elementor\/assets\/js\/uael-nav-menu.js"],"icon_url":"","type":"plugin","id":"plugin:70cfade3a7adbb54196f6acccc5a176f","is_default":0,"created_at":1685969850},"028504f7-b1cd-4318-8a6d-ce186197e89d":{"id":"plugin:0f0a91f0c454021a5ff9fc25c3ed419f","title":"Ultimate Addons for WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/Ultimate_VC_Addons\/assets\/"],"is_default":0,"condition":"Ultimate_VC_Addons\/Ultimate_VC_Addons.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"5754af3d-a6af-49eb-b731-bdd82f26dc4e":{"id":"plugin:34db8636812bad84c8aea037c2ddc8c2","title":"Ultimate Responsive Image Slider","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","sliderPro"],"is_default":0,"condition":"ultimate-responsive-image-slider\/ultimate-responsive-image-slider.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"78ae882d-ae31-4179-b677-8893814938c7":{"title":"Unlimited Elements for Elementor Premium - Slider","condition":"unlimited-elements-for-elementor-premium\/unlimited-elements-pro.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/elementor\/","\/elementor-pro\/","ElementorProFrontendConfig","elementorFrontendConfig","\/unlimited-elements-for-elementor-premium\/","uc_"],"icon_url":"","type":"plugin","id":"plugin:17260bc347b8c29bee0010e9ec164184","is_default":0,"created_at":1683270377},"051cbfbb-7ad2-4f06-a493-3cf423a80904":{"id":"plugin:6717ef5673a956bc08ca4a5117065d53","title":"Variation Swatches for WooCommerce","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/jquery\/ui\/","\/woo-variation-swatches\/","\/woo-variation-swatches-pro\/","underscore.min.js"],"is_default":0,"condition":"woo-variation-swatches\/woo-variation-swatches.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"6879caba-7224-4eca-bcb2-370785b495ea":{"id":"plugin:57597b7683e01892932083413f085134","title":"Web Accessibility By accessiBe","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/accessibe\/","acsbJS"],"is_default":0,"condition":"accessibe\/accessiebe.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"bd6732fe-4c2b-40a1-9035-8464057e2da5":{"title":"WooCommerce - Cart Fragments","condition":"woocommerce\/woocommerce.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/woocommerce\/assets\/js\/frontend\/cart-fragments.min.js","\/woocommerce\/assets\/js\/js-cookie\/js.cookie.min.js"],"icon_url":"","type":"plugin","id":"plugin:201de694c6fc28c8d580a3b2ca484218","is_default":0,"created_at":1680937567},"d044900d-07e1-4533-9516-33106efcb259":{"title":"WooCommerce - Product description","condition":"woocommerce\/woocommerce.php","exclusions":["\/plugins\/woocommerce\/assets\/js\/frontend\/single-product.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:a82644b4c9417ea3a240939a73344700","is_default":0,"created_at":1679309756},"bff953b1-2213-4666-8112-76a84a3cc207":{"title":"WooCommerce - Product Gallery","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/zoom\/jquery.zoom(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/photoswipe\/","\/woocommerce\/?(.*)\/assets\/js\/flexslider\/jquery.flexslider(.min)?.js","\/woocommerce\/?(.*)\/assets\/js\/frontend\/single-product(.min)?.js","wc_single_product_params"],"icon_url":"","type":"plugin","id":"plugin:7665868ff97c265628f376523a4f9ecc","is_default":0,"created_at":1686579689},"016e6ddf-c6e7-49ec-bd3f-2585d9e45895":{"title":"WooCommerce - Select2 library","condition":"woocommerce\/woocommerce.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/woocommerce\/assets\/js\/select2\/select2(.*).js"],"icon_url":"","type":"plugin","id":"plugin:4bca670bd5d55dd24b17fb0193b0891e","is_default":0,"created_at":1681459540},"b9b2c6d7-944f-4ae3-ae04-c9e2204b9dab":{"id":"plugin:9165c768e978d6ad3f696db8c78ccbb2","title":"WooCommerce Attribute Swatches","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/iconic-woo-attribute-swatches-premium\/assets\/frontend\/js\/main.min.js","\/iconic-woo-attribute-swatches-premium\/assets\/vendor\/flickity\/flickity.pkgd.min.js","iconic_was_vars"],"is_default":0,"condition":"iconic-woo-attribute-swatches-premium\/iconic-woo-attribute-swatches.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4506c5e9-7349-44c9-9967-34370c83facb":{"title":"WooCommerce Bookings","condition":"woocommerce-bookings\/woocommerce-bookings.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","\/woocommerce-bookings\/dist\/frontend.js","\/wp-includes\/js\/dist\/date.min.js","\/wp-includes\/js\/dist\/vendor\/moment.min.js","\/wp-includes\/js\/jquery\/ui\/datepicker.min.js","\/wp-includes\/js\/underscore.min.js","\/woocommerce\/assets\/js\/jquery-blockui\/jquery.blockUI.min.js"],"icon_url":"","type":"plugin","id":"plugin:14dec6d289b9977fa3a74116feecebcc","is_default":0,"created_at":1677856703},"fec9cd04-c358-45da-a1a8-1668b964016b":{"id":"plugin:456f3b849ba3b6647246aca9d7cdaed5","title":"WooCommerce Product Reviews Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","wc_product_reviews_pro","\/woocommerce-product-reviews-pro\/assets\/js\/frontend\/wc-product-reviews-pro-frontend.min.js","\/woocommerce\/assets\/js\/jquery-tiptip\/jquery.tipTip.min.js"],"is_default":0,"condition":"woocommerce-product-reviews-pro\/woocommerce-product-reviews-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"551a9399-627f-4978-9bae-5cc8e0aefc82":{"id":"plugin:c8577e74eef3b082fb6403760d53f68c","title":"WooCommerce TM Extra Product Options","type":"plugin","icon":"","exclusions":["\/woocommerce-tm-extra-product-options\/assets\/js\/epo.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-includes\/js\/jquery\/ui\/core.min.js","\/wp-includes\/js\/jquery\/ui\/mouse.min.js","\/wp-includes\/js\/jquery\/ui\/slider.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-util.min.js","\/wp-includes\/js\/dist\/hooks.js","\/wp-includes\/js\/dist\/i18n.js"],"is_default":0,"condition":"woocommerce-tm-extra-product-options\/tm-woo-extra-product-options.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"3cac4650-6a52-448e-8e48-e99a772a59a2":{"id":"plugin:c6e6cab8c80fa3fe57d609f72d2d5c56","title":"WooLentor","type":"plugin","icon":"","exclusions":["\/woolementor\/assets\/third-party\/slick\/slick.min.js","\/woolentor-addons","woolentor_addons"],"is_default":0,"condition":"woolentor-addons\/woolentor_addons_elementor.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"67aeb4cb-1a00-4d10-a00c-34888b4c0dba":{"title":"WooThumbs for WooCommerce","condition":"woothumbs-premium\/woothumbs-premium.php","exclusions":["\/wp-includes\/js\/dist\/hooks.min.js","\/wp-includes\/js\/underscore.min.js","\/wp-includes\/js\/wp-embed.min.js","\/wp-includes\/js\/wp-util.min.js","\/woothumbs-premium\/(.*)"],"icon_url":"","type":"plugin","id":"plugin:b97b1d3f627769e1dd8305aa25af993c","is_default":0,"created_at":1679065404},"c7a14763-88d0-4344-a6af-e0a8dc5fa8d5":{"id":"plugin:31b9e812a025e5750a6ef0980ee7d2db","title":"WordPress Mega Menu \u2013 QuadMenu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/quadmenu","#private-menu","#public-menu"],"is_default":0,"condition":"quadmenu\/quadmenu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"f699fdbd-84a7-4f24-b729-3e4a4f83a4dd":{"id":"plugin:601f8fc7d10cad1c2ec2949c0d9b1651","title":"WP Armour","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/honeypot\/includes\/js\/wpa.js","\/wp-armour-extended\/includes\/js\/wpae.js","wpa_hidden_field","wpa_add_test"],"is_default":0,"condition":"wp-armour-extended\/wp-armour-extended.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"6a28aae5-ef91-43fc-8204-92e3a25642b4":{"id":"plugin:5728f3b9856dfe37a36ab15b0a637198","title":"WP Go Maps","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","maps.googleapis.com"],"is_default":0,"condition":"wp-google-maps\/wpGoogleMaps.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"c9b991d1-a653-404b-be85-e276b1814e7d":{"title":"WP Google Map Pro","condition":"wp-google-map-gold\/wp-google-map-gold.php","exclusions":["\/wp-includes\/js\/jquery\/jquery.min.js","\/wp-includes\/js\/jquery\/jquery-migrate.min.js","maps.google.com\/maps\/api\/js","\/wp-includes\/js\/masonry.min.js","\/wp-google-map-gold\/(.*)"],"icon_url":"","type":"plugin","id":"plugin:dc12a9b7b9c4c7ce3c532b6b377739f2","is_default":0,"created_at":1677858391},"1f8f9fbf-fbf0-4e3a-b77c-af0fa47e950d":{"id":"plugin:87f572f5f0ec143a8fceba77d0616197","title":"WP Google Maps Pro","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-google-maps(.*)","maps.googleapis.com","mgl_","wpgmza"],"is_default":0,"condition":"wp-google-maps-pro\/wp-google-maps-pro.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"41e4b98c-e63f-4800-a478-02592562322b":{"id":"plugin:3735ca768ede98b25795f4cb057ff4ed","title":"WP iCal Availability","type":"plugin","icon":"","exclusions":["\/wp-ical-availability\/js\/custom-select.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-ical-availability\/"],"is_default":0,"condition":"wp-ical-availability\/wp-ical-availability.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"2b06c5b8-dc32-4bb0-8504-3a9f1c3a1ec0":{"title":"WP MapIt","condition":"wp-mapit\/wp_mapit.php","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-mapit\/wp_mapit\/js\/leaflet.js","\/wp-mapit\/wp_mapit\/js\/wp_mapit_multipin.js"],"icon_url":"","type":"plugin","id":"plugin:ba8d1c7f294a3f5b593556eb3b0bc7d9","is_default":0,"created_at":1679331261},"2039eafd-1c11-4e21-a61b-30857f291ae3":{"id":"plugin:927b8bf7806f2d287559b86a0b455a59","title":"WP Responsive Menu","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wp-responsive-menu\/(.*)"],"is_default":0,"condition":"wp-responsive-menu\/wp-responsive-menu.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"e06be942-cccd-4b2d-a268-06dc78f0b820":{"title":"WP Search with Algolia","condition":"wp-search-with-algolia\/algolia.php","exclusions":["\/wp-search-with-algolia\/js\/algoliasearch\/dist\/algoliasearch-lite.umd.js","\/wp-search-with-algolia\/js\/autocomplete-noconflict.js","\/wp-search-with-algolia\/js\/autocomplete.js\/dist\/autocomplete.min.js","var algolia"],"icon_url":"","type":"plugin","id":"plugin:43267e659d599fbb6b42c719b49bb7a7","is_default":0,"created_at":1677857180},"4fc2a7ae-b9e6-410e-93cf-e6d1962add6a":{"id":"plugin:4fb90fc73fc2b5d1e37ea2dadfd3cef3","title":"WP Smart Preloader","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/wp-smart-preloader\/assets\/js\/wsp-main-script(.min)?.js"],"is_default":0,"condition":"wp-smart-preloader\/wp-preloader.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7ecf40ce-2bcd-412c-bb01-9e71fecf6be8":{"id":"plugin:d37bb5054a24471ca1675d9ab49d01b0","title":"WP Store Locator","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js ","\/jquery-migrate(.min)?.js","\/wp-store-locator\/","\/wp-includes\/js\/underscore.min.js","maps.google.com"],"is_default":0,"condition":"wp-store-locator\/wp-store-locator.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"7a1d19a2-3a48-40ab-8051-f642fc63ce2d":{"title":"WP Ultimate Post Grid","condition":"wp-ultimate-post-grid\/wp-ultimate-post-grid.php","exclusions":["\\\/jquery(-migrate)?-?([0-9.]+)?(.min|.slim|.slim.min)?.js(\\?(.*))?$","\/wp-ultimate-post-grid\/dist\/public.js","\/wp-ultimate-post-grid-premium\/dist\/public-premium.js","wpupg_grid_args"],"icon_url":"","type":"plugin","id":"plugin:e24341fef49bd64b89682d583218c108","is_default":0,"created_at":1686597940},"76c86163-ddf3-4113-b620-de9d5058f505":{"id":"plugin:517d7d24da9a7072ed389d0fb30374a0","title":"WPBakery Page Builder","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/js_composer\/assets\/js\/dist\/js_composer_front.min.js"],"is_default":0,"condition":"js_composer\/js_composer.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"4f5e5b98-c326-4b9f-9ada-3b257862132c":{"id":"plugin:1ec7138c950c355e7af60d49c81139fc","title":"wpDataTables","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/wpdatatables\/","highcharts"],"is_default":0,"condition":"wpdatatables\/wpdatatables.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"18be1b8c-0bc4-4a01-abc6-a127aff380c6":{"id":"plugin:c62ca58ea081c1271de8dadfa7daac69","title":"WPForms","type":"plugin","icon":"","exclusions":["\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra","wpformsRecaptchaLoad"],"is_default":0,"condition":"wpforms\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"8a3cacb6-81bd-456a-a1cc-a4025f8e5234":{"id":"plugin:0992ac952c0a05bb35e18b1d5744d346","title":"WPForms Lite","type":"plugin","icon":"","exclusions":["wpformsRecaptchaLoad","\/wpforms-offline-forms\/assets\/js\/wpforms-offline-forms.min.js","wpforms-offline-forms-js-extra"],"is_default":0,"condition":"wpforms-lite\/wpforms.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"98bbd410-5b01-4244-a8eb-715765180328":{"title":"XL WooCommerce Sales Triggers","condition":"xl-woocommerce-sales-triggers\/xl-woocommerce-sales-triggers.php","exclusions":["\/xl-woocommerce-sales-triggers\/assets\/js\/wcst_combined.min.js","\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js"],"icon_url":"","type":"plugin","id":"plugin:ba9e526ddb0157e69757530c6b18b714","is_default":0,"created_at":1677856813},"bf9f9620-dd0e-4e6f-9a45-4eb78a148f42":{"id":"plugin:58663fc781232169e865f6fe7cf1afaa","title":"YITH WooCommerce Ajax Product Filter","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-navigation\/assets\/js\/yith-wcan-shortcodes.min.js"],"is_default":0,"condition":"yith-woocommerce-ajax-navigation\/init.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:17.000000Z","icon_url":""},"b053279d-e07c-438c-bb3e-3a1f4f5d7c5e":{"id":"plugin:68b637fd247e40c8e135e4771d739b07","title":"YITH WooCommerce AJAX Product Filter Premium","type":"plugin","icon":"","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","\/yith-woocommerce-ajax-product-filter-premium\/assets\/js\/yith-wcan-shortcodes.min.js"],"is_default":0,"condition":"yith-woocommerce-ajax-product-filter-premium\/init.php","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"d94dbbf3-bcab-4e47-9fbb-6b3a7cf92787":{"title":"Yotpo Social Reviews for Woocommerce","condition":"yotpo-social-reviews-for-woocommerce\/wc_yotpo.php","exclusions":["\/yotpo-social-reviews-for-woocommerce\/assets\/js\/headerScript.js"],"icon_url":"","type":"plugin","id":"plugin:45ab742b3fccbd04d7bc973c8582be87","is_default":0,"created_at":1680686421}},"scripts":{"dd0c5a5b-ec56-49f9-9aa4-89e1e3a6a28a":{"title":"Amazon Ads","exclusions":["amazon-adsystem.com"],"icon_url":"","type":"script","id":"script:b82a5936d8ea0745016caeb71629ae5d","is_default":0,"created_at":1681390276},"980edf32-c64b-4370-bf23-c62b079e71c3":{"title":"Google AdSense","exclusions":["adsbygoogle"],"icon_url":"","type":"script","id":"script:0206e6040c8ff64b8d6ee5fef2ce1c90","is_default":0,"created_at":1681377840},"2499bb90-0753-4b2b-9bd4-1525f94c7437":{"title":"Google Analytics","exclusions":["google-analytics.com\/analytics.js","ga\\( '","ga\\('"],"icon_url":"","type":"script","id":"script:d86cf69a8b82547a94ca3f6a307cf9a6","is_default":0,"created_at":1681388311},"6f460036-3106-4b8c-9951-d32de9b1258f":{"title":"Google Maps","exclusions":["maps.googleapis.com","maps.google.com"],"icon_url":"","type":"script","id":"script:4d60ab2c6d11d753267484006c23e54c","is_default":0,"created_at":1681390259},"ac2d5720-9418-468c-80a0-3874ee743c0f":{"title":"Google Optimize","exclusions":["a,s,y,n,c,h,i,d,e","googleoptimize.com\/optimize.js","async-hide"],"icon_url":"","type":"script","id":"script:031a0cece38c4739df67f910dcabf1bd","is_default":0,"created_at":1681390261},"122e6ebb-51fd-477f-97fb-559593f1a48b":{"title":"Google Recaptcha","exclusions":["recaptcha"],"icon_url":"","type":"script","id":"script:032cb16577cbf07bc7c02bac83bd936d","is_default":0,"created_at":1681390264},"219277ae-b2ac-4d42-913d-eaea40985295":{"title":"Google Tag Manager","exclusions":["\/gtag\/js","gtag\\(","\/gtm.js","async-hide"],"icon_url":"","type":"script","id":"script:1d3c65b2b03ef35e14df6b163ea3a1f6","is_default":0,"created_at":1681390266},"f632e3f4-20e6-471e-a78d-86afbea63586":{"title":"HubSpot","exclusions":["\/jquery-?[0-9.](.*)(.min|.slim|.slim.min)?.js","\/jquery-migrate(.min)?.js","js.hsforms.net","hbspt.forms.create"],"icon_url":"","type":"script","id":"script:de4bd8ef4675ebb85a055955de76d0ee","is_default":0,"created_at":1679331623},"5d606add-ffb8-4a06-b295-5f722710fbfd":{"title":"Refari","exclusions":["widget.refari.co","refari"],"icon_url":"","type":"script","id":"script:a705e197b13b47e72a105c923e044358","is_default":0,"created_at":1683797056},"742ec14a-27a1-4789-b9c8-a9c3a3cf7042":{"title":"Reviews.io","exclusions":["\/carousel-inline-iframeless\/dist.js","carouselInlineWidget"],"icon_url":"","type":"script","id":"script:4df445c576f45889506ba175a4c39fdc","is_default":0,"created_at":1684389426},"05d3eb78-f574-49be-95e1-3f11714005d1":{"id":"script:ce7566d1d08cc094b74cf283cf9c56a5","title":"Stripe","type":"script","icon":"","exclusions":["js.stripe.com"],"is_default":0,"condition":"","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""},"b56bf06c-2f8c-4757-b536-a689fb0e75f9":{"title":"Typekit","exclusions":["typekit"],"icon_url":"","type":"script","id":"script:7815e38b93e3b500a632681bd594bd61","is_default":0,"created_at":1681390268},"49c38c0a-43b9-4237-88cb-57ddd519f0ad":{"title":"Venatus Media","exclusions":["\/ad-manager.min.js","__vm_add"],"icon_url":"","type":"script","id":"script:abe11528732aed9a19a97e73b242faa5","is_default":0,"created_at":1681390272},"2c1d0998-8ab5-478c-8eb9-9e375b46363e":{"title":"Wistia","exclusions":["fast.wistia.com"],"icon_url":"","type":"script","id":"script:9a0111f8c3186c1cb3113587c660c041","is_default":0,"created_at":1681390274},"0627fe24-7e9d-400f-b064-d98bec2ba85e":{"id":"script:dbd1875130c71eb4b2ef768ad18d820c","title":"Yandex Ads","type":"script","icon":"","exclusions":["yandex.ru","window.yaContextCb"],"is_default":0,"condition":"","created_at":1676435704,"updated_at":"2023-02-15T04:32:16.000000Z","icon_url":""}}} \ No newline at end of file