Version Description
- Changed the way the combined loaded CSS files caching is stored (/wp-content/cache/asset-cleanup/); Transients are not used anymore to avoid having too many records in the options table
- Clear cache now keeps the old merge CSS files in the "cache/asset-cleanup" folder in case a cached page still makes reference to any of the files
Download this release
Release Info
Developer | gabelivan |
Plugin | ![]() |
Version | 1.2.9.5 |
Comparing to | |
See all releases |
Code changes from version 1.2.9.4 to 1.2.9.5
- assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-deactivate.jpg +0 -0
- assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-delete.jpg +0 -0
- assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-2-choose-file.jpg +0 -0
- assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-3-activate-plugin.jpg +0 -0
- assets/style.min.css +1 -1
- classes/AdminBar.php +3 -18
- classes/Main.php +13 -81
- classes/Misc.php +22 -15
- classes/OptimiseAssets/CombineCommon.php +412 -0
- classes/{OptimizeCss.php → OptimiseAssets/CombineCss.php} +56 -330
- classes/OwnAssets.php +4 -27
- classes/Plugin.php +1 -1
- classes/Settings.php +8 -16
- classes/Sorting.php +4 -26
- classes/Tools.php +3 -2
- classes/Update.php +7 -15
- freemius/assets/css/admin/account.css +0 -0
- freemius/assets/css/admin/add-ons.css +0 -0
- freemius/assets/css/admin/affiliation.css +0 -0
- freemius/assets/css/admin/checkout.css +0 -0
- freemius/assets/css/admin/common.css +0 -0
- freemius/assets/css/admin/connect.css +0 -0
- freemius/assets/css/admin/debug.css +0 -0
- freemius/assets/css/admin/dialog-boxes.css +0 -0
- freemius/assets/css/admin/gdpr-optin-notice.css +0 -0
- freemius/assets/css/admin/index.php +0 -0
- freemius/assets/css/customizer.css +0 -0
- freemius/assets/css/index.php +0 -0
- freemius/assets/img/index.php +0 -0
- freemius/assets/img/plugin-icon.png +0 -0
- freemius/assets/img/theme-icon.png +0 -0
- freemius/assets/index.php +0 -0
- freemius/assets/js/index.php +0 -0
- freemius/assets/js/nojquery.ba-postmessage.js +0 -0
- freemius/assets/js/nojquery.ba-postmessage.min.js +0 -0
- freemius/assets/js/postmessage.js +0 -0
- freemius/config.php +0 -0
- freemius/includes/class-freemius-abstract.php +0 -0
- freemius/includes/class-freemius.php +0 -0
- freemius/includes/class-fs-admin-notices.php +0 -0
- freemius/includes/class-fs-api.php +0 -0
- freemius/includes/class-fs-logger.php +0 -0
- freemius/includes/class-fs-options.php +0 -0
- freemius/includes/class-fs-plugin-updater.php +0 -0
- freemius/includes/class-fs-security.php +0 -0
- freemius/includes/class-fs-storage.php +0 -0
- freemius/includes/class-fs-user-lock.php +0 -0
- freemius/includes/customizer/class-fs-customizer-support-section.php +0 -0
- freemius/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
- freemius/includes/customizer/index.php +0 -0
- freemius/includes/debug/class-fs-debug-bar-panel.php +0 -0
- freemius/includes/debug/debug-bar-start.php +0 -0
- freemius/includes/debug/index.php +0 -0
- freemius/includes/entities/class-fs-affiliate-terms.php +0 -0
- freemius/includes/entities/class-fs-affiliate.php +0 -0
- freemius/includes/entities/class-fs-billing.php +0 -0
- freemius/includes/entities/class-fs-entity.php +0 -0
- freemius/includes/entities/class-fs-payment.php +0 -0
- freemius/includes/entities/class-fs-plugin-info.php +0 -0
- freemius/includes/entities/class-fs-plugin-license.php +0 -0
- freemius/includes/entities/class-fs-plugin-plan.php +0 -0
- freemius/includes/entities/class-fs-plugin-tag.php +0 -0
- freemius/includes/entities/class-fs-plugin.php +0 -0
- freemius/includes/entities/class-fs-pricing.php +0 -0
- freemius/includes/entities/class-fs-scope-entity.php +0 -0
- freemius/includes/entities/class-fs-site.php +0 -0
- freemius/includes/entities/class-fs-subscription.php +0 -0
- freemius/includes/entities/class-fs-user.php +0 -0
- freemius/includes/entities/index.php +0 -0
- freemius/includes/fs-core-functions.php +0 -0
- freemius/includes/fs-essential-functions.php +0 -0
- freemius/includes/fs-plugin-info-dialog.php +0 -0
- freemius/includes/i18n.php +0 -0
- freemius/includes/index.php +0 -0
- freemius/includes/l10n.php +0 -0
- freemius/includes/managers/class-fs-admin-menu-manager.php +0 -0
- freemius/includes/managers/class-fs-admin-notice-manager.php +0 -0
- freemius/includes/managers/class-fs-cache-manager.php +0 -0
- freemius/includes/managers/class-fs-gdpr-manager.php +0 -0
- freemius/includes/managers/class-fs-key-value-storage.php +0 -0
- freemius/includes/managers/class-fs-license-manager.php +0 -0
- freemius/includes/managers/class-fs-option-manager.php +0 -0
- freemius/includes/managers/class-fs-plan-manager.php +0 -0
- freemius/includes/managers/class-fs-plugin-manager.php +0 -0
- freemius/includes/managers/index.php +0 -0
- freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
- freemius/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
- freemius/includes/sdk/Exceptions/Exception.php +0 -0
- freemius/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
- freemius/includes/sdk/Exceptions/OAuthException.php +0 -0
- freemius/includes/sdk/Exceptions/index.php +0 -0
- freemius/includes/sdk/FreemiusBase.php +0 -0
- freemius/includes/sdk/FreemiusWordPress.php +0 -0
- freemius/includes/sdk/LICENSE.txt +0 -0
- freemius/includes/sdk/index.php +0 -0
- freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
- freemius/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
- freemius/includes/supplements/index.php +0 -0
- freemius/index.php +0 -0
- freemius/languages/freemius-da_DK.mo +0 -0
- freemius/languages/freemius-da_DK.po +0 -0
- freemius/languages/freemius-en.mo +0 -0
- freemius/languages/freemius-en.po +0 -0
- freemius/languages/freemius-es_ES.mo +0 -0
- freemius/languages/freemius-es_ES.po +0 -0
- freemius/languages/freemius-fr_FR.mo +0 -0
- freemius/languages/freemius-fr_FR.po +0 -0
- freemius/languages/freemius-he_IL.mo +0 -0
- freemius/languages/freemius-he_IL.po +0 -0
- freemius/languages/freemius-it_IT.mo +0 -0
- freemius/languages/freemius-it_IT.po +0 -0
- freemius/languages/freemius-ja_JP.mo +0 -0
- freemius/languages/freemius-ja_JP.po +0 -0
- freemius/languages/freemius-nl_NL.mo +0 -0
- freemius/languages/freemius-nl_NL.po +0 -0
- freemius/languages/freemius-ru_RU.mo +0 -0
- freemius/languages/freemius-ru_RU.po +0 -0
- freemius/languages/freemius.pot +0 -0
- freemius/languages/index.php +0 -0
- freemius/require.php +0 -0
- freemius/start.php +0 -0
- freemius/templates/account.php +0 -0
- freemius/templates/account/billing.php +0 -0
- freemius/templates/account/index.php +0 -0
- freemius/templates/account/partials/activate-license-button.php +0 -0
- freemius/templates/account/partials/addon.php +0 -0
- freemius/templates/account/partials/deactivate-license-button.php +0 -0
- freemius/templates/account/partials/index.php +0 -0
- freemius/templates/account/partials/site.php +0 -0
- freemius/templates/account/payments.php +0 -0
- freemius/templates/add-ons.php +0 -0
- freemius/templates/add-trial-to-pricing.php +0 -0
- freemius/templates/admin-notice.php +0 -0
- freemius/templates/ajax-loader.php +0 -0
- freemius/templates/auto-installation.php +0 -0
- freemius/templates/checkout.php +0 -0
- freemius/templates/connect.php +0 -0
- freemius/templates/contact.php +0 -0
- freemius/templates/debug.php +0 -0
- freemius/templates/debug/api-calls.php +0 -0
- freemius/templates/debug/index.php +0 -0
- freemius/templates/debug/logger.php +0 -0
- freemius/templates/debug/plugins-themes-sync.php +0 -0
- freemius/templates/debug/scheduled-crons.php +0 -0
- freemius/templates/email.php +0 -0
- freemius/templates/firewall-issues-js.php +0 -0
- freemius/templates/forms/affiliation.php +0 -0
- freemius/templates/forms/deactivation/contact.php +0 -0
- freemius/templates/forms/deactivation/form.php +0 -0
- freemius/templates/forms/deactivation/index.php +0 -0
- freemius/templates/forms/deactivation/retry-skip.php +0 -0
- freemius/templates/forms/index.php +0 -0
- freemius/templates/forms/license-activation.php +0 -0
- freemius/templates/forms/optout.php +0 -0
- freemius/templates/forms/premium-versions-upgrade-handler.php +0 -0
- freemius/templates/forms/premium-versions-upgrade-metadata.php +0 -0
- freemius/templates/forms/resend-key.php +0 -0
- freemius/templates/forms/subscription-cancellation.php +0 -0
- freemius/templates/forms/trial-start.php +0 -0
- freemius/templates/gdpr-optin-js.php +0 -0
- freemius/templates/index.php +0 -0
- freemius/templates/js/index.php +0 -0
- freemius/templates/js/jquery.content-change.php +0 -0
- freemius/templates/js/open-license-activation.php +0 -0
- freemius/templates/js/style-premium-theme.php +0 -0
- freemius/templates/partials/network-activation.php +0 -0
- freemius/templates/plugin-icon.php +0 -0
- freemius/templates/plugin-info/description.php +0 -0
- freemius/templates/plugin-info/features.php +0 -0
- freemius/templates/plugin-info/index.php +0 -0
- freemius/templates/plugin-info/screenshots.php +0 -0
- freemius/templates/powered-by.php +0 -0
- freemius/templates/pricing.php +0 -0
- freemius/templates/secure-https-header.php +0 -0
- freemius/templates/sticky-admin-notice-js.php +0 -0
- freemius/templates/tabs-capture-js.php +0 -0
- freemius/templates/tabs.php +0 -0
- readme.txt +6 -2
- templates/admin-page-getting-started.php +16 -9
- templates/admin-page-settings-plugin.php +30 -4
- templates/meta-box-loaded-assets/_asset-script-single-row.php +36 -31
- templates/meta-box-loaded-assets/_asset-style-single-row.php +29 -28
- templates/meta-box-loaded-assets/view-by-location.php +1 -1
- templates/meta-box-loaded-assets/view-default.php +1 -1
- templates/settings-frontend.php +1 -5
- wpacu-load.php +9 -3
- wpacu.php +2 -2
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-deactivate.jpg
CHANGED
File without changes
|
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-delete.jpg
CHANGED
File without changes
|
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-2-choose-file.jpg
CHANGED
File without changes
|
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-3-activate-plugin.jpg
CHANGED
File without changes
|
assets/style.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wpacu_update_btn,label.wpacu_add_global{cursor:pointer!important}#wpacu-pages-info-area{width:98%}#wpacu-logo-area{margin:15px 0;padding:0 10px}#wpacu-logo-area img{max-width:340px;width:100%}.wpacu-tabs{position:relative;overflow:hidden;margin:0 auto 20px;width:100%;font-weight:300;font-size:20px}.wpacu-tabs nav{text-align:center}.wpacu-tabs nav ul{position:relative;display:-ms-flexbox;display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:flex;margin:0 auto;padding:0;max-width:1200px;list-style:none;-ms-box-orient:horizontal;-ms-box-pack:center;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center}.wpacu-tabs nav ul li{position:relative;z-index:1;display:block;margin:0;text-align:center;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.wpacu-tabs nav ul li span.license-status{position:absolute;font-size:12px;left:0;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.wpacu-tabs nav ul li span.license-status.inactive{color:#c00}.wpacu-tabs nav ul li span.license-status.active{color:green}.wpacu-tabs nav a{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:2.5}.wpacu-tabs nav a span{vertical-align:middle;font-size:14px}.wpacu-tabs nav li.wpacu-tab-current a{color:#74777b}.wpacu-tabs nav a:focus{outline:0}.wpacu-tabs .dashicons{font-size:20px}.no-js .wpacu-content-wrap section{display:block;padding-bottom:2em;border-bottom:1px solid rgba(255,255,255,.6)}.no-flexbox nav ul{display:block}.no-flexbox nav ul li{min-width:15%;display:inline-block}@media screen and (max-width:58em){.wpacu-tabs nav a.icon span{display:none}.wpacu-tabs nav a:before{margin-right:0}}.wpacu-tabs-style-underline nav{background:#fff}.wpacu-tabs-style-underline nav a{color:#74777b;font-size:18px;text-transform:uppercase;text-decoration:none;padding:.25em 0 .5em;border-left:1px solid #e7ecea;-webkit-transition:color .2s;transition:color .2s}.wpacu-tabs-style-underline nav li:last-child a{border-right:1px solid #e7ecea}.wpacu-tabs-style-underline nav li a::after{position:absolute;bottom:0;left:0;width:100%;height:6px;background:#2CC185;content:'';-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translate3d(0,150%,0);transform:translate3d(0,150%,0)}.wpacu-tabs-style-underline nav li.wpacu-tab-current a::after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.wpacu-tabs-style-underline nav a span{font-weight:700}.wpacu-tabs-style-topline{max-width:1200px;margin:20px auto 30px 0;width:100%;font-weight:300;text-decoration:none}.wpacu-tabs-style-topline nav li{border:1px solid rgba(40,44,42,.1)}.wpacu-tabs-style-topline nav li:not(:last-child){border-right:none}.wpacu-tabs-style-topline nav li.wpacu-tab-current{border-top-color:#0085ba;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 10px;background:rgba(40,44,42,.05);color:#74777b;line-height:1;-webkit-transition:color .2s;transition:color .2s;text-decoration:none}.wpacu-tabs-style-topline nav a:focus,.wpacu-tabs-style-topline nav a:hover{color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #0085ba;color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a span:not(.dashicons){font-weight:600}.wpacu-tabs-style-topline nav a span{text-transform:uppercase;font-weight:400}.wpacu-tab-nav-wrapper{border-bottom:none!important}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active{background:#fff;position:relative}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active:after{content:'';width:100%;bottom:-2px;left:0;position:absolute;border-bottom:2px solid #fff}.wpacu-script-attributes-area{margin:20px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings{padding:5px 7px!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings.wpacu-first{margin:0 28px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li{margin:0 16px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:last-child{margin:0 2px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings{background:#fff!important;border:1px solid #eee!important;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:5px 10px!important;list-style:none;display:inline-block;margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings input[type=radio]{padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings.wpacu-first{margin:0 34px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li{float:left;margin:0 17px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:last-child{margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpacu_meta_box_content{width:99%}#wpacu_meta_box_content h3{margin-left:0;padding-left:0}#wpacu_meta_box_content div.wpacu_note{padding:10px;background-color:#f5f5f5}#wpacu_meta_box_content .dashicons.dashicons-warning{color:#c00}#wpacu_meta_box_content .wpacu_verified{padding:10px;background-color:#f5f5f5;border-left:1px solid #ddd}#wpacu_meta_box_content .wpacu_verified span{color:#0073aa;font-weight:700}#wpacu_meta_box_content div.wpacu_warning{border:1px solid #c00}#wpacu_meta_box_content ul.wpacu_asset_options{margin:0;padding:0}#wpacu_meta_box_content ul.wpacu_asset_options li{list-style:none;display:inline-block}#wpacu_wrap_assets img,#wpacu_wrap_assets small,.wpacu_asset_row td label{display:inline-block!important}#wpacu_meta_box_content ul.wpacu_asset_options label{font-weight:400;margin-right:5px;margin-top:5px;margin-bottom:5px}.wpacu-updated-frontend{font-weight:400;background-color:#fff;border-left:4px solid #46b450;border-top:1px solid #46b450;border-right:1px solid #46b450;border-bottom:1px solid #46b450;padding:9px 14px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu_wrap_assets{color:#000!important;text-align:left!important;clear:both!important;width:90%!important;padding:20px!important;margin:30px 0 0 15px!important;border:1px solid #cdcdcd;z-index:10000!important;position:relative!important;background-color:#fff!important}#wpacu_wrap_assets div.wpacu_warning{border:1px solid #c00;padding:5px 10px}#wpacu_wrap_assets small{margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{margin-right:4px!important}#wpacu_wrap_assets p{line-height:22px!important;margin:10px 0!important;text-align:left!important;font-weight:400!important}#wpacu_wrap_assets p:first-child,.wpacu_verified{margin:0 0 10px!important}#wpacu_wrap_assets h1{margin:0 0 20px!important;font-size:160%!important;text-align:left!important}#wpacu_wrap_assets h3{margin:20px 0;font-size:130%}.wpacu_asset_row td{padding:10px!important;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row td:first-child{border-top:1px solid #cdcdcd}.wpacu_asset_row td p{padding:0!important;margin-bottom:10px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row td label{margin:0!important;cursor:pointer!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row td.wpacu_check{width:50px!important}.asset-table-extra-info td{padding:5px!important}body.wp-admin .wpacu_asset_row td.wpacu_check{width:25px!important}.wpacu_asset_row .dashicons-warning{color:red!important}label.wpacu_global_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}label.wpacu_bulk_unload_active{color:#d54e21}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 20px 0 0;list-style:none;display:inline-block}ul.wpacu_asset_options li.remove_rule label{font-weight:700}ul.wpacu_asset_options label{margin-right:20px;font-weight:400}ul.wpacu_asset_options label input{margin-right:4px}.wpacu_list_table,.wpacu_list_table div,.wpacu_list_table li,.wpacu_list_table p{font-weight:400}.wpacu_widefat{width:99%}.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu_striped>tbody>:nth-child(odd),ul.wpacu_striped>:nth-child(odd){background-color:#f9f9f9!important}.wpacu_update_btn{-moz-box-shadow:inset 0 1px 0 0 #54a3f7!important;-webkit-box-shadow:inset 0 1px 0 0 #54a3f7!important;box-shadow:inset 0 1px 0 0 #54a3f7!important;background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#007dc1),color-stop(1,#0061a7))!important;background:-moz-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-webkit-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-o-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-ms-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:linear-gradient(to bottom,#007dc1 5%,#0061a7 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#007dc1', endColorstr='#0061a7', GradientType=0)!important;background-color:#007dc1!important;-moz-border-radius:3px!important;-webkit-border-radius:3px!important;border-radius:3px!important;border:1px solid #124d77!important;display:inline-block!important;color:#fff!important;font-size:15px!important;padding:10px 24px!important;text-decoration:none!important;text-shadow:0 1px 0 #154682!important;height:auto!important;line-height:normal!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#0061a7),color-stop(1,#007dc1))!important;background:-moz-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-webkit-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-o-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-ms-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:linear-gradient(to bottom,#0061a7 5%,#007dc1 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0061a7', endColorstr='#007dc1', GradientType=0)!important;background-color:#0061a7!important}.wpacu_update_btn:active{position:relative!important;top:1px!important}.wpacu-btns .btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wpacu-btns .btn.focus,.wpacu-btns .btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.wpacu-btns .btn.disabled,.wpacu-btns .btn:disabled{cursor:not-allowed;opacity:.65}.wpacu-btns .btn.active,.wpacu-btns .btn:active{background-image:none}.wpacu-btns a.btn.disabled,.wpacu-btns fieldset[disabled] a.btn{pointer-events:none}.wpacu-btns .btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.wpacu-btns .btn-primary.focus,.wpacu-btns .btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-primary.disabled,.wpacu-btns .btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary.active,.wpacu-btns .btn-primary:active,.wpacu-btns .show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.wpacu-btns .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.wpacu-btns .btn-secondary.focus,.wpacu-btns .btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-secondary.disabled,.wpacu-btns .btn-secondary:disabled{background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary.active,.wpacu-btns .btn-secondary:active,.wpacu-btns .show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.wpacu-btns .btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.wpacu-btns .btn-info.focus,.wpacu-btns .btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-info.disabled,.wpacu-btns .btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info.active,.wpacu-btns .btn-info:active,.wpacu-btns .show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.wpacu-btns .btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.wpacu-btns .btn-success.focus,.wpacu-btns .btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-success.disabled,.wpacu-btns .btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success.active,.wpacu-btns .btn-success:active,.wpacu-btns .show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.wpacu-btns .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.wpacu-btns .btn-warning.focus,.wpacu-btns .btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-warning.disabled,.wpacu-btns .btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning.active,.wpacu-btns .btn-warning:active,.wpacu-btns .show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.wpacu-btns .btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.wpacu-btns .btn-danger.focus,.wpacu-btns .btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-danger.disabled,.wpacu-btns .btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger.active,.wpacu-btns .btn-danger:active,.wpacu-btns .show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.wpacu-btns .btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.wpacu-btns .btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-primary.focus,.wpacu-btns .btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-outline-primary.disabled,.wpacu-btns .btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.wpacu-btns .btn-outline-primary.active,.wpacu-btns .btn-outline-primary:active,.wpacu-btns .show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.wpacu-btns .btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-secondary.focus,.wpacu-btns .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-outline-secondary.disabled,.wpacu-btns .btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.wpacu-btns .btn-outline-secondary.active,.wpacu-btns .btn-outline-secondary:active,.wpacu-btns .show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.wpacu-btns .btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-info.focus,.wpacu-btns .btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-outline-info.disabled,.wpacu-btns .btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.wpacu-btns .btn-outline-info.active,.wpacu-btns .btn-outline-info:active,.wpacu-btns .show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.wpacu-btns .btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-success.focus,.wpacu-btns .btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-outline-success.disabled,.wpacu-btns .btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.wpacu-btns .btn-outline-success.active,.wpacu-btns .btn-outline-success:active,.wpacu-btns .show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning.focus,.wpacu-btns .btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-outline-warning.disabled,.wpacu-btns .btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.wpacu-btns .btn-outline-warning.active,.wpacu-btns .btn-outline-warning:active,.wpacu-btns .show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.wpacu-btns .btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-outline-danger.focus,.wpacu-btns .btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-outline-danger.disabled,.wpacu-btns .btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.wpacu-btns .btn-outline-danger.active,.wpacu-btns .btn-outline-danger:active,.wpacu-btns .show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-link{font-weight:400;color:#0275d8;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.wpacu-btns .btn-link,.wpacu-btns .btn-link.active,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:disabled{background-color:transparent}.wpacu-btns .btn-link,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{border-color:transparent}.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.wpacu-btns .btn-link:disabled{color:#636c72}.wpacu-btns .btn-link:disabled:focus,.wpacu-btns .btn-link:disabled:hover{text-decoration:none}.wpacu-btns .btn-group-lg>.btn,.wpacu-btns .btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;-webkit-border-radius:.3rem;-moz-border-radius:.3rem;border-radius:.3rem}.wpacu-btns .btn-group-sm>.btn,.wpacu-btns .btn-sm{padding:.25rem .5rem;font-size:.875rem;-webkit-border-radius:.2rem;-moz-border-radius:.2rem;border-radius:.2rem}.wpacu-btns .btn-block{display:block;width:100%}.go-pro-button,.go-pro-link-no-style,.wordpress-core-file{display:inline-block;text-decoration:none}.wpacu-btns .btn-block+.btn-block{margin-top:.5rem}.wpacu-btns input[type=submit].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].btn-block{width:100%}.wpacu-btns .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.go-pro-button{background-color:#4CAF50;border:2px solid #4CAF50;color:#fff;padding:12px 18px;text-align:center;font-size:16px;margin:4px 2px;cursor:pointer;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-transition-duration:.4s;transition-duration:.4s}.go-pro-button:hover{background-color:#fff;color:#000;border:2px solid #4CAF50;text-decoration:none}.go-pro-link-no-style .wpacu-tooltip:after,.wordpress-core-file .wpacu-tooltip:after{content:"";border-width:10px;border-style:solid;top:100%}body.wp-admin .wpacu_asset_row .go-pro-link-no-style .wpacu-tooltip{padding:8px 2px}body.wp-admin .go-pro-link-no-style .wpacu-tooltip{font-weight:400;font-size:12px;line-height:16px;padding:8px 11px}.go-pro-link-no-style{position:relative;color:inherit}.go-pro-link-no-style:not(.nav-tab){font-style:italic}.go-pro-link-no-style.no-transition .wpacu-tooltip{-webkit-transition:0s all ease;transition:0s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:130px;background-color:#27ae60;color:#fff;text-align:center;padding:8px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-65px;-webkit-transition:.2s all ease;transition:.2s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip:after{position:absolute;left:50%;left:calc(50% - 10px);border-color:#27ae60 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wordpress-core-file{position:relative;font-style:normal;color:inherit}.wordpress-core-file .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#c00;color:#fff;text-align:center;padding:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-86px;-webkit-transition:.5s all ease;transition:.5s all ease;-webkit-transition-delay:0s;transition-delay:0s}.wordpress-core-file .wpacu-tooltip:after{position:absolute;left:50%;left:calc(50% - 10px);border-color:#c00 transparent transparent}.wordpress-core-file:hover .wpacu-tooltip{visibility:visible}.ajax-direct-call-error-area{background:#fff;padding:10px;border:1px solid #c00;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.ajax-direct-call-error-area td{padding:6px}.ajax-direct-call-error-area .note{margin-top:0;padding-top:0}.ajax-direct-call-error-area .error-code{color:#c00;font-weight:700}.ajax-wp-remote-post-call-error-area{background:#fff;padding:20px}.ajax-wp-remote-post-call-error-area .table-data{background:0 0;border:1px solid #c66;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.ajax-wp-remote-post-call-error-area .table-data td{padding:10px}.wrap-upgrade-info{background:#fff;padding:0 15px;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-notice{margin:20px 20px 0 0!important}.wpacu-notice p{font-weight:600!important;font-style:italic}.wpacu-notice .dashicons{font-weight:inherit!important;color:#46b450!important;margin-right:4px;vertical-align:text-bottom;font-size:27px}.wpacu-notice-info{padding:12px 12px 12px 16px;background:#fff;border-left:4px solid #0085ba}.wpacu-notice-info p{margin-top:8px}.wpacu-notice-info p:first-child{margin-top:0}.wpacu-notice-info p:last-child{margin-bottom:0}.wpacu-warning{font-size:15px;padding:10px;background:#fffcec;border:1px solid #fdd5c9;margin:0 0 5px;width:100%}.pro-page-unlock-notice{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;padding:10px;background:#f2faf2;border:1px solid #c0e8c0;width:auto;display:block}.wpacu-license-area .notice,.wpacu-settings-area .notice{margin-left:0;padding:10px!important;width:97%;box-sizing:border-box;font-weight:600;font-style:italic}.wpacu-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons{color:green}#wpacu-dom-get-type-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child{margin-right:0}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch{width:auto;height:auto}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input{display:block}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox],.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox]{margin:0 0 3px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:2px;line-height:1.2}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em{font-weight:200}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_read_more,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_read_more{margin-top:-10px;font-style:italic;font-size:12px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices{list-style:none;margin:0}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li{float:left;margin-right:30px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li:last-child{margin-right:0}.wpacu-form-table th{vertical-align:top;text-align:left;padding:5px 20px 20px 0;width:200px;line-height:1.3;font-weight:600}.wpacu-form-table th label{color:#23282d;font-weight:600;font-size:14px;text-shadow:none;vertical-align:middle;cursor:pointer}.wpacu-form-table td{padding-bottom:25px}.wpacu-form-table td:last-child p:last-child{margin:0}.wrap_bulk_unload_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wrap_bulk_unload_options .wpacu_asset_options_wrap{flex-grow:1;margin:5px 10px 14px 0!important;padding:8px 10px 2px!important}.wrap_bulk_unload_options .wpacu_asset_options_wrap .wpacu_slider_text{position:relative!important;vertical-align:top;left:inherit!important;top:inherit!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px;margin-right:5px!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input{display:none}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider{background-color:#C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.wpacu_asset_row td{width:100%}.wpacu_asset_row td p:last-child{margin-bottom:0!important}.wpacu_asset_row td .wpacu_asset_options_wrap{padding:8px 10px;margin:15px 0;background:#fff;border:1px solid #eee;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu_asset_row td .wpacu_asset_options_wrap p:first-child{margin-top:0;margin-bottom:8px!important}.wpacu_asset_row p.wpacu_handle{margin-top:0}.wpacu_asset_row li.wpacu_unload_this_page{display:block!important;position:relative}.wpacu-clearfix:after,.wpacu-clearfix:before{content:'';display:table}.wpacu-contract-expand-area{width:100%;margin:20px 0 0}.wpacu-contract-expand-area .col-left{float:left}.wpacu-contract-expand-area .col-left h4{margin-bottom:0}.wpacu-contract-expand-area .col-right{float:right}.wpacu-clearfix:after{clear:both}.wpacu-wp-button{color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:0 1px 0 #ccc;vertical-align:top}body.wp-admin .wpacu-wp-button{font-size:13px;line-height:26px;height:28px}.wpacu-wp-button.wpacu-wp-button-secondary{display:inline-block;text-decoration:none;height:auto;margin:0 5px 0 0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wpacu-wp-button:hover{background:#fafafa;border-color:#999;color:#23282d}.distinguish-asset-list{list-style:none;margin-left:0;margin-bottom:5px;display:inline-block}.distinguish-asset-list li{float:left;margin-right:20px}.distinguish-asset-list li:last-child{margin-right:0}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all,.wpacu-assets-collapsible-wrap.wpacu-wrap-styles{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-scripts{margin-top:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location>a.wpacu-assets-collapsible{padding:15px 15px 15px 43px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu_list_table{border-spacing:inherit;width:100%;box-shadow:3px 3px 2px #ddd;border-bottom-right-radius:5px;border-top-right-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-name{font-weight:600}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-version{font-weight:200}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-location-child-area strong{padding:17px 10px 15px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-bottom:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:14px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area strong{border-top-right-radius:8px;border-top-left-radius:8px;background-color:#f9f9f9;border-left:1px solid #cdcdcd;border-top:1px solid #cdcdcd;border-bottom:1px solid transparent;border-right:1px solid #cdcdcd;position:relative;padding:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon){color:#b4b9be;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon) .icon-area:before{content:"\f106";font-family:Dashicons;position:absolute;font-size:28px;line-height:28px;top:5px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content{padding:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table{width:100%;margin:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td{border-left:hidden;border-right:hidden;border-bottom:1px solid #e7e7e7}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child{margin-bottom:0!important}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child{border-bottom:hidden}a.wpacu-assets-collapsible{color:#000;font-size:20px;text-decoration:none;display:block;position:relative;background-color:#f1f3f8;cursor:pointer;padding:15px 15px 15px 36px;width:auto;border:none;text-align:left;outline:0}a.wpacu-assets-collapsible>span.dashicons{font-size:25px;line-height:normal;position:absolute;top:15px;top:calc(50% - 21px);left:22px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-collapsible:hover{background-color:#f1f3f8;text-decoration:none}a.wpacu-assets-collapsible:after{position:absolute;font-size:22px;font-family:Dashicons;right:14px;top:16px}a.wpacu-assets-collapsible:not(.wpacu-assets-collapsible-active):after{content:"\f132"}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:"\f460"}.wpacu-assets-collapsible-content{padding:0 16px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-collapsible-content .wpacu-assets-note{margin:0;padding:15px 15px 10px}.wpacu-assets-collapsible-content>div{padding:16px 0 0}.wpacu-assets-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-collapsible-content.wpacu-open{max-height:100%}a.wpacu-assets-inline-code-collapsible{font-size:14px;text-decoration:none;display:inline-block;position:relative;cursor:pointer;width:auto;outline:0;background:#f1f3f8;border:1px solid #cdcdcd;padding:4px 21px 4px 8px;margin:0 0 0 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}a.wpacu-assets-inline-code-collapsible:hover{border:1px solid #5c5c5c}a.wpacu-assets-inline-code-collapsible:after{position:absolute;font-size:15px;font-family:Dashicons;right:-3px;top:-1px;height:14px;width:14px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-inline-code-collapsible:not(.wpacu-assets-inline-code-collapsible-active):after{content:"\f132"}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:"\f460"}.wpacu-assets-inline-code-collapsible-content{font-size:80%;padding:0 8px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-inline-code-collapsible-content>div{padding:7px 8px 0}.wpacu-assets-inline-code-collapsible-content>div>p{line-height:normal!important}.wpacu-assets-inline-code-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-inline-code-collapsible-content.wpacu-open{max-height:100%}.wpacu_table_wrap{margin:20px 0 0}.wpacu_table_wrap>table{border:1px solid #cdcdcd}.wpacu_table_wrap .table{width:100%;max-width:100%;margin-bottom:1rem;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu_table_wrap .table td,.wpacu_table_wrap .table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.wpacu_table_wrap .table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.wpacu_table_wrap .table tbody+tbody{border-top:2px solid #eceeef}.wpacu_table_wrap .table .table{background-color:#fff}.wpacu_table_wrap .table-sm td,.wpacu_table_wrap .table-sm th{padding:.3rem}.wpacu_table_wrap .table-bordered,.wpacu_table_wrap .table-bordered td,.wpacu_table_wrap .table-bordered th{border:1px solid #eceeef}.wpacu_table_wrap .table-bordered thead td,.wpacu_table_wrap .table-bordered thead th{border-bottom-width:2px}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(even){background-color:#f9f9f9}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(odd){background-color:#fff}.wpacu_table_wrap .table-active,.wpacu_table_wrap .table-active>td,.wpacu_table_wrap .table-active>th,.wpacu_table_wrap .table-hover .table-active:hover,.wpacu_table_wrap .table-hover .table-active:hover>td,.wpacu_table_wrap .table-hover .table-active:hover>th,.wpacu_table_wrap .table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.wpacu_table_wrap .table-success,.wpacu_table_wrap .table-success>td,.wpacu_table_wrap .table-success>th{background-color:#dff0d8}.wpacu_table_wrap .table-hover .table-success:hover,.wpacu_table_wrap .table-hover .table-success:hover>td,.wpacu_table_wrap .table-hover .table-success:hover>th{background-color:#d0e9c6}.wpacu_table_wrap .table-info,.wpacu_table_wrap .table-info>td,.wpacu_table_wrap .table-info>th{background-color:#d9edf7}.wpacu_table_wrap .table-hover .table-info:hover,.wpacu_table_wrap .table-hover .table-info:hover>td,.wpacu_table_wrap .table-hover .table-info:hover>th{background-color:#c4e3f3}.wpacu_table_wrap .table-warning,.wpacu_table_wrap .table-warning>td,.wpacu_table_wrap .table-warning>th{background-color:#fcf8e3}.wpacu_table_wrap .table-hover .table-warning:hover,.wpacu_table_wrap .table-hover .table-warning:hover>td,.wpacu_table_wrap .table-hover .table-warning:hover>th{background-color:#faf2cc}.wpacu_table_wrap .table-danger,.wpacu_table_wrap .table-danger>td,.wpacu_table_wrap .table-danger>th{background-color:#f2dede}.wpacu_table_wrap .table-hover .table-danger:hover,.wpacu_table_wrap .table-hover .table-danger:hover>td,.wpacu_table_wrap .table-hover .table-danger:hover>th{background-color:#ebcccc}.wpacu_table_wrap .thead-inverse th{color:#fff;background-color:#292b2c}.wpacu_table_wrap .thead-default th{color:#464a4c;background-color:#eceeef}.wpacu_table_wrap .table-inverse{color:#fff;background-color:#292b2c}.wpacu_table_wrap .table-inverse td,.wpacu_table_wrap .table-inverse th,.wpacu_table_wrap .table-inverse thead th{border-color:#fff}.wpacu_table_wrap .table-inverse.table-bordered,.wpacu_table_wrap .table-responsive.table-bordered{border:0}.wpacu_table_wrap .table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}ul.hire-reasons{margin-bottom:20px}ul.hire-reasons li{font-size:14px;line-height:22px;margin-bottom:12px}ul.hire-reasons li .dashicons{font-size:23px;line-height:23px}ul.hire-reasons li .dashicons.dashicons-yes{color:green}ol.getting-started li{font-size:14px;line-height:22px;margin-bottom:8px}.wpacu-get-help-wrap p{font-size:14px}.wpacu-get-help-wrap .help-content-wrap{margin:20px 0 25px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;width:100%}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-align:start;-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wpacu-get-help-wrap .help-content-wrap .help-content{padding:15px;background:#fff;border:1px solid #E0E0E0;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:2px 3px 8px 0 #231f2038;flex:1 1 50%;margin-bottom:10px}.wpacu-get-help-wrap .help-content-wrap .help-content .content-title{margin:5px 0 15px}.wpacu-get-help-wrap .help-content-wrap .help-content .cols-wrap{width:100%;margin:0 auto;display:table}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area{margin:5px 0 0;position:relative}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-left{float:left;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-right{float:right;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.activate-plugin img{max-width:280px}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area img{width:99%;margin:8px 0;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{order:2}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap .help-content{margin-right:24px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{margin-right:0}}.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{order:1}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{margin-bottom:30px}}.wpacu-get-help-wrap .help-content-wrap .help-content ul{list-style:none;padding-left:0}.wpacu-get-help-wrap .help-content-wrap .help-content ul li{font-size:14px;line-height:22px;margin-bottom:15px}.wpacu-get-help-wrap .help-content-wrap .help-content p:last-child,.wpacu-get-help-wrap .help-content-wrap .help-content ul li:last-child{margin-bottom:0}#wpacu-license-data-remove-area{display:none;margin:10px 0 25px}#wpacu-license-data-remove-area.wpacu-visible{display:block}span#wpacu-license-data-removed-msg{display:block;padding-left:26px}#wpacu-warning-read{display:none;margin:10px 0}#wpacu-warning-read span.dashicons-warning{color:#c00}#wpacu-warning-read.wpacu-visible{display:block}#wpacu-reset-submit-area{margin:10px 0;clear:both}#wpacu-reset-submit-btn{margin:10px 0 0}.wpacu-tools-area{margin:10px 20px 0 2px}.wpacu-tools-area .wpacu-tools-container{background:#fff;padding:15px;border:1px solid #cdcdcd;width:96%}.wpacu-tools-area .wpacu-tools-container form>div:first-child{margin:0 0 10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning{display:none;box-sizing:border-box;margin-top:10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p{margin:0 0 10px;line-height:22px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p:only-child{margin:0}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning ul{font-size:13px;list-style-type:disc;padding-left:30px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning.wpacu-visible{display:block}.wpacu-about-wrap .wpacu-about-text img{width:auto;height:150px;position:absolute;top:20px;right:-20px}@media only screen and (max-width:767px){.wpacu-about-wrap h1{margin:20px}.wpacu-about-wrap .wpacu-about-text img{display:none}.wpacu-about-wrap .wpacu-about-text{margin:20px}}.wpacu-about-wrap .about-wrap-content .area-title{font-size:19px;line-height:19px;margin-bottom:0}.wpacu-about-wrap hr{margin:10px 0}
|
1 |
+
#wpacu_meta_box_content .dashicons.dashicons-warning,.wpacu-tabs nav ul li span.license-status.inactive{color:#c00}#wpacu-pages-info-area{width:98%}#wpacu-logo-area{margin:15px 0;padding:0 10px}#wpacu-logo-area img{width:352px;height:79px}.wpacu-tabs{position:relative;overflow:hidden;margin:0 auto 20px;width:100%;font-weight:300;font-size:20px}.wpacu-tabs nav{text-align:center}.wpacu-tabs nav ul{position:relative;display:-ms-flexbox;display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:flex;margin:0 auto;padding:0;max-width:1200px;list-style:none;-ms-box-orient:horizontal;-ms-box-pack:center;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center}.wpacu-tabs nav ul li{position:relative;z-index:1;display:block;margin:0;text-align:center;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.wpacu-tabs nav ul li span.license-status{position:absolute;font-size:12px;left:0;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.wpacu-tabs nav ul li span.license-status.active{color:green}.wpacu-tabs nav a{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:2.5}.wpacu-tabs nav a span{vertical-align:middle;font-size:14px}.wpacu-tabs nav li.wpacu-tab-current a{color:#74777b}.wpacu-tabs nav a:focus{outline:0}.wpacu-tabs .dashicons{font-size:20px}.no-js .wpacu-content-wrap section{display:block;padding-bottom:2em;border-bottom:1px solid rgba(255,255,255,.6)}.no-flexbox nav ul{display:block}.no-flexbox nav ul li{min-width:15%;display:inline-block}@media screen and (max-width:58em){.wpacu-tabs nav a.icon span{display:none}.wpacu-tabs nav a:before{margin-right:0}}.wpacu-tabs-style-underline nav{background:#fff}.wpacu-tabs-style-underline nav a{color:#74777b;font-size:18px;text-transform:uppercase;text-decoration:none;padding:.25em 0 .5em;border-left:1px solid #e7ecea;-webkit-transition:color .2s;transition:color .2s}.wpacu-tabs-style-underline nav li:last-child a{border-right:1px solid #e7ecea}.wpacu-tabs-style-underline nav li a::after{position:absolute;bottom:0;left:0;width:100%;height:6px;background:#2CC185;content:'';-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translate3d(0,150%,0);transform:translate3d(0,150%,0)}.wpacu-tabs-style-underline nav li.wpacu-tab-current a::after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.wpacu-tabs-style-underline nav a span{font-weight:700}.wpacu-tabs-style-topline{max-width:1200px;margin:20px auto 30px 0;width:100%;font-weight:300;text-decoration:none}.wpacu-tabs-style-topline nav li{border:1px solid rgba(40,44,42,.1)}.wpacu-tabs-style-topline nav li:not(:last-child){border-right:none}.wpacu-tabs-style-topline nav li.wpacu-tab-current{border-top-color:#0085ba;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 10px;background:rgba(40,44,42,.05);color:#74777b;line-height:1;-webkit-transition:color .2s;transition:color .2s;text-decoration:none}.wpacu-tabs-style-topline nav a:focus,.wpacu-tabs-style-topline nav a:hover{color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #0085ba;color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a span:not(.dashicons){font-weight:600}.wpacu-tabs-style-topline nav a span{text-transform:uppercase;font-weight:400}.wpacu-tab-nav-wrapper{border-bottom:none!important}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active{background:#fff;position:relative}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active:after{content:'';width:100%;bottom:-2px;left:0;position:absolute;border-bottom:2px solid #fff}.wpacu-script-attributes-area{margin:20px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings{padding:5px 7px!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings.wpacu-first{margin:0 28px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li{margin:0 16px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:last-child{margin:0 2px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings{background:#fff!important;border:1px solid #eee!important;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:5px 10px!important;list-style:none;display:inline-block;margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings input[type=radio]{padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings.wpacu-first{margin:0 34px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li{float:left;margin:0 17px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:last-child{margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none}#wpacu_meta_box_content,.wpacu_widefat{width:99%}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpacu_meta_box_content h3{margin-left:0;padding-left:0}#wpacu_meta_box_content div.wpacu_note{padding:10px;background-color:#f5f5f5}#wpacu_meta_box_content .wpacu_verified{padding:10px;background-color:#f5f5f5;border-left:1px solid #ddd}#wpacu_meta_box_content .wpacu_verified span{color:#0073aa;font-weight:700}#wpacu_meta_box_content div.wpacu_warning{border:1px solid #c00}#wpacu_meta_box_content ul.wpacu_asset_options{margin:0;padding:0}#wpacu_meta_box_content ul.wpacu_asset_options li{list-style:none;display:inline-block}#wpacu_wrap_assets img,#wpacu_wrap_assets small,.wpacu_asset_row td label{display:inline-block!important}#wpacu_meta_box_content ul.wpacu_asset_options label{font-weight:400;margin-right:5px;margin-top:5px;margin-bottom:5px}.wpacu-updated-frontend{font-weight:400;background-color:#fff;border-left:4px solid #46b450;border-top:1px solid #46b450;border-right:1px solid #46b450;border-bottom:1px solid #46b450;padding:9px 14px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#wpacu_wrap_assets,.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu_wrap_assets{color:#000!important;text-align:left!important;clear:both!important;width:90%!important;padding:20px!important;margin:30px 0 0 15px!important;border:1px solid #cdcdcd;z-index:10000!important;position:relative!important}#wpacu_wrap_assets div.wpacu_warning{border:1px solid #c00;padding:5px 10px}#wpacu_wrap_assets small{margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{margin-right:4px!important}#wpacu_wrap_assets p{line-height:22px!important;margin:10px 0!important;text-align:left!important;font-weight:400!important}.wpacu-assets-inline-code-collapsible-content>div>p,.wpacu_update_btn{line-height:normal!important}#wpacu_wrap_assets p:first-child,.wpacu_verified{margin:0 0 10px!important}#wpacu_wrap_assets h1{margin:0 0 20px!important;font-size:160%!important;text-align:left!important}#wpacu_wrap_assets h3{margin:20px 0;font-size:130%}.wpacu_asset_row td{padding:18px!important;position:relative;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row td.selected,.wpacu_asset_row td:hover{border:1px solid #cdcdcd;-moz-box-shadow:inset 0 0 12px #cdcdcd;-webkit-box-shadow:inset 0 0 12px #cdcdcd;box-shadow:inset 0 0 12px #cdcdcd}.wpacu_asset_row td:first-child{border-top:1px solid #cdcdcd}.wpacu_asset_row td p{padding:0!important;margin-bottom:10px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row td label{margin:0!important;cursor:pointer!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row td.wpacu_check{width:50px!important}.asset-table-extra-info td{padding:5px!important}body.wp-admin .wpacu_asset_row td.wpacu_check{width:25px!important}.wpacu_asset_row .dashicons-warning{color:red!important}label.wpacu_add_global{cursor:pointer!important}label.wpacu_global_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}label.wpacu_bulk_unload_active{color:#d54e21}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 20px 0 0;list-style:none;display:inline-block}ul.wpacu_asset_options li.remove_rule label{font-weight:700}ul.wpacu_asset_options label{margin-right:20px;font-weight:400}ul.wpacu_asset_options label input{margin-right:4px}.wpacu_list_table,.wpacu_list_table div,.wpacu_list_table li,.wpacu_list_table p{font-weight:400}.wpacu_striped>tbody>:nth-child(odd),ul.wpacu_striped>:nth-child(odd){background-color:#f9f9f9!important}.wpacu_update_btn{-moz-box-shadow:inset 0 1px 0 0 #54a3f7!important;-webkit-box-shadow:inset 0 1px 0 0 #54a3f7!important;box-shadow:inset 0 1px 0 0 #54a3f7!important;background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#007dc1),color-stop(1,#0061a7))!important;background:-moz-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-webkit-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-o-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-ms-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:linear-gradient(to bottom,#007dc1 5%,#0061a7 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#007dc1', endColorstr='#0061a7', GradientType=0)!important;background-color:#007dc1!important;-moz-border-radius:3px!important;-webkit-border-radius:3px!important;border-radius:3px!important;border:1px solid #124d77!important;display:inline-block!important;cursor:pointer!important;color:#fff!important;font-size:15px!important;padding:10px 24px!important;text-decoration:none!important;text-shadow:0 1px 0 #154682!important;height:auto!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#0061a7),color-stop(1,#007dc1))!important;background:-moz-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-webkit-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-o-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-ms-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:linear-gradient(to bottom,#0061a7 5%,#007dc1 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0061a7', endColorstr='#007dc1', GradientType=0)!important;background-color:#0061a7!important}.wpacu_update_btn:active{position:relative!important;top:1px!important}.wpacu-btns .btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wpacu-btns .btn.focus,.wpacu-btns .btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.wpacu-btns .btn.disabled,.wpacu-btns .btn:disabled{cursor:not-allowed;opacity:.65}.wpacu-btns .btn.active,.wpacu-btns .btn:active{background-image:none}.wpacu-btns a.btn.disabled,.wpacu-btns fieldset[disabled] a.btn{pointer-events:none}.wpacu-btns .btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.wpacu-btns .btn-primary.focus,.wpacu-btns .btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-primary.disabled,.wpacu-btns .btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary.active,.wpacu-btns .btn-primary:active,.wpacu-btns .show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.wpacu-btns .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.wpacu-btns .btn-secondary.focus,.wpacu-btns .btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-secondary.disabled,.wpacu-btns .btn-secondary:disabled{background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary.active,.wpacu-btns .btn-secondary:active,.wpacu-btns .show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.wpacu-btns .btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.wpacu-btns .btn-info.focus,.wpacu-btns .btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-info.disabled,.wpacu-btns .btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info.active,.wpacu-btns .btn-info:active,.wpacu-btns .show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.wpacu-btns .btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.wpacu-btns .btn-success.focus,.wpacu-btns .btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-success.disabled,.wpacu-btns .btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success.active,.wpacu-btns .btn-success:active,.wpacu-btns .show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.wpacu-btns .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.wpacu-btns .btn-warning.focus,.wpacu-btns .btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-warning.disabled,.wpacu-btns .btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning.active,.wpacu-btns .btn-warning:active,.wpacu-btns .show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.wpacu-btns .btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.wpacu-btns .btn-danger.focus,.wpacu-btns .btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-danger.disabled,.wpacu-btns .btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger.active,.wpacu-btns .btn-danger:active,.wpacu-btns .show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.wpacu-btns .btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.wpacu-btns .btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-primary.focus,.wpacu-btns .btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-outline-primary.disabled,.wpacu-btns .btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.wpacu-btns .btn-outline-primary.active,.wpacu-btns .btn-outline-primary:active,.wpacu-btns .show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.wpacu-btns .btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-secondary.focus,.wpacu-btns .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-outline-secondary.disabled,.wpacu-btns .btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.wpacu-btns .btn-outline-secondary.active,.wpacu-btns .btn-outline-secondary:active,.wpacu-btns .show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.wpacu-btns .btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-info.focus,.wpacu-btns .btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-outline-info.disabled,.wpacu-btns .btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.wpacu-btns .btn-outline-info.active,.wpacu-btns .btn-outline-info:active,.wpacu-btns .show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.wpacu-btns .btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-success.focus,.wpacu-btns .btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-outline-success.disabled,.wpacu-btns .btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.wpacu-btns .btn-outline-success.active,.wpacu-btns .btn-outline-success:active,.wpacu-btns .show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning.focus,.wpacu-btns .btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-outline-warning.disabled,.wpacu-btns .btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.wpacu-btns .btn-outline-warning.active,.wpacu-btns .btn-outline-warning:active,.wpacu-btns .show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.wpacu-btns .btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-outline-danger.focus,.wpacu-btns .btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-outline-danger.disabled,.wpacu-btns .btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.wpacu-btns .btn-outline-danger.active,.wpacu-btns .btn-outline-danger:active,.wpacu-btns .show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-link{font-weight:400;color:#0275d8;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.wpacu-btns .btn-link,.wpacu-btns .btn-link.active,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:disabled{background-color:transparent}.wpacu-btns .btn-link,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{border-color:transparent}.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.wpacu-btns .btn-link:disabled{color:#636c72}.wpacu-btns .btn-link:disabled:focus,.wpacu-btns .btn-link:disabled:hover{text-decoration:none}.wpacu-btns .btn-group-lg>.btn,.wpacu-btns .btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;-webkit-border-radius:.3rem;-moz-border-radius:.3rem;border-radius:.3rem}.wpacu-btns .btn-group-sm>.btn,.wpacu-btns .btn-sm{padding:.25rem .5rem;font-size:.875rem;-webkit-border-radius:.2rem;-moz-border-radius:.2rem;border-radius:.2rem}.wpacu-btns .btn-block{display:block;width:100%}.wpacu-btns .btn-block+.btn-block{margin-top:.5rem}.wpacu-btns input[type=submit].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].btn-block{width:100%}.wpacu-btns .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.go-pro-button{background-color:#4CAF50;border:2px solid #4CAF50;color:#fff;padding:12px 18px;text-align:center;text-decoration:none;display:inline-block;font-size:16px;margin:4px 2px;cursor:pointer;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-transition-duration:.4s;transition-duration:.4s}.go-pro-button:hover{background-color:#fff;color:#000;border:2px solid #4CAF50;text-decoration:none}body.wp-admin .wpacu_asset_row .go-pro-link-no-style .wpacu-tooltip{padding:8px 2px}body.wp-admin .go-pro-link-no-style .wpacu-tooltip{font-weight:400;font-size:12px;line-height:16px;padding:8px 11px}.go-pro-link-no-style{position:relative;display:inline-block;color:inherit;text-decoration:none}.go-pro-link-no-style:not(.nav-tab){font-style:italic}.go-pro-link-no-style.no-transition .wpacu-tooltip{-webkit-transition:0s all ease;transition:0s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:130px;background-color:#27ae60;color:#fff;text-align:center;padding:8px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-65px;-webkit-transition:.2s all ease;transition:.2s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#27ae60 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wordpress-core-file{position:relative;display:inline-block;font-style:normal;color:inherit;text-decoration:none}.wordpress-core-file .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#c00;color:#fff;text-align:center;padding:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-86px;-webkit-transition:.5s all ease;transition:.5s all ease;-webkit-transition-delay:0s;transition-delay:0s}.wordpress-core-file .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#c00 transparent transparent}.wordpress-core-file:hover .wpacu-tooltip{visibility:visible}.ajax-direct-call-error-area{background:#fff;padding:10px;border:1px solid #c00;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.ajax-direct-call-error-area td{padding:6px}.ajax-direct-call-error-area .note{margin-top:0;padding-top:0}.ajax-direct-call-error-area .error-code{color:#c00;font-weight:700}.ajax-wp-remote-post-call-error-area{background:#fff;padding:20px}.ajax-wp-remote-post-call-error-area .table-data{background:0 0;border:1px solid #c66;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.ajax-wp-remote-post-call-error-area .table-data td{padding:10px}.wrap-upgrade-info{background:#fff;padding:0 15px;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-notice{margin:20px 20px 0 0!important}.wpacu-notice p{font-weight:600!important;font-style:italic}.wpacu-notice .dashicons{font-weight:inherit!important;color:#46b450!important;margin-right:4px;vertical-align:text-bottom;font-size:27px}.wpacu-notice-info{padding:12px 12px 12px 16px;background:#fff;border-left:4px solid #0085ba}.wpacu-notice-info p{margin-top:8px}.wpacu-notice-info p:first-child{margin-top:0}.wpacu-notice-info p:last-child{margin-bottom:0}.wpacu-warning{font-size:15px;padding:10px;background:#fffcec;border:1px solid #fdd5c9;margin:0 0 5px;width:100%}.pro-page-unlock-notice{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;padding:10px;background:#f2faf2;border:1px solid #c0e8c0;width:auto;display:block}.wpacu-license-area .notice,.wpacu-settings-area .notice{margin-left:0;padding:10px!important;width:97%;box-sizing:border-box;font-weight:600;font-style:italic}.wpacu-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons{color:green}#wpacu-dom-get-type-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child{margin-right:0}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch{width:auto;height:auto}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input{display:block}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox],.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox]{margin:0 0 3px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:2px;line-height:1.2}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em{font-weight:200}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_read_more,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_read_more{margin-top:-10px;font-style:italic;font-size:12px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices{list-style:none;margin:0}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li{float:left;margin-right:30px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li:last-child{margin-right:0}.wpacu-form-table th{vertical-align:top;text-align:left;padding:5px 20px 20px 0;width:200px;line-height:1.3;font-weight:600}.wpacu-form-table th label{color:#23282d;font-weight:600;font-size:14px;text-shadow:none;vertical-align:middle;cursor:pointer}.wpacu-form-table td{padding-bottom:25px}.wpacu-form-table td:last-child p:last-child{margin:0}.wrap_bulk_unload_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wrap_bulk_unload_options .wpacu_asset_options_wrap{flex-grow:1;margin:5px 10px 14px 0!important;padding:8px 10px 2px!important}.wrap_bulk_unload_options .wpacu_asset_options_wrap .wpacu_slider_text{position:relative!important;vertical-align:top;left:inherit!important;top:inherit!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px;margin-right:5px!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input{display:none}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider{background-color:#C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.wpacu_asset_row td{width:100%}.wpacu_asset_row td p:last-child{margin-bottom:0!important}.wpacu_asset_row td .wpacu_asset_options_wrap{padding:8px 10px;margin:15px 0;background:#fff;border:1px solid #eee;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu_asset_row td .wpacu_asset_options_wrap p:first-child{margin-top:0;margin-bottom:8px!important}.wpacu_asset_row p.wpacu_handle{margin-top:0}.wpacu_asset_row li.wpacu_unload_this_page{display:block!important;position:relative}.wpacu-clearfix:after,.wpacu-clearfix:before{content:'';display:table}.wpacu-contract-expand-area{width:100%;margin:20px 0 0}.wpacu-contract-expand-area .col-left{float:left}.wpacu-contract-expand-area .col-left h4{margin-bottom:0}.wpacu-contract-expand-area .col-right{float:right}.wpacu-clearfix:after{clear:both}.wpacu-wp-button{color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:0 1px 0 #ccc;vertical-align:top}body.wp-admin .wpacu-wp-button{font-size:13px;line-height:26px;height:28px}.wpacu-wp-button.wpacu-wp-button-secondary{display:inline-block;text-decoration:none;height:auto;margin:0 5px 0 0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wpacu-wp-button:hover{background:#fafafa;border-color:#999;color:#23282d}.distinguish-asset-list{list-style:none;margin-left:0;margin-bottom:5px;display:inline-block}.distinguish-asset-list li{float:left;margin-right:20px}.distinguish-asset-list li:last-child{margin-right:0}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all,.wpacu-assets-collapsible-wrap.wpacu-wrap-styles{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-scripts{margin-top:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location>a.wpacu-assets-collapsible{padding:15px 15px 15px 43px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu_list_table{border-spacing:inherit;width:100%;box-shadow:3px 3px 2px #ddd;border-bottom-right-radius:5px;border-top-right-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-name{font-weight:600}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-version{font-weight:200}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area strong{position:relative;padding:9px 10px 10px 15px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-location-child-area strong:after,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area strong:after{content:'';position:absolute;width:100%;left:0;bottom:0;height:1px;background-color:#fdfdfd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-location-child-area strong{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-bottom:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:14px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area strong{border-top-right-radius:8px;border-top-left-radius:8px;background-color:#f9f9f9;border-left:1px solid #cdcdcd;border-top:1px solid #cdcdcd;border-bottom:1px solid transparent;border-right:1px solid #cdcdcd;position:relative;padding:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon){color:#b4b9be;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon) .icon-area:before{content:"\f106";font-family:Dashicons;position:absolute;font-size:28px;line-height:28px;top:5px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content{padding:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table{width:100%;margin:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td{border-left:hidden;border-right:hidden;border-bottom:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child{margin-bottom:0!important}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child{border-bottom:hidden}a.wpacu-assets-collapsible{color:#000;font-size:20px;text-decoration:none;display:block;position:relative;background-color:#f1f3f8;cursor:pointer;padding:15px 15px 15px 36px;width:auto;border:none;text-align:left;outline:0}a.wpacu-assets-collapsible>span.dashicons{font-size:25px;line-height:normal;position:absolute;top:15px;top:calc(50% - 21px);left:22px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-collapsible:hover{background-color:#f1f3f8;text-decoration:none}a.wpacu-assets-collapsible:after{position:absolute;font-size:22px;font-family:Dashicons;right:14px;top:16px}a.wpacu-assets-collapsible:not(.wpacu-assets-collapsible-active):after{content:"\f132"}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:"\f460"}.wpacu-assets-collapsible-content{padding:0 16px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-collapsible-content .wpacu-assets-note{margin:0;padding:15px 15px 10px}.wpacu-assets-collapsible-content>div{padding:16px 0 0}.wpacu-assets-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-collapsible-content.wpacu-open{max-height:100%}a.wpacu-assets-inline-code-collapsible{color:inherit;font-size:14px;text-decoration:none;display:inline-block;position:relative;cursor:pointer;width:auto;outline:0;background:#f1f3f8;border:1px solid #cdcdcd;padding:4px 21px 4px 8px;margin:0 0 0 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}a.wpacu-assets-inline-code-collapsible:hover{border:1px solid #5c5c5c}a.wpacu-assets-inline-code-collapsible:after{position:absolute;font-size:15px;font-family:Dashicons;right:-3px;top:-1px;height:14px;width:14px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-inline-code-collapsible:not(.wpacu-assets-inline-code-collapsible-active):after{content:"\f132"}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:"\f460"}.wpacu-assets-inline-code-collapsible-content{font-size:80%;padding:0 8px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-inline-code-collapsible-content>div{padding:7px 8px 0}.wpacu-assets-inline-code-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-inline-code-collapsible-content.wpacu-open{max-height:100%}.wpacu_table_wrap{margin:20px 0 0}.wpacu_table_wrap>table{border:1px solid #cdcdcd}.wpacu_table_wrap .table{width:100%;max-width:100%;margin-bottom:1rem;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu_table_wrap .table td,.wpacu_table_wrap .table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.wpacu_table_wrap .table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.wpacu_table_wrap .table tbody+tbody{border-top:2px solid #eceeef}.wpacu_table_wrap .table .table{background-color:#fff}.wpacu_table_wrap .table-sm td,.wpacu_table_wrap .table-sm th{padding:.3rem}.wpacu_table_wrap .table-bordered,.wpacu_table_wrap .table-bordered td,.wpacu_table_wrap .table-bordered th{border:1px solid #eceeef}.wpacu_table_wrap .table-bordered thead td,.wpacu_table_wrap .table-bordered thead th{border-bottom-width:2px}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(even){background-color:#f9f9f9}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(odd){background-color:#fff}.wpacu_table_wrap .table-active,.wpacu_table_wrap .table-active>td,.wpacu_table_wrap .table-active>th,.wpacu_table_wrap .table-hover .table-active:hover,.wpacu_table_wrap .table-hover .table-active:hover>td,.wpacu_table_wrap .table-hover .table-active:hover>th,.wpacu_table_wrap .table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.wpacu_table_wrap .table-success,.wpacu_table_wrap .table-success>td,.wpacu_table_wrap .table-success>th{background-color:#dff0d8}.wpacu_table_wrap .table-hover .table-success:hover,.wpacu_table_wrap .table-hover .table-success:hover>td,.wpacu_table_wrap .table-hover .table-success:hover>th{background-color:#d0e9c6}.wpacu_table_wrap .table-info,.wpacu_table_wrap .table-info>td,.wpacu_table_wrap .table-info>th{background-color:#d9edf7}.wpacu_table_wrap .table-hover .table-info:hover,.wpacu_table_wrap .table-hover .table-info:hover>td,.wpacu_table_wrap .table-hover .table-info:hover>th{background-color:#c4e3f3}.wpacu_table_wrap .table-warning,.wpacu_table_wrap .table-warning>td,.wpacu_table_wrap .table-warning>th{background-color:#fcf8e3}.wpacu_table_wrap .table-hover .table-warning:hover,.wpacu_table_wrap .table-hover .table-warning:hover>td,.wpacu_table_wrap .table-hover .table-warning:hover>th{background-color:#faf2cc}.wpacu_table_wrap .table-danger,.wpacu_table_wrap .table-danger>td,.wpacu_table_wrap .table-danger>th{background-color:#f2dede}.wpacu_table_wrap .table-hover .table-danger:hover,.wpacu_table_wrap .table-hover .table-danger:hover>td,.wpacu_table_wrap .table-hover .table-danger:hover>th{background-color:#ebcccc}.wpacu_table_wrap .thead-inverse th{color:#fff;background-color:#292b2c}.wpacu_table_wrap .thead-default th{color:#464a4c;background-color:#eceeef}.wpacu_table_wrap .table-inverse{color:#fff;background-color:#292b2c}.wpacu_table_wrap .table-inverse td,.wpacu_table_wrap .table-inverse th,.wpacu_table_wrap .table-inverse thead th{border-color:#fff}.wpacu_table_wrap .table-inverse.table-bordered,.wpacu_table_wrap .table-responsive.table-bordered{border:0}.wpacu_table_wrap .table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}ul.hire-reasons{margin-bottom:20px}ul.hire-reasons li{font-size:14px;line-height:22px;margin-bottom:12px}ul.hire-reasons li .dashicons{font-size:23px;line-height:23px}ul.hire-reasons li .dashicons.dashicons-yes{color:green}ol.getting-started li{font-size:14px;line-height:22px;margin-bottom:8px}.wpacu-get-help-wrap p{font-size:14px}.wpacu-get-help-wrap .help-content-wrap{margin:20px 0 25px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;width:100%}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-align:start;-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wpacu-get-help-wrap .help-content-wrap .help-content{padding:15px;background:#fff;border:1px solid #E0E0E0;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:2px 3px 8px 0 #231f2038;flex:1 1 50%;margin-bottom:10px}.wpacu-get-help-wrap .help-content-wrap .help-content .content-title{margin:5px 0 15px}.wpacu-get-help-wrap .help-content-wrap .help-content .cols-wrap{width:100%;margin:0 auto;display:table}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area{margin:5px 0 0;position:relative}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-left{float:left;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-right{float:right;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.activate-plugin img{max-width:280px}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area img{width:99%;margin:8px 0;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{order:2}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap .help-content{margin-right:24px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{margin-right:0}}.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{order:1}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{margin-bottom:30px}}.wpacu-get-help-wrap .help-content-wrap .help-content ul{list-style:none;padding-left:0}.wpacu-get-help-wrap .help-content-wrap .help-content ul li{font-size:14px;line-height:22px;margin-bottom:15px}.wpacu-get-help-wrap .help-content-wrap .help-content p:last-child,.wpacu-get-help-wrap .help-content-wrap .help-content ul li:last-child{margin-bottom:0}#wpacu-license-data-remove-area{display:none;margin:10px 0 25px}#wpacu-license-data-remove-area.wpacu-visible{display:block}span#wpacu-license-data-removed-msg{display:block;padding-left:26px}#wpacu-warning-read{display:none;margin:10px 0}#wpacu-warning-read span.dashicons-warning{color:#c00}#wpacu-warning-read.wpacu-visible{display:block}#wpacu-reset-submit-area{margin:10px 0;clear:both}#wpacu-reset-submit-btn{margin:10px 0 0}.wpacu-tools-area{margin:10px 20px 0 2px}.wpacu-tools-area .wpacu-tools-container{background:#fff;padding:15px;border:1px solid #cdcdcd;width:96%}.wpacu-tools-area .wpacu-tools-container form>div:first-child{margin:0 0 10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning{display:none;box-sizing:border-box;margin-top:10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p{margin:0 0 10px;line-height:22px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p:only-child{margin:0}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning ul{font-size:13px;list-style-type:disc;padding-left:30px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning.wpacu-visible{display:block}.wpacu-about-wrap .wpacu-about-text img{width:auto;height:150px;position:absolute;top:20px;right:-20px}@media only screen and (max-width:767px){.wpacu-about-wrap h1{margin:20px}.wpacu-about-wrap .wpacu-about-text img{display:none}.wpacu-about-wrap .wpacu-about-text{margin:20px}}.wpacu-about-wrap .about-wrap-content .area-title{font-size:19px;line-height:19px;margin-bottom:0}.wpacu-about-wrap hr{margin:10px 0}
|
classes/AdminBar.php
CHANGED
@@ -54,10 +54,10 @@ class AdminBar
|
|
54 |
if (Main::instance()->settings['combine_loaded_css']) {
|
55 |
$wp_admin_bar->add_menu( array(
|
56 |
'parent' => 'assetcleanup-parent',
|
57 |
-
'id' => 'assetcleanup-clear-
|
58 |
-
'title' => 'Clear Combined
|
59 |
'href' => wp_nonce_url( admin_url( 'admin-post.php?action=assetcleanup_clear_assets_cache' . $goBackToCurrentUrl ),
|
60 |
-
'
|
61 |
) );
|
62 |
}
|
63 |
|
@@ -113,20 +113,5 @@ class AdminBar
|
|
113 |
'meta' => array('target' => '_blank')
|
114 |
));
|
115 |
|
116 |
-
/*
|
117 |
-
if (Main::instance()->settings['test_mode']) {
|
118 |
-
$wp_admin_bar->add_menu(array(
|
119 |
-
'parent' => 'assetcleanup-parent',
|
120 |
-
'id' => 'assetcleanup-test-mode-info',
|
121 |
-
'title' => 'With "Test Mode" on, anything will be applied only for your view.',
|
122 |
-
));
|
123 |
-
|
124 |
-
$wp_admin_bar->add_menu(array(
|
125 |
-
'parent' => 'assetcleanup-parent',
|
126 |
-
'id' => 'assetcleanup-test-mode-info-2',
|
127 |
-
'title' => 'The visitors will see the pages as if the plugin is disabled. <a target="_blank" style="display:inline-block; text-decoration: underline; padding-left: 5px;" href="https://assetcleanup.com/docs/">More</a>',
|
128 |
-
));
|
129 |
}
|
130 |
-
*/
|
131 |
-
}
|
132 |
}
|
54 |
if (Main::instance()->settings['combine_loaded_css']) {
|
55 |
$wp_admin_bar->add_menu( array(
|
56 |
'parent' => 'assetcleanup-parent',
|
57 |
+
'id' => 'assetcleanup-clear-combined-files-cache',
|
58 |
+
'title' => 'Clear Combined Files Cache',
|
59 |
'href' => wp_nonce_url( admin_url( 'admin-post.php?action=assetcleanup_clear_assets_cache' . $goBackToCurrentUrl ),
|
60 |
+
'assetcleanup_clear_assets_cache' )
|
61 |
) );
|
62 |
}
|
63 |
|
113 |
'meta' => array('target' => '_blank')
|
114 |
));
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
}
|
|
|
|
|
117 |
}
|
classes/Main.php
CHANGED
@@ -290,10 +290,9 @@ class Main
|
|
290 |
$type = 'post';
|
291 |
$post = $getCurrentPost;
|
292 |
$this->postTypesUnloaded = $this->getBulkUnload('post_type', $post->post_type);
|
293 |
-
}
|
294 |
-
|
295 |
-
|
296 |
-
} else {
|
297 |
// The request is done for a page such as is_archive(), is_author(), 404, search
|
298 |
// and the premium extension is not available, thus no load exceptions are available
|
299 |
return;
|
@@ -349,8 +348,7 @@ class Main
|
|
349 |
$data = array();
|
350 |
|
351 |
$data['get_assets'] = $getAssets;
|
352 |
-
|
353 |
-
$data['fetch_url'] = Misc::getPageUrl($postId);
|
354 |
|
355 |
$this->parseTemplate('meta-box', $data, true);
|
356 |
}
|
@@ -629,16 +627,9 @@ class Main
|
|
629 |
$exceptionsListJson = get_option(
|
630 |
WPACU_PLUGIN_ID . '_front_page_load_exceptions'
|
631 |
);
|
632 |
-
} elseif ($type === 'for_pro' && Main::wpacuProEnabled()) {
|
633 |
-
// [wpacu_pro]
|
634 |
-
if (class_exists( '\\WpAssetCleanUpPro\\LoadExceptions' )) {
|
635 |
-
$ExceptionsPro = new \WpAssetCleanUpPro\LoadExceptions();
|
636 |
-
$exceptionsListJson = $ExceptionsPro->getLoadExceptions();
|
637 |
-
}
|
638 |
-
// [/wpacu_pro]
|
639 |
}
|
640 |
|
641 |
-
|
642 |
$exceptionsList = json_decode($exceptionsListJson, true);
|
643 |
|
644 |
if (json_last_error() !== JSON_ERROR_NONE) {
|
@@ -646,15 +637,7 @@ class Main
|
|
646 |
}
|
647 |
}
|
648 |
|
649 |
-
|
650 |
-
if (! empty($_POST)) {
|
651 |
-
echo '<pre>';
|
652 |
-
print_r( $exceptionsList );
|
653 |
-
exit;
|
654 |
-
}
|
655 |
-
*/
|
656 |
-
|
657 |
-
return $exceptionsList;
|
658 |
}
|
659 |
|
660 |
/**
|
@@ -790,10 +773,6 @@ class Main
|
|
790 |
}
|
791 |
}
|
792 |
|
793 |
-
// [wpacu_pro]
|
794 |
-
$currentUnloadedAll = apply_filters('wpacu_pro_filter_all_bulk_unloads', $currentUnloadedAll);
|
795 |
-
// [/wpacu_pro]
|
796 |
-
|
797 |
$manageStyles = $wp_styles->done;
|
798 |
$manageScripts = $wp_scripts->done;
|
799 |
|
@@ -992,14 +971,8 @@ class Main
|
|
992 |
$type = 'front_page';
|
993 |
} elseif ($this->getCurrentPostId() > 0) {
|
994 |
$type = 'post';
|
995 |
-
} else {
|
996 |
-
// [wpacu_pro]
|
997 |
-
// $this->getCurrentPostId() would be 0
|
998 |
-
$type = 'for_pro';
|
999 |
-
// [/wpacu_pro]
|
1000 |
}
|
1001 |
-
|
1002 |
-
$data['load_exceptions'] = $this->getLoadExceptions($type, $this->getCurrentPostId());
|
1003 |
// [wpacu_lite]
|
1004 |
} else {
|
1005 |
$data['is_updateable'] = false;
|
@@ -1030,13 +1003,7 @@ class Main
|
|
1030 |
$data = $this->setPageTemplate($data);
|
1031 |
}
|
1032 |
|
1033 |
-
|
1034 |
-
// If the premium extension is enabled, it will also pull the other bulk unloads
|
1035 |
-
// such as 'taxonomy', 'author' etc.
|
1036 |
-
$data = apply_filters('wpacu_pro_get_bulk_unloads', $data);
|
1037 |
-
// [/wpacu_pro]
|
1038 |
-
|
1039 |
-
$data['total_styles'] = ! empty($data['all']['styles']) ? count($data['all']['styles']) : 0;
|
1040 |
$data['total_scripts'] = ! empty($data['all']['scripts']) ? count($data['all']['scripts']) : 0;
|
1041 |
|
1042 |
$this->parseTemplate('settings-frontend', $data, true);
|
@@ -1185,22 +1152,10 @@ class Main
|
|
1185 |
}
|
1186 |
}
|
1187 |
|
1188 |
-
|
1189 |
-
// If the pro version is used, it will also pull the other bulk unloads such as 'taxonomy', 'author' etc.
|
1190 |
-
$data = apply_filters('wpacu_pro_get_bulk_unloads', $data);
|
1191 |
-
// [/wpacu_pro]
|
1192 |
-
|
1193 |
-
// For debug purposes
|
1194 |
-
//unset($data['contents']); echo '<pre>'; print_r($data); exit;
|
1195 |
-
|
1196 |
-
//echo '<pre>'; print_r($data['bulk_unloaded']['post_type']);
|
1197 |
-
if ($postId > 0) {
|
1198 |
$type = 'post';
|
1199 |
-
}
|
1200 |
-
|
1201 |
-
$type = 'for_pro';
|
1202 |
-
// [/wpacu_pro]
|
1203 |
-
} elseif($postId == 0) {
|
1204 |
$type = 'front_page';
|
1205 |
}
|
1206 |
|
@@ -1412,12 +1367,6 @@ class Main
|
|
1412 |
$this->assetsRemoved = get_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_no_load', true);
|
1413 |
}
|
1414 |
|
1415 |
-
// [wpacu_pro]
|
1416 |
-
// Premium Extension: Filter assets for pages such as category, tag, author, dates etc.
|
1417 |
-
// Retrieves "per page" list of unloaded CSS and JavaScript
|
1418 |
-
$this->assetsRemoved = apply_filters('wpacu_pro_get_assets_unloaded', $this->assetsRemoved);
|
1419 |
-
// [/wpacu_pro]
|
1420 |
-
|
1421 |
@json_decode($this->assetsRemoved);
|
1422 |
|
1423 |
if (! (json_last_error() === JSON_ERROR_NONE) || empty($this->assetsRemoved)) {
|
@@ -1488,16 +1437,9 @@ class Main
|
|
1488 |
// Undetectable? The page is not a singular one nor the home page
|
1489 |
// It's likely an archive, category page (WooCommerce), 404 page etc.
|
1490 |
if (! $this->currentPostId && ! Misc::isHomePage()) {
|
1491 |
-
|
1492 |
-
|
1493 |
-
if ($this->wpacuProEnabled()) {
|
1494 |
-
// Could be archive of: Category, Tag, Author, Date, Custom Post Type or Custom Taxonomy based pages.
|
1495 |
-
// Or: Search, 404 page etc.
|
1496 |
-
$this->isUpdateable = true;
|
1497 |
-
} else {
|
1498 |
-
$this->isUpdateable = false;
|
1499 |
}
|
1500 |
-
}
|
1501 |
|
1502 |
// [/wpacu_lite]
|
1503 |
|
@@ -1683,16 +1625,6 @@ class Main
|
|
1683 |
return false;
|
1684 |
}
|
1685 |
|
1686 |
-
// [wpacu_pro]
|
1687 |
-
/**
|
1688 |
-
* @return bool
|
1689 |
-
*/
|
1690 |
-
public function wpacuProEnabled()
|
1691 |
-
{
|
1692 |
-
return defined('WPACU_PRO_PLUGIN_FILE');
|
1693 |
-
}
|
1694 |
-
// [/wpacu_pro]
|
1695 |
-
|
1696 |
// [wpacu_lite]
|
1697 |
/**
|
1698 |
*
|
290 |
$type = 'post';
|
291 |
$post = $getCurrentPost;
|
292 |
$this->postTypesUnloaded = $this->getBulkUnload('post_type', $post->post_type);
|
293 |
+
}
|
294 |
+
|
295 |
+
else {
|
|
|
296 |
// The request is done for a page such as is_archive(), is_author(), 404, search
|
297 |
// and the premium extension is not available, thus no load exceptions are available
|
298 |
return;
|
348 |
$data = array();
|
349 |
|
350 |
$data['get_assets'] = $getAssets;
|
351 |
+
$data['fetch_url'] = Misc::getPageUrl($postId);
|
|
|
352 |
|
353 |
$this->parseTemplate('meta-box', $data, true);
|
354 |
}
|
627 |
$exceptionsListJson = get_option(
|
628 |
WPACU_PLUGIN_ID . '_front_page_load_exceptions'
|
629 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
630 |
}
|
631 |
|
632 |
+
if ($exceptionsListJson) {
|
633 |
$exceptionsList = json_decode($exceptionsListJson, true);
|
634 |
|
635 |
if (json_last_error() !== JSON_ERROR_NONE) {
|
637 |
}
|
638 |
}
|
639 |
|
640 |
+
return $exceptionsList;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
641 |
}
|
642 |
|
643 |
/**
|
773 |
}
|
774 |
}
|
775 |
|
|
|
|
|
|
|
|
|
776 |
$manageStyles = $wp_styles->done;
|
777 |
$manageScripts = $wp_scripts->done;
|
778 |
|
971 |
$type = 'front_page';
|
972 |
} elseif ($this->getCurrentPostId() > 0) {
|
973 |
$type = 'post';
|
|
|
|
|
|
|
|
|
|
|
974 |
}
|
975 |
+
$data['load_exceptions'] = $this->getLoadExceptions($type, $this->getCurrentPostId());
|
|
|
976 |
// [wpacu_lite]
|
977 |
} else {
|
978 |
$data['is_updateable'] = false;
|
1003 |
$data = $this->setPageTemplate($data);
|
1004 |
}
|
1005 |
|
1006 |
+
$data['total_styles'] = ! empty($data['all']['styles']) ? count($data['all']['styles']) : 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
1007 |
$data['total_scripts'] = ! empty($data['all']['scripts']) ? count($data['all']['scripts']) : 0;
|
1008 |
|
1009 |
$this->parseTemplate('settings-frontend', $data, true);
|
1152 |
}
|
1153 |
}
|
1154 |
|
1155 |
+
if ($postId > 0) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1156 |
$type = 'post';
|
1157 |
+
}
|
1158 |
+
elseif($postId == 0) {
|
|
|
|
|
|
|
1159 |
$type = 'front_page';
|
1160 |
}
|
1161 |
|
1367 |
$this->assetsRemoved = get_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_no_load', true);
|
1368 |
}
|
1369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1370 |
@json_decode($this->assetsRemoved);
|
1371 |
|
1372 |
if (! (json_last_error() === JSON_ERROR_NONE) || empty($this->assetsRemoved)) {
|
1437 |
// Undetectable? The page is not a singular one nor the home page
|
1438 |
// It's likely an archive, category page (WooCommerce), 404 page etc.
|
1439 |
if (! $this->currentPostId && ! Misc::isHomePage()) {
|
1440 |
+
$this->isUpdateable = false;
|
1441 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
1442 |
}
|
|
|
1443 |
|
1444 |
// [/wpacu_lite]
|
1445 |
|
1625 |
return false;
|
1626 |
}
|
1627 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1628 |
// [wpacu_lite]
|
1629 |
/**
|
1630 |
*
|
classes/Misc.php
CHANGED
@@ -85,6 +85,27 @@ class Misc
|
|
85 |
return trim($strThree); // remove whitespaces;
|
86 |
}
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
/**
|
89 |
* @return string
|
90 |
*/
|
@@ -127,21 +148,7 @@ class Misc
|
|
127 |
return self::_filterPageUrl(get_permalink($postId));
|
128 |
}
|
129 |
|
130 |
-
|
131 |
-
if (is_admin() && Main::instance()->wpacuProEnabled()) {
|
132 |
-
$wpacuOwnAssets = new OwnAssets();
|
133 |
-
|
134 |
-
if ($wpacuOwnAssets->isTaxonomyEditPage()) {
|
135 |
-
$current_screen = \get_current_screen();
|
136 |
-
|
137 |
-
$term = isset($_GET['tag_ID']) ? (int)$_GET['tag_ID'] : false;
|
138 |
-
$taxonomy = $current_screen->taxonomy;
|
139 |
-
|
140 |
-
return get_term_link($term, $taxonomy);
|
141 |
-
}
|
142 |
-
}
|
143 |
-
|
144 |
-
// If it's not a singular page, nor the home page, continue...
|
145 |
// It could be: Archive page (e.g. author, category, tag, date, custom taxonomy), Search page, 404 page etc.
|
146 |
global $wp;
|
147 |
|
85 |
return trim($strThree); // remove whitespaces;
|
86 |
}
|
87 |
|
88 |
+
/**
|
89 |
+
* @param $string
|
90 |
+
* @param $endsWithString
|
91 |
+
* @return bool
|
92 |
+
*/
|
93 |
+
public static function endsWith($string, $endsWithString)
|
94 |
+
{
|
95 |
+
$stringLen = strlen($string);
|
96 |
+
$endsWithStringLen = strlen($endsWithString);
|
97 |
+
|
98 |
+
if ($endsWithStringLen > $stringLen) {
|
99 |
+
return false;
|
100 |
+
}
|
101 |
+
|
102 |
+
return (substr_compare(
|
103 |
+
$string,
|
104 |
+
$endsWithString,
|
105 |
+
$stringLen - $endsWithStringLen, $endsWithStringLen
|
106 |
+
) === 0);
|
107 |
+
}
|
108 |
+
|
109 |
/**
|
110 |
* @return string
|
111 |
*/
|
148 |
return self::_filterPageUrl(get_permalink($postId));
|
149 |
}
|
150 |
|
151 |
+
// If it's not a singular page, nor the home page, continue...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
// It could be: Archive page (e.g. author, category, tag, date, custom taxonomy), Search page, 404 page etc.
|
153 |
global $wp;
|
154 |
|
classes/OptimiseAssets/CombineCommon.php
ADDED
@@ -0,0 +1,412 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace WpAssetCleanUp\OptimiseAssets;
|
3 |
+
|
4 |
+
use WpAssetCleanUp\Misc;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class CombineCommon
|
8 |
+
* @package WpAssetCleanUp
|
9 |
+
*/
|
10 |
+
class CombineCommon
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
public static $relPathPluginCacheDir = '/cache/asset-cleanup/';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* CombineCommon constructor.
|
19 |
+
*/
|
20 |
+
public function __construct()
|
21 |
+
{
|
22 |
+
add_action('switch_theme', array($this, 'clearAllCache'));
|
23 |
+
add_action('after_switch_theme', array($this, 'clearAllCache'));
|
24 |
+
|
25 |
+
// Is WP Rocket's page cache cleared? Clear Asset CleanUp's CSS cache files too
|
26 |
+
if (array_key_exists('action', $_GET) && $_GET['action'] === 'purge_cache') {
|
27 |
+
add_action( 'before_rocket_clean_domain', array( $this, 'clearAllCache' ) );
|
28 |
+
}
|
29 |
+
|
30 |
+
add_action('admin_post_assetcleanup_clear_assets_cache', function() {
|
31 |
+
$this->clearAllCache(true);
|
32 |
+
});
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Is this a regular WordPress page (not feed, REST API etc.)?
|
37 |
+
* If not, do not proceed with any CSS/JS combine
|
38 |
+
*
|
39 |
+
* @return bool
|
40 |
+
*/
|
41 |
+
public static function doCombineIsRegularPage()
|
42 |
+
{
|
43 |
+
// In particular situations, do not process this
|
44 |
+
if ( strpos($_SERVER['REQUEST_URI'], '/wp-content/plugins/') !== false
|
45 |
+
&& strpos($_SERVER['REQUEST_URI'], '/wp-content/themes/') !== false) {
|
46 |
+
return false;
|
47 |
+
}
|
48 |
+
|
49 |
+
if (Misc::endsWith($_SERVER['REQUEST_URI'], '/comments/feed/')) {
|
50 |
+
return false;
|
51 |
+
}
|
52 |
+
|
53 |
+
if (str_replace('//', '/', site_url().'/feed/') === $_SERVER['REQUEST_URI']) {
|
54 |
+
return false;
|
55 |
+
}
|
56 |
+
|
57 |
+
if (is_feed()) { // any kind of feed page
|
58 |
+
return false;
|
59 |
+
}
|
60 |
+
|
61 |
+
return true;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @param $filesSources
|
66 |
+
* @param $htmlSource
|
67 |
+
* @param $assetType
|
68 |
+
*
|
69 |
+
* @return mixed
|
70 |
+
*/
|
71 |
+
public static function stripJustCombinedFileTags($filesSources, $htmlSource, $assetType = 'css')
|
72 |
+
{
|
73 |
+
if ($assetType === 'css') {
|
74 |
+
$tagName = 'link';
|
75 |
+
$sourceAttr = 'href';
|
76 |
+
$regExpPattern = '#<link[^>]*stylesheet[^>]*(>)#Usmi';
|
77 |
+
} else {
|
78 |
+
return $htmlSource;
|
79 |
+
}
|
80 |
+
|
81 |
+
preg_match_all($regExpPattern, $htmlSource, $matchesSourcesFromTags, PREG_SET_ORDER);
|
82 |
+
|
83 |
+
$linkTagsStripped = 0;
|
84 |
+
|
85 |
+
foreach ($matchesSourcesFromTags as $matchSourceFromTag) {
|
86 |
+
$matchedSourceFromTag = trim($matchSourceFromTag[0]);
|
87 |
+
|
88 |
+
$domTag = new \DOMDocument();
|
89 |
+
$domTag->loadHTML($matchedSourceFromTag);
|
90 |
+
|
91 |
+
foreach ($domTag->getElementsByTagName( $tagName ) as $tagObject) {
|
92 |
+
if (! $tagObject->hasAttributes()) {
|
93 |
+
continue;
|
94 |
+
}
|
95 |
+
|
96 |
+
foreach ($tagObject->attributes as $tagAttrs) {
|
97 |
+
if ($tagAttrs->nodeName === $sourceAttr && in_array($tagAttrs->nodeValue, $filesSources)) {
|
98 |
+
$replaceWith = '';
|
99 |
+
|
100 |
+
$htmlSourceBeforeLinkTagReplacement = $htmlSource;
|
101 |
+
$htmlSource = str_replace($matchedSourceFromTag, $replaceWith, $htmlSource);
|
102 |
+
|
103 |
+
if ($htmlSource !== $htmlSourceBeforeLinkTagReplacement) {
|
104 |
+
$linkTagsStripped++;
|
105 |
+
}
|
106 |
+
|
107 |
+
continue;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
if ($linkTagsStripped < 2) {
|
114 |
+
return 'do_not_combine';
|
115 |
+
}
|
116 |
+
|
117 |
+
return $htmlSource;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* @param $href
|
122 |
+
* @param $assetType
|
123 |
+
*
|
124 |
+
* @return bool|string
|
125 |
+
*/
|
126 |
+
public static function getLocalAssetPath($href, $assetType)
|
127 |
+
{
|
128 |
+
/*
|
129 |
+
* Validate it first
|
130 |
+
*/
|
131 |
+
// Asset's Host
|
132 |
+
$assetHost = strtolower(parse_url($href, PHP_URL_HOST));
|
133 |
+
|
134 |
+
// First check the host name
|
135 |
+
$siteDbUrl = get_option('siteurl');
|
136 |
+
$siteUrlHost = strtolower(parse_url($siteDbUrl, PHP_URL_HOST));
|
137 |
+
|
138 |
+
if ($assetHost !== $siteUrlHost) {
|
139 |
+
return false;
|
140 |
+
}
|
141 |
+
|
142 |
+
$hrefRelPath = self::getHrefRelPath($href);
|
143 |
+
|
144 |
+
if (strpos($hrefRelPath, '/') === 0) {
|
145 |
+
$hrefRelPath = substr($hrefRelPath, 1);
|
146 |
+
}
|
147 |
+
|
148 |
+
$localAssetPath = ABSPATH . $hrefRelPath;
|
149 |
+
|
150 |
+
if (strpos($localAssetPath, '?ver=') !== false) {
|
151 |
+
list($localAssetPathAlt,) = explode('?ver=', $localAssetPath);
|
152 |
+
$localAssetPath = $localAssetPathAlt;
|
153 |
+
}
|
154 |
+
|
155 |
+
// The file needs to have the .css or .js extension (not .php)
|
156 |
+
// as it will be later read via file_get_contents()
|
157 |
+
if (strrchr($localAssetPath, '.') === '.'.$assetType && file_exists($localAssetPath)) {
|
158 |
+
return $localAssetPath;
|
159 |
+
}
|
160 |
+
|
161 |
+
return false;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @param $href
|
166 |
+
*
|
167 |
+
* @return mixed
|
168 |
+
*/
|
169 |
+
public static function getHrefRelPath($href)
|
170 |
+
{
|
171 |
+
$parseUrl = parse_url($href);
|
172 |
+
$hrefHost = $parseUrl['host'];
|
173 |
+
|
174 |
+
// Sometimes host is different on Staging websites such as the ones from Siteground
|
175 |
+
// e.g. staging1.domain.com and domain.com
|
176 |
+
// We need to make sure that the URI path is fetched correctly based on the host value from the $href
|
177 |
+
$siteDbUrl = get_option('siteurl');
|
178 |
+
$parseDbSiteUrl = parse_url($siteDbUrl);
|
179 |
+
|
180 |
+
$dbSiteUrlHost = $parseDbSiteUrl['host'];
|
181 |
+
|
182 |
+
$finalBaseUrl = str_replace($dbSiteUrlHost, $hrefHost, $siteDbUrl);
|
183 |
+
|
184 |
+
return str_replace($finalBaseUrl, '', $href);
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* @param $jsonStorageFile
|
189 |
+
* @param $relPathAssetCacheDir
|
190 |
+
* @param $assetType
|
191 |
+
*
|
192 |
+
* @return array|mixed|object
|
193 |
+
*/
|
194 |
+
public static function getAssetCachedData($jsonStorageFile, $relPathAssetCacheDir, $assetType)
|
195 |
+
{
|
196 |
+
// Only clean request URIs allowed
|
197 |
+
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
198 |
+
return array();
|
199 |
+
}
|
200 |
+
|
201 |
+
$requestUri = $_SERVER['REQUEST_URI'];
|
202 |
+
$requestUriPart = $requestUri;
|
203 |
+
|
204 |
+
if ($requestUri === '/') {
|
205 |
+
$requestUriPart = '';
|
206 |
+
}
|
207 |
+
|
208 |
+
$dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir).'/_storage/'
|
209 |
+
.parse_url(site_url(), PHP_URL_HOST).
|
210 |
+
$requestUriPart.'/';
|
211 |
+
|
212 |
+
$dirToFilename = str_replace('//', '/', $dirToFilename);
|
213 |
+
|
214 |
+
$assetsFile = $dirToFilename . self::filterStorageFileName($jsonStorageFile);
|
215 |
+
|
216 |
+
if ($assetType === 'css') {
|
217 |
+
$cachedAssetsFileExpiresIn = CombineCss::$cachedCssAssetsFileExpiresIn;
|
218 |
+
}
|
219 |
+
else {
|
220 |
+
return array();
|
221 |
+
}
|
222 |
+
|
223 |
+
// Delete cached file after it expired as it will be regenerated
|
224 |
+
if (filemtime($assetsFile) < (time() - 1 * $cachedAssetsFileExpiresIn)) {
|
225 |
+
self::clearAssetCachedData($jsonStorageFile, $relPathAssetCacheDir);
|
226 |
+
return array();
|
227 |
+
}
|
228 |
+
|
229 |
+
$optionValue = @file_get_contents($assetsFile);
|
230 |
+
|
231 |
+
if ($optionValue) {
|
232 |
+
$optionValueArray = json_decode($optionValue, ARRAY_A);
|
233 |
+
|
234 |
+
$uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
|
235 |
+
$linkHrefs = $optionValueArray['link_hrefs'];
|
236 |
+
|
237 |
+
if ($uriToFinalCssFile) {
|
238 |
+
return array(
|
239 |
+
'uri_final_css_file' => $uriToFinalCssFile,
|
240 |
+
'local_final_css_file' => WP_CONTENT_DIR . $relPathAssetCacheDir . $uriToFinalCssFile,
|
241 |
+
'link_hrefs' => array_map( function ( $linkHref ) {
|
242 |
+
return str_replace( '{site_url}', site_url(), $linkHref );
|
243 |
+
}, $linkHrefs )
|
244 |
+
);
|
245 |
+
}
|
246 |
+
|
247 |
+
}
|
248 |
+
|
249 |
+
return array();
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* @param $jsonStorageFile
|
254 |
+
* @param $relPathAssetCacheDir
|
255 |
+
* @param $list
|
256 |
+
*/
|
257 |
+
public static function setAssetCachedData($jsonStorageFile, $relPathAssetCacheDir, $list)
|
258 |
+
{
|
259 |
+
// Only clean request URIs allowed
|
260 |
+
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
261 |
+
return;
|
262 |
+
}
|
263 |
+
|
264 |
+
$requestUri = $_SERVER['REQUEST_URI'];
|
265 |
+
$requestUriPart = $requestUri;
|
266 |
+
|
267 |
+
if ($requestUri === '/') {
|
268 |
+
$requestUriPart = '';
|
269 |
+
}
|
270 |
+
|
271 |
+
$dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir).'/_storage/'
|
272 |
+
.parse_url(site_url(), PHP_URL_HOST).
|
273 |
+
$requestUriPart.'/';
|
274 |
+
|
275 |
+
$dirToFilename = str_replace('//', '/', $dirToFilename);
|
276 |
+
@mkdir($dirToFilename, 0755, true);
|
277 |
+
|
278 |
+
$assetsFile = $dirToFilename . self::filterStorageFileName($jsonStorageFile);
|
279 |
+
|
280 |
+
// CSS JSON FILE DATA
|
281 |
+
$assetsValue = json_encode(
|
282 |
+
array(
|
283 |
+
'uri_to_final_css_file' => $list['uri_to_final_css_file'],
|
284 |
+
'link_hrefs' => array_map( function ( $linkHref ) {
|
285 |
+
return str_replace( site_url(), '{site_url}', $linkHref );
|
286 |
+
}, $list['link_hrefs'] )
|
287 |
+
)
|
288 |
+
);
|
289 |
+
|
290 |
+
@file_put_contents($assetsFile, $assetsValue);
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* @param $jsonStorageFile
|
295 |
+
* @param $relPathAssetCacheDir
|
296 |
+
*/
|
297 |
+
public static function clearAssetCachedData($jsonStorageFile, $relPathAssetCacheDir)
|
298 |
+
{
|
299 |
+
// Only clean request URIs allowed
|
300 |
+
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
301 |
+
return;
|
302 |
+
}
|
303 |
+
|
304 |
+
$requestUri = $_SERVER['REQUEST_URI'];
|
305 |
+
$requestUriPart = $requestUri;
|
306 |
+
|
307 |
+
if ($requestUri === '/') {
|
308 |
+
$requestUriPart = '';
|
309 |
+
}
|
310 |
+
|
311 |
+
$dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir) . '/_storage/'
|
312 |
+
. parse_url(site_url(), PHP_URL_HOST) .
|
313 |
+
$requestUriPart . '/';
|
314 |
+
|
315 |
+
$assetsFile = $dirToFilename.self::filterStorageFileName($jsonStorageFile);
|
316 |
+
|
317 |
+
@unlink($assetsFile);
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Clears all CSS & JS cache
|
322 |
+
*
|
323 |
+
* @param bool $redirectAfter
|
324 |
+
* @param bool $keepAssetFiles
|
325 |
+
*
|
326 |
+
* $keepCssJsFiles is kept to "true" as default
|
327 |
+
* there could be cache plugins still having cached pages that load specific merged files,
|
328 |
+
* to avoid breaking the layout/functionality
|
329 |
+
*/
|
330 |
+
public function clearAllCache($redirectAfter = false, $keepAssetFiles = true)
|
331 |
+
{
|
332 |
+
if (self::doNotClearAllCache()) {
|
333 |
+
return;
|
334 |
+
}
|
335 |
+
|
336 |
+
$fileExtToRemove = array('.json');
|
337 |
+
|
338 |
+
// Also delete .css
|
339 |
+
if (! $keepAssetFiles) {
|
340 |
+
$fileExtToRemove[] = '.css';
|
341 |
+
}
|
342 |
+
|
343 |
+
$assetCleanUpCacheDir = dirname(WP_CONTENT_DIR . self::$relPathPluginCacheDir);
|
344 |
+
$storageDir = $assetCleanUpCacheDir.'/_storage';
|
345 |
+
|
346 |
+
$dirItems = new \RecursiveDirectoryIterator($assetCleanUpCacheDir, \RecursiveDirectoryIterator::SKIP_DOTS);
|
347 |
+
|
348 |
+
$storageEmptyDirs = array();
|
349 |
+
|
350 |
+
foreach(new \RecursiveIteratorIterator($dirItems, \RecursiveIteratorIterator::SELF_FIRST) as $item) {
|
351 |
+
$fileBaseName = strrchr($item, '/');
|
352 |
+
|
353 |
+
if (is_file($item) && in_array(strrchr($fileBaseName, '.'), $fileExtToRemove)) {
|
354 |
+
@unlink($item);
|
355 |
+
} else {
|
356 |
+
if ( strpos( $item, $storageDir ) !== false && $item != $storageDir ) {
|
357 |
+
$storageEmptyDirs[] = $item;
|
358 |
+
}
|
359 |
+
}
|
360 |
+
}
|
361 |
+
|
362 |
+
foreach (array_reverse($storageEmptyDirs) as $storageEmptyDir) {
|
363 |
+
@rmdir($storageEmptyDir);
|
364 |
+
}
|
365 |
+
|
366 |
+
if ( $redirectAfter && wp_get_referer() ) {
|
367 |
+
wp_safe_redirect( wp_get_referer() );
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
/**
|
372 |
+
* Prevent clear cache function in the following situations
|
373 |
+
*
|
374 |
+
* @return bool
|
375 |
+
*/
|
376 |
+
public static function doNotClearAllCache()
|
377 |
+
{
|
378 |
+
// WooCommerce GET or AJAX call
|
379 |
+
if (array_key_exists('wc-ajax', $_GET) && $_GET['wc-ajax']) {
|
380 |
+
return true;
|
381 |
+
}
|
382 |
+
|
383 |
+
if (defined('WC_DOING_AJAX') && WC_DOING_AJAX === true) {
|
384 |
+
return true;
|
385 |
+
}
|
386 |
+
|
387 |
+
return false;
|
388 |
+
}
|
389 |
+
|
390 |
+
/**
|
391 |
+
* @param $fileName
|
392 |
+
*
|
393 |
+
* @return mixed
|
394 |
+
*/
|
395 |
+
public static function filterStorageFileName($fileName)
|
396 |
+
{
|
397 |
+
$current_user = wp_get_current_user();
|
398 |
+
|
399 |
+
if (isset($current_user->ID) && $current_user->ID > 0) {
|
400 |
+
$fileName = str_replace(
|
401 |
+
'{maybe-extra-info}',
|
402 |
+
'-logged-in-'.$current_user->ID,
|
403 |
+
$fileName
|
404 |
+
);
|
405 |
+
} else {
|
406 |
+
// Just clear {maybe-extra-info}
|
407 |
+
$fileName = str_replace('{maybe-extra-info}', '', $fileName);
|
408 |
+
}
|
409 |
+
|
410 |
+
return $fileName;
|
411 |
+
}
|
412 |
+
}
|
classes/{OptimizeCss.php → OptimiseAssets/CombineCss.php}
RENAMED
@@ -1,77 +1,29 @@
|
|
1 |
<?php
|
2 |
-
namespace WpAssetCleanUp;
|
|
|
|
|
|
|
3 |
|
4 |
/**
|
5 |
-
* Class
|
6 |
* @package WpAssetCleanUp
|
7 |
*/
|
8 |
-
class
|
9 |
{
|
10 |
/**
|
11 |
* @var string
|
12 |
*/
|
13 |
public static $relPathCssCacheDir = '/cache/asset-cleanup/css/'; // keep trailing slash at the end
|
14 |
|
15 |
-
/**
|
16 |
-
* @var string
|
17 |
-
*/
|
18 |
-
public static $transientCssNamePrefix = 'wpacu_css_';
|
19 |
-
|
20 |
/**
|
21 |
* @var float|int
|
22 |
*/
|
23 |
-
|
24 |
|
25 |
/**
|
26 |
-
* @var
|
27 |
-
*/
|
28 |
-
private $_transientCssName;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* OptimizeCss constructor.
|
32 |
*/
|
33 |
-
public
|
34 |
-
{
|
35 |
-
add_action('switch_theme', array($this, 'clearAllCacheTransients'));
|
36 |
-
add_action('after_switch_theme', array($this, 'clearAllCacheTransients'));
|
37 |
-
|
38 |
-
// Is WP Rocket's page cache cleared? Clear Asset CleanUp's CSS cache files too
|
39 |
-
if (array_key_exists('action', $_GET) && $_GET['action'] === 'purge_cache') {
|
40 |
-
add_action( 'before_rocket_clean_domain', array( $this, 'clearAllCacheTransients' ) );
|
41 |
-
}
|
42 |
-
|
43 |
-
// Is the CSS cache transient deleted? Remove the cached CSS file too
|
44 |
-
// The action below is triggered prior to transient deletion and ONLY in the front-end view (not within the Dashboard)
|
45 |
-
add_action('plugins_loaded', array($this, 'afterPluginsLoaded'));
|
46 |
-
|
47 |
-
add_action('admin_post_assetcleanup_clear_assets_cache', function() {
|
48 |
-
$this->clearAllCacheTransients(true);
|
49 |
-
});
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
*
|
54 |
-
*/
|
55 |
-
public function afterPluginsLoaded()
|
56 |
-
{
|
57 |
-
if (! is_admin() && (strpos($_SERVER['REQUEST_URI'], '?') === false)) {
|
58 |
-
$toMdFive = $_SERVER['REQUEST_URI'];
|
59 |
-
|
60 |
-
if (is_user_logged_in()) {
|
61 |
-
global $current_user;
|
62 |
-
|
63 |
-
if (isset($current_user->ID) && $current_user->ID > 0) {
|
64 |
-
$toMdFive .= '_'.$current_user->ID;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
|
68 |
-
$this->_transientCssName = self::$transientCssNamePrefix . md5( $toMdFive );
|
69 |
-
|
70 |
-
// @TODO: Remove cached CSS files after a while making sure no caching system still loads the old file
|
71 |
-
// @TODO: Maybe adding to "Tools" page would be an option
|
72 |
-
//add_action( 'delete_transient_' . $this->transientCssName, array( $this, 'clearCssCacheFile' ) );
|
73 |
-
}
|
74 |
-
}
|
75 |
|
76 |
/**
|
77 |
*
|
@@ -90,35 +42,38 @@ class OptimizeCss
|
|
90 |
return $htmlSource;
|
91 |
}
|
92 |
|
93 |
-
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
// Speed up processing by getting the already existing final CSS file URI
|
96 |
// This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
|
97 |
-
$localFinalCssFileData =
|
98 |
|
99 |
// $uriToFinalCssFile will always be relative ONLY within WP_CONTENT_DIR . self::$relPathCssCacheDir
|
100 |
// which is usually "wp-content/cache/asset-cleanup/css/"
|
101 |
-
|
102 |
if (! empty($localFinalCssFileData) && isset($localFinalCssFileData['local_final_css_file']) && file_exists($localFinalCssFileData['local_final_css_file'])) {
|
103 |
/*
|
104 |
* URIs to the LINK tags are already cached; No need to parse the DOM
|
105 |
*/
|
106 |
$uriToFinalCssFile = $localFinalCssFileData['uri_final_css_file'];
|
107 |
-
$linkHrefs
|
108 |
-
$
|
109 |
} else {
|
110 |
/*
|
111 |
* NO CACHING TRANSIENT; Parse the DOM
|
112 |
*/
|
113 |
// Nothing in the database records or the retrieved cached file does not exist?
|
114 |
-
|
115 |
|
116 |
// Fetch the DOM, and then set a new transient
|
117 |
$document = new \DOMDocument();
|
118 |
$document->loadHTML($htmlSource);
|
119 |
|
120 |
$documentHead = $document->getElementsByTagName('head')->item(0);
|
121 |
-
|
122 |
libxml_use_internal_errors( true );
|
123 |
|
124 |
$combinedUriPaths = $hrefUriPreloads = $localAssetsPaths = $linkHrefs = array();
|
@@ -142,12 +97,12 @@ class OptimizeCss
|
|
142 |
//$htmlSource .= $attrObj->nodeValue."\n";
|
143 |
$href = (string)$attrObj->nodeValue;
|
144 |
|
145 |
-
$localAssetPath =
|
146 |
|
147 |
if ($localAssetPath) {
|
148 |
-
$combinedUriPaths[]
|
149 |
$localAssetsPaths[$href] = $localAssetPath;
|
150 |
-
$linkHrefs[]
|
151 |
}
|
152 |
}
|
153 |
|
@@ -158,7 +113,7 @@ class OptimizeCss
|
|
158 |
}
|
159 |
|
160 |
if ($checkCssPreload && $attrObj->nodeName === 'href') {
|
161 |
-
$hrefUriPreloads[] =
|
162 |
}
|
163 |
}
|
164 |
}
|
@@ -199,60 +154,41 @@ class OptimizeCss
|
|
199 |
$uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
|
200 |
|
201 |
if (file_exists($localFinalCssFile)) {
|
202 |
-
$
|
203 |
-
|
|
|
|
|
|
|
|
|
204 |
}
|
205 |
}
|
206 |
|
207 |
-
if ($
|
208 |
$finalTagUrl = WP_CONTENT_URL . self::$relPathCssCacheDir . $uriToFinalCssFile;
|
209 |
|
210 |
$finalCssTag = <<<HTML
|
211 |
-
<link id
|
212 |
HTML;
|
213 |
|
214 |
// Append the combine CSS Link tag right after <head> section of the website
|
215 |
// Any other <head> strings will be ignored as only the first one from the HTML source code matters
|
216 |
// e.g. some may use <head> inside a JavaScript code or part of a comment
|
217 |
-
$
|
218 |
-
$htmlSource = $this->stripJustCombinedSingleLinkTags($linkHrefs, $htmlSource); // Strip the combined files to avoid duplicate code
|
219 |
-
}
|
220 |
-
|
221 |
-
return $htmlSource;
|
222 |
-
});
|
223 |
-
}, 1);
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* @param $linkHrefs
|
228 |
-
* @param $htmlSource
|
229 |
-
*
|
230 |
-
* @return mixed
|
231 |
-
*/
|
232 |
-
public function stripJustCombinedSingleLinkTags($linkHrefs, $htmlSource)
|
233 |
-
{
|
234 |
-
preg_match_all('#<link[^>]*stylesheet[^>]*(>)#Usmi', $htmlSource, $matchesLinkStylesheetTags, PREG_SET_ORDER);
|
235 |
|
236 |
-
|
237 |
-
$matchedLinkStylesheetTag = $matchLinkStylesheetTag[0];
|
238 |
-
|
239 |
-
$domLink = new \DOMDocument();
|
240 |
-
$domLink->loadHTML($matchedLinkStylesheetTag);
|
241 |
|
242 |
-
|
243 |
-
|
244 |
-
continue;
|
245 |
-
}
|
246 |
|
247 |
-
|
248 |
-
if ($
|
249 |
-
|
250 |
}
|
251 |
}
|
252 |
-
}
|
253 |
-
}
|
254 |
|
255 |
-
|
|
|
|
|
256 |
}
|
257 |
|
258 |
/**
|
@@ -281,7 +217,7 @@ HTML;
|
|
281 |
$finalAssetsContents = '';
|
282 |
|
283 |
foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
|
284 |
-
$posLastSlash
|
285 |
$pathToAssetDir = substr($assetHref, 0, $posLastSlash);
|
286 |
|
287 |
$parseUrl = parse_url($pathToAssetDir);
|
@@ -303,7 +239,7 @@ HTML;
|
|
303 |
$assetContent = @file_get_contents($localAssetsPath);
|
304 |
|
305 |
if ($assetContent) {
|
306 |
-
$finalAssetsContents .=
|
307 |
}
|
308 |
}
|
309 |
|
@@ -326,78 +262,13 @@ HTML;
|
|
326 |
);
|
327 |
}
|
328 |
|
329 |
-
/**
|
330 |
-
* @return array
|
331 |
-
*/
|
332 |
-
public function getCssCachedTransient()
|
333 |
-
{
|
334 |
-
// Only clean request URIs allowed
|
335 |
-
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
336 |
-
return array();
|
337 |
-
}
|
338 |
-
|
339 |
-
$optionValue = get_transient($this->_transientCssName);
|
340 |
-
|
341 |
-
if ($optionValue) {
|
342 |
-
$optionValueArray = json_decode($optionValue, ARRAY_A);
|
343 |
-
|
344 |
-
$uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
|
345 |
-
$linkHrefs = $optionValueArray['link_hrefs'];
|
346 |
-
|
347 |
-
if ($uriToFinalCssFile) {
|
348 |
-
return array(
|
349 |
-
'uri_final_css_file' => $uriToFinalCssFile,
|
350 |
-
'local_final_css_file' => WP_CONTENT_DIR . self::$relPathCssCacheDir . $uriToFinalCssFile,
|
351 |
-
'link_hrefs' => $linkHrefs
|
352 |
-
);
|
353 |
-
}
|
354 |
-
}
|
355 |
-
|
356 |
-
return array();
|
357 |
-
}
|
358 |
-
|
359 |
-
/**
|
360 |
-
* @param $uriToFinalCssFile
|
361 |
-
* @param array $linkHrefs
|
362 |
-
*/
|
363 |
-
public function setCssCachedTransient($uriToFinalCssFile, $linkHrefs)
|
364 |
-
{
|
365 |
-
// Only clean request URIs allowed
|
366 |
-
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
367 |
-
return;
|
368 |
-
}
|
369 |
-
|
370 |
-
$optionValue = json_encode(
|
371 |
-
array(
|
372 |
-
'request_' => $_SERVER['REQUEST_URI'],
|
373 |
-
'uri_to_final_css_file' => $uriToFinalCssFile,
|
374 |
-
'link_hrefs' => $linkHrefs
|
375 |
-
)
|
376 |
-
);
|
377 |
-
|
378 |
-
set_transient($this->_transientCssName, $optionValue, self::$_transientExpiresIn);
|
379 |
-
}
|
380 |
-
|
381 |
-
/**
|
382 |
-
*
|
383 |
-
*/
|
384 |
-
public function deleteCssCachedTransient()
|
385 |
-
{
|
386 |
-
// Only clean request URIs allowed
|
387 |
-
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
388 |
-
return;
|
389 |
-
}
|
390 |
-
|
391 |
-
delete_transient($this->_transientCssName);
|
392 |
-
}
|
393 |
-
|
394 |
/**
|
395 |
* @param $cssContent
|
396 |
* @param $appendBefore
|
397 |
*
|
398 |
* @return mixed
|
399 |
*/
|
400 |
-
public function maybeFixCssBackgroundUrls($cssContent, $appendBefore)
|
401 |
{
|
402 |
$cssContent = str_replace(
|
403 |
array('url("../', "url('../", 'url(../'),
|
@@ -451,72 +322,6 @@ HTML;
|
|
451 |
return $cssContent;
|
452 |
}
|
453 |
|
454 |
-
/**
|
455 |
-
* @param $href
|
456 |
-
*
|
457 |
-
* @return bool|string
|
458 |
-
*/
|
459 |
-
public static function getLocalAssetPath($href)
|
460 |
-
{
|
461 |
-
/*
|
462 |
-
* Validate it first
|
463 |
-
*/
|
464 |
-
// Asset's Host
|
465 |
-
$assetHost = strtolower(parse_url($href, PHP_URL_HOST));
|
466 |
-
|
467 |
-
// First check the host name
|
468 |
-
$siteUrl = get_option('siteurl');
|
469 |
-
$siteUrlHost = strtolower(parse_url($siteUrl, PHP_URL_HOST));
|
470 |
-
|
471 |
-
if ($assetHost !== $siteUrlHost) {
|
472 |
-
return false;
|
473 |
-
}
|
474 |
-
|
475 |
-
$hrefRelPath = self::getHrefRelPath($href);
|
476 |
-
|
477 |
-
if (strpos($hrefRelPath, '/') === 0) {
|
478 |
-
$hrefRelPath = substr($hrefRelPath, 1);
|
479 |
-
}
|
480 |
-
|
481 |
-
$localAssetPath = ABSPATH . $hrefRelPath;
|
482 |
-
|
483 |
-
//file_put_contents(WP_CONTENT_DIR . '/cache/asset-cleanup/css/data.log', $localAssetPath);
|
484 |
-
|
485 |
-
if (strpos($localAssetPath, '?ver=') !== false) {
|
486 |
-
list($localAssetPathAlt,) = explode('?ver=', $localAssetPath);
|
487 |
-
$localAssetPath = $localAssetPathAlt;
|
488 |
-
}
|
489 |
-
|
490 |
-
if (strrchr($localAssetPath, '.') === '.css' && file_exists($localAssetPath)) {
|
491 |
-
return $localAssetPath;
|
492 |
-
}
|
493 |
-
|
494 |
-
return false;
|
495 |
-
}
|
496 |
-
|
497 |
-
/**
|
498 |
-
* @param $href
|
499 |
-
*
|
500 |
-
* @return mixed
|
501 |
-
*/
|
502 |
-
public static function getHrefRelPath($href)
|
503 |
-
{
|
504 |
-
$parseUrl = parse_url($href);
|
505 |
-
$hrefHost = $parseUrl['host'];
|
506 |
-
|
507 |
-
// Sometimes host is different on Staging websites such as the ones from Siteground
|
508 |
-
// e.g. staging1.domain.com and domain.com
|
509 |
-
// We need to make sure that the URI path is fetched correctly based on the host value from the $href
|
510 |
-
$siteDbUrl = get_option('siteurl');
|
511 |
-
$parseDbSiteUrl = parse_url($siteDbUrl);
|
512 |
-
|
513 |
-
$dbSiteUrlHost = $parseDbSiteUrl['host'];
|
514 |
-
|
515 |
-
$finalBaseUrl = str_replace($dbSiteUrlHost, $hrefHost, $siteDbUrl);
|
516 |
-
|
517 |
-
return str_replace($finalBaseUrl, '', $href);
|
518 |
-
}
|
519 |
-
|
520 |
/**
|
521 |
* @return bool
|
522 |
*/
|
@@ -526,14 +331,23 @@ HTML;
|
|
526 |
// Always in the front-end view
|
527 |
// Do not combine if there's a POST request as there could be assets loading conditionally
|
528 |
// that might not be needed when the page is accessed without POST, making the final CSS file larger
|
529 |
-
if (! empty($_POST) ||
|
530 |
return false; // Do not combine
|
531 |
}
|
532 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
533 |
$pluginSettings = Main::instance()->settings;
|
534 |
|
535 |
-
if ($pluginSettings['test_mode
|
536 |
-
return false; // Do not combine anything if "Test Mode" is ON
|
537 |
}
|
538 |
|
539 |
if ($pluginSettings['combine_loaded_css'] === '') {
|
@@ -552,92 +366,4 @@ HTML;
|
|
552 |
return false;
|
553 |
}
|
554 |
|
555 |
-
/**
|
556 |
-
* @param bool $redirectAfter
|
557 |
-
*/
|
558 |
-
public function clearAllCacheTransients($redirectAfter = false)
|
559 |
-
{
|
560 |
-
if ($this->doNotClearAllCache()) {
|
561 |
-
return;
|
562 |
-
}
|
563 |
-
|
564 |
-
global $wpdb;
|
565 |
-
|
566 |
-
// First, select all and get the combined CSS file names in order to be deleted
|
567 |
-
// As the files will be regenerated on page loads
|
568 |
-
$transientNamePrefix = self::$transientCssNamePrefix;
|
569 |
-
|
570 |
-
$sqlSelect = <<<SQL
|
571 |
-
SELECT option_name, option_value FROM `{$wpdb->options}` WHERE option_name LIKE '_transient_{$transientNamePrefix}%'
|
572 |
-
SQL;
|
573 |
-
$sqlResults = $wpdb->get_results($sqlSelect, ARRAY_A);
|
574 |
-
|
575 |
-
foreach ($sqlResults as $sqlResult) {
|
576 |
-
// 53 = length of the following
|
577 |
-
// _transient_ (11) + self::$transientCssNamePrefix + MD5 value (always 32)
|
578 |
-
$optionNameValidLength = 11 + strlen(self::$transientCssNamePrefix) + 32;
|
579 |
-
|
580 |
-
// nothing is left by chance to make sure the right transients gets deleted
|
581 |
-
if (strlen($sqlResult['option_name']) === $optionNameValidLength) {
|
582 |
-
delete_transient( str_replace( '_transient_', '', $sqlResult['option_name'] ) );
|
583 |
-
// @TODO: Remove cached CSS files after a while making sure no caching system still loads the old file
|
584 |
-
//$this->removeCachedCssFile( $sqlResult['option_value'] );
|
585 |
-
}
|
586 |
-
}
|
587 |
-
|
588 |
-
if ( $redirectAfter && wp_get_referer() ) {
|
589 |
-
wp_safe_redirect( wp_get_referer() );
|
590 |
-
}
|
591 |
-
}
|
592 |
-
|
593 |
-
/**
|
594 |
-
* Prevent clear cache function in the following situations
|
595 |
-
*
|
596 |
-
* @return bool
|
597 |
-
*/
|
598 |
-
public function doNotClearAllCache()
|
599 |
-
{
|
600 |
-
// WooCommerce GET or AJAX call
|
601 |
-
if (array_key_exists('wc-ajax', $_GET) && $_GET['wc-ajax']) {
|
602 |
-
return true;
|
603 |
-
}
|
604 |
-
|
605 |
-
if (defined('WC_DOING_AJAX') && WC_DOING_AJAX === true) {
|
606 |
-
return true;
|
607 |
-
}
|
608 |
-
|
609 |
-
return false;
|
610 |
-
}
|
611 |
-
|
612 |
-
/**
|
613 |
-
* Triggers in the front-end view only for the current viewed page
|
614 |
-
*/
|
615 |
-
/*
|
616 |
-
public function clearCssCacheFile()
|
617 |
-
{
|
618 |
-
$optionValue = get_transient($this->transientCssName);
|
619 |
-
|
620 |
-
if ($optionValue) {
|
621 |
-
$this->removeCachedCssFile($optionValue);
|
622 |
-
}
|
623 |
-
}
|
624 |
-
*/
|
625 |
-
|
626 |
-
/**
|
627 |
-
* @param $optionValue
|
628 |
-
*/
|
629 |
-
/*
|
630 |
-
public function removeCachedCssFile($optionValue)
|
631 |
-
{
|
632 |
-
$optionValueArray = json_decode($optionValue, ARRAY_A);
|
633 |
-
$uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
|
634 |
-
|
635 |
-
$fullLocalPathToCachedCssFile = WP_CONTENT_DIR . self::$relPathCssCacheDir . $uriToFinalCssFile;
|
636 |
-
|
637 |
-
// Check the extension to make sure a CSS file is in fact deleted from the cache
|
638 |
-
if (file_exists($fullLocalPathToCachedCssFile) && strrchr($uriToFinalCssFile, '.') === '.css') {
|
639 |
-
@unlink($fullLocalPathToCachedCssFile);
|
640 |
-
}
|
641 |
}
|
642 |
-
*/
|
643 |
-
}
|
1 |
<?php
|
2 |
+
namespace WpAssetCleanUp\OptimiseAssets;
|
3 |
+
|
4 |
+
use WpAssetCleanUp\Main;
|
5 |
+
use WpAssetCleanUp\Menu;
|
6 |
|
7 |
/**
|
8 |
+
* Class CombineCss
|
9 |
* @package WpAssetCleanUp
|
10 |
*/
|
11 |
+
class CombineCss
|
12 |
{
|
13 |
/**
|
14 |
* @var string
|
15 |
*/
|
16 |
public static $relPathCssCacheDir = '/cache/asset-cleanup/css/'; // keep trailing slash at the end
|
17 |
|
|
|
|
|
|
|
|
|
|
|
18 |
/**
|
19 |
* @var float|int
|
20 |
*/
|
21 |
+
public static $cachedCssAssetsFileExpiresIn = 60 * 60 * 12; // 8 hours in seconds
|
22 |
|
23 |
/**
|
24 |
+
* @var string
|
|
|
|
|
|
|
|
|
|
|
25 |
*/
|
26 |
+
public $jsonStorageFile = 'css-combined{maybe-extra-info}.json';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
/**
|
29 |
*
|
42 |
return $htmlSource;
|
43 |
}
|
44 |
|
45 |
+
// There has to be at least one "<link", otherwise, it could be a feed request or something similar (not page, post, homepage etc.)
|
46 |
+
if (stripos($htmlSource, '<link') === false) {
|
47 |
+
return $htmlSource;
|
48 |
+
}
|
49 |
+
|
50 |
+
$cachedFileExists = false;
|
51 |
|
52 |
// Speed up processing by getting the already existing final CSS file URI
|
53 |
// This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
|
54 |
+
$localFinalCssFileData = CombineCommon::getAssetCachedData($this->jsonStorageFile, self::$relPathCssCacheDir, 'css');
|
55 |
|
56 |
// $uriToFinalCssFile will always be relative ONLY within WP_CONTENT_DIR . self::$relPathCssCacheDir
|
57 |
// which is usually "wp-content/cache/asset-cleanup/css/"
|
|
|
58 |
if (! empty($localFinalCssFileData) && isset($localFinalCssFileData['local_final_css_file']) && file_exists($localFinalCssFileData['local_final_css_file'])) {
|
59 |
/*
|
60 |
* URIs to the LINK tags are already cached; No need to parse the DOM
|
61 |
*/
|
62 |
$uriToFinalCssFile = $localFinalCssFileData['uri_final_css_file'];
|
63 |
+
$linkHrefs = $localFinalCssFileData['link_hrefs'];
|
64 |
+
$cachedFileExists = true;
|
65 |
} else {
|
66 |
/*
|
67 |
* NO CACHING TRANSIENT; Parse the DOM
|
68 |
*/
|
69 |
// Nothing in the database records or the retrieved cached file does not exist?
|
70 |
+
CombineCommon::clearAssetCachedData($this->jsonStorageFile, self::$relPathCssCacheDir);
|
71 |
|
72 |
// Fetch the DOM, and then set a new transient
|
73 |
$document = new \DOMDocument();
|
74 |
$document->loadHTML($htmlSource);
|
75 |
|
76 |
$documentHead = $document->getElementsByTagName('head')->item(0);
|
|
|
77 |
libxml_use_internal_errors( true );
|
78 |
|
79 |
$combinedUriPaths = $hrefUriPreloads = $localAssetsPaths = $linkHrefs = array();
|
97 |
//$htmlSource .= $attrObj->nodeValue."\n";
|
98 |
$href = (string)$attrObj->nodeValue;
|
99 |
|
100 |
+
$localAssetPath = CombineCommon::getLocalAssetPath($href, 'css');
|
101 |
|
102 |
if ($localAssetPath) {
|
103 |
+
$combinedUriPaths[] = CombineCommon::getHrefRelPath($href);
|
104 |
$localAssetsPaths[$href] = $localAssetPath;
|
105 |
+
$linkHrefs[] = $href;
|
106 |
}
|
107 |
}
|
108 |
|
113 |
}
|
114 |
|
115 |
if ($checkCssPreload && $attrObj->nodeName === 'href') {
|
116 |
+
$hrefUriPreloads[] = CombineCommon::getHrefRelPath($attrObj->nodeValue);
|
117 |
}
|
118 |
}
|
119 |
}
|
154 |
$uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
|
155 |
|
156 |
if (file_exists($localFinalCssFile)) {
|
157 |
+
$cachedFileExists = true;
|
158 |
+
CombineCommon::setAssetCachedData(
|
159 |
+
$this->jsonStorageFile,
|
160 |
+
self::$relPathCssCacheDir,
|
161 |
+
array('uri_to_final_css_file' => $uriToFinalCssFile, 'link_hrefs' => $linkHrefs)
|
162 |
+
);
|
163 |
}
|
164 |
}
|
165 |
|
166 |
+
if ($cachedFileExists) {
|
167 |
$finalTagUrl = WP_CONTENT_URL . self::$relPathCssCacheDir . $uriToFinalCssFile;
|
168 |
|
169 |
$finalCssTag = <<<HTML
|
170 |
+
<link id='asset-cleanup-combined-css' rel='stylesheet' href='{$finalTagUrl}' type='text/css' media='all' />
|
171 |
HTML;
|
172 |
|
173 |
// Append the combine CSS Link tag right after <head> section of the website
|
174 |
// Any other <head> strings will be ignored as only the first one from the HTML source code matters
|
175 |
// e.g. some may use <head> inside a JavaScript code or part of a comment
|
176 |
+
$htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
|
178 |
+
$htmlSource = preg_replace('#<head>#si', '<head>'."\n" . $finalCssTag . "\n", $htmlSource, 1);
|
|
|
|
|
|
|
|
|
179 |
|
180 |
+
$htmlSourceBeforeLinkTagLoopReplacement = $htmlSource;
|
181 |
+
$htmlSource = CombineCommon::stripJustCombinedFileTags($linkHrefs, $htmlSource, 'css'); // Strip the combined files to avoid duplicate code
|
|
|
|
|
182 |
|
183 |
+
// There should be at least two replacements made
|
184 |
+
if ($htmlSource === 'do_not_combine') {
|
185 |
+
return $htmlSourceBeforeAnyLinkTagReplacement;
|
186 |
}
|
187 |
}
|
|
|
|
|
188 |
|
189 |
+
return $htmlSource;
|
190 |
+
});
|
191 |
+
}, 1);
|
192 |
}
|
193 |
|
194 |
/**
|
217 |
$finalAssetsContents = '';
|
218 |
|
219 |
foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
|
220 |
+
$posLastSlash = strrpos($assetHref, '/');
|
221 |
$pathToAssetDir = substr($assetHref, 0, $posLastSlash);
|
222 |
|
223 |
$parseUrl = parse_url($pathToAssetDir);
|
239 |
$assetContent = @file_get_contents($localAssetsPath);
|
240 |
|
241 |
if ($assetContent) {
|
242 |
+
$finalAssetsContents .= self::maybeFixCssBackgroundUrls($assetContent, $pathToAssetDir . '/') . "\n\n";
|
243 |
}
|
244 |
}
|
245 |
|
262 |
);
|
263 |
}
|
264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
/**
|
266 |
* @param $cssContent
|
267 |
* @param $appendBefore
|
268 |
*
|
269 |
* @return mixed
|
270 |
*/
|
271 |
+
public static function maybeFixCssBackgroundUrls($cssContent, $appendBefore)
|
272 |
{
|
273 |
$cssContent = str_replace(
|
274 |
array('url("../', "url('../", 'url(../'),
|
322 |
return $cssContent;
|
323 |
}
|
324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
325 |
/**
|
326 |
* @return bool
|
327 |
*/
|
331 |
// Always in the front-end view
|
332 |
// Do not combine if there's a POST request as there could be assets loading conditionally
|
333 |
// that might not be needed when the page is accessed without POST, making the final CSS file larger
|
334 |
+
if (! empty($_POST) || is_admin()) {
|
335 |
return false; // Do not combine
|
336 |
}
|
337 |
|
338 |
+
// Only clean request URIs allowed
|
339 |
+
if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
|
340 |
+
return false;
|
341 |
+
}
|
342 |
+
|
343 |
+
if (! CombineCommon::doCombineIsRegularPage()) {
|
344 |
+
return false;
|
345 |
+
}
|
346 |
+
|
347 |
$pluginSettings = Main::instance()->settings;
|
348 |
|
349 |
+
if ($pluginSettings['test_mode'] && ! Menu::userCanManageAssets()) {
|
350 |
+
return false; // Do not combine anything if "Test Mode" is ON and the user is in guest mode (not logged-in)
|
351 |
}
|
352 |
|
353 |
if ($pluginSettings['combine_loaded_css'] === '') {
|
366 |
return false;
|
367 |
}
|
368 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
}
|
|
|
|
classes/OwnAssets.php
CHANGED
@@ -15,11 +15,6 @@ class OwnAssets
|
|
15 |
*/
|
16 |
public $loadPluginAssets = false; // default
|
17 |
|
18 |
-
/**
|
19 |
-
* @var bool
|
20 |
-
*/
|
21 |
-
public $isTaxonomyEditPage = false;
|
22 |
-
|
23 |
/**
|
24 |
*
|
25 |
*/
|
@@ -124,11 +119,7 @@ class OwnAssets
|
|
124 |
$this->loadPluginAssets = true;
|
125 |
}
|
126 |
|
127 |
-
if
|
128 |
-
$this->loadPluginAssets = true;
|
129 |
-
}
|
130 |
-
|
131 |
-
if (! $this->loadPluginAssets) {
|
132 |
return;
|
133 |
}
|
134 |
|
@@ -191,9 +182,9 @@ class OwnAssets
|
|
191 |
$postId = 0; // for home page
|
192 |
}
|
193 |
|
194 |
-
// Not home page (posts list
|
195 |
// See if the individual post is published to continue
|
196 |
-
if ($postId > 0
|
197 |
$postStatus = get_post_status($postId);
|
198 |
|
199 |
if (! $postStatus) {
|
@@ -340,18 +331,4 @@ HTML;
|
|
340 |
return $src;
|
341 |
}
|
342 |
|
343 |
-
|
344 |
-
* @return bool
|
345 |
-
*/
|
346 |
-
public function isTaxonomyEditPage()
|
347 |
-
{
|
348 |
-
if ((!$this->isTaxonomyEditPage)
|
349 |
-
&& Main::instance()->wpacuProEnabled()
|
350 |
-
&& class_exists('\\WpAssetCleanUpPro\\MainPro')) {
|
351 |
-
$mainPro = new \WpAssetCleanUpPro\MainPro();
|
352 |
-
$this->isTaxonomyEditPage = $mainPro->isTaxonomyEditPage();
|
353 |
-
}
|
354 |
-
|
355 |
-
return $this->isTaxonomyEditPage;
|
356 |
-
}
|
357 |
-
}
|
15 |
*/
|
16 |
public $loadPluginAssets = false; // default
|
17 |
|
|
|
|
|
|
|
|
|
|
|
18 |
/**
|
19 |
*
|
20 |
*/
|
119 |
$this->loadPluginAssets = true;
|
120 |
}
|
121 |
|
122 |
+
if (! $this->loadPluginAssets) {
|
|
|
|
|
|
|
|
|
123 |
return;
|
124 |
}
|
125 |
|
182 |
$postId = 0; // for home page
|
183 |
}
|
184 |
|
185 |
+
// Not home page (posts list)? Does it have a post ID?
|
186 |
// See if the individual post is published to continue
|
187 |
+
if ($postId > 0) {
|
188 |
$postStatus = get_post_status($postId);
|
189 |
|
190 |
if (! $postStatus) {
|
331 |
return $src;
|
332 |
}
|
333 |
|
334 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/Plugin.php
CHANGED
@@ -75,7 +75,7 @@ class Plugin
|
|
75 |
*/
|
76 |
public static function createCacheFoldersFiles()
|
77 |
{
|
78 |
-
$cacheCssDir = WP_CONTENT_DIR .
|
79 |
|
80 |
$emptyPhpFileContents = <<<TEXT
|
81 |
<?php
|
75 |
*/
|
76 |
public static function createCacheFoldersFiles()
|
77 |
{
|
78 |
+
$cacheCssDir = WP_CONTENT_DIR . OptimiseAssets\CombineCss::$relPathCssCacheDir;
|
79 |
|
80 |
$emptyPhpFileContents = <<<TEXT
|
81 |
<?php
|
classes/Settings.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
<?php
|
2 |
namespace WpAssetCleanUp;
|
3 |
|
|
|
|
|
4 |
/**
|
5 |
* Class Settings
|
6 |
* @package WpAssetCleanUp
|
@@ -227,7 +229,7 @@ class Settings
|
|
227 |
*/
|
228 |
public function update($settings)
|
229 |
{
|
230 |
-
|
231 |
|
232 |
$wpacuUpdate = new Update;
|
233 |
|
@@ -296,20 +298,10 @@ class Settings
|
|
296 |
*
|
297 |
*/
|
298 |
public static function clearAllCache()
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
|
304 |
-
|
305 |
-
/*
|
306 |
-
add_action('init', function() {
|
307 |
-
if ( function_exists( 'rocket_clean_domain' ) ) {
|
308 |
-
try {
|
309 |
-
@rocket_clean_domain();
|
310 |
-
} catch ( \Exception $e ) {}
|
311 |
-
}
|
312 |
-
});
|
313 |
-
*/
|
314 |
-
}
|
315 |
}
|
1 |
<?php
|
2 |
namespace WpAssetCleanUp;
|
3 |
|
4 |
+
use WpAssetCleanUp\OptimiseAssets\CombineCommon;
|
5 |
+
|
6 |
/**
|
7 |
* Class Settings
|
8 |
* @package WpAssetCleanUp
|
229 |
*/
|
230 |
public function update($settings)
|
231 |
{
|
232 |
+
CombineCommon::clearAllCache();
|
233 |
|
234 |
$wpacuUpdate = new Update;
|
235 |
|
298 |
*
|
299 |
*/
|
300 |
public static function clearAllCache()
|
301 |
+
{
|
302 |
+
// Clear "Combined CSS/JS Loaded Files" Cache
|
303 |
+
$combineCommon = new OptimiseAssets\CombineCommon();
|
304 |
+
$combineCommon->clearAllCache();
|
305 |
|
306 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
307 |
}
|
classes/Sorting.php
CHANGED
@@ -61,7 +61,6 @@ class Sorting
|
|
61 |
public static function appendLocation($list)
|
62 |
{
|
63 |
$pluginsUrl = plugins_url();
|
64 |
-
//$currentTheme = wp_get_theme();
|
65 |
|
66 |
$urlsToThemeDirs = array();
|
67 |
|
@@ -77,25 +76,10 @@ class Sorting
|
|
77 |
}
|
78 |
|
79 |
$urlsToThemeDirs = array_unique($urlsToThemeDirs);
|
80 |
-
//echo '<pre>'; print_r($urlsToThemeDirs);
|
81 |
-
|
82 |
-
/*
|
83 |
-
$relPluginsPath = dirname(str_replace(ABSPATH, '', WPACU_PLUGIN_DIR)).'/';
|
84 |
-
|
85 |
-
if ($relPluginsPath{0} !== '/') {
|
86 |
-
$relPluginsPath = '/'.$relPluginsPath;
|
87 |
-
}
|
88 |
-
*/
|
89 |
-
|
90 |
-
//$locations = array();
|
91 |
|
92 |
foreach (array('styles', 'scripts') as $assetType) {
|
93 |
foreach ( $list[$assetType] as $indexNo => $asset ) {
|
94 |
-
|
95 |
-
if (! (isset($asset->src) && $asset->src)) {
|
96 |
-
continue;
|
97 |
-
}
|
98 |
-
*/
|
99 |
$src = isset($asset->src) ? $asset->src : '';
|
100 |
|
101 |
if (strpos($src,'/wp-includes/') === 0) {
|
@@ -115,26 +99,21 @@ class Sorting
|
|
115 |
$asset->locationMain = 'plugins';
|
116 |
$asset->locationChild = $pluginDir;
|
117 |
|
118 |
-
|
119 |
-
} else {
|
120 |
$isWithinThemes = false;
|
121 |
|
122 |
foreach ( $urlsToThemeDirs as $urlToThemeDir ) {
|
123 |
$srcRel = str_replace(site_url(),'', $src);
|
124 |
-
//echo $src . ' - '. $urlToThemeDir. ' = '.stripos( $src, $urlToThemeDir ).'<br />';
|
125 |
|
126 |
if ( strpos( $srcRel, $urlToThemeDir ) !== false ) {
|
127 |
$isWithinThemes = true;
|
128 |
|
129 |
-
//echo $urlToThemeDir.'<br />';
|
130 |
-
|
131 |
$themeDir = substr(strrchr(trim($urlToThemeDir, '/'), '/'), 1);
|
132 |
|
133 |
$asset->locationMain = 'themes';
|
134 |
$asset->locationChild = $themeDir;
|
135 |
break;
|
136 |
-
|
137 |
-
}
|
138 |
}
|
139 |
|
140 |
// Default: "External"
|
@@ -142,8 +121,7 @@ class Sorting
|
|
142 |
// Outside "themes", "plugins" and "wp-includes"
|
143 |
$asset->locationMain = 'external';
|
144 |
$asset->locationChild = 'none';
|
145 |
-
|
146 |
-
}
|
147 |
}
|
148 |
|
149 |
$list[$assetType][$indexNo] = $asset;
|
61 |
public static function appendLocation($list)
|
62 |
{
|
63 |
$pluginsUrl = plugins_url();
|
|
|
64 |
|
65 |
$urlsToThemeDirs = array();
|
66 |
|
76 |
}
|
77 |
|
78 |
$urlsToThemeDirs = array_unique($urlsToThemeDirs);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
|
80 |
foreach (array('styles', 'scripts') as $assetType) {
|
81 |
foreach ( $list[$assetType] as $indexNo => $asset ) {
|
82 |
+
|
|
|
|
|
|
|
|
|
83 |
$src = isset($asset->src) ? $asset->src : '';
|
84 |
|
85 |
if (strpos($src,'/wp-includes/') === 0) {
|
99 |
$asset->locationMain = 'plugins';
|
100 |
$asset->locationChild = $pluginDir;
|
101 |
|
102 |
+
} else {
|
|
|
103 |
$isWithinThemes = false;
|
104 |
|
105 |
foreach ( $urlsToThemeDirs as $urlToThemeDir ) {
|
106 |
$srcRel = str_replace(site_url(),'', $src);
|
|
|
107 |
|
108 |
if ( strpos( $srcRel, $urlToThemeDir ) !== false ) {
|
109 |
$isWithinThemes = true;
|
110 |
|
|
|
|
|
111 |
$themeDir = substr(strrchr(trim($urlToThemeDir, '/'), '/'), 1);
|
112 |
|
113 |
$asset->locationMain = 'themes';
|
114 |
$asset->locationChild = $themeDir;
|
115 |
break;
|
116 |
+
}
|
|
|
117 |
}
|
118 |
|
119 |
// Default: "External"
|
121 |
// Outside "themes", "plugins" and "wp-includes"
|
122 |
$asset->locationMain = 'external';
|
123 |
$asset->locationChild = 'none';
|
124 |
+
}
|
|
|
125 |
}
|
126 |
|
127 |
$list[$assetType][$indexNo] = $asset;
|
classes/Tools.php
CHANGED
@@ -319,8 +319,6 @@ SQL;
|
|
319 |
|
320 |
// Remove Asset CleanUp's cache transients
|
321 |
$transientLikes = array(
|
322 |
-
'_transient_timeout_'.OptimizeCss::$transientCssNamePrefix,
|
323 |
-
'_transient_'.OptimizeCss::$transientCssNamePrefix,
|
324 |
'_transient_timeout_wpacu_',
|
325 |
'_transient_wpacu_',
|
326 |
);
|
@@ -337,6 +335,9 @@ SQL;
|
|
337 |
DELETE FROM `{$wpdb->prefix}options` WHERE {$transientLikesSql}
|
338 |
SQL;
|
339 |
$wpdb->query($sqlQuery);
|
|
|
|
|
|
|
340 |
} elseif ($wpacuResetValue === 'reset_settings') {
|
341 |
$sqlQuery = <<<SQL
|
342 |
DELETE FROM `{$wpdb->prefix}options` WHERE option_name='wpassetcleanup_settings'
|
319 |
|
320 |
// Remove Asset CleanUp's cache transients
|
321 |
$transientLikes = array(
|
|
|
|
|
322 |
'_transient_timeout_wpacu_',
|
323 |
'_transient_wpacu_',
|
324 |
);
|
335 |
DELETE FROM `{$wpdb->prefix}options` WHERE {$transientLikesSql}
|
336 |
SQL;
|
337 |
$wpdb->query($sqlQuery);
|
338 |
+
|
339 |
+
// Refers to the plugins' icons shown when viewing assets list by location is enabled
|
340 |
+
delete_transient('wpacu_active_plugins_icons');
|
341 |
} elseif ($wpacuResetValue === 'reset_settings') {
|
342 |
$sqlQuery = <<<SQL
|
343 |
DELETE FROM `{$wpdb->prefix}options` WHERE option_name='wpassetcleanup_settings'
|
classes/Update.php
CHANGED
@@ -76,7 +76,6 @@ HTML;
|
|
76 |
}
|
77 |
|
78 |
/**
|
79 |
-
* TODO: Remove priority later on as it's not needed anymore because there is a redirect after form submit
|
80 |
* Priority: 9 (AFTER current post ID is correctly retrieved and BEFORE the data from the database is fetched)
|
81 |
* Form was submitted in the frontend view (not Dashboard) from a singular page, front-page etc.
|
82 |
*/
|
@@ -135,11 +134,7 @@ HTML;
|
|
135 |
return;
|
136 |
}
|
137 |
|
138 |
-
|
139 |
-
// Form Submitted from a page such as taxonomy (e.g. 'category'), author page, 404 page, search page etc.
|
140 |
-
do_action('wpacu_pro_frontend_update');
|
141 |
-
// [/wpacu_pro]
|
142 |
-
}
|
143 |
|
144 |
/**
|
145 |
*
|
@@ -315,6 +310,8 @@ HTML;
|
|
315 |
/**
|
316 |
* Lite: For Singular Page (Post, Page, Custom Post Type) and Front Page (Home Page)
|
317 |
* Pro: 'for_pro' would trigger the actions from the premium extension (if available)
|
|
|
|
|
318 |
*
|
319 |
* This is the function that clears and updates the load exceptions for any of the requested pages
|
320 |
*
|
@@ -341,10 +338,7 @@ HTML;
|
|
341 |
delete_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_load_exceptions');
|
342 |
} elseif ($type === 'front_page') {
|
343 |
delete_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions');
|
344 |
-
}
|
345 |
-
// Clear existing list for pages like: taxonomy, 404, search, date etc.
|
346 |
-
do_action( 'wpacu_pro_clear_load_exceptions' );
|
347 |
-
} /* [/wpacu_pro] */
|
348 |
|
349 |
if (! $isPostOptionStyles && ! $isPostOptionScripts) {
|
350 |
return;
|
@@ -406,11 +400,9 @@ HTML;
|
|
406 |
}
|
407 |
} elseif ($type === 'front_page') {
|
408 |
update_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions', $jsonLoadExceptions);
|
409 |
-
}
|
410 |
-
|
411 |
-
|
412 |
-
} /* [/wpacu_pro] */
|
413 |
-
}
|
414 |
}
|
415 |
|
416 |
/**
|
76 |
}
|
77 |
|
78 |
/**
|
|
|
79 |
* Priority: 9 (AFTER current post ID is correctly retrieved and BEFORE the data from the database is fetched)
|
80 |
* Form was submitted in the frontend view (not Dashboard) from a singular page, front-page etc.
|
81 |
*/
|
134 |
return;
|
135 |
}
|
136 |
|
137 |
+
}
|
|
|
|
|
|
|
|
|
138 |
|
139 |
/**
|
140 |
*
|
310 |
/**
|
311 |
* Lite: For Singular Page (Post, Page, Custom Post Type) and Front Page (Home Page)
|
312 |
* Pro: 'for_pro' would trigger the actions from the premium extension (if available)
|
313 |
+
* UPDATE: Since v1.2.9.5, no fallback for both the lite and pro version activated at the same time would work anymore
|
314 |
+
* Users need to only keep the PRO version since it's standalone since v1.0.3
|
315 |
*
|
316 |
* This is the function that clears and updates the load exceptions for any of the requested pages
|
317 |
*
|
338 |
delete_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_load_exceptions');
|
339 |
} elseif ($type === 'front_page') {
|
340 |
delete_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions');
|
341 |
+
}
|
|
|
|
|
|
|
342 |
|
343 |
if (! $isPostOptionStyles && ! $isPostOptionScripts) {
|
344 |
return;
|
400 |
}
|
401 |
} elseif ($type === 'front_page') {
|
402 |
update_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions', $jsonLoadExceptions);
|
403 |
+
}
|
404 |
+
|
405 |
+
}
|
|
|
|
|
406 |
}
|
407 |
|
408 |
/**
|
freemius/assets/css/admin/account.css
CHANGED
File without changes
|
freemius/assets/css/admin/add-ons.css
CHANGED
File without changes
|
freemius/assets/css/admin/affiliation.css
CHANGED
File without changes
|
freemius/assets/css/admin/checkout.css
CHANGED
File without changes
|
freemius/assets/css/admin/common.css
CHANGED
File without changes
|
freemius/assets/css/admin/connect.css
CHANGED
File without changes
|
freemius/assets/css/admin/debug.css
CHANGED
File without changes
|
freemius/assets/css/admin/dialog-boxes.css
CHANGED
File without changes
|
freemius/assets/css/admin/gdpr-optin-notice.css
CHANGED
File without changes
|
freemius/assets/css/admin/index.php
CHANGED
File without changes
|
freemius/assets/css/customizer.css
CHANGED
File without changes
|
freemius/assets/css/index.php
CHANGED
File without changes
|
freemius/assets/img/index.php
CHANGED
File without changes
|
freemius/assets/img/plugin-icon.png
CHANGED
File without changes
|