Asset CleanUp: Page Speed Booster - Version 1.2.9.5

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 Icon 128x128 Asset CleanUp: Page Speed Booster
Version 1.2.9.5
Comparing to
See all releases

Code changes from version 1.2.9.4 to 1.2.9.5

Files changed (187) hide show
  1. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-deactivate.jpg +0 -0
  2. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-delete.jpg +0 -0
  3. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-2-choose-file.jpg +0 -0
  4. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-3-activate-plugin.jpg +0 -0
  5. assets/style.min.css +1 -1
  6. classes/AdminBar.php +3 -18
  7. classes/Main.php +13 -81
  8. classes/Misc.php +22 -15
  9. classes/OptimiseAssets/CombineCommon.php +412 -0
  10. classes/{OptimizeCss.php → OptimiseAssets/CombineCss.php} +56 -330
  11. classes/OwnAssets.php +4 -27
  12. classes/Plugin.php +1 -1
  13. classes/Settings.php +8 -16
  14. classes/Sorting.php +4 -26
  15. classes/Tools.php +3 -2
  16. classes/Update.php +7 -15
  17. freemius/assets/css/admin/account.css +0 -0
  18. freemius/assets/css/admin/add-ons.css +0 -0
  19. freemius/assets/css/admin/affiliation.css +0 -0
  20. freemius/assets/css/admin/checkout.css +0 -0
  21. freemius/assets/css/admin/common.css +0 -0
  22. freemius/assets/css/admin/connect.css +0 -0
  23. freemius/assets/css/admin/debug.css +0 -0
  24. freemius/assets/css/admin/dialog-boxes.css +0 -0
  25. freemius/assets/css/admin/gdpr-optin-notice.css +0 -0
  26. freemius/assets/css/admin/index.php +0 -0
  27. freemius/assets/css/customizer.css +0 -0
  28. freemius/assets/css/index.php +0 -0
  29. freemius/assets/img/index.php +0 -0
  30. freemius/assets/img/plugin-icon.png +0 -0
  31. freemius/assets/img/theme-icon.png +0 -0
  32. freemius/assets/index.php +0 -0
  33. freemius/assets/js/index.php +0 -0
  34. freemius/assets/js/nojquery.ba-postmessage.js +0 -0
  35. freemius/assets/js/nojquery.ba-postmessage.min.js +0 -0
  36. freemius/assets/js/postmessage.js +0 -0
  37. freemius/config.php +0 -0
  38. freemius/includes/class-freemius-abstract.php +0 -0
  39. freemius/includes/class-freemius.php +0 -0
  40. freemius/includes/class-fs-admin-notices.php +0 -0
  41. freemius/includes/class-fs-api.php +0 -0
  42. freemius/includes/class-fs-logger.php +0 -0
  43. freemius/includes/class-fs-options.php +0 -0
  44. freemius/includes/class-fs-plugin-updater.php +0 -0
  45. freemius/includes/class-fs-security.php +0 -0
  46. freemius/includes/class-fs-storage.php +0 -0
  47. freemius/includes/class-fs-user-lock.php +0 -0
  48. freemius/includes/customizer/class-fs-customizer-support-section.php +0 -0
  49. freemius/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
  50. freemius/includes/customizer/index.php +0 -0
  51. freemius/includes/debug/class-fs-debug-bar-panel.php +0 -0
  52. freemius/includes/debug/debug-bar-start.php +0 -0
  53. freemius/includes/debug/index.php +0 -0
  54. freemius/includes/entities/class-fs-affiliate-terms.php +0 -0
  55. freemius/includes/entities/class-fs-affiliate.php +0 -0
  56. freemius/includes/entities/class-fs-billing.php +0 -0
  57. freemius/includes/entities/class-fs-entity.php +0 -0
  58. freemius/includes/entities/class-fs-payment.php +0 -0
  59. freemius/includes/entities/class-fs-plugin-info.php +0 -0
  60. freemius/includes/entities/class-fs-plugin-license.php +0 -0
  61. freemius/includes/entities/class-fs-plugin-plan.php +0 -0
  62. freemius/includes/entities/class-fs-plugin-tag.php +0 -0
  63. freemius/includes/entities/class-fs-plugin.php +0 -0
  64. freemius/includes/entities/class-fs-pricing.php +0 -0
  65. freemius/includes/entities/class-fs-scope-entity.php +0 -0
  66. freemius/includes/entities/class-fs-site.php +0 -0
  67. freemius/includes/entities/class-fs-subscription.php +0 -0
  68. freemius/includes/entities/class-fs-user.php +0 -0
  69. freemius/includes/entities/index.php +0 -0
  70. freemius/includes/fs-core-functions.php +0 -0
  71. freemius/includes/fs-essential-functions.php +0 -0
  72. freemius/includes/fs-plugin-info-dialog.php +0 -0
  73. freemius/includes/i18n.php +0 -0
  74. freemius/includes/index.php +0 -0
  75. freemius/includes/l10n.php +0 -0
  76. freemius/includes/managers/class-fs-admin-menu-manager.php +0 -0
  77. freemius/includes/managers/class-fs-admin-notice-manager.php +0 -0
  78. freemius/includes/managers/class-fs-cache-manager.php +0 -0
  79. freemius/includes/managers/class-fs-gdpr-manager.php +0 -0
  80. freemius/includes/managers/class-fs-key-value-storage.php +0 -0
  81. freemius/includes/managers/class-fs-license-manager.php +0 -0
  82. freemius/includes/managers/class-fs-option-manager.php +0 -0
  83. freemius/includes/managers/class-fs-plan-manager.php +0 -0
  84. freemius/includes/managers/class-fs-plugin-manager.php +0 -0
  85. freemius/includes/managers/index.php +0 -0
  86. freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
  87. freemius/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
  88. freemius/includes/sdk/Exceptions/Exception.php +0 -0
  89. freemius/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
  90. freemius/includes/sdk/Exceptions/OAuthException.php +0 -0
  91. freemius/includes/sdk/Exceptions/index.php +0 -0
  92. freemius/includes/sdk/FreemiusBase.php +0 -0
  93. freemius/includes/sdk/FreemiusWordPress.php +0 -0
  94. freemius/includes/sdk/LICENSE.txt +0 -0
  95. freemius/includes/sdk/index.php +0 -0
  96. freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
  97. freemius/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
  98. freemius/includes/supplements/index.php +0 -0
  99. freemius/index.php +0 -0
  100. freemius/languages/freemius-da_DK.mo +0 -0
  101. freemius/languages/freemius-da_DK.po +0 -0
  102. freemius/languages/freemius-en.mo +0 -0
  103. freemius/languages/freemius-en.po +0 -0
  104. freemius/languages/freemius-es_ES.mo +0 -0
  105. freemius/languages/freemius-es_ES.po +0 -0
  106. freemius/languages/freemius-fr_FR.mo +0 -0
  107. freemius/languages/freemius-fr_FR.po +0 -0
  108. freemius/languages/freemius-he_IL.mo +0 -0
  109. freemius/languages/freemius-he_IL.po +0 -0
  110. freemius/languages/freemius-it_IT.mo +0 -0
  111. freemius/languages/freemius-it_IT.po +0 -0
  112. freemius/languages/freemius-ja_JP.mo +0 -0
  113. freemius/languages/freemius-ja_JP.po +0 -0
  114. freemius/languages/freemius-nl_NL.mo +0 -0
  115. freemius/languages/freemius-nl_NL.po +0 -0
  116. freemius/languages/freemius-ru_RU.mo +0 -0
  117. freemius/languages/freemius-ru_RU.po +0 -0
  118. freemius/languages/freemius.pot +0 -0
  119. freemius/languages/index.php +0 -0
  120. freemius/require.php +0 -0
  121. freemius/start.php +0 -0
  122. freemius/templates/account.php +0 -0
  123. freemius/templates/account/billing.php +0 -0
  124. freemius/templates/account/index.php +0 -0
  125. freemius/templates/account/partials/activate-license-button.php +0 -0
  126. freemius/templates/account/partials/addon.php +0 -0
  127. freemius/templates/account/partials/deactivate-license-button.php +0 -0
  128. freemius/templates/account/partials/index.php +0 -0
  129. freemius/templates/account/partials/site.php +0 -0
  130. freemius/templates/account/payments.php +0 -0
  131. freemius/templates/add-ons.php +0 -0
  132. freemius/templates/add-trial-to-pricing.php +0 -0
  133. freemius/templates/admin-notice.php +0 -0
  134. freemius/templates/ajax-loader.php +0 -0
  135. freemius/templates/auto-installation.php +0 -0
  136. freemius/templates/checkout.php +0 -0
  137. freemius/templates/connect.php +0 -0
  138. freemius/templates/contact.php +0 -0
  139. freemius/templates/debug.php +0 -0
  140. freemius/templates/debug/api-calls.php +0 -0
  141. freemius/templates/debug/index.php +0 -0
  142. freemius/templates/debug/logger.php +0 -0
  143. freemius/templates/debug/plugins-themes-sync.php +0 -0
  144. freemius/templates/debug/scheduled-crons.php +0 -0
  145. freemius/templates/email.php +0 -0
  146. freemius/templates/firewall-issues-js.php +0 -0
  147. freemius/templates/forms/affiliation.php +0 -0
  148. freemius/templates/forms/deactivation/contact.php +0 -0
  149. freemius/templates/forms/deactivation/form.php +0 -0
  150. freemius/templates/forms/deactivation/index.php +0 -0
  151. freemius/templates/forms/deactivation/retry-skip.php +0 -0
  152. freemius/templates/forms/index.php +0 -0
  153. freemius/templates/forms/license-activation.php +0 -0
  154. freemius/templates/forms/optout.php +0 -0
  155. freemius/templates/forms/premium-versions-upgrade-handler.php +0 -0
  156. freemius/templates/forms/premium-versions-upgrade-metadata.php +0 -0
  157. freemius/templates/forms/resend-key.php +0 -0
  158. freemius/templates/forms/subscription-cancellation.php +0 -0
  159. freemius/templates/forms/trial-start.php +0 -0
  160. freemius/templates/gdpr-optin-js.php +0 -0
  161. freemius/templates/index.php +0 -0
  162. freemius/templates/js/index.php +0 -0
  163. freemius/templates/js/jquery.content-change.php +0 -0
  164. freemius/templates/js/open-license-activation.php +0 -0
  165. freemius/templates/js/style-premium-theme.php +0 -0
  166. freemius/templates/partials/network-activation.php +0 -0
  167. freemius/templates/plugin-icon.php +0 -0
  168. freemius/templates/plugin-info/description.php +0 -0
  169. freemius/templates/plugin-info/features.php +0 -0
  170. freemius/templates/plugin-info/index.php +0 -0
  171. freemius/templates/plugin-info/screenshots.php +0 -0
  172. freemius/templates/powered-by.php +0 -0
  173. freemius/templates/pricing.php +0 -0
  174. freemius/templates/secure-https-header.php +0 -0
  175. freemius/templates/sticky-admin-notice-js.php +0 -0
  176. freemius/templates/tabs-capture-js.php +0 -0
  177. freemius/templates/tabs.php +0 -0
  178. readme.txt +6 -2
  179. templates/admin-page-getting-started.php +16 -9
  180. templates/admin-page-settings-plugin.php +30 -4
  181. templates/meta-box-loaded-assets/_asset-script-single-row.php +36 -31
  182. templates/meta-box-loaded-assets/_asset-style-single-row.php +29 -28
  183. templates/meta-box-loaded-assets/view-by-location.php +1 -1
  184. templates/meta-box-loaded-assets/view-default.php +1 -1
  185. templates/settings-frontend.php +1 -5
  186. wpacu-load.php +9 -3
  187. 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-all-css-cache',
58
- 'title' => 'Clear Combined CSS Cache',
59
  'href' => wp_nonce_url( admin_url( 'admin-post.php?action=assetcleanup_clear_assets_cache' . $goBackToCurrentUrl ),
60
- 'purge_css_cache' )
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
- } elseif ($this->wpacuProEnabled()) {
294
- $type = 'for_pro';
295
- // $this->currentPostId should be 0 in this case
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
- if ($exceptionsListJson) {
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
- // [wpacu_pro]
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
- // [wpacu_pro]
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
- } elseif (Misc::getVar('post', 'tag_id')) {
1200
- // [wpacu_pro]
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
- // Check if "Asset CleanUp Pro" is enabled
1492
- // Archives, tags, categories (taxonomy) pages are available in the premium extension: Asset CleanUp Pro
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
- // For Pro Version (Dashboard view): category link, tag link, custom taxonomy etc.
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 OptimizeCss
6
  * @package WpAssetCleanUp
7
  */
8
- class OptimizeCss
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
- private static $_transientExpiresIn = 60 * 60 * 12; // 8 hours in seconds
24
 
25
  /**
26
- * @var
27
- */
28
- private $_transientCssName;
29
-
30
- /**
31
- * OptimizeCss constructor.
32
  */
33
- public function __construct()
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
- $cssCachedFileExists = false;
 
 
 
 
 
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 = $this->getCssCachedTransient();
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 = $localFinalCssFileData['link_hrefs'];
108
- $cssCachedFileExists = true;
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
- $this->deleteCssCachedTransient();
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 = self::getLocalAssetPath($href);
146
 
147
  if ($localAssetPath) {
148
- $combinedUriPaths[] = self::getHrefRelPath($href);
149
  $localAssetsPaths[$href] = $localAssetPath;
150
- $linkHrefs[] = $href;
151
  }
152
  }
153
 
@@ -158,7 +113,7 @@ class OptimizeCss
158
  }
159
 
160
  if ($checkCssPreload && $attrObj->nodeName === 'href') {
161
- $hrefUriPreloads[] = self::getHrefRelPath($attrObj->nodeValue);
162
  }
163
  }
164
  }
@@ -199,60 +154,41 @@ class OptimizeCss
199
  $uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
200
 
201
  if (file_exists($localFinalCssFile)) {
202
- $cssCachedFileExists = true;
203
- $this->setCssCachedTransient( $uriToFinalCssFile, $linkHrefs );
 
 
 
 
204
  }
205
  }
206
 
207
- if ($cssCachedFileExists) {
208
  $finalTagUrl = WP_CONTENT_URL . self::$relPathCssCacheDir . $uriToFinalCssFile;
209
 
210
  $finalCssTag = <<<HTML
211
- <link id="asset-cleanup-combined-css" rel="stylesheet" href="{$finalTagUrl}" type="text/css" media="all" />
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
- $htmlSource = preg_replace('#<head>#si', '<head>'."\n" . $finalCssTag . "\n", $htmlSource, 1);
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
- foreach ($matchesLinkStylesheetTags as $matchLinkStylesheetTag) {
237
- $matchedLinkStylesheetTag = $matchLinkStylesheetTag[0];
238
-
239
- $domLink = new \DOMDocument();
240
- $domLink->loadHTML($matchedLinkStylesheetTag);
241
 
242
- foreach ($domLink->getElementsByTagName( 'link' ) as $tagLinkObject) {
243
- if (! $tagLinkObject->hasAttributes()) {
244
- continue;
245
- }
246
 
247
- foreach ($tagLinkObject->attributes as $tagLinkAttrs) {
248
- if ($tagLinkAttrs->nodeName === 'href' && in_array($tagLinkAttrs->nodeValue, $linkHrefs)) {
249
- $htmlSource = str_replace($matchedLinkStylesheetTag, '', $htmlSource);
250
  }
251
  }
252
- }
253
- }
254
 
255
- return $htmlSource;
 
 
256
  }
257
 
258
  /**
@@ -281,7 +217,7 @@ HTML;
281
  $finalAssetsContents = '';
282
 
283
  foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
284
- $posLastSlash = strrpos($assetHref, '/');
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 .= $this->maybeFixCssBackgroundUrls($assetContent, $pathToAssetDir . '/') . "\n\n";
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) || array_key_exists('wpacu_no_css_combine', $_GET) || is_admin()) {
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 ($this->isTaxonomyEditPage()) {
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) nor Taxonomy Edit Page? Does it have a post ID?
195
  // See if the individual post is published to continue
196
- if ($postId > 0 && (! $this->isTaxonomyEditPage())) {
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 . OptimizeCss::$relPathCssCacheDir;
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
- self::clearAllCache();
231
 
232
  $wpacuUpdate = new Update;
233
 
@@ -296,20 +298,10 @@ class Settings
296
  *
297
  */
298
  public static function clearAllCache()
299
- {
300
- // "Combined CSS Loaded" transients
301
- $optimizeCss = new OptimizeCss();
302
- $optimizeCss->clearAllCacheTransients();
303
 
304
- // "WP Rocket" cache
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
- //$locations[ $assetsKey ][] = $asset;
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
- //$locations['themes'] [$themeDir] [ $assetsKey ][] = $asset;
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
- //$locations['external'][$assetsKey][] = $asset;
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
- // [wpacu_pro]
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
- } /* [wpacu_pro] */ elseif ($type === 'for_pro') {
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
- } /* [wpacu_pro] */ elseif ($type === 'for_pro') {
410
- // Update any load extensions for pages like: taxonomy, 404, search, date etc.
411
- do_action( 'wpacu_pro_update_load_exceptions', $jsonLoadExceptions );
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
freemius/assets/img/theme-icon.png CHANGED
File without changes
freemius/assets/index.php CHANGED
File without changes
freemius/assets/js/index.php CHANGED
File without changes
freemius/assets/js/nojquery.ba-postmessage.js CHANGED
File without changes
freemius/assets/js/nojquery.ba-postmessage.min.js CHANGED
File without changes
freemius/assets/js/postmessage.js CHANGED
File without changes
freemius/config.php CHANGED
File without changes
freemius/includes/class-freemius-abstract.php CHANGED
File without changes
freemius/includes/class-freemius.php CHANGED
File without changes
freemius/includes/class-fs-admin-notices.php CHANGED
File without changes
freemius/includes/class-fs-api.php CHANGED
File without changes
freemius/includes/class-fs-logger.php CHANGED
File without changes
freemius/includes/class-fs-options.php CHANGED
File without changes
freemius/includes/class-fs-plugin-updater.php CHANGED
File without changes
freemius/includes/class-fs-security.php CHANGED
File without changes
freemius/includes/class-fs-storage.php CHANGED
File without changes
freemius/includes/class-fs-user-lock.php CHANGED
File without changes
freemius/includes/customizer/class-fs-customizer-support-section.php CHANGED
File without changes
freemius/includes/customizer/class-fs-customizer-upsell-control.php CHANGED
File without changes
freemius/includes/customizer/index.php CHANGED
File without changes
freemius/includes/debug/class-fs-debug-bar-panel.php CHANGED
File without changes
freemius/includes/debug/debug-bar-start.php CHANGED
File without changes
freemius/includes/debug/index.php CHANGED
File without changes
freemius/includes/entities/class-fs-affiliate-terms.php CHANGED
File without changes
freemius/includes/entities/class-fs-affiliate.php CHANGED
File without changes
freemius/includes/entities/class-fs-billing.php CHANGED
File without changes
freemius/includes/entities/class-fs-entity.php CHANGED
File without changes
freemius/includes/entities/class-fs-payment.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-info.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-license.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-plan.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin-tag.php CHANGED
File without changes
freemius/includes/entities/class-fs-plugin.php CHANGED
File without changes
freemius/includes/entities/class-fs-pricing.php CHANGED
File without changes
freemius/includes/entities/class-fs-scope-entity.php CHANGED
File without changes
freemius/includes/entities/class-fs-site.php CHANGED
File without changes
freemius/includes/entities/class-fs-subscription.php CHANGED
File without changes
freemius/includes/entities/class-fs-user.php CHANGED
File without changes
freemius/includes/entities/index.php CHANGED
File without changes
freemius/includes/fs-core-functions.php CHANGED
File without changes
freemius/includes/fs-essential-functions.php CHANGED
File without changes
freemius/includes/fs-plugin-info-dialog.php CHANGED
File without changes
freemius/includes/i18n.php CHANGED
File without changes
freemius/includes/index.php CHANGED
File without changes
freemius/includes/l10n.php CHANGED
File without changes
freemius/includes/managers/class-fs-admin-menu-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-admin-notice-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-cache-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-gdpr-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-key-value-storage.php CHANGED
File without changes
freemius/includes/managers/class-fs-license-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-option-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-plan-manager.php CHANGED
File without changes
freemius/includes/managers/class-fs-plugin-manager.php CHANGED
File without changes
freemius/includes/managers/index.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/ArgumentNotExistException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/EmptyArgumentException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/Exception.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/InvalidArgumentException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/OAuthException.php CHANGED
File without changes
freemius/includes/sdk/Exceptions/index.php CHANGED
File without changes
freemius/includes/sdk/FreemiusBase.php CHANGED
File without changes
freemius/includes/sdk/FreemiusWordPress.php CHANGED
File without changes
freemius/includes/sdk/LICENSE.txt CHANGED
File without changes
freemius/includes/sdk/index.php CHANGED
File without changes
freemius/includes/supplements/fs-essential-functions-1.1.7.1.php CHANGED
File without changes
freemius/includes/supplements/fs-essential-functions-2.2.1.php CHANGED
File without changes
freemius/includes/supplements/index.php CHANGED
File without changes
freemius/index.php CHANGED
File without changes
freemius/languages/freemius-da_DK.mo CHANGED
File without changes
freemius/languages/freemius-da_DK.po CHANGED
File without changes
freemius/languages/freemius-en.mo CHANGED
File without changes
freemius/languages/freemius-en.po CHANGED
File without changes
freemius/languages/freemius-es_ES.mo CHANGED
File without changes
freemius/languages/freemius-es_ES.po CHANGED
File without changes
freemius/languages/freemius-fr_FR.mo CHANGED
File without changes
freemius/languages/freemius-fr_FR.po CHANGED
File without changes
freemius/languages/freemius-he_IL.mo CHANGED
File without changes
freemius/languages/freemius-he_IL.po CHANGED
File without changes
freemius/languages/freemius-it_IT.mo CHANGED
File without changes
freemius/languages/freemius-it_IT.po CHANGED
File without changes
freemius/languages/freemius-ja_JP.mo CHANGED
File without changes
freemius/languages/freemius-ja_JP.po CHANGED
File without changes
freemius/languages/freemius-nl_NL.mo CHANGED
File without changes
freemius/languages/freemius-nl_NL.po CHANGED
File without changes
freemius/languages/freemius-ru_RU.mo CHANGED
File without changes
freemius/languages/freemius-ru_RU.po CHANGED
File without changes
freemius/languages/freemius.pot CHANGED
File without changes
freemius/languages/index.php CHANGED
File without changes
freemius/require.php CHANGED
File without changes
freemius/start.php CHANGED
File without changes
freemius/templates/account.php CHANGED
File without changes
freemius/templates/account/billing.php CHANGED
File without changes
freemius/templates/account/index.php CHANGED
File without changes
freemius/templates/account/partials/activate-license-button.php CHANGED
File without changes
freemius/templates/account/partials/addon.php CHANGED
File without changes
freemius/templates/account/partials/deactivate-license-button.php CHANGED
File without changes
freemius/templates/account/partials/index.php CHANGED
File without changes
freemius/templates/account/partials/site.php CHANGED
File without changes
freemius/templates/account/payments.php CHANGED
File without changes
freemius/templates/add-ons.php CHANGED
File without changes
freemius/templates/add-trial-to-pricing.php CHANGED
File without changes
freemius/templates/admin-notice.php CHANGED
File without changes
freemius/templates/ajax-loader.php CHANGED
File without changes
freemius/templates/auto-installation.php CHANGED
File without changes
freemius/templates/checkout.php CHANGED
File without changes
freemius/templates/connect.php CHANGED
File without changes
freemius/templates/contact.php CHANGED
File without changes
freemius/templates/debug.php CHANGED
File without changes
freemius/templates/debug/api-calls.php CHANGED
File without changes
freemius/templates/debug/index.php CHANGED
File without changes
freemius/templates/debug/logger.php CHANGED
File without changes
freemius/templates/debug/plugins-themes-sync.php CHANGED
File without changes
freemius/templates/debug/scheduled-crons.php CHANGED
File without changes
freemius/templates/email.php CHANGED
File without changes
freemius/templates/firewall-issues-js.php CHANGED
File without changes
freemius/templates/forms/affiliation.php CHANGED
File without changes
freemius/templates/forms/deactivation/contact.php CHANGED
File without changes
freemius/templates/forms/deactivation/form.php CHANGED
File without changes
freemius/templates/forms/deactivation/index.php CHANGED
File without changes
freemius/templates/forms/deactivation/retry-skip.php CHANGED
File without changes
freemius/templates/forms/index.php CHANGED
File without changes
freemius/templates/forms/license-activation.php CHANGED
File without changes
freemius/templates/forms/optout.php CHANGED
File without changes
freemius/templates/forms/premium-versions-upgrade-handler.php CHANGED
File without changes
freemius/templates/forms/premium-versions-upgrade-metadata.php CHANGED
File without changes
freemius/templates/forms/resend-key.php CHANGED
File without changes
freemius/templates/forms/subscription-cancellation.php CHANGED
File without changes
freemius/templates/forms/trial-start.php CHANGED
File without changes
freemius/templates/gdpr-optin-js.php CHANGED
File without changes
freemius/templates/index.php CHANGED
File without changes
freemius/templates/js/index.php CHANGED
File without changes
freemius/templates/js/jquery.content-change.php CHANGED
File without changes
freemius/templates/js/open-license-activation.php CHANGED
File without changes
freemius/templates/js/style-premium-theme.php CHANGED
File without changes
freemius/templates/partials/network-activation.php CHANGED
File without changes
freemius/templates/plugin-icon.php CHANGED
File without changes
freemius/templates/plugin-info/description.php CHANGED
File without changes
freemius/templates/plugin-info/features.php CHANGED
File without changes
freemius/templates/plugin-info/index.php CHANGED
File without changes
freemius/templates/plugin-info/screenshots.php CHANGED
File without changes
freemius/templates/powered-by.php CHANGED
File without changes
freemius/templates/pricing.php CHANGED
File without changes
freemius/templates/secure-https-header.php CHANGED
File without changes
freemius/templates/sticky-admin-notice-js.php CHANGED
File without changes
freemius/templates/tabs-capture-js.php CHANGED
File without changes
freemius/templates/tabs.php CHANGED
File without changes
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: pagespeed, page speed, dequeue, performance, gtmetrix
4
  Donate link: https://gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
5
  Requires at least: 4.4
6
  Tested up to: 5.0.3
7
- Stable tag: 1.2.9.4
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl.html
10
 
@@ -131,8 +131,12 @@ With the recently released "Test Mode" feature, you can safely unload assets on
131
  4. Scripts (.JS) are selected for site-wide unload
132
 
133
  == Changelog ==
 
 
 
 
134
  = 1.2.9.4 =
135
- * Bug Fix: If PHP version is lower than 7, an error is shown when fecthing the plugins' icons in the background to be shown on the management list (when sorted by the assets' location)
136
 
137
  = 1.2.9.3 =
138
  * New sorting by location (default) option in "Assets List Layout" setting
4
  Donate link: https://gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
5
  Requires at least: 4.4
6
  Tested up to: 5.0.3
7
+ Stable tag: 1.2.9.5
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl.html
10
 
131
  4. Scripts (.JS) are selected for site-wide unload
132
 
133
  == Changelog ==
134
+ = 1.2.9.5 =
135
+ * 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
136
+ * 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
137
+
138
  = 1.2.9.4 =
139
+ * Bug Fix: If PHP version is lower than 7, an error is shown when fetching the plugins' icons in the background to be shown on the management list (when sorted by the assets' location)
140
 
141
  = 1.2.9.3 =
142
  * New sorting by location (default) option in "Assets List Layout" setting
templates/admin-page-getting-started.php CHANGED
@@ -10,7 +10,7 @@ if (! isset($data)) {
10
  <div class="about-wrap wpacu-about-wrap">
11
  <h1>Welcome to Asset CleanUp <?php echo WPACU_PLUGIN_VERSION; ?></h1>
12
  <p class="about-text wpacu-about-text">
13
- Thank you for installing this page speed booster plugin! Prepare to make your WordPress website faster &amp; lighter by removing the useless CSS &amp; JavaScript files from your pages. For maximum performance, Asset CleanUp works best when used with either a caching plugin, the in-built hosting caching (e.g. <a style="text-decoration: none; color: #555d66;" href="https://gabelivan.com/visit/wp-engine">WPEngine</a>, Kinsta have it) or something like Varnish.
14
  <img src="<?php echo WPACU_PLUGIN_URL; ?>/assets/images/wpacu-logo-transparent-bg-v1.png" alt="" />
15
  </p>
16
 
@@ -25,14 +25,21 @@ if (! isset($data)) {
25
  <p>Often, our WordPress websites are loaded with elements that are not needed to load on specific pages or even everywhere. These assets (CSS &amp; JavaScript files) as well as inline code are adding up to the total size of the page, thus taking more time for the page to load.</p>
26
  <p>This could end up in a slow website that leads to page abandonment, poor ranking in Google search and sometimes conflict JavaScript errors where too many scripts are loading and one of them (or more) have poorly written code that is not autonomous and badly interacts with other code.</p>
27
  <hr />
28
- <p class="area-title">What Asset CleanUp really does? <span style="font-size: 22px;">🚀</span></p>
29
- <p>Asset CleanUp is front-end optimisation performance plugin and let's you select the assets that are not needed to load on your website and combine the remaining loaded ones into fewer files, which will in the end reduce considerably the number of HTTP requests and optimize the front-end side of your pages. <a target="_blank" href="https://developer.yahoo.com/performance/rules.html">Read more</a></p>
30
- <p>Once the setup is completed, the pages will have a better speed score (this can be tested using tools such as GTMetrix) and combined with a backend caching system (<em>e.g. a plugin such as <a target="_blank" href="https://gabelivan.com/visit/wp-rocket">WP Rocket</a>, a hosting service that has its in-built WordPress caching like <a href="https://gabelivan.com/visit/wp-engine">WPEngine</a> or Kinsta, a web application accelerator like Varnish that can be setup the server etc.</em>), it will improve the page speed even more.</p>
 
 
 
 
 
 
 
31
  <hr />
32
- <p class="area-title">Example (Stripping ~66% of "crap") <span style="font-size: 22px;">✨</span></p>
33
  <p>Let's suppose you have a page where 30 files (CSS &amp; JS) are loaded. All have a total size of 1.5 MB. Using Asset CleanUp, you can reduce the number to 12 files by unloading the other 18 files which are useless on the page. You've reduced the total size to 0.7 MB, this resulting in less time in downloading the assets, thus the page will load faster. If you also combine and minify the remaining 12 files, the total assets size becomes smaller to 0.5 MB. In the end, <strong>the assets will load 3 times faster and improve your page speed score</strong>. Moreover, the HTML source code will be cleaner and easier to go through in case you're a developer and need to do any debugging or just check something in the code.</p>
34
  <hr />
35
- <p class="area-title">Not sure how to configure it? <span style="font-size: 22px;">🤔</span></p>
36
  <p>No problem! You can enable "Test Mode" and any changes you make, will only be visible for you (the logged-in administrator), while the regular visitors will see the pages as if the plugin is not active. Once all is good, you can disable "Test Mode" (thus applying the settings to everyone), clear the page caching (if using a plugin or a server-side solution such as Varnish) and check out the page speed score. <a target="_blank" href="https://assetcleanup.com/docs/?p=84">Read more</a></p>
37
  <?php } elseif ($data['for'] === 'benefits-fast-pages') { ?>
38
  <p class="area-title">Higher search ranking <span style="font-size: 22px;">📈</span></p>
@@ -41,15 +48,15 @@ if (! isset($data)) {
41
  <p><span class="dashicons dashicons-video-alt3"></span> <a href="https://www.youtube.com/watch?v=SO4YuDAkplU" target="_blank">How does Google determine page speed?</a></p>
42
  <hr />
43
 
44
- <p class="area-title">Visitor Experience <span style="font-size: 22px;">😊</span></p>
45
  <p>For a customer (it's likely happened to you too) that wants to purchase something online, it's very frustrating to land on slow loading website. A blazing fast website, will keep your visitors happy, engaged, which will directly influence conversions. If a visitor doesn't get what he wants in a time he/she thinks it's reasonable, they will probably head to another website belonging to a competitor. As today's users expect a fast and streamlined web experience, you're losing business if you neglect this often overlooked aspect.</p>
46
  <hr />
47
 
48
- <p class="area-title">Better Developer Experience <span style="font-size: 22px;">⚙️</span></p>
49
  <p>As developers, we often go through the HTML source code of the website, access the server (e.g. Apache, NGINX) logs that has the HTTP requests, and have to sometimes solve code conflict problems (e.g. between plugins) due to poorly written code. By preventing unnecessary files to load, having less HTTP requests, and cleaner HTML code, you will be able to easily go through the code (which is smaller), your log files will take less space on the server, will be easier to backup and analyse, and by having less JavaScript files loading, you will be reduce the changes of getting less JS errors that could interfere with the functionality of your website.</p>
50
  <hr />
51
 
52
- <p class="area-title">Higher Revenue <span style="font-size: 22px;">💯</span></p>
53
  <p>Just about any major retailer is taking site speed as a very important factor for increasing conversions. According to Strangeloop, 57% of online customers will leave a website after waiting 3 seconds for the page to load. Moreover, 80% of those people will not return to that page. Some of them will tell others about their negative experience. This has a direct impact on the conversion rate, revenue and brand image.</p>
54
 
55
  <p style="margin-bottom: 0;"><em>"78% of users say they've felt STRESS OR ANGER while using a slow website."</em></p>
10
  <div class="about-wrap wpacu-about-wrap">
11
  <h1>Welcome to Asset CleanUp <?php echo WPACU_PLUGIN_VERSION; ?></h1>
12
  <p class="about-text wpacu-about-text">
13
+ Thank you for installing this page speed booster plugin! Prepare to make your WordPress website faster &amp; lighter by removing the useless CSS &amp; JavaScript files from your pages. For maximum performance, Asset CleanUp works best when used with either a <a style="text-decoration: none; color: #555d66;" href="https://gabelivan.com/visit/wp-rocket">caching plugin</a>, the in-built hosting caching (e.g. <a style="text-decoration: none; color: #555d66;" href="https://gabelivan.com/visit/wp-engine">WPEngine</a>, Kinsta have it) or something like Varnish.
14
  <img src="<?php echo WPACU_PLUGIN_URL; ?>/assets/images/wpacu-logo-transparent-bg-v1.png" alt="" />
15
  </p>
16
 
25
  <p>Often, our WordPress websites are loaded with elements that are not needed to load on specific pages or even everywhere. These assets (CSS &amp; JavaScript files) as well as inline code are adding up to the total size of the page, thus taking more time for the page to load.</p>
26
  <p>This could end up in a slow website that leads to page abandonment, poor ranking in Google search and sometimes conflict JavaScript errors where too many scripts are loading and one of them (or more) have poorly written code that is not autonomous and badly interacts with other code.</p>
27
  <hr />
28
+ <p class="area-title">What Asset CleanUp really does? <span style="font-size: 24px;">🚀</span></p>
29
+ <p>Asset CleanUp is a <strong>front-end optimisation performance plugin</strong> and let's you select the assets that are not needed to load on your website and combine the remaining loaded ones into fewer files, which will in the end reduce considerably the number of HTTP requests and optimize the front-end side of your pages. <a target="_blank" href="https://developer.yahoo.com/performance/rules.html">Read more</a></p>
30
+ <p>Once the setup is completed, the pages will have a better speed score since there will be less HTTP requests (.css &amp; .js files) loaded by the browser (this can be tested using tools such as GTMetrix) and combined with a backend page caching system it will improve the page speed even more.
31
+ <p>Page caching solutions include:</p>
32
+ <ul style="font-size: 14px; list-style: disc; margin-left: 25px;">
33
+ <li style="line-height: 21px; margin-bottom: 15px;">A plugin such as <a target="_blank" href="https://gabelivan.com/visit/wp-rocket">WP Rocket</a> (get 20% off by using the <em>IMAGIFY20</em> coupon code) that creates static HTML files (which are lighter thanks to Asset CleanUp) and reads them avoiding PHP code processing within the active plugins &amp; theme, including database queries which can use lots of server resources if you have high traffic. The page caching improves the <a href="http://gabelivan.com/visit/wp-rocket-ttfb">TTFB</a> (time to first byte) which measures the duration from the user or client making an HTTP request to the first byte of the page being received by the client's browser.</li>
34
+ <li style="line-height: 21px; margin-bottom: 20px;">A hosting service that has its in-built WordPress caching like <a href="https://gabelivan.com/visit/wp-engine">WPEngine</a> or Kinsta, a web application accelerator like Varnish that can be setup the server etc.</li>
35
+ </ul>
36
+
37
+ <p style="line-height: normal;"><small><strong>Disclaimer:</strong> The recommendations above are based from my own experience as a developer &amp; user and I'm happy to recommend them to whoever wants superior WordPress performance. The links are affiliate related and I might get a commission if you decide to make a purchase.</small></p>
38
  <hr />
39
+ <p class="area-title">Example (Stripping ~66% of "crap") <span style="font-size: 24px;">✨</span></p>
40
  <p>Let's suppose you have a page where 30 files (CSS &amp; JS) are loaded. All have a total size of 1.5 MB. Using Asset CleanUp, you can reduce the number to 12 files by unloading the other 18 files which are useless on the page. You've reduced the total size to 0.7 MB, this resulting in less time in downloading the assets, thus the page will load faster. If you also combine and minify the remaining 12 files, the total assets size becomes smaller to 0.5 MB. In the end, <strong>the assets will load 3 times faster and improve your page speed score</strong>. Moreover, the HTML source code will be cleaner and easier to go through in case you're a developer and need to do any debugging or just check something in the code.</p>
41
  <hr />
42
+ <p class="area-title">Not sure how to configure it? <span style="font-size: 24px;">🤔</span></p>
43
  <p>No problem! You can enable "Test Mode" and any changes you make, will only be visible for you (the logged-in administrator), while the regular visitors will see the pages as if the plugin is not active. Once all is good, you can disable "Test Mode" (thus applying the settings to everyone), clear the page caching (if using a plugin or a server-side solution such as Varnish) and check out the page speed score. <a target="_blank" href="https://assetcleanup.com/docs/?p=84">Read more</a></p>
44
  <?php } elseif ($data['for'] === 'benefits-fast-pages') { ?>
45
  <p class="area-title">Higher search ranking <span style="font-size: 22px;">📈</span></p>
48
  <p><span class="dashicons dashicons-video-alt3"></span> <a href="https://www.youtube.com/watch?v=SO4YuDAkplU" target="_blank">How does Google determine page speed?</a></p>
49
  <hr />
50
 
51
+ <p class="area-title">Visitor Experience <span style="font-size: 24px;">😊</span></p>
52
  <p>For a customer (it's likely happened to you too) that wants to purchase something online, it's very frustrating to land on slow loading website. A blazing fast website, will keep your visitors happy, engaged, which will directly influence conversions. If a visitor doesn't get what he wants in a time he/she thinks it's reasonable, they will probably head to another website belonging to a competitor. As today's users expect a fast and streamlined web experience, you're losing business if you neglect this often overlooked aspect.</p>
53
  <hr />
54
 
55
+ <p class="area-title">Better Developer Experience <span style="font-size: 24px;">⚙️</span></p>
56
  <p>As developers, we often go through the HTML source code of the website, access the server (e.g. Apache, NGINX) logs that has the HTTP requests, and have to sometimes solve code conflict problems (e.g. between plugins) due to poorly written code. By preventing unnecessary files to load, having less HTTP requests, and cleaner HTML code, you will be able to easily go through the code (which is smaller), your log files will take less space on the server, will be easier to backup and analyse, and by having less JavaScript files loading, you will be reduce the changes of getting less JS errors that could interfere with the functionality of your website.</p>
57
  <hr />
58
 
59
+ <p class="area-title">Higher Revenue <span style="font-size: 24px;">💯</span></p>
60
  <p>Just about any major retailer is taking site speed as a very important factor for increasing conversions. According to Strangeloop, 57% of online customers will leave a website after waiting 3 seconds for the page to load. Moreover, 80% of those people will not return to that page. Some of them will tell others about their negative experience. This has a direct impact on the conversion rate, revenue and brand image.</p>
61
 
62
  <p style="margin-bottom: 0;"><em>"78% of users say they've felt STRESS OR ANGER while using a slow website."</em></p>
templates/admin-page-settings-plugin.php CHANGED
@@ -259,13 +259,39 @@ do_action('wpacu_admin_notices');
259
  <option <?php if ($data['combine_loaded_css'] === 'for_all') { ?>selected="selected"<?php } ?> value="for_all">Yes, for everyone</option>
260
  </select> <small>* if /wp-content/cache/ directory is not writable for some reason, this feature will not work; requires the DOMDocument XML DOM Parser to be enabled in PHP (which it is by default) for maximum performance</small>
261
  &nbsp;
262
- <p>This scans the remaining CSS files from the <code>&lt;head&gt;</code> and combines them into one file. To be 100% sure everything works fine after activation, consider using "Yes, for logged-in administrators" so only you can see the updated page. If all looks good, you can later switch it to "Yes (for everyone)".</p>
263
- <p style="margin-bottom: 0;">The following stylesheets are not included in the combined CSS file for maximum performance:</p>
264
- <ul style="list-style: disc; margin-left: 20px; margin-bottom: 0;">
265
  <li>Have any <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content">preloading added to them</a> via <code>rel="preload"</code> will not be combined as they have priority in loading and shouldn't be mixed with the rest of the CSS.</li>
266
  <li style="margin-bottom: 0;">Are loaded within the <code>&lt;body&gt;</code> part of the page as they were likely added there because they are needed after the page is rendered (e.g. for AJAX styling calls, popups or elements that are not visible in the top viewport etc.)</li>
267
  </ul>
268
- <p style="margin-top: 10px;"><strong>Note:</strong> If "Test Mode" is enabled, the CSS files this feature will not work for the guest users, even if "Yes, for everyone" is chosen as "Test Mode" purpose is to make the plugin as inactive for non logged-in administrators for ultimate debugging.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
  </td>
270
  </tr>
271
  </table>
259
  <option <?php if ($data['combine_loaded_css'] === 'for_all') { ?>selected="selected"<?php } ?> value="for_all">Yes, for everyone</option>
260
  </select> <small>* if /wp-content/cache/ directory is not writable for some reason, this feature will not work; requires the DOMDocument XML DOM Parser to be enabled in PHP (which it is by default) for maximum performance</small>
261
  &nbsp;
262
+ <p>This scans the remaining CSS files (left after unloaded the unnecessary ones) from the <code>&lt;head&gt;</code> and combines them into one file. To be 100% sure everything works fine after activation, consider using "Yes, for logged-in administrators" so only you can see the updated page. If all looks good, you can later switch it to "Yes (for everyone)".</p>
263
+ <p style="margin-bottom: -7px;">The following stylesheets are not included in the combined CSS file for maximum performance:</p>
264
+ <ul style="list-style: disc; margin-left: 25px; margin-bottom: 0;">
265
  <li>Have any <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content">preloading added to them</a> via <code>rel="preload"</code> will not be combined as they have priority in loading and shouldn't be mixed with the rest of the CSS.</li>
266
  <li style="margin-bottom: 0;">Are loaded within the <code>&lt;body&gt;</code> part of the page as they were likely added there because they are needed after the page is rendered (e.g. for AJAX styling calls, popups or elements that are not visible in the top viewport etc.)</li>
267
  </ul>
268
+ <p style="margin-bottom: -7px; margin-top: 20px;">This feature will not work <strong>IF</strong>:</p>
269
+ <ul style="margin-left: 25px; list-style: disc;">
270
+ <li>"Test Mode" is enabled, this feature will not work for the guest users, even if "Yes, for everyone" is chosen as "Test Mode" purpose is to make the plugin as inactive for non logged-in administrators for ultimate debugging.</li>
271
+ <li>The URL has query strings (e.g. an URL such as //www.yourdomain.com/product/title-here/?param=1&amp;param_two=value_here)</li>
272
+ </ul>
273
+ </td>
274
+ </tr>
275
+
276
+ <tr valign="top">
277
+ <th scope="row" class="setting_title">
278
+ <label>Combine loaded JS (JavaScript) into less files?</label>
279
+ <p class="wpacu_subtitle"><small><em>Helps reducing the number of HTTP Requests even further</em></small></p>
280
+ </th>
281
+ <td>
282
+ <?php echo $availableForPro; ?> <small>* if /wp-content/cache/ directory is not writable for some reason, this feature will not work; requires the DOMDocument XML DOM Parser to be enabled in PHP (which it is by default) for maximum performance</small>
283
+ &nbsp;
284
+ <p>This scans the remaining JavaScript files (left after unloaded the unnecessary ones) from the <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> and combines them into less files. The combination is made in such a way that it will not interefere with any inline JavaScript code associated with any of the files. To be 100% sure everything works fine after activation, consider using "Yes, for logged-in administrators" so only you can see the updated page. If all looks good, you can later switch it to "Yes (for everyone)".</p>
285
+ <p style="margin-bottom: -7px;">For maximum performance and making sure that no functionality is broken the following JavaScript files:</p>
286
+ <ul style="list-style: disc; margin-left: 25px; margin-bottom: 0;">
287
+ <li>Any script tag having "defer" or "async" attributes</li>
288
+ <li>Scripts that have inline code associated with it</li>
289
+ </ul>
290
+ <p style="margin-bottom: -7px; margin-top: 20px;">This feature will not work <strong>IF</strong>:</p>
291
+ <ul style="list-style: disc; margin-left: 25px; margin-bottom: 0;">
292
+ <li>"Test Mode" is enabled, this feature will not work for the guest users, even if "Yes, for everyone" is chosen as "Test Mode" purpose is to make the plugin as inactive for non logged-in administrators for ultimate debugging.</li>
293
+ <li>The URL has query strings (e.g. an URL such as //www.yourdomain.com/product/title-here/?param=1&amp;param_two=value_here)</li>
294
+ </ul>
295
  </td>
296
  </tr>
297
  </table>
templates/meta-box-loaded-assets/_asset-script-single-row.php CHANGED
@@ -16,6 +16,7 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
16
  <p class="wpacu_handle">
17
  <label for="script_<?php echo $data['row']['obj']->handle; ?>"> <?php _e('Handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?> <strong><span style="color: green;"><?php echo $data['row']['obj']->handle; ?></span></strong></label>
18
  <?php if (isset($data['view_by_location'])) { echo '&nbsp;<em>* JavaScript (.js)</em>'; } ?>
 
19
  <?php
20
  if ($isCoreFile && ! $hideCoreFiles) {
21
  ?>
@@ -25,6 +26,41 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
25
  ?>
26
  </p>
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <div <?php if (! $isBulkUnloaded) { ?>class="wrap_bulk_unload_options"<?php } ?>>
29
  <div class="wpacu_asset_options_wrap">
30
  <ul class="wpacu_asset_options wpacu_exception_options_area" <?php /* [wpacu_lite] */ if ($data['row']['global_unloaded'] || $data['row']['is_post_type_unloaded']) { /* [/wpacu_lite] */ echo 'style="display: none;"'; } ?>>
@@ -162,7 +198,6 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
162
  <div class="wpacu-clearfix"></div>
163
  </div>
164
  <?php
165
- do_action('wpacu_pro_bulk_unload_output', $data, $data['row']['obj'], 'js');
166
  ?>
167
 
168
  <ul class="wpacu_asset_options wpacu_exception_options_area">
@@ -178,12 +213,6 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
178
  </li>
179
  </ul>
180
  <?php
181
- if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src !== '' && $data['row']['obj']->srcHref) {
182
- ?>
183
- <p><strong><?php _e('Source:', WPACU_PLUGIN_TEXT_DOMAIN); ?></strong> <a target="_blank" href="<?php echo $data['row']['obj']->srcHref; ?>"><?php echo $data['row']['obj']->src; ?></a></p>
184
- <?php
185
- }
186
-
187
  if ($data['row']['extra_data_js']) { ?>
188
  <div>
189
  <?php _e('Inline JavaScript code associated with the handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?>
@@ -200,30 +229,6 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
200
  </div>
201
  <?php
202
  }
203
-
204
- $extraInfo = array();
205
-
206
- if (! empty($data['row']['obj']->deps)) {
207
- $extraInfo[] = '<strong>'.__('Depends on:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> ' . implode(', ', $data['row']['obj']->deps);
208
- }
209
-
210
- if (isset($data['row']['obj']->ver) && $data['row']['obj']->ver !== '') {
211
- $extraInfo[] = '<strong>'.__('Version:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> ' . $data['row']['obj']->ver;
212
- }
213
-
214
- if (isset($data['row']['obj']->position) && $data['row']['obj']->position !== '') {
215
- $extraInfo[] = '<strong>'.__('Position:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> ' . (( $data['row']['obj']->position === 'head') ? 'HEAD' : 'BODY');
216
- }
217
-
218
- // [wpacu_lite]
219
- if (isset($data['row']['obj']->src) && $data['row']['obj']->src) {
220
- $extraInfo[] = '<strong>' . __( 'File Size:', WPACU_PLUGIN_TEXT_DOMAIN ) . '</strong> <a class="go-pro-link-no-style" href="' . WPACU_PLUGIN_GO_PRO_URL . '?utm_source=manage_asset&utm_medium=file_size"><span class="wpacu-tooltip">Upgrade to Pro and unlock all features</span><img width="20" height="20" src="' . WPACU_PLUGIN_URL . '/assets/icons/icon-lock.svg" valign="top" alt="" /> Pro Version</a>';
221
- }
222
- // [/wpacu_lite]
223
-
224
- if (! empty($extraInfo)) {
225
- echo '<p>'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</p>';
226
- }
227
  ?>
228
 
229
  <!-- [wpacu_lite] -->
16
  <p class="wpacu_handle">
17
  <label for="script_<?php echo $data['row']['obj']->handle; ?>"> <?php _e('Handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?> <strong><span style="color: green;"><?php echo $data['row']['obj']->handle; ?></span></strong></label>
18
  <?php if (isset($data['view_by_location'])) { echo '&nbsp;<em>* JavaScript (.js)</em>'; } ?>
19
+
20
  <?php
21
  if ($isCoreFile && ! $hideCoreFiles) {
22
  ?>
26
  ?>
27
  </p>
28
 
29
+ <?php
30
+ if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src !== '' && $data['row']['obj']->srcHref) {
31
+ $relSrc = str_replace(site_url(), '', $data['row']['obj']->src);
32
+ ?>
33
+ <p><?php _e('Source:', WPACU_PLUGIN_TEXT_DOMAIN); ?> <a target="_blank" style="color: green;" href="<?php echo $data['row']['obj']->srcHref; ?>"><?php echo $relSrc; ?></a></p>
34
+ <?php
35
+ }
36
+ ?>
37
+
38
+ <?php
39
+ $extraInfo = array();
40
+
41
+ if (! empty($data['row']['obj']->deps)) {
42
+ $extraInfo[] = __('Depends on:', WPACU_PLUGIN_TEXT_DOMAIN) . ' ' . implode(', ', $data['row']['obj']->deps);
43
+ }
44
+
45
+ if (isset($data['row']['obj']->ver) && $data['row']['obj']->ver !== '') {
46
+ $extraInfo[] = __('Version:', WPACU_PLUGIN_TEXT_DOMAIN) . ' ' . $data['row']['obj']->ver;
47
+ }
48
+
49
+ if (isset($data['row']['obj']->position) && $data['row']['obj']->position !== '') {
50
+ $extraInfo[] = __('Position:', WPACU_PLUGIN_TEXT_DOMAIN) . ' ' . (( $data['row']['obj']->position === 'head') ? 'HEAD' : 'BODY');
51
+ }
52
+
53
+ // [wpacu_lite]
54
+ if (isset($data['row']['obj']->src) && $data['row']['obj']->src) {
55
+ $extraInfo[] = __( 'File Size:', WPACU_PLUGIN_TEXT_DOMAIN ) . ' <a class="go-pro-link-no-style" href="' . WPACU_PLUGIN_GO_PRO_URL . '?utm_source=manage_asset&utm_medium=file_size"><span class="wpacu-tooltip">Upgrade to Pro and unlock all features</span><img width="20" height="20" src="' . WPACU_PLUGIN_URL . '/assets/icons/icon-lock.svg" valign="top" alt="" /> Pro Version</a>';
56
+ }
57
+ // [/wpacu_lite]
58
+
59
+ if (! empty($extraInfo)) {
60
+ echo '<p>'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</p>';
61
+ }
62
+ ?>
63
+
64
  <div <?php if (! $isBulkUnloaded) { ?>class="wrap_bulk_unload_options"<?php } ?>>
65
  <div class="wpacu_asset_options_wrap">
66
  <ul class="wpacu_asset_options wpacu_exception_options_area" <?php /* [wpacu_lite] */ if ($data['row']['global_unloaded'] || $data['row']['is_post_type_unloaded']) { /* [/wpacu_lite] */ echo 'style="display: none;"'; } ?>>
198
  <div class="wpacu-clearfix"></div>
199
  </div>
200
  <?php
 
201
  ?>
202
 
203
  <ul class="wpacu_asset_options wpacu_exception_options_area">
213
  </li>
214
  </ul>
215
  <?php
 
 
 
 
 
 
216
  if ($data['row']['extra_data_js']) { ?>
217
  <div>
218
  <?php _e('Inline JavaScript code associated with the handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?>
229
  </div>
230
  <?php
231
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  ?>
233
 
234
  <!-- [wpacu_lite] -->
templates/meta-box-loaded-assets/_asset-style-single-row.php CHANGED
@@ -25,6 +25,34 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
25
  ?>
26
  </p>
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <div <?php if (! $isBulkUnloaded) { ?>class="wrap_bulk_unload_options"<?php } ?>>
29
  <div class="wpacu_asset_options_wrap">
30
  <ul class="wpacu_asset_options wpacu_exception_options_area" <?php if ($isBulkUnloaded) { echo 'style="display: none;"'; } ?>>
@@ -162,9 +190,6 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
162
  </div>
163
 
164
  <?php
165
- // [wpacu_pro]
166
- do_action('wpacu_pro_bulk_unload_output', $data, $data['row']['obj'], 'css');
167
- // [/wpacu_pro]
168
  ?>
169
 
170
  <ul class="wpacu_asset_options wpacu_exception_options_area">
@@ -179,11 +204,7 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
179
  Load it on this page (make exception<?php if (! $isBulkUnloaded) { echo ' * works only IF any of bulk rule above is selected'; } ?>)</label>
180
  </li>
181
  </ul>
182
-
183
- <?php if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src && $data['row']['obj']->srcHref) { ?>
184
- <p><strong><?php _e('Source:', WPACU_PLUGIN_TEXT_DOMAIN); ?></strong> <a target="_blank" href="<?php echo $data['row']['obj']->srcHref; ?>"><?php echo $data['row']['obj']->src; ?></a></p>
185
- <?php }
186
-
187
  if (! empty($data['row']['extra_data_css_list'])) { ?>
188
  <div>
189
  <?php _e('Inline styling associated with the handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?>
@@ -203,26 +224,6 @@ $isBulkUnloaded = ($data['row']['global_unloaded'] || $data['row']['is_post_ty
203
  </div>
204
  <?php
205
  }
206
-
207
- $extraInfo = array();
208
-
209
- if (! empty($data['row']['obj']->deps)) {
210
- $extraInfo[] = '<strong>'.__('Depends on:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> ' . implode(', ', $data['row']['obj']->deps);
211
- }
212
-
213
- if ($data['row']['obj']->ver) {
214
- $extraInfo[] = '<strong>'.__('Version:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> ' . $data['row']['obj']->ver;
215
- }
216
-
217
- // [wpacu_lite]
218
- if (isset($data['row']['obj']->src) && $data['row']['obj']->src) {
219
- $extraInfo[] = '<strong>'.__('File Size:', WPACU_PLUGIN_TEXT_DOMAIN) . '</strong> <a href="' . WPACU_PLUGIN_GO_PRO_URL . '?utm_source=manage_asset&utm_medium=file_size" class="go-pro-link-no-style"><span class="wpacu-tooltip">Upgrade to Pro and unlock all features</span><img width="20" height="20" src="' . WPACU_PLUGIN_URL . '/assets/icons/icon-lock.svg" valign="top" alt="" /> Pro Version</a>';
220
- }
221
- // [/wpacu_lite]
222
-
223
- if (! empty($extraInfo)) {
224
- echo '<p>'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</p>';
225
- }
226
  ?>
227
  </td>
228
  </tr>
25
  ?>
26
  </p>
27
 
28
+ <?php if (isset($data['row']['obj']->src, $data['row']['obj']->srcHref) && $data['row']['obj']->src && $data['row']['obj']->srcHref) {
29
+ $relSrc = str_replace(site_url(), '', $data['row']['obj']->src);
30
+ ?>
31
+ <p><?php _e('Source:', WPACU_PLUGIN_TEXT_DOMAIN); ?> <a target="_blank" style="color: green;" href="<?php echo $data['row']['obj']->srcHref; ?>"><?php echo $relSrc; ?></a></p>
32
+ <?php } ?>
33
+
34
+ <?php
35
+ $extraInfo = array();
36
+
37
+ if (! empty($data['row']['obj']->deps)) {
38
+ $extraInfo[] = __('Depends on:', WPACU_PLUGIN_TEXT_DOMAIN) . ' ' . implode(', ', $data['row']['obj']->deps);
39
+ }
40
+
41
+ if ($data['row']['obj']->ver) {
42
+ $extraInfo[] = __('Version:', WPACU_PLUGIN_TEXT_DOMAIN) . ' ' . $data['row']['obj']->ver;
43
+ }
44
+
45
+ // [wpacu_lite]
46
+ if (isset($data['row']['obj']->src) && $data['row']['obj']->src) {
47
+ $extraInfo[] = __('File Size:', WPACU_PLUGIN_TEXT_DOMAIN) . ' <a href="' . WPACU_PLUGIN_GO_PRO_URL . '?utm_source=manage_asset&utm_medium=file_size" class="go-pro-link-no-style"><span class="wpacu-tooltip">Upgrade to Pro and unlock all features</span><img width="20" height="20" src="' . WPACU_PLUGIN_URL . '/assets/icons/icon-lock.svg" valign="top" alt="" /> Pro Version</a>';
48
+ }
49
+ // [/wpacu_lite]
50
+
51
+ if (! empty($extraInfo)) {
52
+ echo '<p>'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</p>';
53
+ }
54
+ ?>
55
+
56
  <div <?php if (! $isBulkUnloaded) { ?>class="wrap_bulk_unload_options"<?php } ?>>
57
  <div class="wpacu_asset_options_wrap">
58
  <ul class="wpacu_asset_options wpacu_exception_options_area" <?php if ($isBulkUnloaded) { echo 'style="display: none;"'; } ?>>
190
  </div>
191
 
192
  <?php
 
 
 
193
  ?>
194
 
195
  <ul class="wpacu_asset_options wpacu_exception_options_area">
204
  Load it on this page (make exception<?php if (! $isBulkUnloaded) { echo ' * works only IF any of bulk rule above is selected'; } ?>)</label>
205
  </li>
206
  </ul>
207
+ <?php
 
 
 
 
208
  if (! empty($data['row']['extra_data_css_list'])) { ?>
209
  <div>
210
  <?php _e('Inline styling associated with the handle:', WPACU_PLUGIN_TEXT_DOMAIN); ?>
224
  </div>
225
  <?php
226
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  ?>
228
  </td>
229
  </tr>
templates/meta-box-loaded-assets/view-by-location.php CHANGED
@@ -21,7 +21,7 @@ $listAreaStatus = $data['plugin_settings']['assets_list_layout_areas_status'];
21
  <?php
22
  if (! empty($data['all']['styles']) || ! empty($data['all']['scripts'])) {
23
  ?>
24
- <p><?php echo sprintf(__('The following styles &amp; scripts are loading on this page. Please select the ones that are %sNOT NEEDED%s. If you are not sure which ones to unload, it is better to leave them enabled and consult with a developer about unloading the assets.', WPACU_PLUGIN_TEXT_DOMAIN), '<span style="color: #CC0000;"><strong>', '</strong></span>'); ?></p>
25
  <p><?php echo __('"Load in on this page (make exception)" will take effect when a bulk unload rule is used. Otherwise, the asset will load anyway unless you select it for unload.', WPACU_PLUGIN_TEXT_DOMAIN); ?></p>
26
  <?php
27
  if ($data['plugin_settings']['hide_core_files']) {
21
  <?php
22
  if (! empty($data['all']['styles']) || ! empty($data['all']['scripts'])) {
23
  ?>
24
+ <p><?php echo sprintf(__('The following styles &amp; scripts are loading on this page. Please select the ones that are %sNOT NEEDED%s. If you are not sure which ones to unload, it is better to enable "Test Mode" (to make the changes apply only to you), while you are going through the trial &amp; error process.', WPACU_PLUGIN_TEXT_DOMAIN), '<span style="color: #CC0000;"><strong>', '</strong></span>'); ?></p>
25
  <p><?php echo __('"Load in on this page (make exception)" will take effect when a bulk unload rule is used. Otherwise, the asset will load anyway unless you select it for unload.', WPACU_PLUGIN_TEXT_DOMAIN); ?></p>
26
  <?php
27
  if ($data['plugin_settings']['hide_core_files']) {
templates/meta-box-loaded-assets/view-default.php CHANGED
@@ -34,7 +34,7 @@ $listAreaStatus = $data['plugin_settings']['assets_list_layout_areas_status'];
34
  <?php
35
  if (! empty($data['all']['styles'])) {
36
  ?>
37
- <p><?php echo sprintf(__('The following styles are loading on this page. Please select the ones that are %sNOT NEEDED%s. If you are not sure which ones to unload, it is better to leave them enabled (unchecked) and consult with a developer about unloading the assets.', WPACU_PLUGIN_TEXT_DOMAIN), '<span style="color: #CC0000;"><strong>', '</strong></span>'); ?></p>
38
  <p><?php echo __('"Load in on this page (make exception)" will take effect when a bulk unload rule is used. Otherwise, the asset will load anyway unless you select it for unload.', WPACU_PLUGIN_TEXT_DOMAIN); ?></p>
39
  <?php
40
  if ($data['plugin_settings']['hide_core_files']) {
34
  <?php
35
  if (! empty($data['all']['styles'])) {
36
  ?>
37
+ <p><?php echo sprintf(__('The following styles &amp; scripts are loading on this page. Please select the ones that are %sNOT NEEDED%s. If you are not sure which ones to unload, it is better to enable "Test Mode" (to make the changes apply only to you), while you are going through the trial &amp; error process.', WPACU_PLUGIN_TEXT_DOMAIN), '<span style="color: #CC0000;"><strong>', '</strong></span>'); ?></p>
38
  <p><?php echo __('"Load in on this page (make exception)" will take effect when a bulk unload rule is used. Otherwise, the asset will load anyway unless you select it for unload.', WPACU_PLUGIN_TEXT_DOMAIN); ?></p>
39
  <?php
40
  if ($data['plugin_settings']['hide_core_files']) {
templates/settings-frontend.php CHANGED
@@ -62,11 +62,7 @@ if (! isset($data)) {
62
  <?php
63
  }
64
 
65
- // [wpacu_pro]
66
- do_action('wpacu_pro_frontend_before_asset_list');
67
- // [/wpacu_pro]
68
-
69
- require_once 'meta-box-loaded.php';
70
  } else {
71
  // Category, Tag, Search, 404, Author, Date pages (not supported by Lite version)
72
  $contentUnlockFeature = ' <p class="pro-page-unlock-notice">To unlock this feature, you can upgrade to the Pro version.</p>';
62
  <?php
63
  }
64
 
65
+ require_once 'meta-box-loaded.php';
 
 
 
 
66
  } else {
67
  // Category, Tag, Search, 404, Author, Date pages (not supported by Lite version)
68
  $contentUnlockFeature = ' <p class="pro-page-unlock-notice">To unlock this feature, you can upgrade to the Pro version.</p>';
wpacu-load.php CHANGED
@@ -55,9 +55,15 @@ new \WpAssetCleanUp\Menu;
55
  // Admin Bar (Top Area of the website when user is logged in)
56
  new \WpAssetCleanUp\AdminBar();
57
 
58
- // Trigger only in the front-end view for guests (regular visitors, not logged-in)
59
- $wpacuOptimizeCss = new \WpAssetCleanUp\OptimizeCss();
60
- $wpacuOptimizeCss->init();
 
 
 
 
 
 
61
 
62
  if (is_admin()) {
63
  new \WpAssetCleanUp\Plugin;
55
  // Admin Bar (Top Area of the website when user is logged in)
56
  new \WpAssetCleanUp\AdminBar();
57
 
58
+ /*
59
+ * Trigger the CSS & JS combination only in the front-end view in certain conditions (not within the Dashboard)
60
+ */
61
+ // Common functions for both CSS & JS combinations
62
+ new \WpAssetCleanUp\OptimiseAssets\CombineCommon();
63
+
64
+ // Combine CSS Files Setup
65
+ $wpacuCombineCss = new \WpAssetCleanUp\OptimiseAssets\CombineCss();
66
+ $wpacuCombineCss->init();
67
 
68
  if (is_admin()) {
69
  new \WpAssetCleanUp\Plugin;
wpacu.php CHANGED
@@ -2,13 +2,13 @@
2
  /*
3
  * Plugin Name: Asset CleanUp: Page Speed Booster
4
  * Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
5
- * Version: 1.2.9.4
6
  * Description: Prevent Chosen Scripts & Styles from loading in Posts/Pages to reduce HTTP Requests and have the website load faster
7
  * Author: Gabriel Livan
8
  * Author URI: http://gabelivan.com/
9
  */
10
 
11
- define('WPACU_PLUGIN_VERSION', '1.2.9.4');
12
 
13
  // Exit if accessed directly
14
  if (! defined('ABSPATH')) {
2
  /*
3
  * Plugin Name: Asset CleanUp: Page Speed Booster
4
  * Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
5
+ * Version: 1.2.9.5
6
  * Description: Prevent Chosen Scripts & Styles from loading in Posts/Pages to reduce HTTP Requests and have the website load faster
7
  * Author: Gabriel Livan
8
  * Author URI: http://gabelivan.com/
9
  */
10
 
11
+ define('WPACU_PLUGIN_VERSION', '1.2.9.5');
12
 
13
  // Exit if accessed directly
14
  if (! defined('ABSPATH')) {