Asset CleanUp: Page Speed Booster - Version 1.3.6.1

Version Description

  • Increased the speed of unloading (dequeueing) styles & scripts by ~40ms (caching is used to avoid calling the same PHP code during several action hooks)
  • Higher accuracy in stripping 'before' and 'after' associated inline SCRIPT after adding the content to the JS combined file
  • When combining JS content, make sure to extract the right relative path to make it combinable if a local file is loaded and it starts with // in the "src" attribute
  • Show confirmation message when unloading specific files that are very likely needed such as jQuery, Backbone & Underscore libraries
  • Alert the admin when there are unload rules from inactive plugins on pages such as "Bulk Changes" & "Overview"
  • Keep Dashicons loaded if the toolbar (top admin bar) is shown
  • Prevent front-end optimisation code from triggering while the CSS/JS is fetched, thus saving resources and improving the speed of retrieving the assets
  • Optimised the plugin to use less calls to MinifyCss & MinifyJs for hardcoded assets reducing considerably the resources used (sometimes timeout errors are generated in hosts with a lower resources allocated)
  • When a plugin page (e.g. "Settings") is visited within the Dashboard, trigger a maintenance script that will remove inactive handle data information (from handles without any rule attached to it, often from deleted plugins no longer used) from the "wpassetcleanup_global_data" option value (from options table), thus making it lighter
  • In many hosting environments, the total number of fields submitted is maximum 1000 (set by default in php.ini); The total number of fields that were sent have been reduced (e.g. hardcoded assets information) as they are only enabled via JavaScript whenever they are relevant to make sure there are less fields sent (to void partial submit and missing data as a result in case the admin has difficulties increase the default 1000 in php.ini)
  • Do not automatically store hardcoded assets info when the CSS/JS manager list is loaded; Instead, store it IF there's a rule attached to it in order to make the contents of the "wpassetcleanup_global_data" option smaller in size (for a lighter database & faster MySQL queries)
  • Clear plugin's cache via AJAX after "Settings" is updated within the Dashboard (this is more effective then clearing it when the page reloads as it could take some time to clear the cache if there are lots of files stored there)
  • Whenever Asset CleanUp's caching is cleared, the Autoptimize (if enabled) caching is also cleared via AJAX (in an asynchronous way) to avoid any broken CSS/JS (rare cases) even for short time
  • Trigger certain actions (to save database & disk space) when the plugin is deactivated: Clear all its transients from the database & Remove the caching directory if it doesn't have any more CSS/JS; If all the plugin's changes were cleared via "Tools" -> "Reset", then deactivating the plugin will completely clear any of its traces
  • The plugin's own files that are needed for the plugin's functionality (they are only loading for the logged-in admin), are loaded asynchronously (CSS) and deferred (JS) to ensure the admin doesn't load them as render-blocking especially when managing the pages in the front-end view
  • The combined CSS tags can now be altered for any reason via add_filter() through the 'wpacu_combined_css_tag' tag name, just like the combined JS tags are via 'wpacu_combined_js_tag'
  • Fix: Remove request to non-existent CSS file within the Dashboard that generated a 404 Not Found error in the browser's console (harmless, but confusing)
Download this release

Release Info

Developer gabelivan
Plugin Icon 128x128 Asset CleanUp: Page Speed Booster
Version 1.3.6.1
Comparing to
See all releases

Code changes from version 1.3.6.0 to 1.3.6.1

Files changed (37) hide show
  1. assets/script.min.js +1 -1
  2. assets/style.min.css +1 -1
  3. classes/CleanUp.php +7 -0
  4. classes/Debug.php +6 -2
  5. classes/HardcodedAssets.php +80 -59
  6. classes/ImportExport.php +26 -5
  7. classes/Main.php +265 -199
  8. classes/Maintenance.php +75 -0
  9. classes/Misc.php +67 -0
  10. classes/OptimiseAssets/CombineCss.php +17 -0
  11. classes/OptimiseAssets/CombineJs.php +27 -12
  12. classes/OptimiseAssets/FontsGoogle.php +2 -2
  13. classes/OptimiseAssets/MinifyCss.php +9 -1
  14. classes/OptimiseAssets/OptimizeCommon.php +23 -2
  15. classes/OptimiseAssets/OptimizeJs.php +38 -14
  16. classes/Overview.php +259 -191
  17. classes/OwnAssets.php +91 -51
  18. classes/Plugin.php +94 -3
  19. classes/Settings.php +122 -21
  20. classes/Tips.php +10 -0
  21. classes/Tools.php +38 -6
  22. classes/Update.php +25 -17
  23. readme.txt +21 -2
  24. templates/_admin-page-settings-plugin-areas/_cdn-rewrite-urls.php +31 -33
  25. templates/_admin-page-settings-plugin-areas/_common-files-unload.php +1 -1
  26. templates/_admin-page-settings-plugin-areas/_optimize-css.php +5 -7
  27. templates/_admin-page-settings-plugin-areas/_optimize-js.php +3 -5
  28. templates/_admin-page-settings-plugin-areas/_plugin-usage-settings.php +6 -2
  29. templates/admin-page-overview.php +27 -5
  30. templates/admin-page-tools.php +7 -1
  31. templates/meta-box-loaded-assets/_asset-script-single-row.php +7 -1
  32. templates/meta-box-loaded-assets/_asset-script-single-row/_extra_inline.php +9 -3
  33. templates/meta-box-loaded-assets/_assets-hardcoded-list.php +1 -2
  34. templates/meta-box-loaded-assets/_hardcoded/_asset-script-single-row-hardcoded.php +3 -1
  35. templates/meta-box-loaded-assets/_hardcoded/_asset-style-single-row-hardcoded.php +18 -16
  36. wpacu-load.php +3 -0
  37. wpacu.php +4 -5
assets/script.min.js CHANGED
@@ -1 +1 @@
1
- function wpacuTabOpenSettingsArea(a,b){a.preventDefault();var c,d,e;for(d=document.getElementsByClassName("wpacu-settings-tab-content"),c=0;c<d.length;c++)d[c].style.display="none";for(e=document.getElementsByClassName("wpacu-settings-tab-link"),c=0;c<e.length;c++)e[c].className=e[c].className.replace(" active","");document.getElementById(b).style.display="table-cell",jQuery('a[href="#'+b+'"]').addClass("active"),jQuery("#wpacu-selected-tab-area").val(b)}function wpacuBytesToSize(a){return 0===a?"N/A":(a/1024).toFixed(4)+" KB"}function wpacuAjaxClearCache(){jQuery.post(wpacu_object.ajax_url+"?wpacu_clear_cache",{action:wpacu_object.plugin_id+"_clear_cache",time_r:(new Date).getTime()},function(a){})}jQuery(document).ready(function(a){function b(){if(!a("#wpacu_ajax_fetch_assets_list_dashboard_view").length)return!1;var b,c,d,f,g,h={};"direct"===wpacu_object.dom_get_type?(h[wpacu_object.plugin_name+"_load"]=1,h[wpacu_object.plugin_name+"_time_r"]=(new Date).getTime(),a.ajax({method:"GET",url:wpacu_object.page_url,data:h,cache:!1,complete:function(b,c){if("error"===b.statusText){f=b.responseText.replace(/(<([^>]+)>)/gi,"");try{f=String(f).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}catch(a){console.log(a)}g=wpacu_object.ajax_direct_fetch_error,g=g.replace(/{wpacu_output}/,f),g=g.replace(/{wpacu_status_code_error}/,b.status),a("#wpacu_meta_box_content").html(g)}}}).done(function(f){if(f.lastIndexOf(wpacu_object.start_del_e)<0||f.lastIndexOf(wpacu_object.end_del_e)<0||f.lastIndexOf(wpacu_object.start_del_h)<0||f.lastIndexOf(wpacu_object.end_del_h)<0){g=wpacu_object.ajax_direct_fetch_error_with_success_response,g=g.replace(/{wpacu_output}/,xhr.responseText.replace(/(<([^>]+)>)/gi,""));try{g=String(g).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}catch(a){console.log(a)}return void a("#wpacu_meta_box_content").html(g)}c=f.substring(f.lastIndexOf(wpacu_object.start_del_e)+wpacu_object.start_del_e.length,f.lastIndexOf(wpacu_object.end_del_e)),d=f.substring(f.lastIndexOf(wpacu_object.start_del_h)+wpacu_object.start_del_h.length,f.lastIndexOf(wpacu_object.end_del_h)),b={action:wpacu_object.plugin_name+"_get_loaded_assets",wpacu_list_e:c,wpacu_list_h:d,post_id:wpacu_object.post_id,page_url:wpacu_object.page_url,tag_id:wpacu_object.tag_id,wpacu_taxonomy:wpacu_object.wpacu_taxonomy,time_r:(new Date).getTime()},a.post(wpacu_object.ajax_url,b,function(b){b&&(a("#wpacu_meta_box_content").html(b),a("#wpacu_home_page_form").length>0&&a("#submit").show(),setTimeout(function(){e.load(),a(".wpacu_asset_row").removeClass("wpacu-loading"),a("#wpacu-assets-reloading").remove(),e.checkSourcesFor404Errors()},200))})})):"wp_remote_post"===wpacu_object.dom_get_type&&(b={action:wpacu_object.plugin_name+"_get_loaded_assets",post_id:wpacu_object.post_id,page_url:wpacu_object.page_url,tag_id:wpacu_object.tag_id,wpacu_taxonomy:wpacu_object.wpacu_taxonomy,time_r:(new Date).getTime()},a.post(wpacu_object.ajax_url,b,function(b){if(!b)return!1;a("#wpacu_meta_box_content").html(b),a("#wpacu_home_page_form").length>0&&a("#submit").show(),setTimeout(function(){e.load(),setTimeout(function(){e.checkSourcesFor404Errors()},100)},200)}))}a('input[name="wpacu_sub_tab_area"]').click(function(){a(this).prop("checked")&&a("#wpacu-selected-sub-tab-area").val(a(this).val())}),a("#wpacu_minify_css_enable, #wpacu_combine_loaded_css_enable, #wpacu_minify_js_enable, #wpacu_combine_loaded_js_enable, #wpacu_cdn_rewrite_enable, #wpacu_enable_test_mode").click(function(){a(this).prop("checked")?a('[data-linked-to="'+a(this).attr("id")+'"]').find(".wpacu-circle-status").addClass("wpacu-on").removeClass("wpacu-off"):a('[data-linked-to="'+a(this).attr("id")+'"]').find(".wpacu-circle-status").addClass("wpacu-off").removeClass("wpacu-on")}),a("#wpacu-mark-license-valid-button").click(function(){return confirm(wpacu_object.mark_license_valid_confirm)}),a("#wpacu-license-form").submit(function(){a("#edd_license_activate_btn").attr("disabled","disabled"),a("#edd_license_deactivate_btn").attr("disabled","disabled"),a(".wpacu-license-spinner").show()});var c,d;a("#wpacu-reset-drop-down").on("change keyup keydown mouseup mousedown click",function(){""===a(this).val()?(a("#wpacu-warning-read").removeClass("wpacu-visible"),a("#wpacu-reset-submit-btn").attr("disabled","disabled").removeClass("button-primary").addClass("button-secondary")):("reset_everything"===a(this).val()?a("#wpacu-license-data-remove-area").addClass("wpacu-visible"):a("#wpacu-license-data-remove-area").removeClass("wpacu-visible"),a("#wpacu-warning-read").addClass("wpacu-visible"),a("#wpacu-reset-submit-btn").removeAttr("disabled").removeClass("button-secondary").addClass("button-primary")),a(".wpacu-tools-area .wpacu-warning").hide(),c=a(this).find("option:selected"),a("#"+c.attr("data-id")).show()}),a("#wpacu-reset-submit-btn").on("click",function(){if("reset_settings"===a("#wpacu-reset-drop-down").val()?d=wpacu_object.reset_settings_confirm_msg:"reset_everything_except_settings"===a("#wpacu-reset-drop-down").val()?d=wpacu_object.reset_everything_except_settings_confirm_msg:"reset_everything"===a("#wpacu-reset-drop-down").val()&&(d=wpacu_object.reset_everything_confirm_msg),!confirm(d))return!1;a("#wpacu-action-confirmed").val("yes"),setTimeout(function(){"yes"===a("#wpacu-action-confirmed").val()&&a("#wpacu-tools-form").submit()},1e3)}),a("#wpacu-import-form").submit(function(){if(!confirm(wpacu_object.import_confirm_msg))return!1;a(this).find("button").addClass("wpacu-importing").prop("disabled",!0)});var e={load:function(){var b,c,d,f=".input-unload-on-this-page.wpacu-not-locked";a(".input-unload-on-this-page").on("click change",function(){b=a(this).attr("data-handle"),c=a(this).hasClass("wpacu_unload_rule_for_style")?"style":"script",a(this).prop("checked")?(e.uncheckAllOtherBulkUnloadRules(a(this),!1),e.showHandleLoadExceptionArea(c,b),a(this).closest("tr").addClass("wpacu_not_load")):(a(this).closest("tr").removeClass("wpacu_not_load"),d=a(this).parents(".wpacu_asset_row"),e.hideHandleLoadExceptionArea(d,b,c))}),a(".wpacu-plugin-check-all").on("click",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin");a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]').find(f).prop("checked",!0).closest("tr").addClass("wpacu_not_load")}),a(".wpacu-plugin-uncheck-all").on("click",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin");a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]').find(f).prop("checked",!1).closest("tr").removeClass("wpacu_not_load")}),a(".wpacu-plugin-check-load-all").on("click change",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin"),d=a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]');d.find(".wpacu_load_it_option_one.wpacu_load_exception").prop("checked",!0).closest("tr.wpacu_is_bulk_unloaded").removeClass("wpacu_not_load"),d.find(f).prop("checked",!1).trigger("change")}),a(".wpacu-plugin-uncheck-load-all").on("click change",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin"),d=a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]');d.find(".wpacu_load_it_option_one.wpacu_load_exception").prop("checked",!1).closest("tr.wpacu_is_bulk_unloaded").addClass("wpacu_not_load"),d.find(f).prop("checked",!1).trigger("change")}),a(".wpacu_keep_bulk_rule").click(function(){a(this).prop("checked")&&a(this).parents("li").next().removeClass("remove_rule")}),a(".wpacu_remove_bulk_rule").click(function(){a(this).prop("checked")&&a(this).parents("li").addClass("remove_rule")}),a(".wpacu_bulk_unload").on("click change",function(){b=a(this).attr("data-handle"),c=a(this).attr("data-handle-for"),d=a("[data-"+c+'-handle-row="'+b+'"]'),a(this).prop("checked")?(a(this).hasClass("wpacu_unload_it_regex_checkbox")||(a(this).parent("label").addClass("wpacu_input_load_checked"),a(this).closest("tr").addClass("wpacu_not_load")),e.showHandleLoadExceptionArea(c,b),a(this).hasClass("wpacu_global_unload")?(e.uncheckAllOtherBulkUnloadRules(a(this),!0),a('.input-unload-on-this-page[data-handle-for="'+c+'"][data-handle="'+b+'"]').prop("checked",!1)):a(this).hasClass("wpacu_post_type_unload")&&(e.uncheckAllOtherBulkUnloadRules(a(this),!1),a('.input-unload-on-this-page[data-handle-for="'+c+'"][data-handle="'+b+'"]').prop("checked",!1))):(a(this).hasClass("wpacu_unload_it_regex_checkbox")||(a(this).parent("label").removeClass("wpacu_input_load_checked"),a(this).closest("tr").removeClass("wpacu_not_load")),e.hideHandleLoadExceptionArea(d,b,c)),d.hasClass("wpacu_is_bulk_unloaded")||a(".wpacu_bulk_unload:not(.wpacu_unload_it_regex_checkbox)").is(":checked")||a(this).closest("tr").removeClass("wpacu_not_load")}),a(".wpacu_load_it_option_one.wpacu_load_exception").on("click change",function(){var b=a(this).attr("data-handle");if(a(this).prop("checked")){a(this).parent("label").addClass("wpacu_global_unload_exception");var c="";a(this).hasClass("wpacu_style")?c="style":a(this).hasClass("wpacu_script")&&(c="script"),a("#"+c+"_"+b).prop("checked",!1).trigger("change")}else a(this).parent("label").removeClass("wpacu_global_unload_exception")}),a(".wpacu_unload_it_regex_checkbox").on("click change",function(){var b=a(this).parents("li");a(this).prop("checked")?(b.find("label").addClass("wpacu_unload_checked"),b.find("textarea").prop("disabled",!1).focus().removeClass("wpacu_disabled"),b.find(".wpacu_handle_unload_regex_input_wrap").removeClass("wpacu_hide")):(b.find("label").removeClass("wpacu_unload_checked"),b.find("textarea").blur().addClass("wpacu_disabled"),""===b.find("textarea").val().trim()&&(b.find("textarea").prop("disabled",!0).val(""),b.find(".wpacu_handle_unload_regex_input_wrap").addClass("wpacu_hide")))}),a(".wpacu_load_it_option_two").on("click change",function(){var b=a(this).parents("li");a(this).prop("checked")?(b.find("label").addClass("wpacu_bold"),b.find("textarea").prop("disabled",!1).focus().removeClass("wpacu_disabled"),b.find(".wpacu_load_regex_input_wrap").removeClass("wpacu_hide")):(b.find("label").removeClass("wpacu_bold"),b.find("textarea").blur().addClass("wpacu_disabled"),""===b.find("textarea").val().trim()&&(b.find("textarea").prop("disabled",!0).val(""),b.find(".wpacu_load_regex_input_wrap").addClass("wpacu_hide")))}),a(".wpacu_script_attr_rule_input").on("click change",function(){a(this).is(":checked")&&(a(this).parents("ul").find(".wpacu_script_attr_rule_input").not(a(this)).prop("checked",!1),a(this).hasClass("wpacu_script_attr_rule_global")&&a(this).parents("ul").find(".wpacu-script-attr-make-exception").removeClass("wpacu_hide")),a(this).parents("ul").find(".wpacu_script_attr_rule_global").is(":checked")||a(this).parents("ul").find(".wpacu-script-attr-make-exception").addClass("wpacu_hide")}),a(".wpacu-add-handle-note").on("click",function(b){b.preventDefault();var c,d,e=a(this).attr("data-handle");a(this).hasClass("wpacu-for-script")?c=a('.wpacu-handle-notes-field[data-script-handle="'+e+'"]'):a(this).hasClass("wpacu-for-style")&&(c=a('.wpacu-handle-notes-field[data-style-handle="'+e+'"]')),c.length<1||(d=c.find(":input"),c.is(":hidden")?(c.show(),d.prop("disabled",!1)):(c.hide(),""===d.val().trim()&&"true"===d.attr("data-wpacu-is-empty-on-page-load")&&d.prop("disabled",!0).val("")))}),a(".wpacu-external-file-size").on("click",function(b){b.preventDefault();var c,d=a(this),e=d.attr("data-src");d.hide(),c=d.next(),c.show(),e.includes("/?")?a.get(e,{},function(a,b,d){if("success"!==b)return"N/A";c.html(wpacuBytesToSize(a.length))}):a.post(wpacu_object.ajax_url,{action:wpacu_object.plugin_id+"_get_external_file_size",wpacu_remote_file:e},function(a){c.html(a)})})},pluginLoadManager:function(){a(".wpacu_plugin_load_it").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")&&(e.hidePluginLoadExceptionArea(b),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),a('.wpacu_plugin_unload_site_wide[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_radio[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"))}),a(".wpacu_plugin_unload_site_wide").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?(a(this).parent("label").addClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_radio[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),e.showPluginLoadExceptionArea(b)):(a(this).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!0))}),a(".wpacu_plugin_unload_regex_radio").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?(a(this).parent("label").addClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide"),e.showPluginLoadExceptionArea(b),a('.wpacu_plugin_unload_site_wide[data-wpacu-plugin-path="'+b+'"]').prop("checked",!1).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked")):(a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),a(this).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"))}),a(".wpacu_plugin_load_exception_regex").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?a('.wpacu_load_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide"):a('.wpacu_load_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide")})},showPluginLoadExceptionArea:function(b){a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!1)},hidePluginLoadExceptionArea:function(b){a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!0)},showHandleLoadExceptionArea:function(b,c){var d=a("div.wpacu_exception_options_area_wrap[data-"+b+'-handle="'+c+'"]');d.parent("div").removeClass("wpacu_hide"),d.find('input[type="checkbox"]').prop("disabled",!1)},hideHandleLoadExceptionArea:function(b,c,d){if(!b.hasClass("wpacu_is_bulk_unloaded")&&!b.find(".wpacu_bulk_unload").is(":checked")){var e=a("div.wpacu_exception_options_area_wrap[data-"+d+'-handle="'+c+'"]');e.parent("div").addClass("wpacu_hide"),e.find('input[type="checkbox"]').prop("disabled",!0)}},uncheckAllOtherBulkUnloadRules:function(a,b){var c=".wpacu_bulk_unload";!1===b&&(c=".wpacu_bulk_unload:not(.wpacu_unload_it_regex_checkbox)"),a.closest("tr").find(c).not(a).prop("checked",!1).parent("label").removeClass("wpacu_input_load_checked").removeClass("wpacu_unload_checked")},checkSourcesFor404Errors:function(){var b=a("[data-wpacu-external-source]");if(!(b.length<1)){var c=b.length,d="";b.each(function(b){var e=a(this),f=e.attr("data-wpacu-external-source");d+=f+"-at-wpacu-at-",b===c-1&&jQuery.post(wpacu_object.ajax_url+"?wpacu_check_external_url",{action:wpacu_object.plugin_id+"_check_external_urls_for_status_code",wpacu_check_urls:d},function(b){var c=jQuery.parseJSON(b);a.each(c,function(b,c){a('[data-wpacu-external-source="'+c+'"]').css({color:"#cc0000"}).parent("div").find("[data-wpacu-external-source-status]").html('<small>* <em style="font-weight: 600;">'+wpacu_object.source_load_error_msg+"</em></small>")})})})}}};a(window).load(function(){e.checkSourcesFor404Errors()}),a("#wpacu_post_type_select").change(function(){a("#wpacu_post_type_form").submit()}),a("#wpacu_taxonomy_select").change(function(){a("#wpacu_taxonomy_form").submit()}),a("#wpacu_dashboard").click(function(){a(this).prop("checked")?a("#wpacu-settings-assets-retrieval-mode").show():a("#wpacu-settings-assets-retrieval-mode").hide()}),a(".wpacu-dom-get-type-selection").change(function(){a(this).is(":checked")&&(a(".wpacu-dom-get-type-info").hide(),a("#"+a(this).attr("data-target")).fadeIn("fast"))}),a("#wpacu_frontend").click(function(){a(this).prop("checked")?a("#wpacu-settings-frontend-exceptions").show():a("#wpacu-settings-frontend-exceptions").hide()}),a(".google_fonts_combine_type").change(function(){a(".wpacu_google_fonts_combine_type_area").hide(),"async"===a(this).val()?a("#wpacu_google_fonts_combine_type_async_info_area").fadeIn():"async_preload"===a(this).val()?a("#wpacu_google_fonts_combine_type_async_preload_info_area").fadeIn():a("#wpacu_google_fonts_combine_type_rb_info_area").fadeIn()}),a("#wpacu_assets_list_layout").on("click change",function(){"by-location"===a(this).val()?a("#wpacu-assets-list-by-location-selected").fadeIn("fast"):a("#wpacu-assets-list-by-location-selected").fadeOut("fast")}),a("#wpacu_disable_jquery_migrate").on("click",function(){return!a(this).is(":checked")||(!(!a(this).is(":checked")||!confirm(wpacu_object.jquery_migration_disable_confirm_msg))||(a(this).prop("checked",!1),!1))}),a("#wpacu_disable_comment_reply").on("click",function(){return!a(this).is(":checked")||(!(!a(this).is(":checked")||!confirm(wpacu_object.comment_reply_disable_confirm_msg))||(a(this).prop("checked",!1),!1))}),a("[data-target-opacity]").click(function(){a(this).prop("checked")?a("#"+a(this).attr("data-target-opacity")).css({opacity:1}):a("#"+a(this).attr("data-target-opacity")).css({opacity:.4})}),a(".wpacu-combine-loaded-js-level").change(function(){a(this).is(":checked")&&(a(".wpacu_combine_loaded_js_level_area").removeClass("wpacu_active"),a("#"+a(this).attr("data-target")).addClass("wpacu_active"))});var f=a('#wpacu-update-button-area input[type="submit"]');f.parents("form").submit(function(){f.attr("disabled",!0),a("#wpacu-updating-settings").show()});var g=a("#wpacu-update-front-settings-area .wpacu_update_btn");if(g.parents("form").submit(function(){return g.attr("disabled",!0).addClass("wpacu_submitting"),a("#wpacu-updating-front-settings").show(),!0}),a("form#wpacu-settings-form, form#wpacu_home_page_form").submit(function(){return f.attr("disabled",!0),!0}),a(".wpacu_bulk_rule_checkbox, .wpacu_remove_preload").click(function(){var b=a(this).parents(".wpacu_bulk_change_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a(".wpacu_remove_regex").click(function(){var b=a(this).parents(".wpacu_regex_rule_row");a(this).prop("checked")?b.addClass("wpacu_enabled"):b.removeClass("wpacu_enabled")}),a(".wpacu_restore_position").click(function(){var b=a(this).parents(".wpacu_restore_position_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a(".wpacu_remove_global_attr").click(function(){var b=a(this).parents(".wpacu_remove_global_attr_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a("#wpacu_wrap_assets").length>0&&setTimeout(function(){e.load()},200),a("#wpacu-plugins-load-manager-wrap").length>0&&setTimeout(function(){e.pluginLoadManager()},200),"undefined"==typeof wpacu_object||a("#wpacu_meta_box_content").length<1)return!1;("default"===wpacu_object.list_show_status||""===wpacu_object.list_show_status||wpacu_object.override_assets_list_load)&&b(),"fetch_on_click"===wpacu_object.list_show_status&&a("#wpacu_ajax_fetch_on_click_btn").click(function(c){c.preventDefault(),a(this).hide(),a("#wpacu_fetching_assets_list_wrap").show(),b()}),a(document).on("click",".wp-admin.post-php .edit-post-header__settings button.is-primary",function(){var c=function(){if(0===a(".edit-post-header__settings .is-saving").length){if(a("#wpacu_unload_assets_area_loaded").length>0&&a("#wpacu_unload_assets_area_loaded").val()){a("#wpacu-assets-reloading").remove();var c='<span id="wpacu-assets-reloading" class="editor-post-saved-state is-wpacu-reloading">'+wpacu_object.reload_icon+wpacu_object.reload_msg+"</span>";a(".wp-admin.post-php .edit-post-header__settings").prepend(c)}a(".wpacu_asset_row").addClass("wpacu-loading"),b(),wpacuAjaxClearCache(),clearInterval(d)}},d=setInterval(c,900)})}),""!==wpacu_object.clear_cache_on_page_load&&wpacuAjaxClearCache(),jQuery(document).ready(function(a){try{var b;a('input[type="hidden"][name="_wp_http_referer"]').length>0&&(b=a('input[type="hidden"][name="_wp_http_referer"]').val(),b.includes("term.php?taxonomy=")&&b.includes("message=")&&wpacuAjaxClearCache(),b.includes("post.php?post=")&&b.includes("message=")&&wpacuAjaxClearCache())}catch(a){console.log(a)}});
1
+ function wpacuTabOpenSettingsArea(a,b){a.preventDefault();var c,d,e;for(d=document.getElementsByClassName("wpacu-settings-tab-content"),c=0;c<d.length;c++)d[c].style.display="none";for(e=document.getElementsByClassName("wpacu-settings-tab-link"),c=0;c<e.length;c++)e[c].className=e[c].className.replace(" active","");document.getElementById(b).style.display="table-cell",jQuery('a[href="#'+b+'"]').addClass("active"),jQuery("#wpacu-selected-tab-area").val(b)}function wpacuBytesToSize(a){return 0===a?"N/A":(a/1024).toFixed(4)+" KB"}function wpacuAjaxClearCache(){jQuery.post(wpacu_object.ajax_url+"?wpacu_clear_cache",{action:wpacu_object.plugin_id+"_clear_cache",time_r:(new Date).getTime()},function(a){setTimeout(function(){wpacuClearAutoptimizeCache()},150)})}function wpacuClearAutoptimizeCache(){jQuery("#wp-admin-bar-autoptimize-default li").length>0&&void 0!==autoptimize_ajax_object.ajaxurl&&void 0!==autoptimize_ajax_object.nonce&&jQuery.ajax({type:"GET",url:autoptimize_ajax_object.ajaxurl,data:{action:"autoptimize_delete_cache",nonce:autoptimize_ajax_object.nonce},dataType:"json",cache:!1,timeout:9e3,success:function(a){},error:function(a,b){}})}jQuery(document).ready(function(a){function b(){if(!a("#wpacu_ajax_fetch_assets_list_dashboard_view").length)return!1;var b,c,d,f,g,h={};"direct"===wpacu_object.dom_get_type?(h[wpacu_object.plugin_name+"_load"]=1,h[wpacu_object.plugin_name+"_time_r"]=(new Date).getTime(),a.ajax({method:"GET",url:wpacu_object.page_url,data:h,cache:!1,complete:function(b,c){if("error"===b.statusText){f=b.responseText.replace(/(<([^>]+)>)/gi,"");try{f=String(f).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}catch(a){console.log(a)}g=wpacu_object.ajax_direct_fetch_error,g=g.replace(/{wpacu_output}/,f),g=g.replace(/{wpacu_status_code_error}/,b.status),a("#wpacu_meta_box_content").html(g)}}}).done(function(f){if(f.lastIndexOf(wpacu_object.start_del_e)<0||f.lastIndexOf(wpacu_object.end_del_e)<0||f.lastIndexOf(wpacu_object.start_del_h)<0||f.lastIndexOf(wpacu_object.end_del_h)<0){g=wpacu_object.ajax_direct_fetch_error_with_success_response,g=g.replace(/{wpacu_output}/,xhr.responseText.replace(/(<([^>]+)>)/gi,""));try{g=String(g).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}catch(a){console.log(a)}return void a("#wpacu_meta_box_content").html(g)}c=f.substring(f.lastIndexOf(wpacu_object.start_del_e)+wpacu_object.start_del_e.length,f.lastIndexOf(wpacu_object.end_del_e)),d=f.substring(f.lastIndexOf(wpacu_object.start_del_h)+wpacu_object.start_del_h.length,f.lastIndexOf(wpacu_object.end_del_h)),b={action:wpacu_object.plugin_name+"_get_loaded_assets",wpacu_list_e:c,wpacu_list_h:d,post_id:wpacu_object.post_id,page_url:wpacu_object.page_url,tag_id:wpacu_object.tag_id,wpacu_taxonomy:wpacu_object.wpacu_taxonomy,time_r:(new Date).getTime()},a.post(wpacu_object.ajax_url,b,function(b){b&&(a("#wpacu_meta_box_content").html(b),a("#wpacu_home_page_form").length>0&&a("#submit").show(),setTimeout(function(){e.load(),a(".wpacu_asset_row").removeClass("wpacu-loading"),a("#wpacu-assets-reloading").remove(),e.checkSourcesFor404Errors()},200))})})):"wp_remote_post"===wpacu_object.dom_get_type&&(b={action:wpacu_object.plugin_name+"_get_loaded_assets",post_id:wpacu_object.post_id,page_url:wpacu_object.page_url,tag_id:wpacu_object.tag_id,wpacu_taxonomy:wpacu_object.wpacu_taxonomy,time_r:(new Date).getTime()},a.post(wpacu_object.ajax_url,b,function(b){if(!b)return!1;a("#wpacu_meta_box_content").html(b),a("#wpacu_home_page_form").length>0&&a("#submit").show(),setTimeout(function(){e.load(),setTimeout(function(){e.checkSourcesFor404Errors()},100)},200)}))}a('input[name="wpacu_sub_tab_area"]').click(function(){a(this).prop("checked")&&a("#wpacu-selected-sub-tab-area").val(a(this).val())}),a("#wpacu_minify_css_enable, #wpacu_combine_loaded_css_enable, #wpacu_minify_js_enable, #wpacu_combine_loaded_js_enable, #wpacu_cdn_rewrite_enable, #wpacu_enable_test_mode").click(function(){a(this).prop("checked")?a('[data-linked-to="'+a(this).attr("id")+'"]').find(".wpacu-circle-status").addClass("wpacu-on").removeClass("wpacu-off"):a('[data-linked-to="'+a(this).attr("id")+'"]').find(".wpacu-circle-status").addClass("wpacu-off").removeClass("wpacu-on")}),a(document).on("click","#wpacu_inline_css_files_below_size_checkbox",function(){a(this).is(":checked")?a("#wpacu_inline_css_files_enable").prop("checked",!0).trigger("tick"):""===a("#wpacu_inline_css_files_list").val()&&a("#wpacu_inline_css_files_enable").prop("checked",!1).trigger("tick")}),a(document).on("click","#wpacu_inline_js_files_below_size_checkbox",function(){if(a(this).is(":checked")){if(!confirm(wpacu_object.inline_auto_js_files_confirm_msg))return!1;a("#wpacu_inline_js_files_enable").prop("checked",!0).trigger("tick")}else""===a("#wpacu_inline_js_files_list").val()&&a("#wpacu_inline_js_files_enable").prop("checked",!1).trigger("tick")}),a("#wpacu-mark-license-valid-button").click(function(){return confirm(wpacu_object.mark_license_valid_confirm)}),a("#wpacu-license-form").submit(function(){a("#edd_license_activate_btn").attr("disabled","disabled"),a("#edd_license_deactivate_btn").attr("disabled","disabled"),a(".wpacu-license-spinner").show()});var c,d;a("#wpacu-reset-drop-down").on("change keyup keydown mouseup mousedown click",function(){""===a(this).val()?(a("#wpacu-warning-read").removeClass("wpacu-visible"),a("#wpacu-reset-submit-btn").attr("disabled","disabled").removeClass("button-primary").addClass("button-secondary")):("reset_everything"===a(this).val()?a("#wpacu-license-data-remove-area, #wpacu-cache-assets-remove-area").addClass("wpacu-visible"):a("#wpacu-license-data-remove-area, #wpacu-cache-assets-remove-area").removeClass("wpacu-visible"),a("#wpacu-warning-read").addClass("wpacu-visible"),a("#wpacu-reset-submit-btn").removeAttr("disabled").removeClass("button-secondary").addClass("button-primary")),a(".wpacu-tools-area .wpacu-warning").hide(),c=a(this).find("option:selected"),a("#"+c.attr("data-id")).show()}),a("#wpacu-reset-submit-btn").on("click",function(){if("reset_settings"===a("#wpacu-reset-drop-down").val()?d=wpacu_object.reset_settings_confirm_msg:"reset_everything_except_settings"===a("#wpacu-reset-drop-down").val()?d=wpacu_object.reset_everything_except_settings_confirm_msg:"reset_everything"===a("#wpacu-reset-drop-down").val()&&(d=wpacu_object.reset_everything_confirm_msg),!confirm(d))return!1;a("#wpacu-action-confirmed").val("yes"),setTimeout(function(){"yes"===a("#wpacu-action-confirmed").val()&&a("#wpacu-tools-form").submit()},1e3)}),a("#wpacu-import-form").submit(function(){if(!confirm(wpacu_object.import_confirm_msg))return!1;a(this).find("button").addClass("wpacu-importing").prop("disabled",!0)});var e={load:function(){var b,c,d,f=".input-unload-on-this-page.wpacu-not-locked";a(".input-unload-on-this-page").on("click change",function(f){if(b=a(this).attr("data-handle"),c=a(this).hasClass("wpacu_unload_rule_for_style")?"style":"script",a(this).prop("checked")){if("click"===f.type&&!e.triggerAlertWhenAnyUnloadRuleIsChosen(b,c))return!1;e.uncheckAllOtherBulkUnloadRules(a(this),!1),e.showHandleLoadExceptionArea(c,b),a(this).closest("tr").addClass("wpacu_not_load")}else a(this).closest("tr").removeClass("wpacu_not_load"),d=a(this).parents(".wpacu_asset_row"),e.hideHandleLoadExceptionArea(d,b,c)}),a(".wpacu-plugin-check-all").on("click",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin");a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]').find(f).prop("checked",!0).closest("tr").addClass("wpacu_not_load")}),a(".wpacu-plugin-uncheck-all").on("click",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin");a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]').find(f).prop("checked",!1).closest("tr").removeClass("wpacu_not_load")}),a(".wpacu-plugin-check-load-all").on("click change",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin"),d=a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]');d.find(".wpacu_load_it_option_one.wpacu_load_exception").prop("checked",!0).closest("tr.wpacu_is_bulk_unloaded").removeClass("wpacu_not_load"),d.find(f).prop("checked",!1).trigger("change")}),a(".wpacu-plugin-uncheck-load-all").on("click change",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-plugin"),d=a('table.wpacu_list_by_location[data-wpacu-plugin="'+c+'"]');d.find(".wpacu_load_it_option_one.wpacu_load_exception").prop("checked",!1).closest("tr.wpacu_is_bulk_unloaded").addClass("wpacu_not_load"),d.find(f).prop("checked",!1).trigger("change")}),a(".wpacu_keep_bulk_rule").click(function(){a(this).prop("checked")&&a(this).parents("li").next().removeClass("remove_rule")}),a(".wpacu_remove_bulk_rule").click(function(){a(this).prop("checked")&&a(this).parents("li").addClass("remove_rule")}),a(".wpacu_bulk_unload").on("click change",function(f){b=a(this).attr("data-handle"),c=a(this).attr("data-handle-for"),d=a("[data-"+c+'-handle-row="'+b+'"]');var g=a(this).parents("li");if(a(this).prop("checked")){if("click"===f.type&&!e.triggerAlertWhenAnyUnloadRuleIsChosen(b,c))return!1;a(this).hasClass("wpacu_unload_it_regex_checkbox")?(g.find("label").addClass("wpacu_unload_checked"),g.find("textarea").prop("disabled",!1).focus().removeClass("wpacu_disabled"),g.find(".wpacu_handle_unload_regex_input_wrap").removeClass("wpacu_hide")):(a(this).parent("label").addClass("wpacu_input_load_checked"),a(this).closest("tr").addClass("wpacu_not_load")),e.showHandleLoadExceptionArea(c,b),a(this).hasClass("wpacu_global_unload")?(e.uncheckAllOtherBulkUnloadRules(a(this),!0),a('.input-unload-on-this-page[data-handle-for="'+c+'"][data-handle="'+b+'"]').prop("checked",!1)):a(this).hasClass("wpacu_post_type_unload")&&(e.uncheckAllOtherBulkUnloadRules(a(this),!1),a('.input-unload-on-this-page[data-handle-for="'+c+'"][data-handle="'+b+'"]').prop("checked",!1))}else a(this).hasClass("wpacu_unload_it_regex_checkbox")?(g.find("label").removeClass("wpacu_unload_checked"),g.find("textarea").blur().addClass("wpacu_disabled"),""===g.find("textarea").val().trim()&&(g.find("textarea").prop("disabled",!0).val(""),g.find(".wpacu_handle_unload_regex_input_wrap").addClass("wpacu_hide"))):(a(this).parent("label").removeClass("wpacu_input_load_checked"),a(this).closest("tr").removeClass("wpacu_not_load")),e.hideHandleLoadExceptionArea(d,b,c);d.hasClass("wpacu_is_bulk_unloaded")||a(".wpacu_bulk_unload:not(.wpacu_unload_it_regex_checkbox)").is(":checked")||a(this).closest("tr").removeClass("wpacu_not_load")}),a(".wpacu_load_it_option_one.wpacu_load_exception").on("click change",function(){var b=a(this).attr("data-handle");if(a(this).prop("checked")){a(this).parent("label").addClass("wpacu_global_unload_exception");var c="";a(this).hasClass("wpacu_style")?c="style":a(this).hasClass("wpacu_script")&&(c="script"),a("#"+c+"_"+b).prop("checked",!1).trigger("change")}else a(this).parent("label").removeClass("wpacu_global_unload_exception")}),a(".wpacu_load_it_option_two").on("click change",function(){var b=a(this).parents("li");a(this).prop("checked")?(b.find("label").addClass("wpacu_bold"),b.find("textarea").prop("disabled",!1).focus().removeClass("wpacu_disabled"),b.find(".wpacu_load_regex_input_wrap").removeClass("wpacu_hide")):(b.find("label").removeClass("wpacu_bold"),b.find("textarea").blur().addClass("wpacu_disabled"),""===b.find("textarea").val().trim()&&(b.find("textarea").prop("disabled",!0).val(""),b.find(".wpacu_load_regex_input_wrap").addClass("wpacu_hide")))}),a(".wpacu_script_attr_rule_input").on("click change",function(){a(this).is(":checked")&&(a(this).parents("ul").find(".wpacu_script_attr_rule_input").not(a(this)).prop("checked",!1),a(this).hasClass("wpacu_script_attr_rule_global")&&a(this).parents("ul").find(".wpacu-script-attr-make-exception").removeClass("wpacu_hide")),a(this).parents("ul").find(".wpacu_script_attr_rule_global").is(":checked")||a(this).parents("ul").find(".wpacu-script-attr-make-exception").addClass("wpacu_hide")}),a(".wpacu-add-handle-note").on("click",function(b){b.preventDefault();var c,d,e=a(this).attr("data-handle");a(this).hasClass("wpacu-for-script")?c=a('.wpacu-handle-notes-field[data-script-handle="'+e+'"]'):a(this).hasClass("wpacu-for-style")&&(c=a('.wpacu-handle-notes-field[data-style-handle="'+e+'"]')),c.length<1||(d=c.find(":input"),c.is(":hidden")?(c.show(),d.prop("disabled",!1)):(c.hide(),""===d.val().trim()&&"true"===d.attr("data-wpacu-is-empty-on-page-load")&&d.prop("disabled",!0).val("")))}),a(".wpacu-external-file-size").on("click",function(b){b.preventDefault();var c,d=a(this),e=d.attr("data-src");d.hide(),c=d.next(),c.show(),e.includes("/?")?a.get(e,{},function(a,b,d){if("success"!==b)return"N/A";c.html(wpacuBytesToSize(a.length))}):a.post(wpacu_object.ajax_url,{action:wpacu_object.plugin_id+"_get_external_file_size",wpacu_remote_file:e},function(a){c.html(a)})}),a(".wpacu_handle_row_expand_contract").on("click",function(b){b.preventDefault();var c=a(this).attr("data-wpacu-handle"),d=a(this).attr("data-wpacu-handle-for");a(this).find("span").hasClass("dashicons-minus")?(a(this).parents("td").attr("data-wpacu-row-status","contracted").find(".wpacu_handle_row_expanded_area").addClass("wpacu_hide"),a(this).find("span").removeClass("dashicons-minus").addClass("dashicons-plus"),a("#wpacu_"+d+"_"+c+"_row_contracted_area").val("1")):a(this).find("span").hasClass("dashicons-plus")&&(a(this).parents("td").attr("data-wpacu-row-status","expanded").find(".wpacu_handle_row_expanded_area").removeClass("wpacu_hide"),a(this).find("span").removeClass("dashicons-plus").addClass("dashicons-minus"),a("#wpacu_"+d+"_"+c+"_row_contracted_area").val(""))});a('[data-is-hardcoded-asset="true"]').length>0&&(a.each(a('[data-is-hardcoded-asset="true"]'),function(b,c){e.updateHardcodedDataHiddenFieldStatus(a(this))}),a('[data-is-hardcoded-asset="true"]').on("click",".wpacu_unload_rule_input",function(){e.updateHardcodedDataHiddenFieldStatus(a(this).parents("[data-is-hardcoded-asset]"))}))},updateHardcodedDataHiddenFieldStatus:function(b){var c=!1;b.is("[data-style-handle-row]")?c=b.attr("data-style-handle-row"):b.is("[data-script-handle-row]")&&(c=b.attr("data-script-handle-row")),c&&(b.find(".wpacu_unload_rule_input:checked").length>0||b.hasClass("wpacu_not_load")?a("#"+c+"_hardcoded_data").prop("disabled",!1):a("#"+c+"_hardcoded_data").prop("disabled",!0))},triggerAlertWhenAnyUnloadRuleIsChosen:function(b,c){if("dashicons"===b&&"style"===c&&a('input[name="wpacu_ignore_child[styles][nf-display]').length>0&&!confirm(wpacu_object.dashicons_unload_alert_ninja_forms))return!1;if("script"===c){if(("jquery"===b||"jquery-core"===b)&&a("#script_jquery_ignore_children").length>0&&!confirm(wpacu_object.jquery_unload_alert))return!1;if(("backbone"===b||"underscore"===b)&&!confirm(wpacu_object.sensitive_library_unload_alert))return!1}return!0},pluginLoadManager:function(){a(".wpacu_plugin_load_it").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")&&(e.hidePluginLoadExceptionArea(b),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),a('.wpacu_plugin_unload_site_wide[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_radio[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"))}),a(".wpacu_plugin_unload_site_wide").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?(a(this).parent("label").addClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_radio[data-wpacu-plugin-path="'+b+'"]').parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),e.showPluginLoadExceptionArea(b)):(a(this).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!0))}),a(".wpacu_plugin_unload_regex_radio").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?(a(this).parent("label").addClass("wpacu_plugin_unload_rule_input_checked"),a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide"),e.showPluginLoadExceptionArea(b),a('.wpacu_plugin_unload_site_wide[data-wpacu-plugin-path="'+b+'"]').prop("checked",!1).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked")):(a('.wpacu_plugin_unload_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"),a(this).parent("label").removeClass("wpacu_plugin_unload_rule_input_checked"),a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide"))}),a(".wpacu_plugin_load_exception_regex").on("click",function(){var b=a(this).attr("data-wpacu-plugin-path");a(this).prop("checked")?a('.wpacu_load_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide"):a('.wpacu_load_regex_input_wrap[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide")})},showPluginLoadExceptionArea:function(b){a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').removeClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!1)},hidePluginLoadExceptionArea:function(b){a('.wrap_plugin_load_exception_options[data-wpacu-plugin-path="'+b+'"]').addClass("wpacu_hide").find('input[type="checkbox"]').prop("disabled",!0)},showHandleLoadExceptionArea:function(b,c){var d=a("div.wpacu_exception_options_area_wrap[data-"+b+'-handle="'+c+'"]');d.parent("div").removeClass("wpacu_hide"),d.find('input[type="checkbox"]').prop("disabled",!1)},hideHandleLoadExceptionArea:function(b,c,d){if(!b.hasClass("wpacu_is_bulk_unloaded")&&!b.find(".wpacu_bulk_unload").is(":checked")){var e=a("div.wpacu_exception_options_area_wrap[data-"+d+'-handle="'+c+'"]');e.parent("div").addClass("wpacu_hide"),e.find('input[type="checkbox"]').prop("disabled",!0)}},uncheckAllOtherBulkUnloadRules:function(a,b){var c=".wpacu_bulk_unload";!1===b&&(c=".wpacu_bulk_unload:not(.wpacu_unload_it_regex_checkbox)"),a.closest("tr").find(c).not(a).prop("checked",!1).parent("label").removeClass("wpacu_input_load_checked").removeClass("wpacu_unload_checked")},checkSourcesFor404Errors:function(){var b=a("[data-wpacu-external-source]");if(!(b.length<1)){var c=b.length,d="";b.each(function(b){var e=a(this),f=e.attr("data-wpacu-external-source");d+=f+"-at-wpacu-at-",b===c-1&&jQuery.post(wpacu_object.ajax_url+"?wpacu_check_external_url",{action:wpacu_object.plugin_id+"_check_external_urls_for_status_code",wpacu_check_urls:d},function(b){var c=jQuery.parseJSON(b);a.each(c,function(b,c){a('[data-wpacu-external-source="'+c+'"]').css({color:"#cc0000"}).parent("div").find("[data-wpacu-external-source-status]").html('<small>* <em style="font-weight: 600;">'+wpacu_object.source_load_error_msg+"</em></small>")})})})}}};a(window).load(function(){e.checkSourcesFor404Errors()}),a("#wpacu_post_type_select").change(function(){a("#wpacu_post_type_form").submit()}),a("#wpacu_taxonomy_select").change(function(){a("#wpacu_taxonomy_form").submit()}),a("#wpacu_dashboard").click(function(){a(this).prop("checked")?a("#wpacu-settings-assets-retrieval-mode").show():a("#wpacu-settings-assets-retrieval-mode").hide()}),a(".wpacu-dom-get-type-selection").change(function(){a(this).is(":checked")&&(a(".wpacu-dom-get-type-info").hide(),a("#"+a(this).attr("data-target")).fadeIn("fast"))}),a("#wpacu_frontend").click(function(){a(this).prop("checked")?a("#wpacu-settings-frontend-exceptions").show():a("#wpacu-settings-frontend-exceptions").hide()}),a(".google_fonts_combine_type").change(function(){a(".wpacu_google_fonts_combine_type_area").hide(),"async"===a(this).val()?a("#wpacu_google_fonts_combine_type_async_info_area").fadeIn():"async_preload"===a(this).val()?a("#wpacu_google_fonts_combine_type_async_preload_info_area").fadeIn():a("#wpacu_google_fonts_combine_type_rb_info_area").fadeIn()}),a("#wpacu_assets_list_layout").on("click change",function(){"by-location"===a(this).val()?a("#wpacu-assets-list-by-location-selected").fadeIn("fast"):a("#wpacu-assets-list-by-location-selected").fadeOut("fast")}),a("#wpacu_disable_jquery_migrate").on("click",function(){return!a(this).is(":checked")||(!(!a(this).is(":checked")||!confirm(wpacu_object.jquery_migration_disable_confirm_msg))||(a(this).prop("checked",!1),!1))}),a("#wpacu_disable_comment_reply").on("click",function(){return!a(this).is(":checked")||(!(!a(this).is(":checked")||!confirm(wpacu_object.comment_reply_disable_confirm_msg))||(a(this).prop("checked",!1),!1))}),a("[data-target-opacity]").on("click change tick",function(){a(this).prop("checked")?a("#"+a(this).attr("data-target-opacity")).css({opacity:1}):a("#"+a(this).attr("data-target-opacity")).css({opacity:.4})}),a(".wpacu-combine-loaded-js-level").change(function(){a(this).is(":checked")&&(a(".wpacu_combine_loaded_js_level_area").removeClass("wpacu_active"),a("#"+a(this).attr("data-target")).addClass("wpacu_active"))});var f=a('#wpacu-update-button-area input[type="submit"]');f.parents("form").submit(function(){f.attr("disabled",!0),a("#wpacu-updating-settings").show()});var g=a("#wpacu-update-front-settings-area .wpacu_update_btn");if(g.parents("form").submit(function(){return g.attr("disabled",!0).addClass("wpacu_submitting"),a("#wpacu-updating-front-settings").show(),!0}),a("form#wpacu-settings-form, form#wpacu_home_page_form").submit(function(){return f.attr("disabled",!0),!0}),a(".wpacu_bulk_rule_checkbox, .wpacu_remove_preload").click(function(){var b=a(this).parents(".wpacu_bulk_change_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a(".wpacu_remove_regex").click(function(){var b=a(this).parents(".wpacu_regex_rule_row");a(this).prop("checked")?b.addClass("wpacu_enabled"):b.removeClass("wpacu_enabled")}),a(".wpacu_restore_position").click(function(){var b=a(this).parents(".wpacu_restore_position_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a(".wpacu_remove_global_attr").click(function(){var b=a(this).parents(".wpacu_remove_global_attr_row");a(this).prop("checked")?b.addClass("wpacu_selected"):b.removeClass("wpacu_selected")}),a("#wpacu_wrap_assets").length>0&&setTimeout(function(){e.load()},200),a("#wpacu-plugins-load-manager-wrap").length>0&&setTimeout(function(){e.pluginLoadManager()},200),"undefined"==typeof wpacu_object||a("#wpacu_meta_box_content").length<1)return!1;("default"===wpacu_object.list_show_status||""===wpacu_object.list_show_status||wpacu_object.override_assets_list_load)&&b(),"fetch_on_click"===wpacu_object.list_show_status&&a("#wpacu_ajax_fetch_on_click_btn").click(function(c){c.preventDefault(),a(this).hide(),a("#wpacu_fetching_assets_list_wrap").show(),b()}),a(document).on("click",".wp-admin.post-php .edit-post-header__settings button.is-primary",function(){var c=function(){if(0===a(".edit-post-header__settings .is-saving").length){if(a("#wpacu_unload_assets_area_loaded").length>0&&a("#wpacu_unload_assets_area_loaded").val()){a("#wpacu-assets-reloading").remove();var c='<span id="wpacu-assets-reloading" class="editor-post-saved-state is-wpacu-reloading">'+wpacu_object.reload_icon+wpacu_object.reload_msg+"</span>";a(".wp-admin.post-php .edit-post-header__settings").prepend(c)}a(".wpacu_asset_row").addClass("wpacu-loading"),b(),wpacuAjaxClearCache(),clearInterval(d)}},d=setInterval(c,900)})}),""!==wpacu_object.clear_cache_on_page_load&&wpacuAjaxClearCache(),""!==wpacu_object.clear_other_caches&&setTimeout(function(){wpacuClearAutoptimizeCache()},150),jQuery(document).ready(function(a){try{var b;a('input[type="hidden"][name="_wp_http_referer"]').length>0&&(b=a('input[type="hidden"][name="_wp_http_referer"]').val(),b.includes("term.php?taxonomy=")&&b.includes("message=")&&wpacuAjaxClearCache(),b.includes("post.php?post=")&&b.includes("message=")&&wpacuAjaxClearCache())}catch(a){console.log(a)}});
assets/style.min.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";#wpacu-pages-info-area{width:98%}#wpacu-top-area{margin:15px 0;padding:0 10px}#wpacu-quick-actions{color:#74777b;float:right;width:auto;margin-right:30px;background:rgba(40,44,42,.05);border-radius:10px;padding:6px 12px}#wpacu-quick-actions .wpacu-actions-title{font-weight:200;letter-spacing:.5px}#wpacu-quick-actions a{color:#004567;text-decoration:none}#wpacu-quick-actions a:hover{color:#0073aa}#wpacu-logo-wrap{width:auto;display:inline-block;position:relative}#wpacu-logo-wrap a{display:block}#wpacu-logo-wrap img{width:352px;height:79px}#wpacu-logo-wrap .wpacu-pro-sign{position:absolute;height:auto;font-family:FiraSans-Medium,proxima-nova-1,Montserrat,Helvetica,sans-serif;font-size:13px;font-weight:600;letter-spacing:1px;padding:5px 11px;border-radius:15px;right:-60px;top:30px;width:auto;display:inline-block;text-align:center}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-lite{color:#74777b;background:rgba(40,44,42,.05)}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-pro{color:#004567;background-color:rgba(40,44,42,.05)}.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;padding:0;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.extra-info{position:absolute;font-size:12px;left:-50%;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%);white-space:nowrap}.wpacu-tabs nav ul li span.extra-info.has-bulk-unloads{right:48%}.wpacu-tabs nav ul li span.extra-info.no-bulk-unloads{left:0;right:2px;bottom:2px;-webkit-transform:inherit;transform:inherit}.wpacu-tabs nav ul li span.extra-info .dashicons{font-size:16px;margin-right:-3px;margin-top:1px}.wpacu-tabs nav ul li span.extra-info.license-status.inactive{color:#c00}.wpacu-tabs nav ul li span.extra-info.license-status.active{color:green}.wpacu-tabs nav ul li span.extra-info.assets-unloaded-false{color:#004567}.wpacu-tabs nav ul li span.extra-info.assets-unloaded-true,.wpacu-tabs nav ul li span.extra-info.bulk-unloads-true{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:1800px;margin:20px auto 22px 0;width:98%;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:#008f9c;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 18px;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{background:0 0;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #008f9c;color:#008f9c}.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_hide{display:none!important}.wpacu-script-attributes-area{display:block;margin-bottom:12px}.wpacu-script-attributes-area>div:first-of-type{display:inline-block;float:left;margin-right:15px;line-height:30px;vertical-align:middle}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings{display:inline-block;float:left;padding:5px 7px!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings.wpacu-first{margin:0 15px 0 0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings li{display:inline-block;margin:0 16px 0 0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area 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]{width:auto;padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_location_changed>td{border-left:#004567 4px solid}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}tr.wpacu_not_load td .wpacu-assets-inline-code-wrap,tr.wpacu_not_load td .wpacu-script-attributes-area,tr.wpacu_not_load th .wpacu-assets-inline-code-wrap,tr.wpacu_not_load th .wpacu-script-attributes-area{filter:alpha(opacity=45);opacity:.45}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none;color:inherit!important}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpassetcleanup_asset_list small{width:auto;float:none;display:inline}#wpacu_meta_box_content{width:99%}#wpacu_meta_box_content div.select select{max-width:inherit}#wpacu_meta_box_content .emoji{font-size:18px}#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,#wpacu_meta_box_content .dashicons.dashicons-wordpress-alt{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_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_exception_options_area_wrap label.wpacu_bold span,.wpacu_load_regex_area_wrap label.wpacu_bold span,.wpacu_unload_regex_area_wrap label.wpacu_bold span{font-weight:600!important}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu-update-front-settings-area{margin:10px 0;display:inline-block;position:relative}@media only screen and (min-width:768px){#wpacu-update-front-settings-area{position:-webkit-sticky;position:sticky;bottom:0;display:block;padding:15px 0;z-index:1000000;border-top:1px solid #cdcdcd;background:#fff}}#wpacu-updating-front-settings{display:none;position:absolute;top:20px;left:142px}.wpacu_load_regex_area_wrap label.wpacu_unload_checked span,.wpacu_unload_regex_area_wrap label.wpacu_unload_checked span{color:#d54e21}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap,.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap{margin:4px 0 0}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text],.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text]{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text].wpacu_disabled,.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text].wpacu_disabled{background:#fbfafa!important;color:inherit}.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap{display:inline-block}.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_area_one,.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_area_two,.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_load_regex_input_wrap{display:block}.wpacu_exception_options_area_wrap{display:table;background:#fff!important}.wpacu_exception_options_area_wrap textarea{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_exception_options_area_wrap textarea:focus{width:100%}.wpacu_exception_options_area_wrap textarea.wpacu_disabled{background:#fbfafa!important;color:inherit}.wpacu_exception_options_area_wrap p:first-of-type{margin-top:0}.wpacu_exception_options_area_wrap .wpacu_area_one{display:table-cell;vertical-align:top;padding-right:10px}.wpacu_exception_options_area_wrap .wpacu_area_two{display:table-cell}@media only screen and (max-width:1199px){.wpacu_exception_options_area_wrap,.wpacu_exception_options_area_wrap .wpacu_area_one,.wpacu_exception_options_area_wrap .wpacu_area_two{display:block}}#wpacu_meta_box_content .wpacu_widefat{width:100%}#wpacu_meta_box_content .wpacu-assets-collapsible-content{padding:0 10px!important}#wpacu_meta_box_content ul.wpacu_asset_options{vertical-align:middle}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:20px}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li:last-of-type{margin:1px 0}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li input[type=text]{margin-left:5px;border:1px solid #e7e7e7;background:#fff}.wpacu-hardcoded-code-area{margin-bottom:8px}.wpacu-hardcoded-code-area.wpacu-has-view-more{max-height:300px;position:relative;overflow:hidden}.wpacu-hardcoded-code-area.wpacu-has-view-more p.wpacu-view-more-link-area{position:absolute;bottom:0;left:0;width:100%;margin:0;padding:20px 0 15px 15px;background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fbfbfb8c 100%);background:-webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fbfbfb8c 100%)}#wpacu_wrap_assets,.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu-hardcoded-code-area pre{margin:0;padding:8px 0;white-space:pre-wrap;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-hardcoded-code-area code{font-style:italic;margin-left:2px;word-break:break-word}#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{display:inline!important;margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{width:auto!important;margin-right:4px!important}#wpacu_wrap_assets img:not(.wpacu-ajax-loader){display:inline-block!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{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_wrap_assets ul.wpacu_asset_options.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:30px}#wpacu_wrap_assets ul.wpacu_asset_options.wpacu_exception_options_area li:last-of-type{margin:1px 0}.wpacu_verified{margin:0 0 10px!important}.wpacu_asset_row div.select{display:inline-block;width:auto}.wpacu_asset_row:first-child td{border-top:1px solid #cdcdcd}.wpacu_asset_row td{border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row.wpacu_notice_row td{position:relative;padding:5px;border-bottom:1px solid transparent}.wpacu_asset_row.wpacu_notice_row td div.wpacu-warning{width:auto;margin:5px;font-style:italic}.wpacu_asset_row:not(.wpacu_notice_row) td{padding:18px!important;position:relative}.wpacu_asset_row:not(.wpacu_notice_row) td.wpacu_selected,.wpacu_asset_row:not(.wpacu_notice_row) td:hover{-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:not(.wpacu_notice_row) td p{padding:0!important;margin-bottom:8px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row:not(.wpacu_notice_row) td label{width:auto!important;margin:0!important;cursor:pointer!important;display:inline-block!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row:not(.wpacu_notice_row) td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row:not(.wpacu_notice_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,.wpacu_asset_row .dashicons-wordpress-alt{color:red!important}.wpacu_asset_row .dashicons-wordpress-alt{font-size:17px;vertical-align:middle}label.wpacu_add_global{cursor:pointer!important}label.wpacu_input_load_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}tr.wpacu_bulk_change_row.wpacu_selected,tr.wpacu_global_rule_row.wpacu_selected,tr.wpacu_remove_preload_row.wpacu_selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}.nav-tab-wrapper.nav-assets-manager .nav-tab{font-size:13px;font-weight:500;padding:6px 10px}.nav-tab-wrapper.nav-assets-manager .nav-tab.for-pro{padding:6px 8px 6px 3px}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 10px 0 0;list-style:none;display:inline-block;line-height:normal}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{width:100%;font-weight:400}.wpacu_list_table div,.wpacu_list_table li,.wpacu_list_table p{font-weight:400}.wpacu_widefat{width:99%}.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;line-height:normal!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn.wpacu_submitting,.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.wpacu_submitting{cursor:default!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=button].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=submit].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}.wpacu-restore-pos-btn{font-size:14px!important;line-height:normal!important;height:42px!important;padding:0 18px!important;margin-top:10px!important}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{text-shadow:none;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,.wordpress-core-file .wpacu-tooltip{line-height:18px;text-align:center;-webkit-transition:.1s all ease;z-index:1}.go-pro-link-no-style>img{max-width:20px;max-height:20px}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;position:absolute;visibility:hidden;width:160px;background-color:#00a7a7;color:#fff;padding:8px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-65px;transition:.1s 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:#00a7a7 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-on-pages-btn{cursor:pointer;margin-left:-77px;width:130px}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip{bottom:-40px;left:120px;margin-left:-86px}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip:after{top:41px;left:-20px;border-color:transparent #c00 transparent transparent}.wordpress-core-file{position:relative;font-style:normal;color:inherit}.wordpress-core-file .wpacu-tooltip{font-size:14px;position:absolute;visibility:hidden;width:160px;background-color:#c00;color:#fff;padding:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-86px;transition:.1s 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 #008f9c}.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;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;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,.wpacu-radio-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections.wpacu-vertical,.wpacu-radio-selections.wpacu-vertical{display:block;margin-top:15px;margin-bottom:18px}#wpacu-dom-get-type-selections.wpacu-vertical li,.wpacu-radio-selections.wpacu-vertical li{float:none;margin-bottom:12px}#wpacu-dom-get-type-selections.wpacu-vertical li:last-child,.wpacu-radio-selections.wpacu-vertical li:last-child{margin-bottom:0}#wpacu-dom-get-type-selections li,.wpacu-radio-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child,.wpacu-radio-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child,.wpacu-radio-selections li:last-child{margin-right:0}.wpacu_combine_loaded_js_level_area{display:none;background:0 0;border-left:2px solid #008f9c;padding-top:8px;padding-bottom:8px;padding-right:10px;padding-left:10px;margin:20px 0 15px}.wpacu_combine_loaded_js_level_area.wpacu_active{display:block}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap li,.wpacu-wrap p,.wpacu-wrap td{font-weight:400}.wpacu-wrap small{width:auto;float:none;display:inline}.wpacu-wrap small code{font-size:inherit!important}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-tab-content{display:block;width:100%}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-area-title{color:#004567;padding:16px 15px;background:#f8f8f8;border-left:5px solid #004567b0;border-top:1px solid #e7e7e7;border-right:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:1.45em;font-weight:500}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area,.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .submit{margin:0}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .button{padding:11px 28px;height:38px;font-size:18px}.wpacu-wrap.wpacu-settings-show-all #wpacu-updating-settings{margin-left:224px;top:35px;left:3px}.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_disabled,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled:before{content:"";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:5px;right:2px;z-index:1000}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:4px;line-height:1.4}.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-assets-list-by-location-selected{background:0 0;border:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:8px;clear:both}.notice.notice-success+.wpacu-wrap.wpacu-settings-area{margin-top:20px}.wpacu-license-action-btn-area{margin-top:0;position:relative;display:inline-block}.wpacu-license-spinner{display:none;position:absolute;right:-30px;top:4px}.wpacu-license-spinner img{width:20px;height:20px}#wpacu-activation-issues-info{border-radius:10px;width:90%;margin-top:20px;font-size:14px;padding:6px 20px;background:#fff;border:1px solid #e7e7e7}#wpacu-activation-issues-info ol li{font-size:13px;margin-bottom:10px}#wpacu-mark-license-area-wrap{margin:15px 0}.wpacu-form-table.wpacu-license th{width:120px}.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}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox],.wpacu-form-table label input[type=checkbox]{height:20px;width:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:checked,.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:hover,.wpacu-form-table label input[type=checkbox]:checked,.wpacu-form-table label input[type=checkbox]:hover{border:1px solid green}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:checked:before,.wpacu-form-table label input[type=checkbox]:checked:before{color:#52af00;font:400 24px/1 dashicons}.wpacu-form-table .wpacu-fancy-radio input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;position:relative;height:20px;width:20px;margin:2px 0 0}.wpacu-form-table .wpacu-fancy-radio input[type=radio]:checked,.wpacu-form-table .wpacu-fancy-radio input[type=radio]:hover{border:1px solid green}.wpacu-form-table .wpacu-fancy-radio input[type=radio]:checked:before{margin:0;line-height:inherit;text-indent:inherit;content:"";position:absolute;top:4px;left:4px;width:10px;height:10px;border-radius:50%;background:#52af00;color:#52af00;font:400 24px/1 dashicons}#wpacu-settings-vertical-tab-wrap{display:table;width:100%}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text{margin:4px 0 0}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small{font-weight:lighter}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap{position:relative;padding-left:14px}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status{position:absolute;left:0;top:2px;height:10px;width:10px;border-radius:50%;display:inline-block;opacity:.75}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status.wpacu-on{background:#52af00}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status.wpacu-off{background:#ccc}#wpacu-settings-vertical-tab-wrap *{box-sizing:border-box}.wpacu-settings-tab{display:table-cell;width:20%;height:100%;vertical-align:top}.wpacu-settings-tab a{text-decoration:none;border-left:3px solid transparent;display:block;background-color:#f1f1f1;color:#004567;padding:17px 16px;width:100%;outline:0;text-align:left;cursor:pointer;font-size:14px;font-weight:600;border-bottom:1px solid #ccc}.wpacu-settings-tab a:first-child{border-top:1px solid transparent!important}.wpacu-settings-tab a:last-child{border-bottom:1px solid transparent!important}.wpacu-settings-tab a:hover{background-color:#fff;border-left:3px solid #004567;position:relative}.wpacu-settings-tab a.active{color:#004567;background-color:#fff;border-left:3px solid #004567;position:relative;border-bottom:1px solid #ccc}.wpacu-settings-tab a.active:after{content:"";position:absolute;height:100%;width:1px;top:0;right:-1px;background-color:#fff}.wpacu-settings-tab-content{background-color:#fff;display:none;padding:12px 18px;width:79%;border-left:none;height:100%;border-top-right-radius:10px;border-bottom-right-radius:10px}.wpacu-settings-tab-content h2{padding:0 0 15px;border-bottom:1px solid #e7e7e7}.wpacu-settings-tab-content.active{display:table-cell}#wpacu_minify_css_exceptions_area,#wpacu_minify_js_exceptions_area{margin:16px 0 0}@media only screen and (min-width:768px){body.asset-cleanup-pro_page_wpassetcleanup_assets_manager #wpacu-update-button-area,body.asset-cleanup_page_wpassetcleanup_assets_manager #wpacu-update-button-area{position:-webkit-sticky;position:sticky;bottom:0;padding:0;z-index:1000000;border-top:1px solid #cdcdcd;background:#f1f1f1}.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}}body[class*=version-5-3] #wpacu-update-button-area .button{height:auto;padding:4px 18px 6px;font-size:15px}body[class*=version-5-3] #wpacu-updating-settings{margin-left:178px}#wpacu-update-button-area{position:relative;margin-left:20%}#wpacu-update-button-area.no-left-margin{margin-left:0}#wpacu-update-button-area .submit{margin:0;padding:19px 0}#wpacu-update-button-area .button{padding:5px 18px;height:38px;font-size:15px}#wpacu-updating-settings{position:absolute;margin-left:183px;top:28px;display:none}#combine_loaded_js_info_area{position:relative}#combine_loaded_js_info_area.locked-for-pro:before{position:absolute;content:"";height:100%;width:100%;background:#fff;opacity:.5;z-index:10000}.google_fonts_load_types{clear:both;margin:20px 0 15px;display:flex}.google_fonts_load_types>div{text-align:left}.google_fonts_load_types>div input{float:left;margin:0 7px 20px 0!important}.wpacu-sub-tabs-wrap{min-width:320px;margin:0 auto}.wpacu-sub-tabs-wrap input.wpacu-nav-input{display:none}.wpacu-sub-tabs-wrap label.wpacu-nav-label{display:inline-block;margin:0 0 -1px;padding:15px 25px;font-weight:600;text-align:center;color:#74777b;border-left:1px solid transparent;border-right:1px solid transparent;border-top:3px solid transparent;border-bottom:0}.wpacu-sub-tabs-wrap label.wpacu-nav-label:hover{cursor:pointer}.wpacu-sub-tabs-wrap input.wpacu-nav-input:checked+label.wpacu-nav-label{color:#004567;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:3px solid #004567;border-bottom:1px solid #fff}.wpacu-sub-tabs-wrap section{display:none;padding:20px 0 0;border-top:1px solid #ccc}#wpacu-google-fonts-optimize-tab-item:checked~#wpacu-google-fonts-optimize-tab-item-area,#wpacu-google-fonts-remove-tab-item:checked~#wpacu-google-fonts-remove-tab-item-area{display:block}body.wp-admin .wpacu-handle-notes p{margin-top:0!important}body.wp-admin .wpacu-handle-notes p a{font-size:inherit}body.wp-admin .wpacu-handle-notes p a span.dashicons{font-size:19px;width:19px;height:19px;vertical-align:bottom;text-decoration:none}.wpacu-handle-notes{padding-top:5px;margin-bottom:-10px;border-top:1px solid #e7e7e7}.wpacu-handle-notes .wpacu-handle-notes-field{display:none}.wpacu-handle-notes .wpacu-handle-notes-field>textarea{font-size:85%;padding:6px;width:320px;max-width:100%}.wpacu-handle-notes p{margin:10px 0 0!important}.wpacu-handle-notes p a.wpacu-add-handle-note{text-decoration:none;font-size:80%;display:inline-block;color:inherit}.wpacu-handle-notes p a.wpacu-add-handle-note span.dashicons{font-size:18px;width:18px;height:18px}.wrap_bulk_unload_options{width:auto;display:block;clear:both}.wrap_bulk_unload_options .wpacu_asset_options_wrap{display:inline-block;float:left;margin:5px 10px 14px 0!important;padding:8px 10px 12px!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;min-width:52px;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:.15s;transition:.15s}.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:.15s;transition:.15s}.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_switch.wpacu_disabled{opacity:.3}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch.wpacu_disabled:before{content:"";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:1px;right:2px;z-index:1000}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.wpacu-wrap{width:98%}.wpacu-wrap tr.wpacu_regex_rule_row{opacity:.45}.wpacu-wrap tr.wpacu_regex_rule_row textarea{line-height:normal;min-height:20px;min-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu-wrap tr.wpacu_regex_rule_row textarea:focus{width:100%}.wpacu-wrap tr.wpacu_regex_rule_row.wpacu_enabled{opacity:1}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small{position:relative;display:inline-block;min-width:30px;width:30px;height:17px;margin-right:5px!important}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.15s;transition:.15s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider:before{position:absolute;content:"";height:13px;width:13px;left:2px;bottom:2px;background-color:#fff;-webkit-transition:.15s;transition:.15s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:checked+.wpacu_slider:before{-webkit-transform:translateX(13px);-ms-transform:translateX(13px);transform:translateX(13px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider.wpacu_round{border-radius:17px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider.wpacu_round:before{border-radius:50%}.editor-post-saved-state.is-wpacu-reloading{animation:edit-post__loading-fade-animation .5s infinite}body.wp-admin .wpacu_asset_row.wpacu-loading{position:relative}body.wp-admin .wpacu_asset_row.wpacu-loading .wpacu-ajax-loader{display:block!important}body.wp-admin .wpacu_asset_row .wpacu-ajax-loader{display:none;width:58px;height:58px;position:absolute;bottom:0;right:0;opacity:.75}.wpacu_asset_row>td{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all}.wpacu_asset_row input{width:auto;height:auto;min-height:16px}.wpacu_asset_row .tip{background:inherit;border-left:4px solid #e7e7e7;margin:0 0 5px;padding:7px;font-style:italic;font-size:small;line-height:1.4}.wpacu_asset_row td{width:100%;text-align:left}.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{display:table;content:""}.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{clear:both;height:0}.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}.wpacu-assets-collapsible-wrap,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed{border:1px solid #cdcdcd}.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}body[class*=asset-cleanup-pro] a.wpacu-plugin-contracted-wrap-link{padding:16px 6px 16px 41px!important}body[class*=asset-cleanup-pro] .wpacu-area-open .wpacu-plugin-toggle-all{font-size:12px!important;width:calc(100% - 26px)!important}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all{top:5px}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all ul li{font-size:12px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-area{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-width:0;margin:0;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-location-child-area[data-wpacu-plugin=oxygen] .icon-area{border-radius:50%}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all{display:inline-block;padding:0;font-size:13px;width:100%;width:calc(100% + 46px);min-width:250px;position:absolute;left:100%;left:calc(100% + 6px);margin:0;top:4px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul{display:inline-block;margin:0;list-style:none;padding-left:13px;padding-top:0}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul li{padding:0;margin:0;line-height:normal;font-size:14px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul li:first-child{font-style:italic;margin-bottom:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;position:relative;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title: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-plugin-assets-wrap{padding:0 0 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open.wpacu-plugin-assets-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all{display:inline-block;padding:7px 12px 8px;font-size:14px;width:100%;text-align:left;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all+.wpacu-plugin-toggle-all{padding:2px 12px 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link{color:inherit;text-decoration:none;font-weight:inherit;font-style:inherit;font-size:105%;line-height:initial;height:auto;margin:14px 0 0;padding:13px 6px 14px 39px;position:relative;display:block}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:after{position:absolute;font-size:18px;font-family:Dashicons;right:12px;top:14px;content:""}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open:after{content:""}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover{border:1px solid #878787;background:#f9f9f9}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover.wpacu-link-closed{box-shadow:3px 3px 2px #ddd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open{border-top:1px solid #cdcdcd;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:none}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed.wpacu-last-wrap-link{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default{top:10px;left:10px;width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area{width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area:before{font-size:22px;line-height:22px;top:4px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title: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 a.wpacu-plugin-contracted-wrap-link.wpacu-area-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-open{padding:0;max-height:100%}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-closed{padding:0;overflow:hidden;max-height:0}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{margin-top:0;margin-bottom:-1px;padding:14px 10px 16px 12px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title.wpacu-theme-has-icon{padding:18px 10px 16px 58px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:-1px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-location-child-area-first{margin-top:2px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-area-expanded .wpacu-area-title{display:inline-block;z-index:1;padding:17px 10px 16px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;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}.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:"";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-by-location .icon-theme{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-wp_core{border:1px solid #c00}.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:""}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:""}.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:not(.wpacu-assets-table-list-wrap){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;width:14px;height: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:""}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:""}.wpacu-assets-inline-code-collapsible-content{padding:0 8px 2px 0;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_asset_row p div.select{display:inline-block}.wpacu-wrap-choose-position{display:inline}.wpacu-wrap-choose-position>div{display:inline-block}.wpacu-wrap-choose-position select{width:auto;font-size:inherit;display:inline;margin-left:6px;margin-right:4px}.wpacu-wrap-choose-position>.select>.select{display:inline}.wpacu-wrap-choose-position>.select>.select select{padding-right:30px}.wpacu-wrap-choose-position>.select>.select:after{right:15px;top:-4px}.wpacu_handle_unload_regex_input_wrap,.wpacu_load_regex_input_wrap{display:block;width:100%}.wpacu_handle_unload_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea,.wpacu_load_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_handle_unload_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea:focus,.wpacu_load_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea:focus{width:100%}body.logged-in:not(.wp-admin) .wpacu-view-more-code{box-shadow:inset 0 1px 0 0 #fff;background:linear-gradient(to bottom,#f9f9f9 5%,#e9e9e9 100%);background-color:#f9f9f9;border-radius:6px;border:1px solid #dcdcdc;display:inline-block;cursor:pointer;color:#666;font-size:inherit;font-weight:700;padding:6px 24px;text-decoration:none;text-shadow:0 1px 0 #fff}body.logged-in:not(.wp-admin) .wpacu-view-more-code:hover{background:linear-gradient(to bottom,#e9e9e9 5%,#f9f9f9 100%);background-color:#e9e9e9}body.logged-in:not(.wp-admin) .wpacu-view-more-code:active{position:relative;top:1px}.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}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td{border-top:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td:first-of-type{border-left:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td:last-of-type{border-right:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td{font-size:14px;border-top:1px solid transparent;border-bottom:1px solid transparent}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td:first-of-type{border-left:1px solid transparent}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td:last-of-type{border-right:1px solid transparent}body.wp-admin[class*=asset-cleanup] table.wp-list-table:not(.wpacu-overview-list-table) tr:not(:first-of-type):not(.wpacu_selected):hover,body.wp-admin[class*=asset-cleanup] table.wp-list-table:not(.wpacu-overview-list-table).wpacu-list-table tr:not(.wpacu_selected):hover{-moz-box-shadow:inset 0 0 2px 1px #b3b3b3;-webkit-box-shadow:inset 0 0 2px 1px #B3B3B3;box-shadow:inset 0 0 2px 1px #B3B3B3}.wp-list-table .wpacu_remove_global_attr_row.wpacu_selected,.wp-list-table .wpacu_restore_position_row.wpacu_selected{background:#e7e7e7!important}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}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label.wpacu_plugin_unload_rule_input_checked,#wpacu-warning-read span.dashicons-warning,#wpacu-warning-read span.dashicons-wordpress-alt{color:#c00}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 (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.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-tools-area .wpacu-export-import-area{padding:10px}.wpacu-tools-area .wpacu-export-import-area form>p:first-of-type{margin-top:0}.wpacu-tools-area .wpacu-export-import-area form>p:last-of-type{margin-bottom:0}.wpacu-tools-area .wpacu-export-import-area:hover{background:rgba(40,44,42,.05);box-shadow:inset 0 0 10px rgba(160,165,170,.15)}.wpacu-tools-area .wpacu-export-import-area+hr{display:block;height:1px;border:0;border-top:1px solid #cdcdcd;margin:10px 0;padding:0}#wpacu-import-form button.wpacu-importing img.wpacu-spinner{display:inline-block}#wpacu-import-form button img.wpacu-spinner{display:none;margin:0 0 0 5px;height:16px;width:16px;vertical-align:middle}.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}.wpacu-lite-vs-pro-wrap ul{display:flex;top:0;z-index:10;padding-bottom:14px}.wpacu-lite-vs-pro-wrap li{list-style:none;flex:1}.wpacu-lite-vs-pro-wrap li:last-child{border-right:1px solid #DDD}.wpacu-lite-vs-pro-wrap button{width:100%;border:1px solid #DDD;border-right:0;border-top:0;padding:10px;background:#FFF;font-size:14px;font-weight:700;height:60px;color:#999}.wpacu-lite-vs-pro-wrap li.active button{background:#F5F5F5;color:#000}.wpacu-lite-vs-pro-wrap table{border-collapse:collapse;table-layout:fixed;width:100%}.wpacu-lite-vs-pro-wrap th{background:inherit}.wpacu-lite-vs-pro-wrap tr.first{background:inherit;font-size:18px}.wpacu-lite-vs-pro-wrap tr.first .bg-lite{border-top:4px solid #6d6e70;background:#fff;color:#6d6e70}.wpacu-lite-vs-pro-wrap tr.first .bg-pro{border-top:4px solid green;background:#fff;color:green}.wpacu-lite-vs-pro-wrap tr:not(.first){background:#fff}.wpacu-lite-vs-pro-wrap tr:not(:last-child):hover{background:#f8f8f8}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{height:53px;line-height:22px;border:1px solid #DDD;padding:10px 16px;empty-cells:show;text-align:left}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{font-size:14px}}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{text-align:center;display:none}.wpacu-lite-vs-pro-wrap td.default{display:table-cell}.wpacu-lite-vs-pro-wrap .txt-l{font-size:28px;font-weight:700}.wpacu-lite-vs-pro-wrap .txt-top{position:relative;top:-9px;left:-2px}.wpacu-lite-vs-pro-wrap svg{width:18px;height:18px}.wpacu-lite-vs-pro-wrap svg path{fill:green}.wpacu-lite-vs-pro-wrap .tick{color:#2CA01C}.wpacu-lite-vs-pro-wrap .tick img{fill:#2CA01C}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .txt-l{font-size:20px}.wpacu-lite-vs-pro-wrap .tick{font-size:15px}}.wpacu-lite-vs-pro-wrap .na{font-size:18px;opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.wpacu-lite-vs-pro-wrap .hide{border:0;background:0 0}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{display:table-cell!important;width:auto}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:130px}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .na{font-size:15px}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:42px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap td .button{font-size:16px!important}}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td .button{font-size:14px!important;padding:0 20px!important}.wpacu-lite-vs-pro-wrap td .button.button-primary{margin-top:6px;margin-bottom:14px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap{margin-bottom:40px;clear:both}}.wpacu-video-areas>div{padding:20px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-video-areas>div:nth-child(odd){background:#fff}.wpacu-video-areas>div:nth-child(even){background:inherit}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 15px;display:flex}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right{padding:0 20px 0 25px}}@media only screen and (min-width:992px) and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 40px}}.wpacu-video-areas .wpacu-video-area-wrapper ol{font-size:14px}.wpacu-video-areas .wpacu-video-area-wrapper ul{font-size:14px;list-style:disc;margin-left:22px}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:first-child{margin-top:0}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:last-child{margin-bottom:0}}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{width:560px;height:315px}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}}#wpassetcleanup_asset_list.postbox h2{padding-left:52px!important;position:relative}#wpassetcleanup_asset_list.postbox h2:before{content:"";position:absolute;background-image:url(images/wpacu-logo-transparent-bg-v1.png);background-size:cover;top:6px;left:13px;width:33px;height:26px;opacity:.8;-webkit-filter:grayscale(100%);filter:grayscale(100%)}body.wp-admin .wpacu-modal{display:none;position:fixed;z-index:1000000;padding-top:15%;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}body.wp-admin .wpacu-modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%;max-width:600px;border-radius:10px}body.wp-admin .wpacu-close{color:#aaa;float:right;font-size:28px;font-weight:700}body.wp-admin .wpacu-close:focus,body.wp-admin .wpacu-close:hover{color:#000;text-decoration:none;cursor:pointer}.wpacu-bulk-changes-tabs{display:table;position:relative;overflow:hidden;margin:0;width:100%}.wpacu-bulk-changes-tabs li{border-top:1px solid rgba(40,44,42,.1);border-left:1px solid rgba(40,44,42,.1);border-bottom:1px solid rgba(40,44,42,.1);float:left;line-height:38px;padding:0;position:relative;margin-bottom:12px}.wpacu-bulk-changes-tabs li:last-child{border-right:1px solid rgba(40,44,42,.1)}.wpacu-bulk-changes-tabs a{position:relative;background:rgba(40,44,42,.05);color:#004567;font-size:14px;font-weight:500;display:block;letter-spacing:0;outline:0;padding:6px 20px;text-decoration:none;border-top:3px solid transparent}.wpacu-bulk-changes-tabs a:hover{background:#f1f1f1;border-top:3px solid transparent}.wpacu-bulk-changes-tabs .current a{background:#fff;border-top:3px solid #004567}.wpacu-bulk-changes-tabs .current a:hover{background:#fff}.wpacu-bulk-changes-tabs .current a:after,.wpacu-bulk-changes-tabs .current a:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.wpacu-bulk-changes-tabs .current a:after{border-color:rgba(136,183,213,0);border-top-color:#fff;border-width:12px;margin-left:-12px}.wpacu-bulk-changes-tabs .current a:before{border-color:rgba(194,225,245,0);border-top-color:rgba(40,44,42,.1);border-width:13px;margin-left:-13px}img.wpacu-emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#wpacu-plugins-load-manager-wrap table td{border-bottom:1px solid #e7e7e7}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_icon{padding:14px 10px}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_details{vertical-align:middle;padding:10px 0 10px 8px}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_details .wpacu_plugin_title{font-weight:600}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap{flex-grow:1;margin:0 16px 0 0!important;padding:8px 10px 6px 0!important}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules{margin:0;vertical-align:middle}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label{vertical-align:top}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label input[type=radio].wpacu_plugin_load_it:before{background-color:green}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label input[type=radio].wpacu_plugin_unload_rule_input:before{background-color:#c00}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options{padding-top:5px;border-top:1px solid #e7e7e7;width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap{flex-grow:1;margin:0 16px 0 0!important;padding:6px 10px 6px 0!important}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules{margin:0;vertical-align:middle}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label{vertical-align:top}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:20px}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules.wpacu_exception_options_area li:last-of-type{margin:1px 0}.wpacu-list-table.plugins{width:98%;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#wpacu-plugins-load-manager-wrap .help_link{text-decoration:none;color:inherit;vertical-align:middle}#wpacu-plugins-load-manager-wrap .help_link.unload_it_regex{vertical-align:top}#wpacu-plugins-load-manager-wrap .wpacu_plugin_details .wpacu_plugin_path{font-style:italic;color:grey}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>img{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>div{background:#efefef;border:#cdcdcd;border-radius:3px;width:40px;height:40px;vertical-align:middle;position:relative;text-align:center}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>div>span{font-size:30px;color:#b3b3b3;top:50%;vertical-align:middle;left:50%;transform:translate(-50%,-50%);width:30px;height:30px;position:absolute}#wpacu-plugins-load-manager-wrap .wpacu_exception_options_area textarea,#wpacu-plugins-load-manager-wrap textarea:focus{width:100%}#wpacu-plugins-load-manager-wrap .wpacu_plugin_unload_regex_input_wrap{display:block}#wpacu-plugins-load-manager-wrap .wpacu_plugin_unload_regex_input_wrap textarea{margin-top:6px;min-width:400px}#wpacu-plugins-load-manager-wrap textarea{line-height:normal;min-height:20px;min-width:300px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#wpacu-plugins-load-manager-wrap textarea.wpacu_disabled{background:#fbfafa!important;color:inherit}
1
+ @charset "UTF-8";#wpacu-pages-info-area{width:98%}#wpacu-top-area{margin:15px 0;padding:0 10px}#wpacu-quick-actions{color:#74777b;float:right;width:auto;margin-right:30px;background:rgba(40,44,42,.05);border-radius:10px;padding:6px 12px}#wpacu-quick-actions .wpacu-actions-title{font-weight:200;letter-spacing:.5px}#wpacu-quick-actions a{color:#004567;text-decoration:none}#wpacu-quick-actions a:hover{color:#0073aa}#wpacu-logo-wrap{width:auto;display:inline-block;position:relative}#wpacu-logo-wrap a{display:block}#wpacu-logo-wrap img{width:352px;height:79px}#wpacu-logo-wrap .wpacu-pro-sign{position:absolute;height:auto;font-family:FiraSans-Medium,proxima-nova-1,Montserrat,Helvetica,sans-serif;font-size:13px;font-weight:600;letter-spacing:1px;padding:5px 11px;border-radius:15px;right:-60px;top:30px;width:auto;display:inline-block;text-align:center}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-lite{color:#74777b;background:rgba(40,44,42,.05)}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-pro{color:#004567;background-color:rgba(40,44,42,.05)}.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;padding:0;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.extra-info{position:absolute;font-size:12px;left:-50%;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%);white-space:nowrap}.wpacu-tabs nav ul li span.extra-info.has-bulk-unloads{right:48%}.wpacu-tabs nav ul li span.extra-info.no-bulk-unloads{left:0;right:2px;bottom:2px;-webkit-transform:inherit;transform:inherit}.wpacu-tabs nav ul li span.extra-info .dashicons{font-size:16px;margin-right:-3px;margin-top:1px}.wpacu-tabs nav ul li span.extra-info.license-status.inactive{color:#c00}.wpacu-tabs nav ul li span.extra-info.license-status.active{color:green}.wpacu-tabs nav ul li span.extra-info.assets-unloaded-false{color:#004567}.wpacu-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons,.wpacu-tabs nav ul li span.extra-info.assets-unloaded-true,.wpacu-tabs nav ul li span.extra-info.bulk-unloads-true{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:1800px;margin:20px auto 22px 0;width:98%;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:#008f9c;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 18px;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{background:0 0;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #008f9c;color:#008f9c}.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_hide{display:none!important}.wpacu-script-attributes-area{display:block;margin-bottom:12px}.wpacu-script-attributes-area>div:first-of-type{display:inline-block;float:left;margin-right:15px;line-height:30px;vertical-align:middle}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings{display:inline-block;float:left;padding:5px 7px!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings.wpacu-first{margin:0 15px 0 0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings li{display:inline-block;margin:0 16px 0 0!important}.wpacu-script-attributes-area ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area 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]{width:auto;padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_location_changed>td{border-left:#004567 4px solid}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}tr.wpacu_not_load td .wpacu-assets-inline-code-wrap,tr.wpacu_not_load td .wpacu-script-attributes-area,tr.wpacu_not_load th .wpacu-assets-inline-code-wrap,tr.wpacu_not_load th .wpacu-script-attributes-area{filter:alpha(opacity=45);opacity:.45}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none;color:inherit!important}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpassetcleanup_asset_list small{width:auto;float:none;display:inline}#wpacu_meta_box_content{width:99%}#wpacu_meta_box_content div.select select{max-width:inherit}#wpacu_meta_box_content .emoji{font-size:18px}#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,#wpacu_meta_box_content .dashicons.dashicons-wordpress-alt{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_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_exception_options_area_wrap label.wpacu_bold span,.wpacu_load_regex_area_wrap label.wpacu_bold span,.wpacu_unload_regex_area_wrap label.wpacu_bold span{font-weight:600!important}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu-update-front-settings-area{margin:10px 0;display:inline-block;position:relative}@media only screen and (min-width:768px){#wpacu-update-front-settings-area{position:-webkit-sticky;position:sticky;bottom:0;display:block;padding:15px 0;z-index:1000000;border-top:1px solid #cdcdcd;background:#fff}}#wpacu-updating-front-settings{display:none;position:absolute;top:20px;left:142px}.wpacu_load_regex_area_wrap label.wpacu_unload_checked span,.wpacu_unload_regex_area_wrap label.wpacu_unload_checked span{color:#d54e21}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap,.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap{margin:4px 0 0}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text],.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text]{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_load_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text].wpacu_disabled,.wpacu_unload_regex_area_wrap .wpacu_handle_unload_regex_input_wrap input[type=text].wpacu_disabled{background:#fbfafa!important;color:inherit}.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap{display:inline-block}.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_area_one,.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_area_two,.wpacu_is_global_unloaded .wpacu_exception_options_area_wrap .wpacu_load_regex_input_wrap{display:block}.wpacu_exception_options_area_wrap{display:table;background:#fff!important}.wpacu_exception_options_area_wrap textarea{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_exception_options_area_wrap textarea:focus{width:100%}.wpacu_exception_options_area_wrap textarea.wpacu_disabled{background:#fbfafa!important;color:inherit}.wpacu_exception_options_area_wrap p:first-of-type{margin-top:0}.wpacu_exception_options_area_wrap .wpacu_area_one{display:table-cell;vertical-align:top;padding-right:10px}.wpacu_exception_options_area_wrap .wpacu_area_two{display:table-cell}@media only screen and (max-width:1199px){.wpacu_exception_options_area_wrap,.wpacu_exception_options_area_wrap .wpacu_area_one,.wpacu_exception_options_area_wrap .wpacu_area_two{display:block}}#wpacu_meta_box_content .wpacu_widefat{width:100%}#wpacu_meta_box_content .wpacu-assets-collapsible-content{padding:0 10px!important}#wpacu_meta_box_content ul.wpacu_asset_options{vertical-align:middle}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:20px}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li:last-of-type{margin:1px 0}#wpacu_meta_box_content ul.wpacu_asset_options.wpacu_exception_options_area li input[type=text]{margin-left:5px;border:1px solid #e7e7e7;background:#fff}#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{display:inline!important;margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{width:auto!important;margin-right:4px!important}#wpacu_wrap_assets img:not(.wpacu-ajax-loader){display:inline-block!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{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_wrap_assets ul.wpacu_asset_options.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:30px}#wpacu_wrap_assets ul.wpacu_asset_options.wpacu_exception_options_area li:last-of-type{margin:1px 0}.wpacu_verified{margin:0 0 10px!important}.wpacu_asset_row div.select{display:inline-block;width:auto}.wpacu_asset_row:first-child td{border-top:1px solid #cdcdcd}.wpacu_asset_row td{border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row.wpacu_notice_row td{position:relative;padding:5px;border-bottom:1px solid transparent}.wpacu_asset_row.wpacu_notice_row td div.wpacu-warning{width:auto;margin:5px;font-style:italic}.wpacu_asset_row:not(.wpacu_notice_row) td{padding:18px!important;position:relative}.wpacu_asset_row:not(.wpacu_notice_row) td[data-wpacu-row-status=contracted]{padding:18px 18px 8px!important}.wpacu_asset_row:not(.wpacu_notice_row) td.wpacu_selected,.wpacu_asset_row:not(.wpacu_notice_row) td:hover{-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:not(.wpacu_notice_row) td p{padding:0!important;margin-bottom:8px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row:not(.wpacu_notice_row) td label{width:auto!important;margin:0!important;cursor:pointer!important;display:inline-block!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row:not(.wpacu_notice_row) td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row:not(.wpacu_notice_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,.wpacu_asset_row .dashicons-wordpress-alt{color:red!important}.wpacu_asset_row .dashicons-wordpress-alt{font-size:17px;vertical-align:middle}label.wpacu_add_global{cursor:pointer!important}label.wpacu_input_load_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}tr.wpacu_bulk_change_row.wpacu_selected,tr.wpacu_global_rule_row.wpacu_selected,tr.wpacu_remove_preload_row.wpacu_selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}.nav-tab-wrapper.nav-assets-manager .nav-tab{font-size:13px;font-weight:500;padding:6px 10px}.nav-tab-wrapper.nav-assets-manager .nav-tab.for-pro{padding:6px 8px 6px 3px}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 10px 0 0;list-style:none;display:inline-block;line-height:normal}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{width:100%;font-weight:400}.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;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;line-height:normal!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn.wpacu_submitting,.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.wpacu_submitting{cursor:default!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=button].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=submit].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}.wpacu-restore-pos-btn{font-size:14px!important;line-height:normal!important;height:42px!important;padding:0 18px!important;margin-top:10px!important}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{text-shadow:none;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>img{max-width:20px;max-height:20px}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#00a7a7;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:.1s all ease;transition:.1s 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:#00a7a7 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-on-pages-btn{cursor:pointer;margin-left:-77px;width:130px}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip{bottom:-40px;left:120px;margin-left:-86px}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip:after{top:41px;left:-20px;border-color:transparent #c00 transparent transparent}.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:.1s all ease;transition:.1s 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 #008f9c}.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;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;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-dom-get-type-selections,.wpacu-radio-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections.wpacu-vertical,.wpacu-radio-selections.wpacu-vertical{display:block;margin-top:15px;margin-bottom:18px}#wpacu-dom-get-type-selections.wpacu-vertical li,.wpacu-radio-selections.wpacu-vertical li{float:none;margin-bottom:12px}#wpacu-dom-get-type-selections.wpacu-vertical li:last-child,.wpacu-radio-selections.wpacu-vertical li:last-child{margin-bottom:0}#wpacu-dom-get-type-selections li,.wpacu-radio-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child,.wpacu-radio-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child,.wpacu-radio-selections li:last-child{margin-right:0}.wpacu_combine_loaded_js_level_area{display:none;background:0 0;border-left:2px solid #008f9c;padding-top:8px;padding-bottom:8px;padding-right:10px;padding-left:10px;margin:20px 0 15px}.wpacu_combine_loaded_js_level_area.wpacu_active{display:block}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap li,.wpacu-wrap p,.wpacu-wrap td{font-weight:400}.wpacu-wrap small{width:auto;float:none;display:inline}.wpacu-wrap small code{font-size:inherit!important}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-tab-content{display:block;width:100%}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-area-title{color:#004567;padding:16px 15px;background:#f8f8f8;border-left:5px solid #004567b0;border-top:1px solid #e7e7e7;border-right:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:1.45em;font-weight:500}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area,.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .submit{margin:0}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .button{padding:11px 28px;height:38px;font-size:18px}.wpacu-wrap.wpacu-settings-show-all #wpacu-updating-settings{margin-left:224px;top:35px;left:3px}.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:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled:before{content:"";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:5px;right:2px;z-index:1000}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:4px;line-height:1.4}.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-assets-list-by-location-selected{background:0 0;border:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:8px;clear:both}.notice.notice-success+.wpacu-wrap.wpacu-settings-area{margin-top:20px}.wpacu-license-action-btn-area{margin-top:0;position:relative;display:inline-block}.wpacu-license-spinner{display:none;position:absolute;right:-30px;top:4px}.wpacu-license-spinner img{width:20px;height:20px}#wpacu-activation-issues-info{border-radius:10px;width:90%;margin-top:20px;font-size:14px;padding:6px 20px;background:#fff;border:1px solid #e7e7e7}#wpacu-activation-issues-info ol li{font-size:13px;margin-bottom:10px}#wpacu-mark-license-area-wrap{margin:15px 0}.wpacu-form-table.wpacu-license th{width:120px}.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}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox],.wpacu-form-table label input[type=checkbox]{height:20px;width:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:checked,.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:hover,.wpacu-form-table label input[type=checkbox]:checked,.wpacu-form-table label input[type=checkbox]:hover{border:1px solid green}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:disabled,.wpacu-form-table label input[type=checkbox]:disabled{border:none}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:disabled:checked,.wpacu-form-table label input[type=checkbox]:disabled:checked{opacity:.3}.wpacu-form-table .wpacu-fancy-checkbox input[type=checkbox]:checked:before,.wpacu-form-table label input[type=checkbox]:checked:before{color:#52af00;font:400 24px/1 dashicons}.wpacu-form-table .wpacu-fancy-radio input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;position:relative;height:20px;width:20px;margin:2px 0 0}.wpacu-form-table .wpacu-fancy-radio input[type=radio]:checked,.wpacu-form-table .wpacu-fancy-radio input[type=radio]:hover{border:1px solid green}.wpacu-form-table .wpacu-fancy-radio input[type=radio]:checked:before{margin:0;line-height:inherit;text-indent:inherit;content:"";position:absolute;top:4px;left:4px;width:10px;height:10px;border-radius:50%;background:#52af00;color:#52af00;font:400 24px/1 dashicons}#wpacu-settings-vertical-tab-wrap{display:table;width:100%}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text{margin:4px 0 0}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small{font-weight:lighter}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap{position:relative;padding-left:14px}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status{position:absolute;left:0;top:2px;height:10px;width:10px;border-radius:50%;display:inline-block;opacity:.75}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status.wpacu-on{background:#52af00}#wpacu-settings-vertical-tab-wrap .wpacu-tab-extra-text small span.wpacu-status-wrap span.wpacu-circle-status.wpacu-off{background:#ccc}#wpacu-settings-vertical-tab-wrap *{box-sizing:border-box}.wpacu-settings-tab{display:table-cell;width:20%;height:100%;vertical-align:top}.wpacu-settings-tab a{text-decoration:none;border-left:3px solid transparent;display:block;background-color:#f1f1f1;color:#004567;padding:17px 16px;width:100%;outline:0;text-align:left;cursor:pointer;font-size:14px;font-weight:600;border-bottom:1px solid #ccc}.wpacu-settings-tab a:first-child{border-top:1px solid transparent!important}.wpacu-settings-tab a:last-child{border-bottom:1px solid transparent!important}.wpacu-settings-tab a:hover{background-color:#fff;border-left:3px solid #004567;position:relative}.wpacu-settings-tab a.active{color:#004567;background-color:#fff;border-left:3px solid #004567;position:relative;border-bottom:1px solid #ccc}.wpacu-settings-tab a.active:after{content:"";position:absolute;height:100%;width:1px;top:0;right:-1px;background-color:#fff}.wpacu-settings-tab-content{background-color:#fff;display:none;padding:12px 18px;width:79%;border-left:none;height:100%;border-top-right-radius:10px;border-bottom-right-radius:10px}.wpacu-settings-tab-content h2{padding:0 0 15px;border-bottom:1px solid #e7e7e7}.wpacu-settings-tab-content.active{display:table-cell}#wpacu_minify_css_exceptions_area,#wpacu_minify_js_exceptions_area{margin:16px 0 0}@media only screen and (min-width:768px){body.asset-cleanup-pro_page_wpassetcleanup_assets_manager #wpacu-update-button-area,body.asset-cleanup_page_wpassetcleanup_assets_manager #wpacu-update-button-area{position:-webkit-sticky;position:sticky;bottom:0;padding:0;z-index:1000000;border-top:1px solid #cdcdcd;background:#f1f1f1}.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}}body[class*=version-5-3] #wpacu-update-button-area .button{height:auto;padding:4px 18px 6px;font-size:15px}body[class*=version-5-3] #wpacu-updating-settings{margin-left:178px}#wpacu-update-button-area{position:relative;margin-left:20%}#wpacu-update-button-area.no-left-margin{margin-left:0}#wpacu-update-button-area .submit{margin:0;padding:19px 0}#wpacu-update-button-area .button{padding:5px 18px;height:38px;font-size:15px}#wpacu-updating-settings{position:absolute;margin-left:183px;top:28px;display:none}#combine_loaded_js_info_area{position:relative}#combine_loaded_js_info_area.locked-for-pro:before{position:absolute;content:"";height:100%;width:100%;background:#fff;opacity:.5;z-index:10000}.google_fonts_load_types{clear:both;margin:20px 0 15px;display:flex}.google_fonts_load_types>div{text-align:left}.google_fonts_load_types>div input{float:left;margin:0 7px 20px 0!important}.wpacu-sub-tabs-wrap{min-width:320px;margin:0 auto}.wpacu-sub-tabs-wrap input.wpacu-nav-input{display:none}.wpacu-sub-tabs-wrap label.wpacu-nav-label{display:inline-block;margin:0 0 -1px;padding:15px 25px;font-weight:600;text-align:center;color:#74777b;border-left:1px solid transparent;border-right:1px solid transparent;border-top:3px solid transparent;border-bottom:0}.wpacu-sub-tabs-wrap label.wpacu-nav-label:hover{cursor:pointer}.wpacu-sub-tabs-wrap input.wpacu-nav-input:checked+label.wpacu-nav-label{color:#004567;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:3px solid #004567;border-bottom:1px solid #fff}.wpacu-sub-tabs-wrap section{display:none;padding:20px 0 0;border-top:1px solid #ccc}#wpacu-google-fonts-optimize-tab-item:checked~#wpacu-google-fonts-optimize-tab-item-area,#wpacu-google-fonts-remove-tab-item:checked~#wpacu-google-fonts-remove-tab-item-area{display:block}body.wp-admin .wpacu-handle-notes p{margin-top:0!important}body.wp-admin .wpacu-handle-notes p a{font-size:inherit}body.wp-admin .wpacu-handle-notes p a span.dashicons{font-size:19px;width:19px;height:19px;vertical-align:bottom;text-decoration:none}.wpacu-handle-notes{padding-top:5px;margin-bottom:-10px;border-top:1px solid #e7e7e7}.wpacu-handle-notes .wpacu-handle-notes-field{display:none}.wpacu-handle-notes .wpacu-handle-notes-field>textarea{font-size:85%;padding:6px;width:320px;max-width:100%}.wpacu-handle-notes p{margin:10px 0 0!important}.wpacu-handle-notes p a.wpacu-add-handle-note{text-decoration:none;font-size:80%;display:inline-block;color:inherit}.wpacu-handle-notes p a.wpacu-add-handle-note span.dashicons{font-size:18px;width:18px;height:18px}.wrap_bulk_unload_options{width:auto;display:block;clear:both}.wrap_bulk_unload_options .wpacu_asset_options_wrap{display:inline-block;float:left;margin:5px 10px 14px 0!important;padding:8px 10px 12px!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;min-width:52px;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:.15s;transition:.15s}.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:.15s;transition:.15s}.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:before{border-radius:50%}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch.wpacu_disabled{opacity:.3}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch.wpacu_disabled:before{content:"";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:1px;right:2px;z-index:1000}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.wpacu-wrap{width:98%}.wpacu-wrap tr.wpacu_regex_rule_row{opacity:.45}.wpacu-wrap tr.wpacu_regex_rule_row textarea{line-height:normal;min-height:20px;min-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu-wrap tr.wpacu_regex_rule_row textarea:focus{width:100%}.wpacu-wrap tr.wpacu_regex_rule_row.wpacu_enabled{opacity:1}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small{position:relative;display:inline-block;min-width:30px;width:30px;height:17px;margin-right:5px!important}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.15s;transition:.15s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider:before{position:absolute;content:"";height:13px;width:13px;left:2px;bottom:2px;background-color:#fff;-webkit-transition:.15s;transition:.15s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small input:checked+.wpacu_slider:before{-webkit-transform:translateX(13px);-ms-transform:translateX(13px);transform:translateX(13px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider.wpacu_round{border-radius:17px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch_small .wpacu_slider.wpacu_round:before{border-radius:50%}.editor-post-saved-state.is-wpacu-reloading{animation:edit-post__loading-fade-animation .5s infinite}body.wp-admin tr.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract .dashicons{width:19px;height:19px;font-size:19px}body.wp-admin tr.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before{right:20px;top:-2px}body.wp-admin tr.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after{left:20px;top:-2px}body.wp-admin tr.wpacu_asset_row.wpacu-loading{position:relative}body.wp-admin tr.wpacu_asset_row.wpacu-loading .wpacu-ajax-loader{display:block!important}body.wp-admin tr.wpacu_asset_row .wpacu-ajax-loader{display:none;width:58px;height:58px;position:absolute;bottom:0;right:0;opacity:.75}.wpacu_asset_row .wpacu-hardcoded-code-area{margin:0}.wpacu_asset_row .wpacu-hardcoded-code-area span.wpacu_inside_cond_comm{display:block;margin-bottom:8px}.wpacu_asset_row .wpacu-hardcoded-code-area .wpacu-has-view-more{max-height:300px;position:relative;overflow:hidden}.wpacu_asset_row .wpacu-hardcoded-code-area .wpacu-has-view-more p.wpacu-view-more-link-area{position:absolute;bottom:0;left:0;width:100%;margin:0;padding:20px 0 15px 15px;background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fbfbfb8c 100%);background:-webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fbfbfb8c 100%)}.wpacu_asset_row .wpacu-hardcoded-code-area pre{margin:0;padding:0 0 8px;white-space:pre-wrap;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu_asset_row .wpacu-hardcoded-code-area code{color:inherit;font-style:italic;margin-left:2px;word-break:break-word}.wpacu_asset_row[data-is-hardcoded-asset=true] .wpacu-source-row{margin-top:0}.wpacu_asset_row[data-is-hardcoded-asset=true] .wpacu_handle_row_expand_contract_area{right:18px;top:18px;background:inherit;z-index:100}.wpacu_asset_row>td{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all}.wpacu_asset_row>td[data-wpacu-row-status=expanded] .wpacu_file_size_area{margin:10px 0}.wpacu_asset_row>td[data-wpacu-row-status=expanded] .wpacu_hardcoded_part_if_contracted{display:none}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_hardcoded_part_if_contracted,.wpacu_asset_row>td[data-wpacu-row-status=expanded] .wpacu_hardcoded_part_if_expanded{display:block}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_file_size_area{margin:0}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_hardcoded_part_if_contracted code{width:100%}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_hardcoded_part_if_expanded{display:none}.wpacu_asset_row>td div.wpacu_dependency_notice_area{line-height:22px;margin:10px 0;text-align:left!important;font-weight:400!important}.wpacu_asset_row>td div.wpacu-source-row{margin-top:12px}.wpacu_asset_row>td .wpacu_hide_if_handle_row_contracted{display:inline-block}.wpacu_asset_row>td[data-wpacu-row-status=contracted]>div{float:left;margin-top:0;margin-right:20px;margin-bottom:10px}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_hide_if_handle_row_contracted{display:none}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract{transition:none}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:focus,.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:focus-visible,.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:visited{text-decoration:none;border:none}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after,.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before{opacity:0;-webkit-transition:-webkit-transform .3s,opacity .2s;-moz-transition:-moz-transform .3s,opacity .2s;transition:transform .3s,opacity .2s}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before{position:absolute;right:20px;top:-4px;content:"[";-webkit-transform:translateX(20px);-moz-transform:translateX(20px);transform:translateX(20px)}.wpacu_asset_row>td[data-wpacu-row-status=contracted] .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after{position:absolute;left:20px;top:-4px;content:"]";-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);transform:translateX(-20px)}.wpacu_asset_row>td[data-wpacu-row-status=contracted].wpacu_hovered .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:focus .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:hover .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract{transition:none}.wpacu_asset_row>td[data-wpacu-row-status=contracted].wpacu_hovered .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:hover,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:focus .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:hover,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:hover .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:hover{color:green}.wpacu_asset_row>td[data-wpacu-row-status=contracted].wpacu_hovered .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after,.wpacu_asset_row>td[data-wpacu-row-status=contracted].wpacu_hovered .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:focus .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:focus .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:hover .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:after,.wpacu_asset_row>td[data-wpacu-row-status=contracted]:hover .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:before{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}.wpacu_asset_row .wpacu_handle_row_expand_contract_area{position:absolute;right:20px;top:20px;float:none!important;margin:0!important}.wpacu_asset_row .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract{color:#000;text-decoration:none}.wpacu_asset_row .wpacu_handle_row_expand_contract_area a.wpacu_handle_row_expand_contract:hover{text-decoration:none}.wpacu_asset_row input{width:auto;height:auto;min-height:16px}.wpacu_asset_row .tip{background:inherit;border-left:4px solid #e7e7e7;margin:10px 0;padding:7px;font-style:italic;font-size:small;line-height:1.4}.wpacu_asset_row td{width:100%;text-align:left}.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 div.wpacu_handle{margin:0 0 -8px}.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{display:table;content:""}.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{clear:both;height:0}.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}body[class*=asset-cleanup-pro] a.wpacu-plugin-contracted-wrap-link{padding:16px 6px 16px 41px!important}body[class*=asset-cleanup-pro] .wpacu-area-open .wpacu-plugin-toggle-all{font-size:12px!important;width:calc(100% - 26px)!important}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all{top:5px}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all ul li{font-size:12px!important}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-area{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-width:0;margin:0;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-location-child-area[data-wpacu-plugin=oxygen] .icon-area{border-radius:50%}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all{display:inline-block;padding:0;font-size:13px;width:100%;width:calc(100% + 46px);min-width:250px;position:absolute;left:100%;left:calc(100% + 6px);margin:0;top:4px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul{display:inline-block;margin:0;list-style:none;padding-left:13px;padding-top:0}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul li{padding:0;margin:0;line-height:normal;font-size:14px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all ul li:first-child{font-style:italic;margin-bottom:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;position:relative;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title: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-plugin-assets-wrap{padding:0 0 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open.wpacu-plugin-assets-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all{display:inline-block;padding:7px 12px 8px;font-size:14px;width:100%;text-align:left;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all-wrap .wpacu-plugin-toggle-all+.wpacu-plugin-toggle-all{padding:2px 12px 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link{color:inherit;text-decoration:none;font-weight:inherit;font-style:inherit;font-size:105%;line-height:initial;height:auto;margin:14px 0 0;padding:13px 6px 14px 39px;position:relative;display:block}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:after{position:absolute;font-size:18px;font-family:Dashicons;right:12px;top:14px;content:""}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open:after{content:""}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover{border:1px solid #878787;background:#f9f9f9}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover.wpacu-link-closed{box-shadow:3px 3px 2px #ddd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open{border-top:1px solid #cdcdcd;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:none}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed.wpacu-last-wrap-link{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default{top:10px;left:10px;width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area{width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area:before{font-size:22px;line-height:22px;top:4px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title: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 a.wpacu-plugin-contracted-wrap-link.wpacu-area-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-open{padding:0;max-height:100%}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-closed{padding:0;overflow:hidden;max-height:0}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{margin-top:0;margin-bottom:-1px;padding:14px 10px 16px 12px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title.wpacu-theme-has-icon{padding:18px 10px 16px 58px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:-1px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-location-child-area-first{margin-top:2px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-area-expanded .wpacu-area-title{display:inline-block;z-index:1;padding:17px 10px 16px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;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}.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:"";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-by-location .icon-theme{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-wp_core{border:1px solid #c00}.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:""}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:""}.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:not(.wpacu-assets-table-list-wrap){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;width:14px;height: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:""}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:""}.wpacu-assets-inline-code-collapsible-content{padding:0 8px 2px 0;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_asset_row p div.select{display:inline-block}.wpacu-wrap-choose-position{display:inline}.wpacu-wrap-choose-position>div{display:inline-block}.wpacu-wrap-choose-position select{width:auto;font-size:inherit;display:inline;margin-left:6px;margin-right:4px}.wpacu-wrap-choose-position>.select>.select{display:inline}.wpacu-wrap-choose-position>.select>.select select{padding-right:30px}.wpacu-wrap-choose-position>.select>.select:after{right:15px;top:-4px}.wpacu_handle_unload_regex_input_wrap,.wpacu_load_regex_input_wrap{display:block;width:100%}.wpacu_handle_unload_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea,.wpacu_load_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea{line-height:normal;min-height:20px;min-width:300px;max-width:400px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.wpacu_handle_unload_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea:focus,.wpacu_load_regex_input_wrap .wpacu_regex_rule_area .wpacu_regex_rule_textarea:focus{width:100%}body.logged-in:not(.wp-admin) .wpacu-view-more-code{box-shadow:inset 0 1px 0 0 #fff;background:linear-gradient(to bottom,#f9f9f9 5%,#e9e9e9 100%);background-color:#f9f9f9;border-radius:6px;border:1px solid #dcdcdc;display:inline-block;cursor:pointer;color:#666;font-size:inherit;font-weight:700;padding:6px 24px;text-decoration:none;text-shadow:0 1px 0 #fff}body.logged-in:not(.wp-admin) .wpacu-view-more-code:hover{background:linear-gradient(to bottom,#e9e9e9 5%,#f9f9f9 100%);background-color:#e9e9e9}body.logged-in:not(.wp-admin) .wpacu-view-more-code:active{position:relative;top:1px}.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}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td{border-top:1px solid #ccd0d4;border-bottom:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td:first-of-type{border-left:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr:not(.wpacu-top):hover td:last-of-type{border-right:1px solid #ccd0d4}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td{font-size:14px;border-top:1px solid transparent;border-bottom:1px solid transparent}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td:first-of-type{border-left:1px solid transparent}body.wp-admin[class*=asset-cleanup] .wpacu-overview-wrap .wpacu-overview-list-table tr td:last-of-type{border-right:1px solid transparent}body.wp-admin[class*=asset-cleanup] table.wp-list-table:not(.wpacu-overview-list-table) tr:not(:first-of-type):not(.wpacu_selected):hover,body.wp-admin[class*=asset-cleanup] table.wp-list-table:not(.wpacu-overview-list-table).wpacu-list-table tr:not(.wpacu_selected):hover{-moz-box-shadow:inset 0 0 2px 1px #b3b3b3;-webkit-box-shadow:inset 0 0 2px 1px #B3B3B3;box-shadow:inset 0 0 2px 1px #B3B3B3}.wp-list-table .wpacu_remove_global_attr_row.wpacu_selected,.wp-list-table .wpacu_restore_position_row.wpacu_selected{background:#e7e7e7!important}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}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label.wpacu_plugin_unload_rule_input_checked,#wpacu-warning-read span.dashicons-warning,#wpacu-warning-read span.dashicons-wordpress-alt{color:#c00}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 (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}select#wpacu-reset-drop-down{max-width:100%}#wpacu-license-data-remove-area{display:none;margin:14px 0 12px}#wpacu-license-data-remove-area.wpacu-visible{display:block}#wpacu-cache-assets-remove-area{display:none;margin:12px 0 25px}#wpacu-cache-assets-remove-area.wpacu-visible{display:block}#wpacu-cached-assets-removed-msg,span#wpacu-license-data-removed-msg{display:block;padding-left:26px}#wpacu-warning-read{display:none;margin:10px 0}#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-tools-area .wpacu-export-import-area{padding:10px}.wpacu-tools-area .wpacu-export-import-area form>p:first-of-type{margin-top:0}.wpacu-tools-area .wpacu-export-import-area form>p:last-of-type{margin-bottom:0}.wpacu-tools-area .wpacu-export-import-area:hover{background:rgba(40,44,42,.05);box-shadow:inset 0 0 10px rgba(160,165,170,.15)}.wpacu-tools-area .wpacu-export-import-area+hr{display:block;height:1px;border:0;border-top:1px solid #cdcdcd;margin:10px 0;padding:0}#wpacu-import-form button.wpacu-importing img.wpacu-spinner{display:inline-block}#wpacu-import-form button img.wpacu-spinner{display:none;margin:0 0 0 5px;height:16px;width:16px;vertical-align:middle}.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}.wpacu-lite-vs-pro-wrap ul{display:flex;top:0;z-index:10;padding-bottom:14px}.wpacu-lite-vs-pro-wrap li{list-style:none;flex:1}.wpacu-lite-vs-pro-wrap li:last-child{border-right:1px solid #DDD}.wpacu-lite-vs-pro-wrap button{width:100%;border:1px solid #DDD;border-right:0;border-top:0;padding:10px;background:#FFF;font-size:14px;font-weight:700;height:60px;color:#999}.wpacu-lite-vs-pro-wrap li.active button{background:#F5F5F5;color:#000}.wpacu-lite-vs-pro-wrap table{border-collapse:collapse;table-layout:fixed;width:100%}.wpacu-lite-vs-pro-wrap th{background:inherit}.wpacu-lite-vs-pro-wrap tr.first{background:inherit;font-size:18px}.wpacu-lite-vs-pro-wrap tr.first .bg-lite{border-top:4px solid #6d6e70;background:#fff;color:#6d6e70}.wpacu-lite-vs-pro-wrap tr.first .bg-pro{border-top:4px solid green;background:#fff;color:green}.wpacu-lite-vs-pro-wrap tr:not(.first){background:#fff}.wpacu-lite-vs-pro-wrap tr:not(:last-child):hover{background:#f8f8f8}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{height:53px;line-height:22px;border:1px solid #DDD;padding:10px 16px;empty-cells:show;text-align:left}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{font-size:14px}}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{text-align:center;display:none}.wpacu-lite-vs-pro-wrap td.default{display:table-cell}.wpacu-lite-vs-pro-wrap .txt-l{font-size:28px;font-weight:700}.wpacu-lite-vs-pro-wrap .txt-top{position:relative;top:-9px;left:-2px}.wpacu-lite-vs-pro-wrap svg{width:18px;height:18px}.wpacu-lite-vs-pro-wrap svg path{fill:green}.wpacu-lite-vs-pro-wrap .tick{color:#2CA01C}.wpacu-lite-vs-pro-wrap .tick img{fill:#2CA01C}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .txt-l{font-size:20px}.wpacu-lite-vs-pro-wrap .tick{font-size:15px}}.wpacu-lite-vs-pro-wrap .na{font-size:18px;opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.wpacu-lite-vs-pro-wrap .hide{border:0;background:0 0}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{display:table-cell!important;width:auto}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:130px}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .na{font-size:15px}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:42px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap td .button{font-size:16px!important}}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td .button{font-size:14px!important;padding:0 20px!important}.wpacu-lite-vs-pro-wrap td .button.button-primary{margin-top:6px;margin-bottom:14px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap{margin-bottom:40px;clear:both}}.wpacu-video-areas>div{padding:20px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-video-areas>div:nth-child(odd){background:#fff}.wpacu-video-areas>div:nth-child(even){background:inherit}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 15px;display:flex}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right{padding:0 20px 0 25px}}@media only screen and (min-width:992px) and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 40px}}.wpacu-video-areas .wpacu-video-area-wrapper ol{font-size:14px}.wpacu-video-areas .wpacu-video-area-wrapper ul{font-size:14px;list-style:disc;margin-left:22px}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:first-child{margin-top:0}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:last-child{margin-bottom:0}}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{width:560px;height:315px}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}}#wpassetcleanup_asset_list.postbox h2{padding-left:52px!important;position:relative}#wpassetcleanup_asset_list.postbox h2:before{content:"";position:absolute;background-image:url(images/wpacu-logo-transparent-bg-v1.png);background-size:cover;top:6px;left:13px;width:33px;height:26px;opacity:.8;-webkit-filter:grayscale(100%);filter:grayscale(100%)}body.wp-admin .wpacu-modal{display:none;position:fixed;z-index:1000000;padding-top:15%;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}body.wp-admin .wpacu-modal pre{white-space:normal}body.wp-admin .wpacu-modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%;max-width:600px;border-radius:10px}body.wp-admin .wpacu-modal-content pre{white-space:normal}body.wp-admin .wpacu-close{color:#aaa;float:right;font-size:28px;font-weight:700}body.wp-admin .wpacu-close:focus,body.wp-admin .wpacu-close:hover{color:#000;text-decoration:none;cursor:pointer}.wpacu-bulk-changes-tabs{display:table;position:relative;overflow:hidden;margin:0;width:100%}.wpacu-bulk-changes-tabs li{border-top:1px solid rgba(40,44,42,.1);border-left:1px solid rgba(40,44,42,.1);border-bottom:1px solid rgba(40,44,42,.1);float:left;line-height:38px;padding:0;position:relative;margin-bottom:12px}.wpacu-bulk-changes-tabs li:last-child{border-right:1px solid rgba(40,44,42,.1)}.wpacu-bulk-changes-tabs a{position:relative;background:rgba(40,44,42,.05);color:#004567;font-size:14px;font-weight:500;display:block;letter-spacing:0;outline:0;padding:6px 20px;text-decoration:none;border-top:3px solid transparent}.wpacu-bulk-changes-tabs a:hover{background:#f1f1f1;border-top:3px solid transparent}.wpacu-bulk-changes-tabs .current a{background:#fff;border-top:3px solid #004567}.wpacu-bulk-changes-tabs .current a:hover{background:#fff}.wpacu-bulk-changes-tabs .current a:after,.wpacu-bulk-changes-tabs .current a:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.wpacu-bulk-changes-tabs .current a:after{border-color:rgba(136,183,213,0);border-top-color:#fff;border-width:12px;margin-left:-12px}.wpacu-bulk-changes-tabs .current a:before{border-color:rgba(194,225,245,0);border-top-color:rgba(40,44,42,.1);border-width:13px;margin-left:-13px}img.wpacu-emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#wpacu-plugins-load-manager-wrap table td{border-bottom:1px solid #e7e7e7}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_icon{padding:14px 10px}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_details{vertical-align:middle;padding:10px 0 10px 8px}#wpacu-plugins-load-manager-wrap table td.wpacu_plugin_details .wpacu_plugin_title{font-weight:600}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap{flex-grow:1;margin:0 16px 0 0!important;padding:8px 10px 6px 0!important}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules{margin:0;vertical-align:middle}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label{vertical-align:top}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label input[type=radio].wpacu_plugin_load_it:before{background-color:green}#wpacu-plugins-load-manager-wrap .wrap_plugin_unload_rules_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label input[type=radio].wpacu_plugin_unload_rule_input:before{background-color:#c00}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options{padding-top:5px;border-top:1px solid #e7e7e7;width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap{flex-grow:1;margin:0 16px 0 0!important;padding:6px 10px 6px 0!important}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules{margin:0;vertical-align:middle}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules label{vertical-align:top}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules.wpacu_exception_options_area li{display:inline-block;float:left;margin:1px 25px 1px 0;line-height:20px}#wpacu-plugins-load-manager-wrap .wrap_plugin_load_exception_options .wpacu_plugin_rules_wrap ul.wpacu_plugin_rules.wpacu_exception_options_area li:last-of-type{margin:1px 0}.wpacu-list-table.plugins{width:98%;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#wpacu-plugins-load-manager-wrap .help_link{text-decoration:none;color:inherit;vertical-align:middle}#wpacu-plugins-load-manager-wrap .help_link.unload_it_regex{vertical-align:top}#wpacu-plugins-load-manager-wrap .wpacu_plugin_details .wpacu_plugin_path{font-style:italic;color:grey}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>img{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>div{background:#efefef;border:#cdcdcd;border-radius:3px;width:40px;height:40px;vertical-align:middle;position:relative;text-align:center}#wpacu-plugins-load-manager-wrap .wpacu_plugin_icon>div>span{font-size:30px;color:#b3b3b3;top:50%;vertical-align:middle;left:50%;transform:translate(-50%,-50%);width:30px;height:30px;position:absolute}#wpacu-plugins-load-manager-wrap .wpacu_exception_options_area textarea,#wpacu-plugins-load-manager-wrap textarea:focus{width:100%}#wpacu-plugins-load-manager-wrap .wpacu_plugin_unload_regex_input_wrap{display:block}#wpacu-plugins-load-manager-wrap .wpacu_plugin_unload_regex_input_wrap textarea{margin-top:6px;min-width:400px}#wpacu-plugins-load-manager-wrap textarea{line-height:normal;min-height:20px;min-width:300px;display:inline-block;padding:2px 4px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#wpacu-plugins-load-manager-wrap textarea.wpacu_disabled{background:#fbfafa!important;color:inherit}
classes/CleanUp.php CHANGED
@@ -496,6 +496,13 @@ class CleanUp
496
  // No Autoptimize
497
  add_filter('autoptimize_filter_noptimize', '__return_false');
498
 
 
 
 
 
 
 
 
499
  // No Fast Velocity Minify
500
  add_action('plugins_loaded', static function() {
501
  remove_action( 'setup_theme', 'fastvelocity_process_frontend' );
496
  // No Autoptimize
497
  add_filter('autoptimize_filter_noptimize', '__return_false');
498
 
499
+ // Use less resources during CSS/JS fetching by preventing other plugins to interfere with the HTML output as it's completely unnecessary in this instance
500
+ if (Misc::isPluginActive('autoptimize/autoptimize.php')) {
501
+ foreach (array('autoptimize_html', 'autoptimize_css', 'autoptimize_js', 'autoptimize_cdn_url', 'autoptimize_optimize_logged') as $aoOption) {
502
+ add_filter('pre_option_'.$aoOption, static function($value) { return ''; });
503
+ }
504
+ }
505
+
506
  // No Fast Velocity Minify
507
  add_action('plugins_loaded', static function() {
508
  remove_action( 'setup_theme', 'fastvelocity_process_frontend' );
classes/Debug.php CHANGED
@@ -178,7 +178,9 @@ class Debug
178
  <li>From CSS file to Inline: {wpacu_alter_html_source_for_inline_css_exec_time}</li>
179
  <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_css_exec_time}</li>
180
  <li>Preloads: {wpacu_alter_html_source_for_preload_css_exec_time}</li>
181
- <li>Dynamic Loaded CSS (if any): {wpacu_alter_html_source_for_dynamic_loaded_css_exec_time}</li>
 
 
182
  <li>Combine: {wpacu_alter_html_source_for_combine_css_exec_time}</li>
183
  <li>Minify Inline Tags: {wpacu_alter_html_source_for_minify_inline_style_tags_exec_time}</li>
184
  <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_css_exec_time}</li>
@@ -189,7 +191,9 @@ class Debug
189
  <ul>
190
  <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_js_exec_time}</li>
191
  <li>Preloads: {wpacu_alter_html_source_for_preload_js_exec_time}</li>
192
- <li>Dynamic Loaded JS (if any): {wpacu_alter_html_source_for_dynamic_loaded_js_exec_time}</li>
 
 
193
  <li>Combine: {wpacu_alter_html_source_for_combine_js_exec_time}</li>
194
  <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_js_exec_time}</li>
195
  <li>Move any inline wih jQuery code after jQuery library: {wpacu_alter_html_source_move_inline_jquery_after_src_tag_exec_time}</li>
178
  <li>From CSS file to Inline: {wpacu_alter_html_source_for_inline_css_exec_time}</li>
179
  <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_css_exec_time}</li>
180
  <li>Preloads: {wpacu_alter_html_source_for_preload_css_exec_time}</li>
181
+ <!-- removeIf(development) -->
182
+ <!--<li>Dynamic Loaded CSS (if any): {wpacu_alter_html_source_for_dynamic_loaded_css_exec_time}</li>-->
183
+ <!-- endRemoveIf(development) -->
184
  <li>Combine: {wpacu_alter_html_source_for_combine_css_exec_time}</li>
185
  <li>Minify Inline Tags: {wpacu_alter_html_source_for_minify_inline_style_tags_exec_time}</li>
186
  <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_css_exec_time}</li>
191
  <ul>
192
  <li>Update Original to Optimized: {wpacu_alter_html_source_original_to_optimized_js_exec_time}</li>
193
  <li>Preloads: {wpacu_alter_html_source_for_preload_js_exec_time}</li>
194
+ <!-- removeIf(development) -->
195
+ <!--<li>Dynamic Loaded JS (if any): {wpacu_alter_html_source_for_dynamic_loaded_js_exec_time}</li>-->
196
+ <!-- endRemoveIf(development) -->
197
  <li>Combine: {wpacu_alter_html_source_for_combine_js_exec_time}</li>
198
  <li>Unload (ignore dependencies): {wpacu_alter_html_source_unload_ignore_deps_js_exec_time}</li>
199
  <li>Move any inline wih jQuery code after jQuery library: {wpacu_alter_html_source_move_inline_jquery_after_src_tag_exec_time}</li>
classes/HardcodedAssets.php CHANGED
@@ -228,71 +228,28 @@ class HardcodedAssets
228
  preg_match_all( '@<script[^>]*?>.*?</script>@si', $htmlSourceAlt, $matchesScriptTags, PREG_SET_ORDER );
229
 
230
  if ( isset( wp_scripts()->done ) && ! empty( wp_scripts()->done ) ) {
231
- foreach ( wp_scripts()->done as $assetHandle ) {
232
- // Go through the STYLE list
233
- foreach ( $matchesScriptTags as $matchedTagIndex => $matchedTag ) {
234
- if ( isset( $matchedTag[0] ) ) {
235
- $matchedTagOutput = trim( $matchedTag[0] );
236
-
237
- if ( strpos( $matchedTagOutput, 'window._wpemojiSettings' ) !== false
238
- && strpos( $matchedTagOutput, 'twemoji' ) !== false ) {
239
- unset( $matchesScriptTags[ $matchedTagIndex ] );
240
- continue;
241
- }
242
-
243
- // Check the type and only allow SCRIPT tags with type='text/javascript' or no type at all (it default to 'text/javascript')
244
- $matchedTagInner = strip_tags( $matchedTagOutput );
245
- $matchedTagOnlyTags = str_replace( $matchedTagInner, '', $matchedTagOutput );
246
- preg_match_all( '#type=(["\'])' . '(.*)' . '(["\'])#Usmi', $matchedTagOnlyTags,
247
- $outputMatches );
248
- $scriptType = isset( $outputMatches[2][0] ) ? trim( $outputMatches[2][0],
249
- '"\'' ) : 'text/javascript';
250
-
251
- if ( strpos( $scriptType, 'text/javascript' ) === false ) {
252
- unset( $matchesScriptTags[ $matchedTagIndex ] );
253
- continue;
254
- }
255
-
256
- if ( strpos( $matchedTagOutput, 'data-wpacu-script-handle=' ) !== false ) {
257
- unset( $matchesScriptTags[ $matchedTagIndex ] ); // remove the SCRIPT with src that was enqueued properly and keep the hardcoded ones
258
- continue;
259
- }
260
-
261
- if ( (strpos( $matchedTagOutput, 'data-wpacu-own-inline-script=' ) !== false) ||
262
- (strpos( $matchedTagOutput, 'data-wpacu-inline-js-file=' ) !== false) ) {
263
- unset( $matchesScriptTags[ $matchedTagIndex ] ); // remove plugin's own SCRIPT tags as they are not relevant in this context
264
- continue;
265
- }
266
 
267
- if ( strpos( $matchedTagOutput, 'wpacu-preload-async-css-fallback' ) !== false ) {
268
- unset( $matchesScriptTags[ $matchedTagIndex ] ); // remove plugin's own SCRIPT tags as they are not relevant in this context
 
 
 
 
 
269
  continue;
270
  }
271
 
272
- // Now, go through the list of inline SCRIPTs associated with an enqueued SCRIPT (with "src" attribute)
273
- // And make sure they do not show to the hardcoded list, since they are related to the handle and they are stripped when the handle is dequeued
274
- $anyInlineAssocWithJsHandle = OptimizeJs::getInlineAssociatedWithScriptHandle( $assetHandle, wp_scripts()->registered, 'handle' );
275
- if ( ! empty( $anyInlineAssocWithJsHandle ) ) {
276
- foreach ( $anyInlineAssocWithJsHandle as $jsInlineTagContent ) {
277
- if ( trim( $jsInlineTagContent ) === '' ) {
278
- continue;
279
- }
280
-
281
- $jsInlineTagContentMin = MinifyJs::applyMinification( $jsInlineTagContent );
282
- $matchedTagOutputMin = MinifyJs::applyMinification( $matchedTagOutput );
283
-
284
- if ( strpos( $matchedTagOutputMin, $jsInlineTagContentMin ) !== false ) {
285
- unset( $matchesScriptTags[ $matchedTagIndex ] );
286
- }
287
- }
288
- }
289
- }
290
  }
291
  }
292
- }
293
 
 
 
 
294
 
295
- // Go through the remaining hardcoded (SCRIPT) ones (if any)
296
  if ( isset( $matchesScriptTags ) && ! empty( $matchesScriptTags ) ) {
297
  // Only the hashes are set
298
  // For instance, 'd1eae32c4e99d24573042dfbb71f5258a86e2a8e' is the hash for the following script:
@@ -323,19 +280,83 @@ class HardcodedAssets
323
 
324
  foreach ( $matchesScriptTags as $matchedTag ) {
325
  if ( isset( $matchedTag[0] ) && $matchedTag[0] && strpos( $matchedTag[0], '<script' ) === 0 ) {
 
 
326
  /*
327
  * Strip certain SCRIPT tags irrelevant for the list (e.g. related to WordPress Customiser, Admin Bar, etc.)
328
  */
329
- if ( in_array( sha1( $matchedTag[0] ), $stripsSpecificScriptsHashes ) ) {
330
  continue;
331
  }
332
 
333
  foreach ( $stripsSpecificScriptsContaining as $jsContentTargeted ) {
334
- if ( strpos( $matchedTag[0], $jsContentTargeted ) !== false ) {
335
  continue;
336
  }
337
  }
338
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  $hardCodedAssets['script_src_and_inline_tags'][] = trim( $matchedTag[0] );
340
  }
341
  }
228
  preg_match_all( '@<script[^>]*?>.*?</script>@si', $htmlSourceAlt, $matchesScriptTags, PREG_SET_ORDER );
229
 
230
  if ( isset( wp_scripts()->done ) && ! empty( wp_scripts()->done ) ) {
231
+ $allInlineAssocWithJsHandle = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
 
233
+ foreach ( wp_scripts()->done as $assetHandle ) {
234
+ // Now, go through the list of inline SCRIPTs associated with an enqueued SCRIPT (with "src" attribute)
235
+ // And make sure they do not show to the hardcoded list, since they are related to the handle and they are stripped when the handle is dequeued
236
+ $anyInlineAssocWithJsHandle = OptimizeJs::getInlineAssociatedWithScriptHandle( $assetHandle, wp_scripts()->registered, 'handle' );
237
+ if ( ! empty( $anyInlineAssocWithJsHandle ) ) {
238
+ foreach ( $anyInlineAssocWithJsHandle as $jsInlineTagContent ) {
239
+ if ( trim( $jsInlineTagContent ) === '' ) {
240
  continue;
241
  }
242
 
243
+ $allInlineAssocWithJsHandle[] = trim($jsInlineTagContent);
244
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  }
246
  }
 
247
 
248
+ $allInlineAssocWithJsHandle = array_unique($allInlineAssocWithJsHandle);
249
+
250
+ }
251
 
252
+ // Go through the hardcoded SCRIPT tags
253
  if ( isset( $matchesScriptTags ) && ! empty( $matchesScriptTags ) ) {
254
  // Only the hashes are set
255
  // For instance, 'd1eae32c4e99d24573042dfbb71f5258a86e2a8e' is the hash for the following script:
280
 
281
  foreach ( $matchesScriptTags as $matchedTag ) {
282
  if ( isset( $matchedTag[0] ) && $matchedTag[0] && strpos( $matchedTag[0], '<script' ) === 0 ) {
283
+ $matchedTagOutput = trim( $matchedTag[0] );
284
+
285
  /*
286
  * Strip certain SCRIPT tags irrelevant for the list (e.g. related to WordPress Customiser, Admin Bar, etc.)
287
  */
288
+ if ( in_array( sha1( $matchedTagOutput ), $stripsSpecificScriptsHashes ) ) {
289
  continue;
290
  }
291
 
292
  foreach ( $stripsSpecificScriptsContaining as $jsContentTargeted ) {
293
+ if ( strpos( $matchedTagOutput, $jsContentTargeted ) !== false ) {
294
  continue;
295
  }
296
  }
297
 
298
+ if ( strpos( $matchedTagOutput, 'window._wpemojiSettings' ) !== false
299
+ && strpos( $matchedTagOutput, 'twemoji' ) !== false ) {
300
+ continue;
301
+ }
302
+
303
+ // Check the type and only allow SCRIPT tags with type='text/javascript' or no type at all (it default to 'text/javascript')
304
+ $matchedTagInner = strip_tags( $matchedTagOutput );
305
+ $matchedTagOnlyTags = str_replace( $matchedTagInner, '', $matchedTagOutput );
306
+ preg_match_all( '#type=(["\'])' . '(.*)' . '(["\'])#Usmi', $matchedTagOnlyTags,
307
+ $outputMatches );
308
+ $scriptType = isset( $outputMatches[2][0] ) ? trim( $outputMatches[2][0],
309
+ '"\'' ) : 'text/javascript';
310
+
311
+ if ( strpos( $scriptType, 'text/javascript' ) === false ) {
312
+ continue;
313
+ }
314
+
315
+ if ( strpos( $matchedTagOutput, 'data-wpacu-script-handle=' ) !== false ) {
316
+ // skip the SCRIPT with src that was enqueued properly and keep the hardcoded ones
317
+ continue;
318
+ }
319
+
320
+ if ( (strpos( $matchedTagOutput, 'data-wpacu-own-inline-script=' ) !== false) ||
321
+ (strpos( $matchedTagOutput, 'data-wpacu-inline-js-file=' ) !== false) ) {
322
+ // skip plugin's own SCRIPT tags as they are not relevant in this context
323
+ continue;
324
+ }
325
+
326
+ if ( strpos( $matchedTagOutput, 'wpacu-preload-async-css-fallback' ) !== false ) {
327
+ // skip plugin's own SCRIPT tags as they are not relevant in this context
328
+ continue;
329
+ }
330
+
331
+ $hasSrc = false;
332
+
333
+ if (strpos($matchedTagOnlyTags, ' src=') !== false) {
334
+ $hasSrc = true;
335
+ }
336
+
337
+ if ( ! $hasSrc && ! empty( $allInlineAssocWithJsHandle ) ) {
338
+ preg_match_all("'<script[^>]*?>(.*?)</script>'si", $matchedTagOutput, $matchesFromTagOutput);
339
+ $matchedTagOutputInner = isset($matchesFromTagOutput[1][0]) && trim($matchesFromTagOutput[1][0])
340
+ ? trim($matchesFromTagOutput[1][0]) : false;
341
+
342
+ $matchedTagOutputInnerCleaner = $matchedTagOutputInner;
343
+
344
+ $stripStrStart = '/* <![CDATA[ */';
345
+ $stripStrEnd = '/* ]]> */';
346
+
347
+ if (strpos($matchedTagOutputInnerCleaner, $stripStrStart) === 0
348
+ && Misc::endsWith($matchedTagOutputInnerCleaner, '/* ]]> */')) {
349
+ $matchedTagOutputInnerCleaner = substr($matchedTagOutputInnerCleaner, strlen($stripStrStart));
350
+ $matchedTagOutputInnerCleaner = substr($matchedTagOutputInnerCleaner, 0, -strlen($stripStrEnd));
351
+ $matchedTagOutputInnerCleaner = trim($matchedTagOutputInnerCleaner);
352
+ }
353
+
354
+ if (in_array($matchedTagOutputInnerCleaner, $allInlineAssocWithJsHandle)) {
355
+ continue;
356
+ }
357
+
358
+ }
359
+
360
  $hardCodedAssets['script_src_and_inline_tags'][] = trim( $matchedTag[0] );
361
  }
362
  }
classes/ImportExport.php CHANGED
@@ -22,8 +22,13 @@ class ImportExport
22
  // e.g. jQuery Migrate, Comment Reply
23
  $globalUnloadList = Main::instance()->getGlobalUnload();
24
 
25
- $settingsArray['disable_jquery_migrate'] = in_array('jquery-migrate', $globalUnloadList['scripts']);
26
- $settingsArray['disable_comment_reply'] = in_array('comment-reply', $globalUnloadList['scripts']);
 
 
 
 
 
27
 
28
  return json_encode($settingsArray);
29
  }
@@ -177,10 +182,26 @@ SQL;
177
  $wpacuSettings = new Settings();
178
 
179
  // "Site-wide Common Unloads" - apply settings
180
- $disableJQueryMigrate = isset($valuesArray['settings']['disable_jquery_migrate']) ? $valuesArray['settings']['disable_jquery_migrate'] : false;
181
- $disableCommentReply = isset($valuesArray['settings']['disable_comment_reply']) ? $valuesArray['settings']['disable_comment_reply'] : false;
182
 
183
- $wpacuSettings->updateSiteWideRuleForCommonAssets(array('jquery_migrate' => $disableJQueryMigrate, 'comment_reply' => $disableCommentReply));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
  Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', json_encode($valuesArray['settings']));
186
  $importedList[] = 'settings';
22
  // e.g. jQuery Migrate, Comment Reply
23
  $globalUnloadList = Main::instance()->getGlobalUnload();
24
 
25
+ // CSS
26
+ $settingsArray['disable_dashicons_for_guests'] = in_array( 'dashicons', $globalUnloadList['styles'] );
27
+ $settingsArray['disable_wp_block_library'] = in_array( 'wp-block-library', $globalUnloadList['styles'] );
28
+
29
+ // JS
30
+ $settingsArray['disable_jquery_migrate'] = in_array( 'jquery-migrate', $globalUnloadList['scripts'] );
31
+ $settingsArray['disable_comment_reply'] = in_array( 'comment-reply', $globalUnloadList['scripts'] );
32
 
33
  return json_encode($settingsArray);
34
  }
182
  $wpacuSettings = new Settings();
183
 
184
  // "Site-wide Common Unloads" - apply settings
 
 
185
 
186
+ // JS
187
+ $disableJQueryMigrate = isset( $valuesArray['settings']['disable_jquery_migrate'] ) ? $valuesArray['settings']['disable_jquery_migrate'] : false;
188
+ $disableCommentReply = isset( $valuesArray['settings']['disable_comment_reply'] ) ? $valuesArray['settings']['disable_comment_reply'] : false;
189
+
190
+ // CSS
191
+ $disableGutenbergCssBlockLibrary = isset( $valuesArray['settings']['disable_wp_block_library'] ) ? $valuesArray['settings']['disable_wp_block_library'] : false;
192
+ $disableDashiconsForGuests = isset( $valuesArray['settings']['disable_dashicons_for_guests'] ) ? $valuesArray['settings']['disable_dashicons_for_guests'] : false;
193
+
194
+ $wpacuSettings->updateSiteWideRuleForCommonAssets(
195
+ array(
196
+ // JS
197
+ 'jquery_migrate' => $disableJQueryMigrate,
198
+ 'comment_reply' => $disableCommentReply,
199
+
200
+ // CSS
201
+ 'wp_block_library' => $disableGutenbergCssBlockLibrary,
202
+ 'dashicons' => $disableDashiconsForGuests,
203
+ )
204
+ );
205
 
206
  Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', json_encode($valuesArray['settings']));
207
  $importedList[] = 'settings';
classes/Main.php CHANGED
@@ -279,18 +279,15 @@ class Main
279
  add_action('wp_print_styles', array($this, 'filterStyles'), 9); // priority should be below 10
280
  }
281
 
282
- // Unload Styles - HEAD
283
- add_action( 'wp_print_styles', array( $this, 'filterStyles' ), 100000 );
284
  $this->filterStylesSpecialCases(); // e.g. CSS enqueued in a different way via Oxygen Builder
285
 
286
- // Unload Scripts - HEAD
287
- add_action( 'wp_print_scripts', array( $this, 'filterScripts' ), 100000 );
288
 
289
- // Unload Scripts & Styles - FOOTER
290
  // Needs to be triggered very soon as some old plugins/themes use wp_footer() to enqueue scripts
291
  // Sometimes styles are loaded in the BODY section of the page
292
- add_action( 'wp_print_footer_scripts', array( $this, 'filterScripts' ), 1 );
293
- add_action( 'wp_print_footer_scripts', array( $this, 'filterStyles' ), 1 );
294
 
295
  // Preloads
296
  add_action('wp_head', static function() {
@@ -298,10 +295,26 @@ class Main
298
  return;
299
  }
300
 
301
- echo Preloads::DEL_STYLES_PRELOADS . Preloads::DEL_SCRIPTS_PRELOADS;
 
 
 
 
 
 
302
  }, 1);
303
 
304
  add_filter('style_loader_tag', static function($styleTag, $tagHandle) {
 
 
 
 
 
 
 
 
 
 
305
  // Alter for debugging purposes; triggers before anything else
306
  // e.g. you're working on a website and there is no Dashboard access and you want to determine the handle name
307
  // if the handle name is not showing up, then the LINK stylesheet has been hardcoded (not enqueued the WordPress way)
@@ -539,6 +552,15 @@ SQL;
539
  }
540
  }
541
 
 
 
 
 
 
 
 
 
 
542
  /* [START] Styles Dequeue */
543
  /**
544
  * See if there is any list with styles to be removed in JSON format
@@ -552,129 +574,140 @@ SQL;
552
  return;
553
  }
554
 
555
- // [wpacu_lite]
556
- $nonAssetConfigPage = (! $this->isUpdateable && ! Misc::getShowOnFront());
557
- // [/wpacu_lite]
558
 
559
- // It looks like the page loaded is neither a post, page or the front-page
560
- // We'll see if there are assets unloaded globally and unload them
561
- $globalUnload = $this->globalUnloaded;
562
 
563
- // [wpacu_lite]
564
- if ($nonAssetConfigPage && ! empty($globalUnload['styles'])) {
565
- $list = $globalUnload['styles'];
566
- } else { // [/wpacu_lite]
567
- // Post, Page, Front-page
568
- // and more (if the Premium Extension is activated)
569
- $toRemove = $this->getAssetsUnloaded();
570
 
571
- $jsonList = @json_decode($toRemove);
 
 
 
 
 
 
 
572
 
573
- $list = array();
 
 
 
574
 
575
- if (isset($jsonList->styles)) {
576
- $list = (array)$jsonList->styles;
577
- }
578
 
579
- // Any global unloaded styles? Append them
580
- if (! empty($globalUnload['styles'])) {
581
- foreach ($globalUnload['styles'] as $handleStyle) {
582
- $list[] = $handleStyle;
583
- }
584
- }
 
585
 
586
- if ($this->isSingularPage()) {
587
- // Any bulk unloaded styles (e.g. for all pages belonging to a post type)? Append them
588
- if (empty($this->postTypesUnloaded)) {
589
- $post = $this->getCurrentPost();
590
- $this->postTypesUnloaded = (isset($post->post_type) && $post->post_type)
591
- ? $this->getBulkUnload('post_type', $post->post_type)
592
- : array();
593
  }
594
 
595
- if (isset($this->postTypesUnloaded['styles']) && ! empty($this->postTypesUnloaded['styles'])) {
596
- foreach ($this->postTypesUnloaded['styles'] as $handleStyle) {
 
597
  $list[] = $handleStyle;
598
  }
599
  }
600
- }
601
- // [wpacu_lite]
602
- }
603
- // [/wpacu_lite]
604
-
605
- // Site-Wide Unload for "Dashicons" if user is not logged-in
606
- if ($this->settings['disable_dashicons_for_guests'] && ! is_user_logged_in()) {
607
- $list[] = 'dashicons';
608
- }
609
 
610
- // Any bulk unloaded styles for 'category', 'post_tag' and more?
611
- // If the premium extension is enabled, any of the unloaded CSS will be added to the list
612
- $list = apply_filters('wpacu_filter_styles', array_unique($list));
 
 
 
 
 
613
 
614
- // Let's see if there are load exceptions for this page
615
- if (! empty($list) && ! empty($this->loadExceptions['styles'])) {
616
- foreach ($list as $handleKey => $handle) {
617
- if (in_array($handle, $this->loadExceptions['styles'])) {
618
- unset($list[$handleKey]);
619
  }
 
620
  }
621
- }
622
 
623
- global $wp_styles;
 
 
 
624
 
625
- // Add handles such as the Oxygen Builder CSS ones that are missing and added differently to the queue
626
- $allStyles = $this->wpStylesFilter($wp_styles, 'registered', $list);
627
-
628
- if ($allStyles !== null && ! empty($allStyles->registered)) {
629
- // Going through all the registered styles
630
- foreach ($allStyles->registered as $handle => $value) {
631
- // This could be triggered several times, check if the style already exists
632
- if (! isset($this->wpAllStyles['registered'][$handle])) {
633
- $this->wpAllStyles['registered'][$handle] = $value;
634
- if (in_array($handle, $allStyles->queue)) {
635
- $this->wpAllStyles['queue'][] = $handle;
 
 
 
 
 
636
  }
637
  }
638
- }
639
 
640
- if (isset($this->wpAllStyles['queue']) && ! empty($this->wpAllStyles['queue'])) {
641
- $this->wpAllStyles['queue'] = array_unique( $this->wpAllStyles['queue'] );
 
642
  }
643
- }
644
 
645
- if (isset($this->wpAllStyles['registered']) && ! empty($this->wpAllStyles['registered'])) {
646
- wp_cache_set('wpacu_all_styles_handles', array_keys($this->wpAllStyles['registered']));
647
- }
648
 
649
- // e.g. for test/debug mode or AJAX calls (where all assets have to load)
650
- if (array_key_exists('wpacu_no_css_unload', $_GET) || $this->preventAssetsSettings()) {
651
- /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
652
- return;
653
- }
 
654
 
655
- /*
656
- * [START] Load Exception Check
657
- * */
658
- // Let's see if there are load exceptions for this page or site-wide (e.g. for logged-in users)
659
- $anyStylesLoadExceptions = (! empty($this->loadExceptions['styles']) || ! empty($this->loadExceptionsLoggedInGlobal['styles']));
660
-
661
- if (! empty($list) && $anyStylesLoadExceptions) {
662
- foreach ($list as $handleKey => $handle) {
663
- $loadStyleAsException = in_array($handle, $this->loadExceptions['styles']) // per page, per group pages
664
- || (in_array($handle, $this->loadExceptionsLoggedInGlobal['styles']) && is_user_logged_in()); // site-wide if the user is logged-in
665
- if ($loadStyleAsException) {
666
- unset($list[$handleKey]);
 
 
 
667
  }
668
  }
669
- }
670
- /*
671
- * [END] Load Exception Check
672
- * */
673
 
674
- // Nothing to unload?
675
- if (empty($list)) {
676
- /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
677
- return;
 
678
  }
679
 
680
  $ignoreChildParentList = apply_filters('wpacu_ignore_child_parent_list', $this->getIgnoreChildren());
@@ -703,10 +736,19 @@ SQL;
703
  continue;
704
  }
705
 
 
 
 
 
 
706
  wp_deregister_style($handle);
707
  wp_dequeue_style($handle);
708
  }
709
 
 
 
 
 
710
  /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
711
  }
712
 
@@ -817,115 +859,141 @@ SQL;
817
  return;
818
  }
819
 
820
- // [wpacu_lite]
821
- $nonAssetConfigPage = (! $this->isUpdateable && ! Misc::getShowOnFront());
822
- // [/wpacu_lite]
823
 
824
- // It looks like the page loaded is neither a post, page or the front-page
825
- // We'll see if there are assets unloaded globally and unload them
826
- $globalUnload = $this->globalUnloaded;
827
 
828
- // [wpacu_lite]
829
- if ($nonAssetConfigPage && ! empty($globalUnload['scripts'])) {
830
- $list = $globalUnload['scripts'];
831
- } else { // [/wpacu_lite]
832
- // Post, Page or Front-page?
833
- $toRemove = $this->getAssetsUnloaded();
834
 
835
- $jsonList = @json_decode($toRemove);
 
 
 
 
 
 
 
836
 
837
- $list = array();
 
 
 
838
 
839
- if (isset($jsonList->scripts)) {
840
- $list = (array)$jsonList->scripts;
841
- }
842
 
843
- // Any global unloaded styles? Append them
844
- if (! empty($globalUnload['scripts'])) {
845
- foreach ($globalUnload['scripts'] as $handleScript) {
846
- $list[] = $handleScript;
847
- }
848
- }
849
 
850
- if ($this->isSingularPage()) {
851
- // Any bulk unloaded styles (e.g. for all pages belonging to a post type)? Append them
852
- if (empty($this->postTypesUnloaded)) {
853
- $post = $this->getCurrentPost();
854
 
855
- // Make sure the post_type is set; it's not in specific pages (e.g. BuddyPress ones)
856
- $this->postTypesUnloaded = (isset($post->post_type) && $post->post_type) ? $this->getBulkUnload('post_type', $post->post_type) : array();
857
- }
858
 
859
- if (isset($this->postTypesUnloaded['scripts']) && ! empty($this->postTypesUnloaded['scripts'])) {
860
- foreach ($this->postTypesUnloaded['scripts'] as $handleStyle) {
861
- $list[] = $handleStyle;
862
- }
863
- }
864
- }
865
- // [wpacu_lite]
866
- }
867
- // [/wpacu_lite]
868
 
869
- $list = apply_filters('wpacu_filter_scripts', array_unique($list));
 
 
 
 
 
870
 
871
- // Let's see if there are load exceptions for this page
872
- if (! empty($list) && ! empty($this->loadExceptions['scripts'])) {
873
- foreach ($list as $handleKey => $handle) {
874
- if (in_array($handle, $this->loadExceptions['scripts'])) {
875
- unset($list[$handleKey]);
876
- }
877
- }
878
- }
879
 
880
- global $wp_scripts;
 
 
 
881
 
882
- $allScripts = $wp_scripts;
 
 
 
 
 
 
 
 
883
 
884
- if ($allScripts !== null && ! empty($allScripts->registered)) {
885
- foreach ($allScripts->registered as $handle => $value) {
886
- // This could be triggered several times, check if the script already exists
887
- if (! isset($this->wpAllScripts['registered'][$handle])) {
888
- $this->wpAllScripts['registered'][$handle] = $value;
889
- if (in_array($handle, $allScripts->queue)) {
890
- $this->wpAllScripts['queue'][] = $handle;
891
- }
892
- }
893
- }
894
 
895
- if (isset($this->wpAllScripts['queue']) && ! empty($this->wpAllScripts['queue'])) {
896
- $this->wpAllScripts['queue'] = array_unique( $this->wpAllScripts['queue'] );
897
- }
898
- }
 
 
 
 
 
 
 
 
899
 
900
- /*
901
- * [START] Load Exception Check
902
- * */
903
- // Let's see if there are load exceptions for this page or site-wide (e.g. for logged-in users)
904
- $anyScriptsLoadExceptions = (! empty($this->loadExceptions['scripts']) || ! empty($this->loadExceptionsLoggedInGlobal['scripts']));
905
-
906
- if (! empty($list) && $anyScriptsLoadExceptions) {
907
- foreach ($list as $handleKey => $handle) {
908
- $loadScriptAsException = in_array($handle, $this->loadExceptions['scripts']) // per page, per group pages
909
- || (in_array($handle, $this->loadExceptionsLoggedInGlobal['scripts']) && is_user_logged_in()); // site-wide if the user is logged-in
910
- if ($loadScriptAsException) {
911
- unset($list[$handleKey]);
 
912
  }
913
  }
914
- }
915
- /*
916
- * [END] Load Exception Check
917
- * */
918
 
919
- // Nothing to unload
920
- if (empty($list)) {
921
- /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
922
- return;
923
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
924
 
925
- // e.g. for test/debug mode or AJAX calls (where all assets have to load)
926
- if (array_key_exists('wpacu_no_js_unload', $_GET) || $this->preventAssetsSettings()) {
927
- /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
928
- return;
 
 
 
 
 
 
 
 
 
 
 
929
  }
930
 
931
  $ignoreChildParentList = apply_filters('wpacu_ignore_child_parent_list', $this->getIgnoreChildren());
@@ -973,6 +1041,10 @@ SQL;
973
  wp_dequeue_script($handle);
974
  }
975
 
 
 
 
 
976
  /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
977
  }
978
  /* [END] Scripts Dequeue */
@@ -1590,12 +1662,6 @@ SQL;
1590
  }
1591
 
1592
  if (! empty($stylesList)) {
1593
- /* These styles below are used by this plugin (except admin-bar) and they should not show in the list
1594
- as they are loaded only when you (or other admin) manage the assets, never for your website visitors */
1595
- if (is_admin_bar_showing() && is_admin()) {
1596
- $this->skipAssets['styles'][] = 'dashicons';
1597
- }
1598
-
1599
  foreach ($manageStyles as $handle) {
1600
  if (! isset($stylesList[$handle]) || in_array($handle, $this->skipAssets['styles'])) {
1601
  continue;
@@ -2577,7 +2643,7 @@ SQL;
2577
  public function wpacuHtmlNoticeForAdmin()
2578
  {
2579
  add_action('wp_footer', static function() {
2580
- if (! apply_filters('wpacu_show_admin_console_notice', true) || Plugin::preventAnyChanges()) {
2581
  return;
2582
  }
2583
 
279
  add_action('wp_print_styles', array($this, 'filterStyles'), 9); // priority should be below 10
280
  }
281
 
 
 
282
  $this->filterStylesSpecialCases(); // e.g. CSS enqueued in a different way via Oxygen Builder
283
 
284
+ add_action( 'wp_print_styles', array( $this, 'filterStyles' ), 100000 ); // Unload Styles - HEAD
285
+ add_action( 'wp_print_scripts', array( $this, 'filterScripts' ), 100000 ); // Unload Scripts - HEAD
286
 
287
+ // Unload Styles & Scripts - FOOTER
288
  // Needs to be triggered very soon as some old plugins/themes use wp_footer() to enqueue scripts
289
  // Sometimes styles are loaded in the BODY section of the page
290
+ add_action( 'wp_print_footer_scripts', array( $this, 'onPrintFooterScriptsStyles' ), 1 );
 
291
 
292
  // Preloads
293
  add_action('wp_head', static function() {
295
  return;
296
  }
297
 
298
+ // Only place the market IF there's at least one preload
299
+ $preloadsClass = new Preloads();
300
+ foreach (array('styles', 'scripts') as $assetType) {
301
+ if ( isset( $preloadsClass->preloads[$assetType] ) && ! empty( $preloadsClass->preloads[$assetType] ) ) {
302
+ echo ($assetType === 'styles') ? Preloads::DEL_STYLES_PRELOADS : Preloads::DEL_SCRIPTS_PRELOADS;
303
+ }
304
+ }
305
  }, 1);
306
 
307
  add_filter('style_loader_tag', static function($styleTag, $tagHandle) {
308
+ // Preload the plugin's CSS for assets management layout (for faster content paint if the user is logged-in and manages the assets in the front-end)
309
+ // For a better admin experience
310
+ if ($tagHandle === WPACU_PLUGIN_ID . '-style') {
311
+ $styleTag = str_ireplace(
312
+ array('<link ', 'rel=\'stylesheet\'', 'rel="stylesheet"', 'id=\'', 'id="'),
313
+ array('<link rel=\'preload\' as=\'style\' data-wpacu-preload-it-async=\'1\' ', 'onload="this.rel=\'stylesheet\'"', 'onload="this.rel=\'stylesheet\'"', 'id=\'wpacu-preload-', 'id="wpacu-preload-'),
314
+ $styleTag
315
+ );
316
+ }
317
+
318
  // Alter for debugging purposes; triggers before anything else
319
  // e.g. you're working on a website and there is no Dashboard access and you want to determine the handle name
320
  // if the handle name is not showing up, then the LINK stylesheet has been hardcoded (not enqueued the WordPress way)
552
  }
553
  }
554
 
555
+ /**
556
+ * In case there were assets enqueued within "wp_footer" action hook, instead of the standard "wp_enqueue_scripts"
557
+ */
558
+ public function onPrintFooterScriptsStyles()
559
+ {
560
+ $this->filterStyles();
561
+ $this->filterScripts();
562
+ }
563
+
564
  /* [START] Styles Dequeue */
565
  /**
566
  * See if there is any list with styles to be removed in JSON format
574
  return;
575
  }
576
 
577
+ global $wp_styles;
 
 
578
 
579
+ if (current_action() === 'wp_print_styles') {
580
+ wp_cache_set('wpacu_styles_object_after_wp_print_styles', $wp_styles);
581
+ }
582
 
583
+ $list = array();
 
 
 
 
 
 
584
 
585
+ if (current_action() === 'wp_print_footer_scripts') {
586
+ $cachedWpStyles = wp_cache_get('wpacu_styles_object_after_wp_print_styles');
587
+ if (isset($cachedWpStyles->registered) && count($cachedWpStyles->registered) === count($wp_styles->registered)) {
588
+ // The list was already generated in "wp_print_styles" and the number of registered assets are the same
589
+ // Save resources and do not re-generate it
590
+ $list = wp_cache_get('wpacu_styles_handles_marked_for_unload');
591
+ }
592
+ }
593
 
594
+ if ( empty($list) ) {
595
+ // [wpacu_lite]
596
+ $nonAssetConfigPage = ( ! $this->isUpdateable && ! Misc::getShowOnFront() );
597
+ // [/wpacu_lite]
598
 
599
+ // It looks like the page loaded is neither a post, page or the front-page
600
+ // We'll see if there are assets unloaded globally and unload them
601
+ $globalUnload = $this->globalUnloaded;
602
 
603
+ // [wpacu_lite]
604
+ if ( $nonAssetConfigPage && ! empty( $globalUnload['styles'] ) ) {
605
+ $list = $globalUnload['styles'];
606
+ } else { // [/wpacu_lite]
607
+ // Post, Page, Front-page
608
+ // and more (if the Premium Extension is activated)
609
+ $toRemove = $this->getAssetsUnloaded();
610
 
611
+ $jsonList = @json_decode( $toRemove );
612
+
613
+ $list = array();
614
+
615
+ if ( isset( $jsonList->styles ) ) {
616
+ $list = (array) $jsonList->styles;
 
617
  }
618
 
619
+ // Any global unloaded styles? Append them
620
+ if ( ! empty( $globalUnload['styles'] ) ) {
621
+ foreach ( $globalUnload['styles'] as $handleStyle ) {
622
  $list[] = $handleStyle;
623
  }
624
  }
 
 
 
 
 
 
 
 
 
625
 
626
+ if ( $this->isSingularPage() ) {
627
+ // Any bulk unloaded styles (e.g. for all pages belonging to a post type)? Append them
628
+ if ( empty( $this->postTypesUnloaded ) ) {
629
+ $post = $this->getCurrentPost();
630
+ $this->postTypesUnloaded = ( isset( $post->post_type ) && $post->post_type )
631
+ ? $this->getBulkUnload( 'post_type', $post->post_type )
632
+ : array();
633
+ }
634
 
635
+ if ( isset( $this->postTypesUnloaded['styles'] ) && ! empty( $this->postTypesUnloaded['styles'] ) ) {
636
+ foreach ( $this->postTypesUnloaded['styles'] as $handleStyle ) {
637
+ $list[] = $handleStyle;
638
+ }
639
+ }
640
  }
641
+ // [wpacu_lite]
642
  }
643
+ // [/wpacu_lite]
644
 
645
+ // Site-Wide Unload for "Dashicons" if user is not logged-in
646
+ if ( $this->settings['disable_dashicons_for_guests'] && ! is_user_logged_in() ) {
647
+ $list[] = 'dashicons';
648
+ }
649
 
650
+ // Any bulk unloaded styles for 'category', 'post_tag' and more?
651
+ // If the premium extension is enabled, any of the unloaded CSS will be added to the list
652
+ $list = apply_filters( 'wpacu_filter_styles', array_unique( $list ) );
653
+
654
+ // Add handles such as the Oxygen Builder CSS ones that are missing and added differently to the queue
655
+ $allStyles = $this->wpStylesFilter( $wp_styles, 'registered', $list );
656
+
657
+ if ( $allStyles !== null && ! empty( $allStyles->registered ) ) {
658
+ // Going through all the registered styles
659
+ foreach ( $allStyles->registered as $handle => $value ) {
660
+ // This could be triggered several times, check if the style already exists
661
+ if ( ! isset( $this->wpAllStyles['registered'][ $handle ] ) ) {
662
+ $this->wpAllStyles['registered'][ $handle ] = $value;
663
+ if ( in_array( $handle, $allStyles->queue ) ) {
664
+ $this->wpAllStyles['queue'][] = $handle;
665
+ }
666
  }
667
  }
 
668
 
669
+ if ( isset( $this->wpAllStyles['queue'] ) && ! empty( $this->wpAllStyles['queue'] ) ) {
670
+ $this->wpAllStyles['queue'] = array_unique( $this->wpAllStyles['queue'] );
671
+ }
672
  }
 
673
 
674
+ if ( isset( $this->wpAllStyles['registered'] ) && ! empty( $this->wpAllStyles['registered'] ) ) {
675
+ wp_cache_set( 'wpacu_all_styles_handles', array_keys( $this->wpAllStyles['registered'] ) );
676
+ }
677
 
678
+ // e.g. for test/debug mode or AJAX calls (where all assets have to load)
679
+ if ( array_key_exists( 'wpacu_no_css_unload', $_GET ) || $this->preventAssetsSettings() ) {
680
+ /* [wpacu_timing] */
681
+ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
682
+ return;
683
+ }
684
 
685
+ /*
686
+ * [START] Load Exception Check
687
+ * */
688
+ // Let's see if there are load exceptions for this page or site-wide (e.g. for logged-in users)
689
+ $anyStylesLoadExceptions = ( ! empty( $this->loadExceptions['styles'] ) || ! empty( $this->loadExceptionsLoggedInGlobal['styles'] ) );
690
+
691
+ if ( ! empty( $list ) && $anyStylesLoadExceptions ) {
692
+ foreach ( $list as $handleKey => $handle ) {
693
+ $loadStyleAsException = in_array( $handle,
694
+ $this->loadExceptions['styles'] ) // per page, per group pages
695
+ || ( in_array( $handle,
696
+ $this->loadExceptionsLoggedInGlobal['styles'] ) && is_user_logged_in() ); // site-wide if the user is logged-in
697
+ if ( $loadStyleAsException ) {
698
+ unset( $list[ $handleKey ] );
699
+ }
700
  }
701
  }
702
+ /*
703
+ * [END] Load Exception Check
704
+ * */
 
705
 
706
+ // Is $list still empty? Nothing to unload? Stop here
707
+ if (empty($list)) {
708
+ /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
709
+ return;
710
+ }
711
  }
712
 
713
  $ignoreChildParentList = apply_filters('wpacu_ignore_child_parent_list', $this->getIgnoreChildren());
736
  continue;
737
  }
738
 
739
+ // Do not apply rule if the user if the top WordPress admin bar is showing up
740
+ if ($handle === 'dashicons' && is_admin_bar_showing()) {
741
+ continue;
742
+ }
743
+
744
  wp_deregister_style($handle);
745
  wp_dequeue_style($handle);
746
  }
747
 
748
+ if (current_action() === 'wp_print_styles') {
749
+ wp_cache_set( 'wpacu_styles_handles_marked_for_unload', $list );
750
+ }
751
+
752
  /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_styles', 'end' ); /* [/wpacu_timing] */
753
  }
754
 
859
  return;
860
  }
861
 
862
+ global $wp_scripts;
 
 
863
 
864
+ if (current_action() === 'wp_print_scripts') {
865
+ wp_cache_set('wpacu_scripts_object_after_wp_print_scripts', $wp_scripts);
866
+ }
867
 
868
+ $list = array();
 
 
 
 
 
869
 
870
+ if (current_action() === 'wp_print_footer_scripts') {
871
+ $cachedWpScripts = wp_cache_get('wpacu_scripts_object_after_wp_print_scripts');
872
+ if (isset($cachedWpScripts->registered) && count($cachedWpScripts->registered) === count($wp_scripts->registered)) {
873
+ // The list was already generated in "wp_print_scripts" and the number of registered assets are the same
874
+ // Save resources and do not re-generate it
875
+ $list = wp_cache_get('wpacu_scripts_handles_marked_for_unload');
876
+ }
877
+ }
878
 
879
+ if ( empty($list) ) {
880
+ // [wpacu_lite]
881
+ $nonAssetConfigPage = ( ! $this->isUpdateable && ! Misc::getShowOnFront() );
882
+ // [/wpacu_lite]
883
 
884
+ // It looks like the page loaded is neither a post, page or the front-page
885
+ // We'll see if there are assets unloaded globally and unload them
886
+ $globalUnload = $this->globalUnloaded;
887
 
888
+ // [wpacu_lite]
889
+ if ( $nonAssetConfigPage && ! empty( $globalUnload['scripts'] ) ) {
890
+ $list = $globalUnload['scripts'];
891
+ } else { // [/wpacu_lite]
892
+ // Post, Page or Front-page?
893
+ $toRemove = $this->getAssetsUnloaded();
894
 
895
+ $jsonList = @json_decode( $toRemove );
 
 
 
896
 
897
+ $list = array();
 
 
898
 
899
+ if ( isset( $jsonList->scripts ) ) {
900
+ $list = (array) $jsonList->scripts;
901
+ }
 
 
 
 
 
 
902
 
903
+ // Any global unloaded styles? Append them
904
+ if ( ! empty( $globalUnload['scripts'] ) ) {
905
+ foreach ( $globalUnload['scripts'] as $handleScript ) {
906
+ $list[] = $handleScript;
907
+ }
908
+ }
909
 
910
+ if ( $this->isSingularPage() ) {
911
+ // Any bulk unloaded styles (e.g. for all pages belonging to a post type)? Append them
912
+ if ( empty( $this->postTypesUnloaded ) ) {
913
+ $post = $this->getCurrentPost();
 
 
 
 
914
 
915
+ // Make sure the post_type is set; it's not in specific pages (e.g. BuddyPress ones)
916
+ $this->postTypesUnloaded = ( isset( $post->post_type ) && $post->post_type ) ? $this->getBulkUnload( 'post_type',
917
+ $post->post_type ) : array();
918
+ }
919
 
920
+ if ( isset( $this->postTypesUnloaded['scripts'] ) && ! empty( $this->postTypesUnloaded['scripts'] ) ) {
921
+ foreach ( $this->postTypesUnloaded['scripts'] as $handleStyle ) {
922
+ $list[] = $handleStyle;
923
+ }
924
+ }
925
+ }
926
+ // [wpacu_lite]
927
+ }
928
+ // [/wpacu_lite]
929
 
930
+ $list = apply_filters( 'wpacu_filter_scripts', array_unique( $list ) );
 
 
 
 
 
 
 
 
 
931
 
932
+ // Let's see if there are load exceptions for this page
933
+ if ( ! empty( $list ) && ! empty( $this->loadExceptions['scripts'] ) ) {
934
+ foreach ( $list as $handleKey => $handle ) {
935
+ if ( in_array( $handle, $this->loadExceptions['scripts'] ) ) {
936
+ unset( $list[ $handleKey ] );
937
+ }
938
+ }
939
+ }
940
+
941
+ global $wp_scripts;
942
+
943
+ $allScripts = $wp_scripts;
944
 
945
+ if ( $allScripts !== null && ! empty( $allScripts->registered ) ) {
946
+ foreach ( $allScripts->registered as $handle => $value ) {
947
+ // This could be triggered several times, check if the script already exists
948
+ if ( ! isset( $this->wpAllScripts['registered'][ $handle ] ) ) {
949
+ $this->wpAllScripts['registered'][ $handle ] = $value;
950
+ if ( in_array( $handle, $allScripts->queue ) ) {
951
+ $this->wpAllScripts['queue'][] = $handle;
952
+ }
953
+ }
954
+ }
955
+
956
+ if ( isset( $this->wpAllScripts['queue'] ) && ! empty( $this->wpAllScripts['queue'] ) ) {
957
+ $this->wpAllScripts['queue'] = array_unique( $this->wpAllScripts['queue'] );
958
  }
959
  }
 
 
 
 
960
 
961
+ /*
962
+ * [START] Load Exception Check
963
+ * */
964
+ // Let's see if there are load exceptions for this page or site-wide (e.g. for logged-in users)
965
+ $anyScriptsLoadExceptions = ( ! empty( $this->loadExceptions['scripts'] ) || ! empty( $this->loadExceptionsLoggedInGlobal['scripts'] ) );
966
+
967
+ if ( ! empty( $list ) && $anyScriptsLoadExceptions ) {
968
+ foreach ( $list as $handleKey => $handle ) {
969
+ $loadScriptAsException = in_array( $handle,
970
+ $this->loadExceptions['scripts'] ) // per page, per group pages
971
+ || ( in_array( $handle,
972
+ $this->loadExceptionsLoggedInGlobal['scripts'] ) && is_user_logged_in() ); // site-wide if the user is logged-in
973
+ if ( $loadScriptAsException ) {
974
+ unset( $list[ $handleKey ] );
975
+ }
976
+ }
977
+ }
978
+ /*
979
+ * [END] Load Exception Check
980
+ * */
981
 
982
+ // Nothing to unload
983
+ if ( empty( $list ) ) {
984
+ /* [wpacu_timing] */
985
+ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
986
+
987
+ return;
988
+ }
989
+
990
+ // e.g. for test/debug mode or AJAX calls (where all assets have to load)
991
+ if ( array_key_exists( 'wpacu_no_js_unload', $_GET ) || $this->preventAssetsSettings() ) {
992
+ /* [wpacu_timing] */
993
+ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
994
+
995
+ return;
996
+ }
997
  }
998
 
999
  $ignoreChildParentList = apply_filters('wpacu_ignore_child_parent_list', $this->getIgnoreChildren());
1041
  wp_dequeue_script($handle);
1042
  }
1043
 
1044
+ if (current_action() === 'wp_print_scripts') {
1045
+ wp_cache_set( 'wpacu_scripts_handles_marked_for_unload', $list );
1046
+ }
1047
+
1048
  /* [wpacu_timing] */ Misc::scriptExecTimer( 'filter_dequeue_scripts', 'end' ); /* [/wpacu_timing] */
1049
  }
1050
  /* [END] Scripts Dequeue */
1662
  }
1663
 
1664
  if (! empty($stylesList)) {
 
 
 
 
 
 
1665
  foreach ($manageStyles as $handle) {
1666
  if (! isset($stylesList[$handle]) || in_array($handle, $this->skipAssets['styles'])) {
1667
  continue;
2643
  public function wpacuHtmlNoticeForAdmin()
2644
  {
2645
  add_action('wp_footer', static function() {
2646
+ if ((WPACU_GET_LOADED_ASSETS_ACTION === true) || (! apply_filters('wpacu_show_admin_console_notice', true)) || Plugin::preventAnyChanges()) {
2647
  return;
2648
  }
2649
 
classes/Maintenance.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace WpAssetCleanUp;
3
+
4
+ /**
5
+ * Class Maintenance
6
+ * @package WpAssetCleanUp
7
+ */
8
+ class Maintenance
9
+ {
10
+ public function __construct()
11
+ {
12
+ if (is_admin() && isset($_GET['page']) && strpos($_GET['page'], WPACU_PLUGIN_ID.'_') === 0) {
13
+ add_action('admin_init', static function() {
14
+ Maintenance::cleanUnusedAssetsFromInfoArea();
15
+ });
16
+ }
17
+ }
18
+
19
+ /**
20
+ *
21
+ */
22
+ public static function cleanUnusedAssetsFromInfoArea()
23
+ {
24
+ $allAssetsWithAtLeastOneRule = Overview::handlesWithAtLeastOneRule();
25
+
26
+ if (empty($allAssetsWithAtLeastOneRule)) {
27
+ return;
28
+ }
29
+
30
+ // Stored in the "assets_info" key from "wpassetcleanup_global_data" option name (from `{$wpdb->prefix}options` table)
31
+ $allAssetsFromInfoArea = Main::getHandlesInfo();
32
+
33
+ $handlesToClearFromInfo = array('styles' => array(), 'scripts' => array());
34
+
35
+ foreach (array('styles', 'scripts') as $assetType) {
36
+ if ( isset( $allAssetsFromInfoArea[$assetType] ) && ! empty( $allAssetsFromInfoArea[$assetType] ) ) {
37
+ foreach ( array_keys( $allAssetsFromInfoArea[$assetType] ) as $assetHandle ) {
38
+ if ( ! isset($allAssetsWithAtLeastOneRule[$assetType][$assetHandle]) ) { // not found in $allAssetsWithAtLeastOneRule? Add it to the clear list
39
+ $handlesToClearFromInfo[$assetType][] = $assetHandle;
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ if (! empty($handlesToClearFromInfo['styles']) || ! empty($handlesToClearFromInfo['scripts'])) {
46
+ self::removeHandlesInfoFromGlobalDataOption($handlesToClearFromInfo);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * @param $handlesToClearFromInfo
52
+ */
53
+ public static function removeHandlesInfoFromGlobalDataOption($handlesToClearFromInfo)
54
+ {
55
+ $optionToUpdate = WPACU_PLUGIN_ID . '_global_data';
56
+ $globalKey = 'assets_info';
57
+
58
+ $existingListEmpty = array('styles' => array($globalKey => array()), 'scripts' => array($globalKey => array()));
59
+ $existingListJson = get_option($optionToUpdate);
60
+
61
+ $existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
62
+ $existingList = $existingListData['list'];
63
+
64
+ // $assetType could be 'styles' or 'scripts'
65
+ foreach ($handlesToClearFromInfo as $assetType => $handles) {
66
+ foreach ($handles as $handle) {
67
+ if ( isset( $existingList[ $assetType ][ $globalKey ][ $handle ] ) ) {
68
+ unset( $existingList[ $assetType ][ $globalKey ][ $handle ] );
69
+ }
70
+ }
71
+ }
72
+
73
+ Misc::addUpdateOption($optionToUpdate, json_encode(Misc::filterList($existingList)));
74
+ }
75
+ }
classes/Misc.php CHANGED
@@ -686,6 +686,64 @@ SQL;
686
  return $unloadedTotalAssets;
687
  }
688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  /**
690
  * @param bool $onlyTransient
691
  *
@@ -864,6 +922,11 @@ SQL;
864
  */
865
  public static function triggerFrontendOptimization()
866
  {
 
 
 
 
 
867
  // "Elementor" Edit Mode
868
  if (isset($_GET['elementor-preview']) && $_GET['elementor-preview']) {
869
  return false;
@@ -910,6 +973,10 @@ SQL;
910
  */
911
  public static function formatBytes($size, $precision = 2)
912
  {
 
 
 
 
913
  // In case a string is passed, make it to float
914
  $size = (float)$size;
915
 
686
  return $unloadedTotalAssets;
687
  }
688
 
689
+ /**
690
+ * @param $src
691
+ *
692
+ * @return bool|mixed
693
+ */
694
+ public static function maybeIsInactiveAsset($src)
695
+ {
696
+ // Quickest way
697
+ preg_match_all('#/wp-content/plugins/(.*?)/#', $src, $matches, PREG_PATTERN_ORDER);
698
+
699
+ if (isset($matches[1][0]) && $matches[1][0]) {
700
+ $pluginDirName = $matches[1][0];
701
+
702
+ $activePlugins = get_option( 'active_plugins' );
703
+ $activePluginsStr = implode(',', $activePlugins);
704
+
705
+ if (strpos($activePluginsStr, $pluginDirName.'/') === false) {
706
+ return $pluginDirName; // it belongs to an inactive plugin
707
+ }
708
+ }
709
+
710
+ $relPluginsUrl = str_replace(site_url(), '', plugins_url());
711
+
712
+ $srcAlt = $src;
713
+
714
+ if (strpos($srcAlt, '//') === 0) {
715
+ $srcAlt = str_replace(
716
+ str_replace(array('http://', 'https://'),'//', site_url()),
717
+ '',
718
+ $srcAlt
719
+ );
720
+ }
721
+
722
+ $relSrc = str_replace( site_url(), '', $srcAlt );
723
+
724
+ if (strpos($relSrc, '/wp-content/plugins') !== 0) {
725
+ list (,$relSrc) = '/wp-content/plugins' . explode('/wp-content/plugins', $relSrc);
726
+ }
727
+
728
+ if (strpos($relSrc, $relPluginsUrl) !== false) {
729
+ // Determine the plugin behind the $src
730
+ $relSrc = trim(str_replace($relPluginsUrl, '', $relSrc), '/');
731
+
732
+ if (strpos($relSrc, '/') !== false) {
733
+ list ( $pluginDirName, ) = explode( '/', $relSrc );
734
+
735
+ $activePlugins = get_option( 'active_plugins' );
736
+ $activePluginsStr = implode(',', $activePlugins);
737
+
738
+ if (strpos($activePluginsStr, $pluginDirName.'/') === false) {
739
+ return $pluginDirName; // it belongs to an inactive plugin
740
+ }
741
+ }
742
+ }
743
+
744
+ return false;
745
+ }
746
+
747
  /**
748
  * @param bool $onlyTransient
749
  *
922
  */
923
  public static function triggerFrontendOptimization()
924
  {
925
+ // Not when the CSS/JS is fetched
926
+ if (WPACU_GET_LOADED_ASSETS_ACTION === true) {
927
+ return false;
928
+ }
929
+
930
  // "Elementor" Edit Mode
931
  if (isset($_GET['elementor-preview']) && $_GET['elementor-preview']) {
932
  return false;
973
  */
974
  public static function formatBytes($size, $precision = 2)
975
  {
976
+ if ((int)$size === 0) {
977
+ return '<span style="vertical-align: middle;" class="dashicons dashicons-warning"></span> <strong>'.__('The file appears to be empty', 'wp-asset-clean-up').'</strong>';
978
+ }
979
+
980
  // In case a string is passed, make it to float
981
  $size = (float)$size;
982
 
classes/OptimiseAssets/CombineCss.php CHANGED
@@ -196,9 +196,25 @@ class CombineCss
196
 
197
  $finalTagUrl = OptimizeCommon::filterWpContentUrl($cdnUrlForCss) . OptimizeCss::getRelPathCssCacheDir() . $storageJsonContentLocation['uri_to_final_css_file'];
198
 
 
 
 
 
199
  $finalCssTag = <<<HTML
200
  <link rel='stylesheet' id='wpacu-combined-css-{$docLocationTag}-{$groupLocation}' href='{$finalTagUrl}' type='text/css' media='{$mediaValue}' />
201
  HTML;
 
 
 
 
 
 
 
 
 
 
 
 
202
  $htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
203
 
204
  // Detect first LINK tag from the <$locationTag> and replace it with the final combined LINK tag
@@ -248,6 +264,7 @@ HTML;
248
  continue;
249
  }
250
 
 
251
  $domTag = new \DOMDocument();
252
 
253
  libxml_use_internal_errors(true);
196
 
197
  $finalTagUrl = OptimizeCommon::filterWpContentUrl($cdnUrlForCss) . OptimizeCss::getRelPathCssCacheDir() . $storageJsonContentLocation['uri_to_final_css_file'];
198
 
199
+ $finalCssTagAttrs = array();
200
+ $finalCssTagAttrs['rel'] = 'stylesheet';
201
+ $finalCssTagAttrs['media'] = $mediaValue;
202
+
203
  $finalCssTag = <<<HTML
204
  <link rel='stylesheet' id='wpacu-combined-css-{$docLocationTag}-{$groupLocation}' href='{$finalTagUrl}' type='text/css' media='{$mediaValue}' />
205
  HTML;
206
+ // In case one (e.g. usually a developer) needs to alter it
207
+ $finalCssTag = apply_filters(
208
+ 'wpacu_combined_css_tag',
209
+ $finalCssTag,
210
+ array(
211
+ 'attrs' => $finalCssTagAttrs,
212
+ 'doc_location' => $docLocationTag,
213
+ 'group_no' => $groupLocation,
214
+ 'href' => $finalTagUrl
215
+ )
216
+ );
217
+
218
  $htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
219
 
220
  // Detect first LINK tag from the <$locationTag> and replace it with the final combined LINK tag
264
  continue;
265
  }
266
 
267
+ // The DOMDocument is already checked if it's enabled in doCombine()
268
  $domTag = new \DOMDocument();
269
 
270
  libxml_use_internal_errors(true);
classes/OptimiseAssets/CombineJs.php CHANGED
@@ -236,7 +236,13 @@ class CombineJs
236
  }
237
 
238
  $groupScriptSrcsFilter = array_map(static function($src) {
239
- return str_replace(site_url(), '', $src);
 
 
 
 
 
 
240
  }, $groupScriptSrcs);
241
 
242
  $finalCacheList[$docLocationScript][$groupNo] = array(
@@ -287,21 +293,32 @@ class CombineJs
287
 
288
  $finalTagUrl = OptimizeCommon::filterWpContentUrl($cdnUrlForJs) . OptimizeJs::getRelPathJsCacheDir() . $uriToFinalJsFile;
289
 
290
- $deferAttr = '';
291
-
292
  if (isset($cachedValues['extra_attributes']) && ! empty($cachedValues['extra_attributes'])) {
293
- if (in_array('async', $cachedValues['extra_attributes']) && in_array('defer', $cachedValues['extra_attributes'])) {
294
- $deferAttr = 'async=\'async\' defer=\'defer\'';
295
- } elseif (in_array('async', $cachedValues['extra_attributes'])) {
296
- $deferAttr = 'async=\'async\'';
297
- } elseif (in_array('defer', $cachedValues['extra_attributes'])) {
298
- $deferAttr = 'defer=\'defer\'';
299
  }
 
300
  }
301
 
302
  $finalJsTag = <<<HTML
303
- <script {$deferAttr} id='wpacu-combined-js-{$docLocationScript}-group-{$groupNo}' type='text/javascript' src='{$finalTagUrl}'></script>
304
  HTML;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
  $scriptTagsStrippedNo = 0;
306
 
307
  $scriptTags = OptimizeJs::getScriptTagsFromSrcs($filesSources, $htmlSource);
@@ -469,8 +486,6 @@ HTML;
469
 
470
  $contentToAddToCombinedFile = '/*! '.str_replace(ABSPATH, '/', $localAssetsPath)." */\n";
471
 
472
- $jsContent = OptimizeJs::maybeAlterJsContent($jsContent);
473
-
474
  $contentToAddToCombinedFile .= OptimizeJs::maybeDoJsFixes($jsContent, $pathToAssetDir . '/') . "\n";
475
 
476
  $finalJsContents .= $contentToAddToCombinedFile;
236
  }
237
 
238
  $groupScriptSrcsFilter = array_map(static function($src) {
239
+ $src = str_replace(site_url(), '', $src);
240
+ // Starts with // (protocol is missing) - the replacement above wasn't made
241
+ if (strpos($src, '//') === 0) {
242
+ $siteUrlNoProtocol = str_replace(array('http:', 'https:'), '', site_url());
243
+ return str_replace($siteUrlNoProtocol, '', $src);
244
+ }
245
+ return $src;
246
  }, $groupScriptSrcs);
247
 
248
  $finalCacheList[$docLocationScript][$groupNo] = array(
293
 
294
  $finalTagUrl = OptimizeCommon::filterWpContentUrl($cdnUrlForJs) . OptimizeJs::getRelPathJsCacheDir() . $uriToFinalJsFile;
295
 
296
+ $finalJsTagAttrsOutput = '';
 
297
  if (isset($cachedValues['extra_attributes']) && ! empty($cachedValues['extra_attributes'])) {
298
+ foreach ($cachedValues['extra_attributes'] as $finalJsTagAttr) {
299
+ $finalJsTagAttrsOutput .= ' '.$finalJsTagAttr.'=\''.$finalJsTagAttr.'\' ';
 
 
 
 
300
  }
301
+ $finalJsTagAttrsOutput = trim($finalJsTagAttrsOutput);
302
  }
303
 
304
  $finalJsTag = <<<HTML
305
+ <script {$finalJsTagAttrsOutput} id='wpacu-combined-js-{$docLocationScript}-group-{$groupNo}' type='text/javascript' src='{$finalTagUrl}'></script>
306
  HTML;
307
+ // In case one needs to alter it (e.g. developers that might want to add custom attributes such as data-cfasync="false")
308
+ $finalJsTag = apply_filters(
309
+ 'wpacu_combined_js_tag',
310
+ $finalJsTag,
311
+ array(
312
+ 'attrs' => $cachedValues['extra_attributes'],
313
+ 'doc_location' => $docLocationScript,
314
+ 'group_no' => $groupNo,
315
+ 'src' => $finalTagUrl
316
+ )
317
+ );
318
+
319
+ // Reference: https://stackoverflow.com/questions/2368539/php-replacing-multiple-spaces-with-a-single-space
320
+ $finalJsTag = preg_replace('!\s+!', ' ', $finalJsTag);
321
+
322
  $scriptTagsStrippedNo = 0;
323
 
324
  $scriptTags = OptimizeJs::getScriptTagsFromSrcs($filesSources, $htmlSource);
486
 
487
  $contentToAddToCombinedFile = '/*! '.str_replace(ABSPATH, '/', $localAssetsPath)." */\n";
488
 
 
 
489
  $contentToAddToCombinedFile .= OptimizeJs::maybeDoJsFixes($jsContent, $pathToAssetDir . '/') . "\n";
490
 
491
  $finalJsContents .= $contentToAddToCombinedFile;
classes/OptimiseAssets/FontsGoogle.php CHANGED
@@ -40,7 +40,7 @@ class FontsGoogle
40
 
41
  add_action('wp_head', array($this, 'preloadFontFiles'), 1);
42
  add_action('wp_footer', static function() {
43
- if ( Plugin::preventAnyChanges() || Main::isTestModeActive() ) {
44
  return;
45
  }
46
 
@@ -50,7 +50,7 @@ class FontsGoogle
50
  add_action('init', function() {
51
  // don't apply any changes if not in the front-end view (e.g. Dashboard view)
52
  // or test mode is enabled and a guest user is accessing the page
53
- if ( Plugin::preventAnyChanges() || Main::isTestModeActive() ) {
54
  return;
55
  }
56
 
40
 
41
  add_action('wp_head', array($this, 'preloadFontFiles'), 1);
42
  add_action('wp_footer', static function() {
43
+ if ( Plugin::preventAnyChanges() || Main::isTestModeActive() || Main::instance()->settings['google_fonts_remove'] ) {
44
  return;
45
  }
46
 
50
  add_action('init', function() {
51
  // don't apply any changes if not in the front-end view (e.g. Dashboard view)
52
  // or test mode is enabled and a guest user is accessing the page
53
+ if ( Plugin::preventAnyChanges() || Main::isTestModeActive() || Main::instance()->settings['google_fonts_remove'] ) {
54
  return;
55
  }
56
 
classes/OptimiseAssets/MinifyCss.php CHANGED
@@ -111,6 +111,11 @@ class MinifyCss
111
  return $htmlSource; // no STYLE tags
112
  }
113
 
 
 
 
 
 
114
  $domTag = new \DOMDocument();
115
  libxml_use_internal_errors(true);
116
  $domTag->loadHTML($htmlSource);
@@ -126,7 +131,10 @@ class MinifyCss
126
  'astra-edd-inline-css',
127
  'et-builder-module-design-cached-inline-styles',
128
  'fusion-stylesheet-inline-css',
129
- 'data-wpacu-inline-css-file'
 
 
 
130
  );
131
 
132
  foreach ($styleTagsObj as $styleTagObj) {
111
  return $htmlSource; // no STYLE tags
112
  }
113
 
114
+ // DOMDocument extension has to be enabled, otherwise return the HTML source as was (no changes)
115
+ if (! (function_exists('libxml_use_internal_errors') && function_exists('libxml_clear_errors') && class_exists('\DOMDocument'))) {
116
+ return $htmlSource;
117
+ }
118
+
119
  $domTag = new \DOMDocument();
120
  libxml_use_internal_errors(true);
121
  $domTag->loadHTML($htmlSource);
131
  'astra-edd-inline-css',
132
  'et-builder-module-design-cached-inline-styles',
133
  'fusion-stylesheet-inline-css',
134
+ 'woocommerce-general-inline-css',
135
+ 'woocommerce-inline-inline-css',
136
+ 'data-wpacu-own-inline-style', // Only shown to the admin, irrelevant for any optimization (save resources)
137
+ 'data-wpacu-inline-css-file' // already minified/optimized since the INLINE was generated from the cached file
138
  );
139
 
140
  foreach ($styleTagsObj as $styleTagObj) {
classes/OptimiseAssets/OptimizeCommon.php CHANGED
@@ -8,6 +8,7 @@ use WpAssetCleanUp\Main;
8
  use WpAssetCleanUp\Menu;
9
  use WpAssetCleanUp\Misc;
10
  use WpAssetCleanUp\Plugin;
 
11
  use WpAssetCleanUp\Tools;
12
 
13
  /**
@@ -58,6 +59,7 @@ class OptimizeCommon
58
  }
59
 
60
  add_action('admin_post_assetcleanup_clear_assets_cache', static function() {
 
61
  self::clearAllCache(true);
62
  });
63
 
@@ -848,6 +850,12 @@ class OptimizeCommon
848
  return;
849
  }
850
 
 
 
 
 
 
 
851
  $isAjaxCall = isset($_POST['action']) && $_POST['action'] === WPACU_PLUGIN_ID . '_clear_cache' && is_admin();
852
  $clearedOutput = $keptOutput = array();
853
 
@@ -894,6 +902,8 @@ class OptimizeCommon
894
  );
895
 
896
  foreach ( $targetedDirs as $targetedDir ) {
 
 
897
  if ( ! is_dir($targetedDir) ) { continue; }
898
 
899
  $dirItems = new \RecursiveDirectoryIterator( $targetedDir, \RecursiveDirectoryIterator::SKIP_DOTS );
@@ -1040,8 +1050,6 @@ SQL;
1040
  echo $keptInfo."\n";
1041
  }
1042
  }
1043
-
1044
- exit();
1045
  }
1046
 
1047
  if ($redirectAfter && wp_get_referer()) {
@@ -1050,6 +1058,19 @@ SQL;
1050
  }
1051
  }
1052
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1053
  /**
1054
  * @return array
1055
  */
8
  use WpAssetCleanUp\Menu;
9
  use WpAssetCleanUp\Misc;
10
  use WpAssetCleanUp\Plugin;
11
+ use WpAssetCleanUp\Settings;
12
  use WpAssetCleanUp\Tools;
13
 
14
  /**
59
  }
60
 
61
  add_action('admin_post_assetcleanup_clear_assets_cache', static function() {
62
+ set_transient('wpacu_clear_assets_cache_via_link', true);
63
  self::clearAllCache(true);
64
  });
65
 
850
  return;
851
  }
852
 
853
+ // No settings available? Must be triggered very early before 'init' action hook; Get the settings!
854
+ if ( ! isset(Main::instance()->settings['clear_cached_files_after']) ) {
855
+ $wpacuSettingsClass = new Settings();
856
+ Main::instance()->settings = $wpacuSettingsClass->getAll();
857
+ }
858
+
859
  $isAjaxCall = isset($_POST['action']) && $_POST['action'] === WPACU_PLUGIN_ID . '_clear_cache' && is_admin();
860
  $clearedOutput = $keptOutput = array();
861
 
902
  );
903
 
904
  foreach ( $targetedDirs as $targetedDir ) {
905
+ $targetedDir = rtrim(str_replace('//', '/', $targetedDir), '/'); // clean it
906
+
907
  if ( ! is_dir($targetedDir) ) { continue; }
908
 
909
  $dirItems = new \RecursiveDirectoryIterator( $targetedDir, \RecursiveDirectoryIterator::SKIP_DOTS );
1050
  echo $keptInfo."\n";
1051
  }
1052
  }
 
 
1053
  }
1054
 
1055
  if ($redirectAfter && wp_get_referer()) {
1058
  }
1059
  }
1060
 
1061
+ /**
1062
+ * This is usually done when the plugin is deactivated
1063
+ * e.g. if you use Autoptimize and it remains active, you will likely want to have its caching cleared with traces from Asset CleanUp
1064
+ */
1065
+ public static function clearOtherPluginsCache()
1066
+ {
1067
+ if (Misc::isPluginActive('autoptimize/autoptimize.php')
1068
+ && class_exists('\autoptimizeCache')
1069
+ && method_exists('\autoptimizeCache', 'clearall')) {
1070
+ \autoptimizeCache::clearall();
1071
+ }
1072
+ }
1073
+
1074
  /**
1075
  * @return array
1076
  */
classes/OptimiseAssets/OptimizeJs.php CHANGED
@@ -19,7 +19,12 @@ class OptimizeJs
19
  */
20
  public function init()
21
  {
22
- add_action('wp_print_footer_scripts', array($this, 'prepareOptimizeList'), PHP_INT_MAX);
 
 
 
 
 
23
  }
24
 
25
  /**
@@ -395,12 +400,8 @@ class OptimizeJs
395
  public static function updateOriginalToOptimizedTag($scriptSourceTag, $sourceUrl, $optimizeUrl)
396
  {
397
  $newScriptSourceTag = str_replace($sourceUrl, $optimizeUrl, $scriptSourceTag);
398
-
399
- // Needed in case it's added to the Combine JS exceptions list
400
- if (CombineJs::proceedWithJsCombine()) {
401
- $sourceUrlRel = is_array($sourceUrl) ? OptimizeCommon::getSourceRelPath($sourceUrl[0]) : OptimizeCommon::getSourceRelPath($sourceUrl);
402
- $newScriptSourceTag = str_ireplace('<script ', '<script data-wpacu-script-rel-src-before="'.$sourceUrlRel.'" ', $newScriptSourceTag);
403
- }
404
 
405
  // Strip ?ver=
406
  $toStrip = Misc::extractBetween($newScriptSourceTag, '?ver', '>');
@@ -415,6 +416,8 @@ class OptimizeJs
415
  $newScriptSourceTag = str_replace('.js&#038;ver='.$wp_version, '.js', $newScriptSourceTag);
416
  $newScriptSourceTag = str_replace('.js&#038;ver=', '.js', $newScriptSourceTag);
417
 
 
 
418
  return $newScriptSourceTag;
419
  }
420
 
@@ -495,16 +498,19 @@ class OptimizeJs
495
 
496
  if (self::isWorthCheckingForOptimization() && ! Main::instance()->preventAssetsSettings()) {
497
  /* [wpacu_timing] */ $wpacuTimingName = 'alter_html_source_for_minify_inline_script_tags'; Misc::scriptExecTimer($wpacuTimingName); /* [/wpacu_timing] */
498
- $htmlSource = self::optimizeInlineScriptTags($htmlSource);
499
  /* [wpacu_timing] */ Misc::scriptExecTimer($wpacuTimingName, 'end'); /* [/wpacu_timing] */
500
  }
501
 
502
  // Final cleanups
503
- $htmlSource = preg_replace('#<script(\s+|)(data-wpacu-jquery-core-handle=1|data-wpacu-jquery-migrate-handle=1)#Umi', '<script ', $htmlSource);
504
 
505
- $htmlSource = preg_replace('#<script(\s+|)data-wpacu-script-rel-src-before=(["\'])' . '(.*)' . '(\1)#Usmi', '<script ', $htmlSource);
506
  $htmlSource = preg_replace('#<script(.*)data-wpacu-script-handle=\'(.*)\'#Umi', '<script \\1', $htmlSource);
507
 
 
 
 
508
  /* [wpacu_timing] */ Misc::scriptExecTimer('alter_html_source_for_optimize_js', 'end'); /* [/wpacu_timing] */
509
 
510
  return $htmlSource;
@@ -515,12 +521,17 @@ class OptimizeJs
515
  *
516
  * @return mixed|string
517
  */
518
- public static function optimizeInlineScriptTags($htmlSource)
519
  {
520
  if (stripos($htmlSource, '<script') === false) {
521
  return $htmlSource; // no SCRIPT tags, hmm
522
  }
523
 
 
 
 
 
 
524
  $domTag = new \DOMDocument();
525
  libxml_use_internal_errors(true);
526
  $domTag->loadHTML($htmlSource);
@@ -531,7 +542,7 @@ class OptimizeJs
531
  return $htmlSource;
532
  }
533
 
534
- $doJsMinify = MinifyJs::isMinifyJsEnabled() && Main::instance()->settings['minify_loaded_js_inline'];
535
 
536
  $skipTagsContaining = array_map( static function ( $toMatch ) {
537
  return preg_quote($toMatch, '/');
@@ -542,7 +553,10 @@ class OptimizeJs
542
  'wpacu-preload-async-css-fallback',
543
  /* [wpacu_pro] */'data-wpacu-inline-js-file',/* [/wpacu_pro] */
544
  'document.body.prepend(wpacuLinkTag',
545
- 'var wc_product_block_data = JSON.parse( decodeURIComponent('
 
 
 
546
  ));
547
 
548
  foreach ($scriptTagsObj as $scriptTagObj) {
@@ -571,7 +585,7 @@ class OptimizeJs
571
  $originalTagContents = (isset($scriptTagObj->nodeValue) && trim($scriptTagObj->nodeValue) !== '') ? $scriptTagObj->nodeValue : false;
572
 
573
  if ($originalTagContents) {
574
- $newTagContents = self::maybeAlterJsContent($originalTagContents, $doJsMinify);
575
 
576
  if ($newTagContents !== $originalTagContents) {
577
  $htmlSource = str_ireplace(
@@ -609,6 +623,12 @@ class OptimizeJs
609
  foreach ($scriptSrcs as $scriptSrc) {
610
  $scriptSrc = str_replace('{site_url}', '', $scriptSrc);
611
 
 
 
 
 
 
 
612
  preg_match_all('#<script[^>]*src(|\s+)=(|\s+)[^>]*'. preg_quote($scriptSrc, '/'). '.*(>)(.*|)</script>#Usmi', $htmlSource, $matchesFromSrc, PREG_SET_ORDER);
613
 
614
  if (isset($matchesFromSrc[0][0]) && strip_tags($matchesFromSrc[0][0]) === '') {
@@ -680,6 +700,10 @@ class OptimizeJs
680
  return $htmlSource; // no SCRIPT tags, hmm
681
  }
682
 
 
 
 
 
683
  $domTag = new \DOMDocument();
684
  libxml_use_internal_errors(true);
685
  $domTag->loadHTML($htmlSource);
19
  */
20
  public function init()
21
  {
22
+ if (WPACU_GET_LOADED_ASSETS_ACTION === true) {
23
+ return;
24
+ }
25
+
26
+ // Only relevant when the list of CSS/JS is not fetched
27
+ add_action( 'wp_print_footer_scripts', array( $this, 'prepareOptimizeList' ), PHP_INT_MAX );
28
  }
29
 
30
  /**
400
  public static function updateOriginalToOptimizedTag($scriptSourceTag, $sourceUrl, $optimizeUrl)
401
  {
402
  $newScriptSourceTag = str_replace($sourceUrl, $optimizeUrl, $scriptSourceTag);
403
+ $sourceUrlRel = is_array($sourceUrl) ? OptimizeCommon::getSourceRelPath($sourceUrl[0]) : OptimizeCommon::getSourceRelPath($sourceUrl);
404
+ $newScriptSourceTag = str_ireplace('<script ', '<script data-wpacu-script-rel-src-before="'.$sourceUrlRel.'" ', $newScriptSourceTag);
 
 
 
 
405
 
406
  // Strip ?ver=
407
  $toStrip = Misc::extractBetween($newScriptSourceTag, '?ver', '>');
416
  $newScriptSourceTag = str_replace('.js&#038;ver='.$wp_version, '.js', $newScriptSourceTag);
417
  $newScriptSourceTag = str_replace('.js&#038;ver=', '.js', $newScriptSourceTag);
418
 
419
+ $newScriptSourceTag = preg_replace('!\s+!', ' ', $newScriptSourceTag); // replace multiple spaces with only one space
420
+
421
  return $newScriptSourceTag;
422
  }
423
 
498
 
499
  if (self::isWorthCheckingForOptimization() && ! Main::instance()->preventAssetsSettings()) {
500
  /* [wpacu_timing] */ $wpacuTimingName = 'alter_html_source_for_minify_inline_script_tags'; Misc::scriptExecTimer($wpacuTimingName); /* [/wpacu_timing] */
501
+ $htmlSource = self::minifyInlineScriptTags($htmlSource);
502
  /* [wpacu_timing] */ Misc::scriptExecTimer($wpacuTimingName, 'end'); /* [/wpacu_timing] */
503
  }
504
 
505
  // Final cleanups
506
+ $htmlSource = preg_replace('#(\s+|)(data-wpacu-jquery-core-handle=1|data-wpacu-jquery-migrate-handle=1)(\s+|)#Umi', '', $htmlSource);
507
 
508
+ $htmlSource = preg_replace('#(\s+|)data-wpacu-script-rel-src-before=(["\'])' . '(.*)' . '(\1)(\s+|)#Usmi', '', $htmlSource);
509
  $htmlSource = preg_replace('#<script(.*)data-wpacu-script-handle=\'(.*)\'#Umi', '<script \\1', $htmlSource);
510
 
511
+ // Clear possible empty SCRIPT tags (e.g. left from associated 'before' and 'after' tags after their content was stripped)
512
+ $htmlSource = preg_replace('#<script(\s+| )(type=\'text/javascript\'|)(\s+|)></script>#Umi', '', $htmlSource);
513
+
514
  /* [wpacu_timing] */ Misc::scriptExecTimer('alter_html_source_for_optimize_js', 'end'); /* [/wpacu_timing] */
515
 
516
  return $htmlSource;
521
  *
522
  * @return mixed|string
523
  */
524
+ public static function minifyInlineScriptTags($htmlSource)
525
  {
526
  if (stripos($htmlSource, '<script') === false) {
527
  return $htmlSource; // no SCRIPT tags, hmm
528
  }
529
 
530
+ // DOMDocument extension has to be enabled, otherwise return the HTML source as was (no changes)
531
+ if (! (function_exists('libxml_use_internal_errors') && function_exists('libxml_clear_errors') && class_exists('DOMDocument'))) {
532
+ return $htmlSource;
533
+ }
534
+
535
  $domTag = new \DOMDocument();
536
  libxml_use_internal_errors(true);
537
  $domTag->loadHTML($htmlSource);
542
  return $htmlSource;
543
  }
544
 
545
+ $doJsMinifyInline = MinifyJs::isMinifyJsEnabled() && Main::instance()->settings['minify_loaded_js_inline'];
546
 
547
  $skipTagsContaining = array_map( static function ( $toMatch ) {
548
  return preg_quote($toMatch, '/');
553
  'wpacu-preload-async-css-fallback',
554
  /* [wpacu_pro] */'data-wpacu-inline-js-file',/* [/wpacu_pro] */
555
  'document.body.prepend(wpacuLinkTag',
556
+ 'var wc_product_block_data = JSON.parse( decodeURIComponent(',
557
+ '/(^|\s)(no-)?customize-support(?=\s|$)/', // WP Core
558
+ 'b[c] += ( window.postMessage && request ? \' \' : \' no-\' ) + cs;', // WP Core
559
+ 'data-wpacu-own-inline-script' // Only shown to the admin, irrelevant for any optimization (save resources)
560
  ));
561
 
562
  foreach ($scriptTagsObj as $scriptTagObj) {
585
  $originalTagContents = (isset($scriptTagObj->nodeValue) && trim($scriptTagObj->nodeValue) !== '') ? $scriptTagObj->nodeValue : false;
586
 
587
  if ($originalTagContents) {
588
+ $newTagContents = self::maybeAlterJsContent($originalTagContents, $doJsMinifyInline);
589
 
590
  if ($newTagContents !== $originalTagContents) {
591
  $htmlSource = str_ireplace(
623
  foreach ($scriptSrcs as $scriptSrc) {
624
  $scriptSrc = str_replace('{site_url}', '', $scriptSrc);
625
 
626
+ // Clean it up for the preg_quote() call
627
+ if (strpos($scriptSrc, '.js?') !== false) {
628
+ list($scriptSrc,) = explode('.js?', $scriptSrc);
629
+ $scriptSrc .= '.js';
630
+ }
631
+
632
  preg_match_all('#<script[^>]*src(|\s+)=(|\s+)[^>]*'. preg_quote($scriptSrc, '/'). '.*(>)(.*|)</script>#Usmi', $htmlSource, $matchesFromSrc, PREG_SET_ORDER);
633
 
634
  if (isset($matchesFromSrc[0][0]) && strip_tags($matchesFromSrc[0][0]) === '') {
700
  return $htmlSource; // no SCRIPT tags, hmm
701
  }
702
 
703
+ if (! (function_exists('libxml_use_internal_errors') && function_exists('libxml_clear_errors') && class_exists('DOMDocument')) && class_exists('DOMXpath')) {
704
+ return $htmlSource; // DOMDocument has to be enabled
705
+ }
706
+
707
  $domTag = new \DOMDocument();
708
  libxml_use_internal_errors(true);
709
  $domTag->loadHTML($htmlSource);
classes/Overview.php CHANGED
@@ -14,238 +14,248 @@ class Overview
14
  public $data = array();
15
 
16
  /**
17
- *
18
  */
19
- public function pageOverview()
20
- {
21
- global $wpdb;
22
 
23
- $wpacuPluginId = WPACU_PLUGIN_ID;
24
 
25
- $allHandles = array();
26
 
27
- /*
28
  * Per page rules (unload, load exceptions if a bulk rule is enabled, async & defer for SCRIPT tags)
29
  */
30
- // Homepage (Unloads)
31
- $wpacuFrontPageUnloads = get_option(WPACU_PLUGIN_ID . '_front_page_no_load');
32
 
33
- if ($wpacuFrontPageUnloads) {
34
- $wpacuFrontPageUnloadsArray = @json_decode( $wpacuFrontPageUnloads, ARRAY_A );
35
 
36
- foreach (array('styles', 'scripts') as $assetType) {
37
- if ( isset( $wpacuFrontPageUnloadsArray[$assetType] ) && ! empty( $wpacuFrontPageUnloadsArray[$assetType] ) ) {
38
- foreach ( $wpacuFrontPageUnloadsArray[$assetType] as $assetHandle ) {
39
- $allHandles[$assetType][ $assetHandle ]['unload_on_home_page'] = 1;
40
- }
41
- }
42
- }
43
- }
44
 
45
- // Homepage (Load Exceptions)
46
- $wpacuFrontPageLoadExceptions = get_option(WPACU_PLUGIN_ID . '_front_page_load_exceptions');
47
 
48
- if ($wpacuFrontPageLoadExceptions) {
49
- $wpacuFrontPageLoadExceptionsArray = @json_decode( $wpacuFrontPageLoadExceptions, ARRAY_A );
50
 
51
- foreach ( array('styles', 'scripts') as $assetType ) {
52
- if ( isset( $wpacuFrontPageLoadExceptionsArray[$assetType] ) && ! empty( $wpacuFrontPageLoadExceptionsArray[$assetType] ) ) {
53
- foreach ( $wpacuFrontPageLoadExceptionsArray[$assetType] as $assetHandle ) {
54
- $allHandles[$assetType][ $assetHandle ]['load_exception_on_home_page'] = 1;
55
- }
56
- }
57
- }
58
- }
59
-
60
- // Homepage (async, defer)
61
- $wpacuFrontPageData = get_option(WPACU_PLUGIN_ID . '_front_page_data');
62
-
63
- if ($wpacuFrontPageData) {
64
- $wpacuFrontPageDataArray = @json_decode( $wpacuFrontPageData, ARRAY_A );
65
- if ( isset($wpacuFrontPageDataArray['scripts']) && ! empty($wpacuFrontPageDataArray['scripts']) ) {
66
- foreach ($wpacuFrontPageDataArray['scripts'] as $assetHandle => $assetData) {
67
- if (isset($assetData['attributes']) && ! empty($assetData['attributes'])) {
68
- // async, defer attributes
69
- $allHandles['scripts'][ $assetHandle ]['script_attrs']['home_page'] = $assetData['attributes'];
70
- }
71
- }
72
- }
73
 
74
- // Do not apply "async", "defer" exceptions (e.g. "defer" is applied site-wide, except the home page)
75
- if (isset($wpacuFrontPageDataArray['scripts_attributes_no_load']) && ! empty($wpacuFrontPageDataArray['scripts_attributes_no_load'])) {
76
  foreach ($wpacuFrontPageDataArray['scripts_attributes_no_load'] as $assetHandle => $assetAttrsNoLoad) {
77
  $allHandles['scripts'][$assetHandle]['attrs_no_load']['home_page'] = $assetAttrsNoLoad;
78
  }
79
- }
80
- }
81
 
82
- // Get all Asset CleanUp (Pro) meta keys from all WordPress meta tables where it can be possibly used
83
- foreach (array($wpdb->postmeta, $wpdb->termmeta, $wpdb->usermeta) as $tableName) {
84
- $wpacuGetValuesQuery = <<<SQL
85
  SELECT * FROM `{$tableName}`
86
  WHERE meta_key IN('_{$wpacuPluginId}_no_load', '_{$wpacuPluginId}_data', '_{$wpacuPluginId}_load_exceptions')
87
  SQL;
88
- $wpacuMetaData = $wpdb->get_results( $wpacuGetValuesQuery, ARRAY_A );
89
 
90
- foreach ( $wpacuMetaData as $wpacuValues ) {
91
- $decodedValues = @json_decode( $wpacuValues['meta_value'], ARRAY_A );
92
-
93
- if ( empty( $decodedValues ) ) {
94
- continue;
95
- }
96
 
97
- // $refId is the ID for the targeted element from the meta table which could be: post, taxonomy ID or user ID
98
- if ($tableName === $wpdb->postmeta) {
99
- $refId = $wpacuValues['post_id'];
100
- $refKey = 'post';
101
- } elseif ($tableName === $wpdb->termmeta) {
102
- $refId = $wpacuValues['term_id'];
103
- $refKey = 'term';
104
- } else {
105
- $refId = $wpacuValues['user_id'];
106
- $refKey = 'user';
107
- }
108
 
109
- if ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_no_load' ) {
110
- foreach ( $decodedValues as $assetType => $assetHandles ) {
111
- foreach ( $assetHandles as $assetHandle ) {
112
- // Unload it on this page
113
- $allHandles[ $assetType ][ $assetHandle ]['unload_on_this_page'][$refKey][] = $refId;
114
- }
115
- }
116
- } elseif ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_load_exceptions' ) {
117
- foreach ( $decodedValues as $assetType => $assetHandles ) {
118
- foreach ( $assetHandles as $assetHandle ) {
119
- // If bulk unloaded, 'Load it on this page'
120
- $allHandles[ $assetType ][ $assetHandle ]['load_exception_on_this_page'][$refKey][] = $refId;
121
- }
122
- }
123
- } elseif ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_data' ) {
124
- if ( isset( $decodedValues['scripts'] ) && ! empty( $decodedValues['scripts'] ) ) {
125
- foreach ( $decodedValues['scripts'] as $scriptHandle => $scriptData ) {
126
- if ( isset( $scriptData['attributes'] ) && ! empty( $scriptData['attributes'] ) ) {
127
- // async, defer attributes
128
- $allHandles['scripts'][ $scriptHandle ]['script_attrs'][$refKey][$refId] = $scriptData['attributes'];
129
- }
130
- }
131
- }
132
 
133
- if ( isset( $decodedValues['scripts_attributes_no_load'] ) && ! empty( $decodedValues['scripts_attributes_no_load'] ) ) {
134
- foreach ( $decodedValues['scripts_attributes_no_load'] as $scriptHandle => $scriptNoLoadAttrs ) {
135
- $allHandles['scripts'][$scriptHandle]['attrs_no_load'][$refKey][$refId] = $scriptNoLoadAttrs;
136
- }
137
- }
138
- }
139
- }
140
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
- /*
143
  * Global (Site-wide) Rules: Preloading, Position changing, Unload via RegEx, etc.
144
  */
145
- $wpacuGlobalData = get_option(WPACU_PLUGIN_ID . '_global_data');
146
- $wpacuGlobalDataArray = @json_decode($wpacuGlobalData, ARRAY_A);
147
-
148
- foreach (array('styles', 'scripts') as $assetType) {
149
- foreach (array('load_it_logged_in', 'preloads', 'positions', 'notes', 'ignore_child', 'everywhere', 'date', '404', 'search') as $dataType) {
150
- if ( isset( $wpacuGlobalDataArray[ $assetType ][$dataType] ) && ! empty( $wpacuGlobalDataArray[ $assetType ][$dataType] ) ) {
151
- foreach ( $wpacuGlobalDataArray[ $assetType ][$dataType] as $assetHandle => $dataValue ) {
152
- if ($dataType === 'everywhere' && $assetType === 'scripts' && isset($dataValue['attributes'])) {
153
- if (count($dataValue['attributes']) === 0) {
154
- continue;
155
- }
156
- // async/defer applied site-wide
157
- $allHandles[ $assetType ][ $assetHandle ]['script_site_wide_attrs'] = $dataValue['attributes'];
158
- } elseif ($dataType !== 'everywhere' && $assetType === 'scripts' && isset($dataValue['attributes'])) {
 
159
  // For date, 404, search pages
160
- $allHandles[ $assetType ][ $assetHandle ]['script_attrs'][$dataType] = $dataValue['attributes'];
161
- } else {
162
- $allHandles[ $assetType ][ $assetHandle ][ $dataType ] = $dataValue;
163
- }
164
- }
165
- }
166
- }
167
-
168
- foreach (array('unload_regex', 'load_regex') as $unloadType) {
169
- if (isset($wpacuGlobalDataArray[$assetType][$unloadType]) && ! empty($wpacuGlobalDataArray[$assetType][$unloadType])) {
170
- foreach ($wpacuGlobalDataArray[$assetType][$unloadType] as $assetHandle => $unloadData) {
171
- if (isset($unloadData['enable'], $unloadData['value']) && $unloadData['enable'] && $unloadData['value']) {
172
- $allHandles[ $assetType ][ $assetHandle ][$unloadType] = $unloadData['value'];
173
- }
174
- }
175
- }
176
- }
177
- }
178
 
179
- // Do not apply "async", "defer" exceptions (e.g. "defer" is applied site-wide, except the 404, search, date)
180
- if (isset($wpacuGlobalDataArray['scripts_attributes_no_load']) && ! empty($wpacuGlobalDataArray['scripts_attributes_no_load'])) {
181
- foreach ($wpacuGlobalDataArray['scripts_attributes_no_load'] as $unloadedIn => $unloadedInValues) {
182
  foreach ($unloadedInValues as $assetHandle => $assetAttrsNoLoad) {
183
  $allHandles['scripts'][$assetHandle]['attrs_no_load'][$unloadedIn] = $assetAttrsNoLoad;
184
  }
185
- }
186
- }
187
 
188
- /*
189
  * Unload Site-Wide (Everywhere) Rules: Preloading, Position changing, Unload via RegEx, etc.
190
  */
191
- $wpacuGlobalUnloadData = get_option(WPACU_PLUGIN_ID . '_global_unload');
192
- $wpacuGlobalUnloadDataArray = @json_decode($wpacuGlobalUnloadData, ARRAY_A);
193
 
194
- foreach (array('styles', 'scripts') as $assetType) {
195
- if (isset($wpacuGlobalUnloadDataArray[$assetType]) && ! empty($wpacuGlobalUnloadDataArray[$assetType])) {
196
- foreach ($wpacuGlobalUnloadDataArray[$assetType] as $assetHandle) {
197
- $allHandles[ $assetType ][ $assetHandle ]['unload_site_wide'] = 1;
198
- }
199
- }
200
- }
201
 
202
- /*
203
  * Bulk Unload Rules - post, page, custom post type (e.g. product, download), taxonomy (e.g. category), 404, date, etc.
204
  */
205
- $wpacuBulkUnloadData = get_option(WPACU_PLUGIN_ID . '_bulk_unload');
206
- $wpacuBulkUnloadDataArray = @json_decode($wpacuBulkUnloadData, ARRAY_A);
207
-
208
- foreach (array('styles', 'scripts') as $assetType) {
209
- if (isset($wpacuBulkUnloadDataArray[$assetType]) && ! empty($wpacuBulkUnloadDataArray[$assetType])) {
210
- foreach ($wpacuBulkUnloadDataArray[$assetType] as $unloadBulkType => $unloadBulkValues) {
211
- if (empty($unloadBulkValues)) {
212
- continue;
213
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
 
215
- // $unloadBulkType could be 'post_type', 'date', '404', 'taxonomy', 'search'
216
- if ($unloadBulkType === 'post_type') {
217
- foreach ($unloadBulkValues as $postType => $assetHandles) {
218
- foreach ($assetHandles as $assetHandle) {
219
- $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['post_type'][] = $postType;
220
- }
221
- }
222
- } elseif (in_array($unloadBulkType, array('date', '404', 'search'))) {
223
- foreach ($unloadBulkValues as $assetHandle) {
224
- $allHandles[ $assetType ][ $assetHandle ]['unload_bulk'][$unloadBulkType] = 1;
225
- }
226
- } elseif ($unloadBulkType === 'taxonomy') {
227
- foreach ($unloadBulkValues as $taxonomyType => $assetHandles) {
228
- foreach ($assetHandles as $assetHandle) {
229
- $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['taxonomy'][] = $taxonomyType;
230
- }
231
- }
232
- } elseif ($unloadBulkType === 'author' && isset($unloadBulkValues['all']) && ! empty($unloadBulkValues['all'])) {
233
- foreach ($unloadBulkValues['all'] as $assetHandle) {
234
- $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['author'] = 1;
235
- }
236
- }
237
- }
238
- }
239
- }
240
 
241
- if (isset($allHandles['styles'])) {
242
- ksort($allHandles['styles']);
243
- }
244
 
245
- if (isset($allHandles['scripts'])) {
246
- ksort($allHandles['scripts']);
247
- }
248
 
 
 
 
 
 
 
249
  $this->data['handles'] = $allHandles;
250
 
251
  if (isset($this->data['handles']['styles']) || isset($this->data['handles']['scripts'])) {
@@ -545,7 +555,11 @@ SQL;
545
  }
546
  ?>
547
  <div><a <?php if ($isExternalSrc) { ?> data-wpacu-external-source="<?php echo $src . $appendAfterSrc; ?>" <?php } ?> href="<?php echo $src . $appendAfterSrc; ?>" target="_blank"><small><?php echo str_replace( site_url(), '', $src ); ?></small></a> <?php if ($isExternalSrc) { ?><span data-wpacu-external-source-status></span><?php } ?></div>
548
- <?php
 
 
 
 
549
  }
550
 
551
  // Any note?
@@ -589,6 +603,7 @@ SQL;
589
 
590
  if (isset($handleData['unload_bulk']['taxonomy']) && ! empty($handleData['unload_bulk']['taxonomy'])) {
591
  $handleChangesOutput['bulk'] .= ' Unloaded for all pages belonging to the following taxonomies: <strong>'.implode(', ', $handleData['unload_bulk']['taxonomy']).'</strong>, ';
 
592
  }
593
 
594
  if (isset($handleData['unload_bulk']['date']) || isset($handleData['unload_bulk']['404']) || isset($handleData['unload_bulk']['search'])) {
@@ -729,6 +744,59 @@ SQL;
729
  $anyLoadExceptionRule = true;
730
  }
731
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732
  if (isset($handleData['load_regex']) && $handleData['load_regex']) {
733
  if ($anyLoadExceptionRule) {
734
  $textToShow = ' <strong>or</strong> if the request URI (from the URL) matches this RegEx';
14
  public $data = array();
15
 
16
  /**
17
+ * @return array
18
  */
19
+ public static function handlesWithAtLeastOneRule()
20
+ {
21
+ global $wpdb;
22
 
23
+ $wpacuPluginId = WPACU_PLUGIN_ID;
24
 
25
+ $allHandles = array();
26
 
27
+ /*
28
  * Per page rules (unload, load exceptions if a bulk rule is enabled, async & defer for SCRIPT tags)
29
  */
30
+ // Homepage (Unloads)
31
+ $wpacuFrontPageUnloads = get_option(WPACU_PLUGIN_ID . '_front_page_no_load');
32
 
33
+ if ($wpacuFrontPageUnloads) {
34
+ $wpacuFrontPageUnloadsArray = @json_decode( $wpacuFrontPageUnloads, ARRAY_A );
35
 
36
+ foreach (array('styles', 'scripts') as $assetType) {
37
+ if ( isset( $wpacuFrontPageUnloadsArray[$assetType] ) && ! empty( $wpacuFrontPageUnloadsArray[$assetType] ) ) {
38
+ foreach ( $wpacuFrontPageUnloadsArray[$assetType] as $assetHandle ) {
39
+ $allHandles[$assetType][ $assetHandle ]['unload_on_home_page'] = 1;
40
+ }
41
+ }
42
+ }
43
+ }
44
 
45
+ // Homepage (Load Exceptions)
46
+ $wpacuFrontPageLoadExceptions = get_option(WPACU_PLUGIN_ID . '_front_page_load_exceptions');
47
 
48
+ if ($wpacuFrontPageLoadExceptions) {
49
+ $wpacuFrontPageLoadExceptionsArray = @json_decode( $wpacuFrontPageLoadExceptions, ARRAY_A );
50
 
51
+ foreach ( array('styles', 'scripts') as $assetType ) {
52
+ if ( isset( $wpacuFrontPageLoadExceptionsArray[$assetType] ) && ! empty( $wpacuFrontPageLoadExceptionsArray[$assetType] ) ) {
53
+ foreach ( $wpacuFrontPageLoadExceptionsArray[$assetType] as $assetHandle ) {
54
+ $allHandles[$assetType][ $assetHandle ]['load_exception_on_home_page'] = 1;
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ // Homepage (async, defer)
61
+ $wpacuFrontPageData = get_option(WPACU_PLUGIN_ID . '_front_page_data');
62
+
63
+ if ($wpacuFrontPageData) {
64
+ $wpacuFrontPageDataArray = @json_decode( $wpacuFrontPageData, ARRAY_A );
65
+ if ( isset($wpacuFrontPageDataArray['scripts']) && ! empty($wpacuFrontPageDataArray['scripts']) ) {
66
+ foreach ($wpacuFrontPageDataArray['scripts'] as $assetHandle => $assetData) {
67
+ if (isset($assetData['attributes']) && ! empty($assetData['attributes'])) {
68
+ // async, defer attributes
69
+ $allHandles['scripts'][ $assetHandle ]['script_attrs']['home_page'] = $assetData['attributes'];
70
+ }
71
+ }
72
+ }
73
 
74
+ // Do not apply "async", "defer" exceptions (e.g. "defer" is applied site-wide, except the home page)
75
+ if (isset($wpacuFrontPageDataArray['scripts_attributes_no_load']) && ! empty($wpacuFrontPageDataArray['scripts_attributes_no_load'])) {
76
  foreach ($wpacuFrontPageDataArray['scripts_attributes_no_load'] as $assetHandle => $assetAttrsNoLoad) {
77
  $allHandles['scripts'][$assetHandle]['attrs_no_load']['home_page'] = $assetAttrsNoLoad;
78
  }
79
+ }
80
+ }
81
 
82
+ // Get all Asset CleanUp (Pro) meta keys from all WordPress meta tables where it can be possibly used
83
+ foreach (array($wpdb->postmeta, $wpdb->termmeta, $wpdb->usermeta) as $tableName) {
84
+ $wpacuGetValuesQuery = <<<SQL
85
  SELECT * FROM `{$tableName}`
86
  WHERE meta_key IN('_{$wpacuPluginId}_no_load', '_{$wpacuPluginId}_data', '_{$wpacuPluginId}_load_exceptions')
87
  SQL;
88
+ $wpacuMetaData = $wpdb->get_results( $wpacuGetValuesQuery, ARRAY_A );
89
 
90
+ foreach ( $wpacuMetaData as $wpacuValues ) {
91
+ $decodedValues = @json_decode( $wpacuValues['meta_value'], ARRAY_A );
 
 
 
 
92
 
93
+ if ( empty( $decodedValues ) ) {
94
+ continue;
95
+ }
 
 
 
 
 
 
 
 
96
 
97
+ // $refId is the ID for the targeted element from the meta table which could be: post, taxonomy ID or user ID
98
+ if ($tableName === $wpdb->postmeta) {
99
+ $refId = $wpacuValues['post_id'];
100
+ $refKey = 'post';
101
+ } elseif ($tableName === $wpdb->termmeta) {
102
+ $refId = $wpacuValues['term_id'];
103
+ $refKey = 'term';
104
+ } else {
105
+ $refId = $wpacuValues['user_id'];
106
+ $refKey = 'user';
107
+ }
 
 
 
 
 
 
 
 
 
 
 
 
108
 
109
+ if ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_no_load' ) {
110
+ foreach ( $decodedValues as $assetType => $assetHandles ) {
111
+ foreach ( $assetHandles as $assetHandle ) {
112
+ // Unload it on this page
113
+ $allHandles[ $assetType ][ $assetHandle ]['unload_on_this_page'][$refKey][] = $refId;
114
+ }
115
+ }
116
+ } elseif ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_load_exceptions' ) {
117
+ foreach ( $decodedValues as $assetType => $assetHandles ) {
118
+ foreach ( $assetHandles as $assetHandle ) {
119
+ // If bulk unloaded, 'Load it on this page'
120
+ $allHandles[ $assetType ][ $assetHandle ]['load_exception_on_this_page'][$refKey][] = $refId;
121
+ }
122
+ }
123
+ } elseif ( $wpacuValues['meta_key'] === '_' . $wpacuPluginId . '_data' ) {
124
+ if ( isset( $decodedValues['scripts'] ) && ! empty( $decodedValues['scripts'] ) ) {
125
+ foreach ( $decodedValues['scripts'] as $assetHandle => $scriptData ) {
126
+ if ( isset( $scriptData['attributes'] ) && ! empty( $scriptData['attributes'] ) ) {
127
+ // async, defer attributes
128
+ $allHandles['scripts'][ $assetHandle ]['script_attrs'][$refKey][$refId] = $scriptData['attributes'];
129
+ }
130
+ }
131
+ }
132
+
133
+ if ( isset( $decodedValues['scripts_attributes_no_load'] ) && ! empty( $decodedValues['scripts_attributes_no_load'] ) ) {
134
+ foreach ( $decodedValues['scripts_attributes_no_load'] as $assetHandle => $scriptNoLoadAttrs ) {
135
+ $allHandles['scripts'][$assetHandle]['attrs_no_load'][$refKey][$refId] = $scriptNoLoadAttrs;
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
 
142
+ /*
143
  * Global (Site-wide) Rules: Preloading, Position changing, Unload via RegEx, etc.
144
  */
145
+ $wpacuGlobalData = get_option(WPACU_PLUGIN_ID . '_global_data');
146
+ $wpacuGlobalDataArray = @json_decode($wpacuGlobalData, ARRAY_A);
147
+
148
+ foreach (array('styles', 'scripts') as $assetType) {
149
+ foreach (array('load_it_logged_in', 'preloads', 'positions', 'notes', 'ignore_child', 'everywhere', 'date', '404', 'search') as $dataType) {
150
+ if ( isset( $wpacuGlobalDataArray[ $assetType ][$dataType] ) && ! empty( $wpacuGlobalDataArray[ $assetType ][$dataType] ) ) {
151
+ foreach ( $wpacuGlobalDataArray[ $assetType ][$dataType] as $assetHandle => $dataValue ) {
152
+ if ($dataType === 'everywhere' && $assetType === 'scripts' && isset($dataValue['attributes'])) {
153
+ if (count($dataValue['attributes']) === 0) {
154
+ continue;
155
+ }
156
+
157
+ // async/defer applied site-wide
158
+ $allHandles[ $assetType ][ $assetHandle ]['script_site_wide_attrs'] = $dataValue['attributes'];
159
+ } elseif ($dataType !== 'everywhere' && $assetType === 'scripts' && isset($dataValue['attributes'])) {
160
  // For date, 404, search pages
161
+ $allHandles[ $assetType ][ $assetHandle ]['script_attrs'][$dataType] = $dataValue['attributes'];
162
+ } else {
163
+ $allHandles[ $assetType ][ $assetHandle ][ $dataType ] = $dataValue;
164
+ }
165
+ }
166
+ }
167
+ }
168
+
169
+ foreach (array('unload_regex', 'load_regex') as $unloadType) {
170
+ if (isset($wpacuGlobalDataArray[$assetType][$unloadType]) && ! empty($wpacuGlobalDataArray[$assetType][$unloadType])) {
171
+ foreach ($wpacuGlobalDataArray[$assetType][$unloadType] as $assetHandle => $unloadData) {
172
+ if (isset($unloadData['enable'], $unloadData['value']) && $unloadData['enable'] && $unloadData['value']) {
173
+ $allHandles[ $assetType ][ $assetHandle ][$unloadType] = $unloadData['value'];
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
 
180
+ // Do not apply "async", "defer" exceptions (e.g. "defer" is applied site-wide, except the 404, search, date)
181
+ if (isset($wpacuGlobalDataArray['scripts_attributes_no_load']) && ! empty($wpacuGlobalDataArray['scripts_attributes_no_load'])) {
182
+ foreach ($wpacuGlobalDataArray['scripts_attributes_no_load'] as $unloadedIn => $unloadedInValues) {
183
  foreach ($unloadedInValues as $assetHandle => $assetAttrsNoLoad) {
184
  $allHandles['scripts'][$assetHandle]['attrs_no_load'][$unloadedIn] = $assetAttrsNoLoad;
185
  }
186
+ }
187
+ }
188
 
189
+ /*
190
  * Unload Site-Wide (Everywhere) Rules: Preloading, Position changing, Unload via RegEx, etc.
191
  */
192
+ $wpacuGlobalUnloadData = get_option(WPACU_PLUGIN_ID . '_global_unload');
193
+ $wpacuGlobalUnloadDataArray = @json_decode($wpacuGlobalUnloadData, ARRAY_A);
194
 
195
+ foreach (array('styles', 'scripts') as $assetType) {
196
+ if (isset($wpacuGlobalUnloadDataArray[$assetType]) && ! empty($wpacuGlobalUnloadDataArray[$assetType])) {
197
+ foreach ($wpacuGlobalUnloadDataArray[$assetType] as $assetHandle) {
198
+ $allHandles[ $assetType ][ $assetHandle ]['unload_site_wide'] = 1;
199
+ }
200
+ }
201
+ }
202
 
203
+ /*
204
  * Bulk Unload Rules - post, page, custom post type (e.g. product, download), taxonomy (e.g. category), 404, date, etc.
205
  */
206
+ $wpacuBulkUnloadData = get_option(WPACU_PLUGIN_ID . '_bulk_unload');
207
+ $wpacuBulkUnloadDataArray = @json_decode($wpacuBulkUnloadData, ARRAY_A);
208
+
209
+ foreach (array('styles', 'scripts') as $assetType) {
210
+ if (isset($wpacuBulkUnloadDataArray[$assetType]) && ! empty($wpacuBulkUnloadDataArray[$assetType])) {
211
+ foreach ($wpacuBulkUnloadDataArray[$assetType] as $unloadBulkType => $unloadBulkValues) {
212
+ if (empty($unloadBulkValues)) {
213
+ continue;
214
+ }
215
+
216
+ // $unloadBulkType could be 'post_type', 'date', '404', 'taxonomy', 'search'
217
+ if ($unloadBulkType === 'post_type') {
218
+ foreach ($unloadBulkValues as $postType => $assetHandles) {
219
+ foreach ($assetHandles as $assetHandle) {
220
+ $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['post_type'][] = $postType;
221
+ }
222
+ }
223
+ } elseif (in_array($unloadBulkType, array('date', '404', 'search'))) {
224
+ foreach ($unloadBulkValues as $assetHandle) {
225
+ $allHandles[ $assetType ][ $assetHandle ]['unload_bulk'][$unloadBulkType] = 1;
226
+ }
227
+ } elseif ($unloadBulkType === 'taxonomy') {
228
+ foreach ($unloadBulkValues as $taxonomyType => $assetHandles) {
229
+ foreach ($assetHandles as $assetHandle) {
230
+ $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['taxonomy'][] = $taxonomyType;
231
+ }
232
+ }
233
+ } elseif ($unloadBulkType === 'author' && isset($unloadBulkValues['all']) && ! empty($unloadBulkValues['all'])) {
234
+ foreach ($unloadBulkValues['all'] as $assetHandle) {
235
+ $allHandles[ $assetType ][ $assetHandle ]['unload_bulk']['author'] = 1;
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
 
242
+ if (isset($allHandles['styles'])) {
243
+ ksort($allHandles['styles']);
244
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
 
246
+ if (isset($allHandles['scripts'])) {
247
+ ksort($allHandles['scripts']);
248
+ }
249
 
250
+ return $allHandles;
251
+ }
 
252
 
253
+ /**
254
+ *
255
+ */
256
+ public function pageOverview()
257
+ {
258
+ $allHandles = self::handlesWithAtLeastOneRule();
259
  $this->data['handles'] = $allHandles;
260
 
261
  if (isset($this->data['handles']['styles']) || isset($this->data['handles']['scripts'])) {
555
  }
556
  ?>
557
  <div><a <?php if ($isExternalSrc) { ?> data-wpacu-external-source="<?php echo $src . $appendAfterSrc; ?>" <?php } ?> href="<?php echo $src . $appendAfterSrc; ?>" target="_blank"><small><?php echo str_replace( site_url(), '', $src ); ?></small></a> <?php if ($isExternalSrc) { ?><span data-wpacu-external-source-status></span><?php } ?></div>
558
+ <?php
559
+ if ($maybeInactiveAsset = \WpAssetCleanUp\Misc::maybeIsInactiveAsset($src)) { ?>
560
+ <div><small><strong>Note:</strong> <span style="color: darkred;">The plugin `<strong><?php echo $maybeInactiveAsset; ?></strong>` seems to be inactive, thus any rules set are also inactive &amp; irrelevant, unless you re-activate the plugin.</span></small></div>
561
+ <?php
562
+ }
563
  }
564
 
565
  // Any note?
603
 
604
  if (isset($handleData['unload_bulk']['taxonomy']) && ! empty($handleData['unload_bulk']['taxonomy'])) {
605
  $handleChangesOutput['bulk'] .= ' Unloaded for all pages belonging to the following taxonomies: <strong>'.implode(', ', $handleData['unload_bulk']['taxonomy']).'</strong>, ';
606
+ $anyGroupPostUnloadRule = true;
607
  }
608
 
609
  if (isset($handleData['unload_bulk']['date']) || isset($handleData['unload_bulk']['404']) || isset($handleData['unload_bulk']['search'])) {
744
  $anyLoadExceptionRule = true;
745
  }
746
 
747
+ // [wpacu_pro]
748
+ // Load exceptions? Per taxonomy page (e.g. /category/clothes/)
749
+ if (isset($handleData['load_exception_on_this_page']['term'])) {
750
+ $handleChangesOutput['load_exception_on_this_taxonomy'] = '<span style="color: green;">Loaded (as an exception)</span> in the following taxonomy pages: ';
751
+
752
+ $postsList = '';
753
+
754
+ sort($handleData['load_exception_on_this_page']['term']);
755
+
756
+ foreach ($handleData['load_exception_on_this_page']['term'] as $termId) {
757
+ $termData = get_term_by('term_taxonomy_id', $termId);
758
+ $postsList .= '<a title="" target="_blank" href="'.admin_url('term.php?taxonomy='.$termData->taxonomy.'&tag_ID='.$termId).'">'.$termId.'</a> ('.$termData->name.' / taxonomy: '.$termData->taxonomy.'), ';
759
+ }
760
+
761
+ $handleChangesOutput['load_exception_on_this_taxonomy'] .= rtrim($postsList, ', ');
762
+ $anyLoadExceptionRule = true;
763
+ }
764
+
765
+ // Load exceptions? Per user archive page (e.g. /author/john/)
766
+ if (isset($handleData['load_exception_on_this_page']['user'])) {
767
+ $handleChangesOutput['load_exception_on_this_user'] = '<span style="color: green;">Loaded (as an exception)</span> in the following user archive pages: ';
768
+
769
+ $usersList = '';
770
+
771
+ sort($handleData['load_exception_on_this_page']['user']);
772
+
773
+ foreach ($handleData['load_exception_on_this_page']['user'] as $userId) {
774
+ $userData = get_user_by('id', $userId);
775
+ $usersList .= '<a title="" target="_blank" href="'.admin_url('user-edit.php?user_id='.$userData->ID).'">'.$userData->ID.'</a> ('.$userData->data->user_nicename.'), ';
776
+ }
777
+
778
+ $handleChangesOutput['load_exception_on_this_user'] .= rtrim($usersList, ', ');
779
+ $anyLoadExceptionRule = true;
780
+ }
781
+
782
+ // Load exceptions? Search page
783
+ if (isset($handleData['load_exception_on_this_page']['search'])) {
784
+ $handleChangesOutput['load_exception_on_search_any_term'] = '<span style="color: green;">Loaded (as an exception)</span> in a `Search` page (any term)';
785
+ $anyLoadExceptionRule = true;
786
+ }
787
+
788
+ // Load exceptions? 404 page
789
+ if (isset($handleData['load_exception_on_this_page']['404'])) {
790
+ $handleChangesOutput['load_exception_on_404_page'] = '<span style="color: green;">Loaded (as an exception)</span> in a `404 (Not Found)` page';
791
+ $anyLoadExceptionRule = true;
792
+ }
793
+
794
+ // Load exceptions? Date archive page
795
+ if (isset($handleData['load_exception_on_this_page']['date'])) {
796
+ $handleChangesOutput['load_exception_on_date_archive_page'] = '<span style="color: green;">Loaded (as an exception)</span> in a `Date` archive page';
797
+ $anyLoadExceptionRule = true;
798
+ }
799
+
800
  if (isset($handleData['load_regex']) && $handleData['load_regex']) {
801
  if ($anyLoadExceptionRule) {
802
  $textToShow = ' <strong>or</strong> if the request URI (from the URL) matches this RegEx';
classes/OwnAssets.php CHANGED
@@ -32,26 +32,68 @@ class OwnAssets
32
 
33
  add_action('admin_footer', array($this, 'inlineFooterCode'));
34
 
35
- if (! is_admin()) {
36
- // Rename ?ver= to ?wpacuversion to prevent other plugins from stripping "ver"
37
- add_filter('script_loader_src', array($this, 'ownAssetLoaderSrc'));
38
- add_filter('style_loader_src', array($this, 'ownAssetLoaderSrc'));
39
- add_filter('script_loader_tag', array($this, 'ownAssetLoaderTag'), 10, 2);
40
- }
41
 
42
  add_filter('wpacu_object_data', static function($wpacu_object_data) {
43
  $wpacu_object_data['source_load_error_msg'] = __('It looks like the source is not reachable', 'wp-asset-clean-up');
44
  $wpacu_object_data['plugin_id'] = WPACU_PLUGIN_ID;
45
  $wpacu_object_data['ajax_url'] = admin_url('admin-ajax.php');
46
- $wpacu_object_data['clear_cache_on_page_load'] = false; // default
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  // After homepage/post/page is saved and the page is reloaded, clear the cache
49
- $unloadAssetsSubmit = (isset($_POST['wpacu_unload_assets_area_loaded']) && $_POST['wpacu_unload_assets_area_loaded']);
50
- $frontendViewPageAssetsJustUpdated = (! is_admin() && (isset($_GET['wpacu_updated']) && $_GET['wpacu_updated']));
 
 
 
 
 
 
51
 
52
- if ($unloadAssetsSubmit || $frontendViewPageAssetsJustUpdated) {
53
- $wpacu_object_data['clear_cache_on_page_load'] = true;
54
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  return $wpacu_object_data;
57
  });
@@ -169,7 +211,7 @@ class OwnAssets
169
  public function stylesAndScriptsForPublic()
170
  {
171
  // Do not print it when an AJAX call is made from the Dashboard
172
- if (isset($_POST[WPACU_LOAD_ASSETS_REQ_KEY])) {
173
  return;
174
  }
175
 
@@ -178,9 +220,8 @@ class OwnAssets
178
  return;
179
  }
180
 
181
- // Is the Admin Bar not showing and "Manage in the Front-end" option is not enabled in the plugin's "Settings"?
182
- // In this case, there's no point in loading the assets below
183
- if (! is_admin_bar_showing() && ! Main::instance()->frontendShow()) {
184
  return;
185
  }
186
 
@@ -402,37 +443,35 @@ JS;
402
  // [End] Chosen Script
403
  }
404
 
 
405
  if ($page === WPACU_PLUGIN_ID . '_assets_manager' || (Misc::getVar('get', 'post') && Misc::getVar('get', 'action') === 'edit')) {
406
  // [Start] SweetAlert
407
- wp_enqueue_style(
408
- WPACU_PLUGIN_ID . '-sweetalert-css',
409
- plugins_url('/assets/sweetalert/sweetalert.css', WPACU_PLUGIN_FILE),
410
- array(),
411
- 1
412
- );
413
- $sweetAlertStyleInline = <<<CSS
414
- .swal-overlay {
415
- z-index: 10000000;
416
- }
417
-
418
- .swal-text {
419
- line-height: 24px;
420
- }
421
-
422
- .swal-footer {
423
- text-align: center;
424
- padding: 13px 16px 20px;
425
- }
426
-
427
- .swal-button.swal-button--confirm {
428
- background-color: #008f9c;
429
- }
430
-
431
- .swal-button.swal-button--confirm:hover {
432
- background-color: #006e78;
433
- }
434
- CSS;
435
- wp_add_inline_style(WPACU_PLUGIN_ID . '-sweetalert-css', $sweetAlertStyleInline);
436
 
437
  wp_enqueue_script(
438
  WPACU_PLUGIN_ID . '-sweetalert-js',
@@ -470,6 +509,7 @@ JS;
470
  wp_add_inline_script(WPACU_PLUGIN_ID . '-sweetalert-js', $sweetAlertScriptInline);
471
  // [ENd] SweetAlert
472
  }
 
473
 
474
  if (in_array($page, array(WPACU_PLUGIN_ID . '_overview', WPACU_PLUGIN_ID . '_bulk_unloads'))) {
475
  // [Start] Tooltipster Style
@@ -544,15 +584,15 @@ JS;
544
  * It will force them to refresh whenever there's a change in either of the files
545
  *
546
  * @param $src
 
547
  *
548
  * @return mixed
549
  */
550
- public function ownAssetLoaderSrc($src)
551
- {
552
- if (strpos($src, '/wp-asset-clean-up/assets/script.min.js') !== false
553
- || strpos($src, '/wp-asset-clean-up/assets/style.min.css') !== false) {
554
  $src = str_replace(
555
- array('?ver=', '&ver='),
556
  array('?wpacuversion=', '&wpacuversion='),
557
  $src);
558
  }
@@ -569,7 +609,7 @@ JS;
569
  public function ownAssetLoaderTag($tag, $handle)
570
  {
571
  // Useful in case jQuery library is deferred too (rare situations)
572
- if ($handle === WPACU_PLUGIN_ID . '-script' && ! is_admin()) {
573
  $tag = str_replace(' src=', ' data-wpacu-plugin-script defer=\'defer\' src=', $tag);
574
  }
575
 
32
 
33
  add_action('admin_footer', array($this, 'inlineFooterCode'));
34
 
35
+
36
+ // Rename ?ver= to ?wpacuversion to prevent other plugins from stripping "ver"
37
+ // This is valid in the front-end and the Dashboard
38
+ add_filter('script_loader_src', array($this, 'ownAssetLoaderSrc'), 10, 2);
39
+ add_filter('style_loader_src', array($this, 'ownAssetLoaderSrc'), 10, 2);
40
+ add_filter('script_loader_tag', array($this, 'ownAssetLoaderTag'), 10, 2);
41
 
42
  add_filter('wpacu_object_data', static function($wpacu_object_data) {
43
  $wpacu_object_data['source_load_error_msg'] = __('It looks like the source is not reachable', 'wp-asset-clean-up');
44
  $wpacu_object_data['plugin_id'] = WPACU_PLUGIN_ID;
45
  $wpacu_object_data['ajax_url'] = admin_url('admin-ajax.php');
46
+
47
+ $wpacu_object_data['jquery_unload_alert'] = 'jQuery library is a WordPress library that it is used in WordPress plugins/themes most of the time.'."\n\n".
48
+ 'There are currently other JavaScript "children" files connected to it, that will stop working, if this library is unloaded'."\n\n".
49
+ 'If you are positive this page does not require jQuery (very rare cases), then you can continue by pressing "OK"'."\n\n".
50
+ 'Otherwise, it is strongly recommended to keep this library loaded by pressing "Cancel" to avoid breaking the functionality of the website.';
51
+
52
+ // backbone, underscore, etc.
53
+ $wpacu_object_data['sensitive_library_unload_alert'] = 'Please make sure to properly test this page after this particular JavaScript file is unloaded as it is usually loaded for a reason.'."\n\n".
54
+ 'If you are not sure whether it is used or not, then consider using the "Cancel" button to avoid taking ay chances in breaking the website\'s functionality.'."\n\n".
55
+ 'It is advised to check the browser\'s console via right-click and "Inspect" to check for any reported errors.';
56
+
57
+ $wpacu_object_data['dashicons_unload_alert_ninja_forms'] = 'It looks like you are using "Ninja Forms" plugin which is sometimes loading Dashicons for the forms\' styling.'."\n\n".
58
+ 'If you are sure your forms do not use Dashicons, please use the following option \'Ignore dependency rule and keep the "children" loaded\' to avoid the unloading of the "nf-display" handle.'. "\n\n".
59
+ 'Click "OK" to continue or "Cancel" if you have any doubts about unloading the Dashicons. It is better to have Dashicons loaded, then take a chance and break the forms\' layout.';
60
 
61
  // After homepage/post/page is saved and the page is reloaded, clear the cache
62
+ // Cache clearing default values
63
+ $wpacu_object_data['clear_cache_on_page_load'] = $wpacu_object_data['clear_other_caches'] = false; // default
64
+
65
+ /*
66
+ * [Start] Trigger plugin cache and other plugins'/system caches
67
+ */
68
+ // After editing post/page within the Dashboard
69
+ $unloadAssetsSubmit = (isset($_POST['wpacu_unload_assets_area_loaded']) && $_POST['wpacu_unload_assets_area_loaded']);
70
 
71
+ // After updating the CSS/JS manager within the front-end view (when "Manage in the front-end" is enabled)
72
+ $frontendViewPageAssetsJustUpdated = (! is_admin() && get_transient('wpacu_page_just_updated'));
73
+
74
+ // After updating the "Settings" within the Dashboard
75
+ $pluginSettingsWithinDashboardJustUpdated = (is_admin() && get_transient('wpacu_settings_updated'));
76
+
77
+ if ($unloadAssetsSubmit || $frontendViewPageAssetsJustUpdated || $pluginSettingsWithinDashboardJustUpdated) {
78
+ // Instruct the script to trigger clearing the cache via AJAX
79
+ $wpacu_object_data['clear_cache_on_page_load'] = true;
80
+ }
81
+ /*
82
+ * [End] Trigger plugin cache and other plugins'/system caches
83
+ */
84
+
85
+ /*
86
+ * [Start] Trigger ONLY other plugins'/system caches
87
+ */
88
+ // When click the "Clear CSS/JS Files Cache" link within the Dashboard (e.g. toolbar or quick action areas)
89
+ // Cache was already cleared; Do not clear it again (save resources); Clear other caches
90
+ if (get_transient('wpacu_clear_assets_cache_via_link')) {
91
+ delete_transient('wpacu_clear_assets_cache_via_link');
92
+ $wpacu_object_data['clear_other_caches'] = true;
93
+ }
94
+ /*
95
+ * [End] Trigger ONLY other plugins'/system caches
96
+ */
97
 
98
  return $wpacu_object_data;
99
  });
211
  public function stylesAndScriptsForPublic()
212
  {
213
  // Do not print it when an AJAX call is made from the Dashboard
214
+ if (WPACU_GET_LOADED_ASSETS_ACTION === true) {
215
  return;
216
  }
217
 
220
  return;
221
  }
222
 
223
+ // If "Manage in the Front-end" option is not enabled in the plugin's "Settings", there's no point in loading the assets below
224
+ if (! Main::instance()->frontendShow()) {
 
225
  return;
226
  }
227
 
443
  // [End] Chosen Script
444
  }
445
 
446
+ // [wpacu_lite]
447
  if ($page === WPACU_PLUGIN_ID . '_assets_manager' || (Misc::getVar('get', 'post') && Misc::getVar('get', 'action') === 'edit')) {
448
  // [Start] SweetAlert
449
+ add_action('admin_head', static function() {
450
+ ?>
451
+ <style type="text/css" data-wpacu-own-inline-style="true">
452
+ .swal-overlay {
453
+ z-index: 10000000;
454
+ }
455
+
456
+ .swal-text {
457
+ line-height: 24px;
458
+ }
459
+
460
+ .swal-footer {
461
+ text-align: center;
462
+ padding: 13px 16px 20px;
463
+ }
464
+
465
+ .swal-button.swal-button--confirm {
466
+ background-color: #008f9c;
467
+ }
468
+
469
+ .swal-button.swal-button--confirm:hover {
470
+ background-color: #006e78;
471
+ }
472
+ </style>
473
+ <?php
474
+ });
 
 
 
475
 
476
  wp_enqueue_script(
477
  WPACU_PLUGIN_ID . '-sweetalert-js',
509
  wp_add_inline_script(WPACU_PLUGIN_ID . '-sweetalert-js', $sweetAlertScriptInline);
510
  // [ENd] SweetAlert
511
  }
512
+ // [/wpacu_lite]
513
 
514
  if (in_array($page, array(WPACU_PLUGIN_ID . '_overview', WPACU_PLUGIN_ID . '_bulk_unloads'))) {
515
  // [Start] Tooltipster Style
584
  * It will force them to refresh whenever there's a change in either of the files
585
  *
586
  * @param $src
587
+ * @param $handle
588
  *
589
  * @return mixed
590
  */
591
+ public function ownAssetLoaderSrc($src, $handle)
592
+ {
593
+ if (in_array($handle, array(WPACU_PLUGIN_ID . '-style', WPACU_PLUGIN_ID . '-script'))) {
 
594
  $src = str_replace(
595
+ array('?ver=', '&ver='),
596
  array('?wpacuversion=', '&wpacuversion='),
597
  $src);
598
  }
609
  public function ownAssetLoaderTag($tag, $handle)
610
  {
611
  // Useful in case jQuery library is deferred too (rare situations)
612
+ if ($handle === WPACU_PLUGIN_ID . '-script') {
613
  $tag = str_replace(' src=', ' data-wpacu-plugin-script defer=\'defer\' src=', $tag);
614
  }
615
 
classes/Plugin.php CHANGED
@@ -2,6 +2,8 @@
2
  namespace WpAssetCleanUp;
3
 
4
  use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
 
 
5
 
6
  /**
7
  * Class Plugin
@@ -22,6 +24,7 @@ class Plugin
22
  public function __construct()
23
  {
24
  register_activation_hook(WPACU_PLUGIN_FILE, array($this, 'whenActivated'));
 
25
  }
26
 
27
  /**
@@ -34,7 +37,7 @@ class Plugin
34
 
35
  // [wpacu_lite]
36
  // Admin footer text: Ask the user to review the plugin
37
- add_filter('admin_footer_text', array($this, 'adminFooter'), 1, 1);
38
  // [/wpacu_lite]
39
 
40
  // Show "Settings" and "Go Pro" as plugin action links
@@ -62,7 +65,7 @@ class Plugin
62
  *
63
  * @return string
64
  */
65
- public function adminFooter($text)
66
  {
67
  if (isset($_GET['page']) && strpos($_GET['page'], WPACU_PLUGIN_ID) !== false) {
68
  $text = sprintf(__('Thank you for using %s', 'wp-asset-clean-up'), WPACU_PLUGIN_TITLE.' v'.WPACU_PLUGIN_VERSION)
@@ -82,7 +85,7 @@ class Plugin
82
  // [/wpacu_lite]
83
 
84
  /**
85
- *
86
  */
87
  public function whenActivated()
88
  {
@@ -134,6 +137,94 @@ class Plugin
134
  }
135
  }
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  /**
138
  * @param $assetTypes
139
  */
2
  namespace WpAssetCleanUp;
3
 
4
  use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
5
+ use WpAssetCleanUp\OptimiseAssets\OptimizeCss;
6
+ use WpAssetCleanUp\OptimiseAssets\OptimizeJs;
7
 
8
  /**
9
  * Class Plugin
24
  public function __construct()
25
  {
26
  register_activation_hook(WPACU_PLUGIN_FILE, array($this, 'whenActivated'));
27
+ register_deactivation_hook(WPACU_PLUGIN_FILE, array($this, 'whenDeactivated'));
28
  }
29
 
30
  /**
37
 
38
  // [wpacu_lite]
39
  // Admin footer text: Ask the user to review the plugin
40
+ add_filter('admin_footer_text', array($this, 'adminFooterText'), 1, 1);
41
  // [/wpacu_lite]
42
 
43
  // Show "Settings" and "Go Pro" as plugin action links
65
  *
66
  * @return string
67
  */
68
+ public function adminFooterText($text)
69
  {
70
  if (isset($_GET['page']) && strpos($_GET['page'], WPACU_PLUGIN_ID) !== false) {
71
  $text = sprintf(__('Thank you for using %s', 'wp-asset-clean-up'), WPACU_PLUGIN_TITLE.' v'.WPACU_PLUGIN_VERSION)
85
  // [/wpacu_lite]
86
 
87
  /**
88
+ * Actions taken when the plugin is activated
89
  */
90
  public function whenActivated()
91
  {
137
  }
138
  }
139
 
140
+ /**
141
+ * Actions taken when the plugin is deactivated
142
+ */
143
+ public function whenDeactivated()
144
+ {
145
+ // Clear traces of the plugin which are re-generated once the plugin is enabled
146
+ // This is good when the admin wants to completely uninstall the plugin
147
+ self::clearAllTransients();
148
+ self::removeCacheDirWithoutAssets();
149
+
150
+ // Clear other plugin's cache (if they are active)
151
+ OptimizeCommon::clearOtherPluginsCache();
152
+ }
153
+
154
+ /**
155
+ * Removes all plugin's transients, this is usually done when the plugin is deactivated
156
+ */
157
+ public static function clearAllTransients()
158
+ {
159
+ global $wpdb;
160
+
161
+ // Remove all transients
162
+ $transientLikes = array(
163
+ '_transient_wpacu_',
164
+ '_transient_'.WPACU_PLUGIN_ID.'_'
165
+ );
166
+
167
+ $transientLikesSql = '';
168
+
169
+ foreach ($transientLikes as $transientLike) {
170
+ $transientLikesSql .= " option_name LIKE '".$transientLike."%' OR ";
171
+ }
172
+
173
+ $transientLikesSql = rtrim($transientLikesSql, ' OR ');
174
+
175
+ $sqlQuery = <<<SQL
176
+ SELECT option_name FROM `{$wpdb->prefix}options` WHERE {$transientLikesSql}
177
+ SQL;
178
+ $transientsToClear = $wpdb->get_col($sqlQuery);
179
+
180
+ foreach ($transientsToClear as $transientToClear) {
181
+ $transientNameToClear = str_replace('_transient_', '', $transientToClear);
182
+ delete_transient($transientNameToClear);
183
+ }
184
+ }
185
+
186
+ /**
187
+ * This is usually triggered when the plugin is deactivated
188
+ * If the caching directory doesn't have any CSS/JS left, it will clear itself
189
+ * The admin might want to clear all traces of the plugin
190
+ * If the plugin is re-activated, the caching directory will be re-created automatically
191
+ */
192
+ public static function removeCacheDirWithoutAssets()
193
+ {
194
+ $pathToCacheDir = WP_CONTENT_DIR . OptimizeCommon::getRelPathPluginCacheDir();
195
+ $pathToCacheDirCss = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir();
196
+ $pathToCacheDirJs = WP_CONTENT_DIR . OptimizeJs::getRelPathJsCacheDir();
197
+
198
+ $allCssFiles = glob( $pathToCacheDirCss . '**/*.css' );
199
+ $allJsFiles = glob( $pathToCacheDirJs . '**/*.js' );
200
+
201
+ // Only valid when there's no CSS or JS (not one single file) there
202
+ if ( count( $allCssFiles ) === 0 && count( $allJsFiles ) === 0 ) {
203
+ $dirItems = new \RecursiveDirectoryIterator( $pathToCacheDir );
204
+
205
+ $allDirs = array($pathToCacheDir);
206
+
207
+ // First, remove the files
208
+ foreach ( new \RecursiveIteratorIterator( $dirItems, \RecursiveIteratorIterator::SELF_FIRST,
209
+ \RecursiveIteratorIterator::CATCH_GET_CHILD ) as $item) {
210
+ if (is_dir($item)) {
211
+ $allDirs[] = $item;
212
+ } else {
213
+ @unlink($item);
214
+ }
215
+ }
216
+
217
+ usort($allDirs, static function($a, $b) {
218
+ return strlen($b) - strlen($a);
219
+ });
220
+
221
+ // Then, remove the empty dirs in descending order (up to the root)
222
+ foreach ($allDirs as $dir) {
223
+ @rmdir($dir);
224
+ }
225
+ }
226
+ }
227
+
228
  /**
229
  * @param $assetTypes
230
  */
classes/Settings.php CHANGED
@@ -105,12 +105,12 @@ class Settings
105
 
106
  'disable_emojis',
107
  'disable_oembed',
108
- 'disable_dashicons_for_guests',
109
 
110
  // Stored in 'wpassetcleanup_global_unload' option
111
- 'disable_wp_block_library',
112
- 'disable_jquery_migrate',
113
- 'disable_comment_reply',
 
114
 
115
  // <head> CleanUp
116
  'remove_rsd_link',
@@ -268,7 +268,14 @@ class Settings
268
 
269
  if (Misc::getVar('get', 'page') === WPACU_PLUGIN_ID . '_settings') {
270
  add_action('wpacu_admin_notices', array($this, 'notices'));
 
 
 
 
 
271
  }
 
 
272
  }
273
 
274
  /**
@@ -335,10 +342,17 @@ class Settings
335
 
336
  $globalUnloadList = Main::instance()->getGlobalUnload();
337
 
 
 
 
 
 
338
  if (in_array('wp-block-library', $globalUnloadList['styles'])) {
339
  $data['disable_wp_block_library'] = 1;
340
  }
 
341
 
 
342
  if (in_array('jquery-migrate', $globalUnloadList['scripts'])) {
343
  $data['disable_jquery_migrate'] = 1;
344
  }
@@ -346,6 +360,7 @@ class Settings
346
  if (in_array('comment-reply', $globalUnloadList['scripts'])) {
347
  $data['disable_comment_reply'] = 1;
348
  }
 
349
 
350
  $data['is_optimize_css_enabled_by_other_party'] = OptimizeCss::isOptimizeCssEnabledByOtherParty();
351
  $data['is_optimize_js_enabled_by_other_party'] = OptimizeJs::isOptimizeJsEnabledByOtherParty();
@@ -450,7 +465,7 @@ class Settings
450
  {
451
  $settings = $this->getAll();
452
  $settings[$key] = $value;
453
- $this->update($settings, false, false);
454
  }
455
 
456
  /**
@@ -460,7 +475,7 @@ class Settings
460
  {
461
  $settings = $this->getAll();
462
  $settings[$key] = '';
463
- $this->update($settings, false, false);
464
  }
465
 
466
  /**
@@ -508,9 +523,8 @@ class Settings
508
  /**
509
  * @param $settings
510
  * @param bool $redirectAfterUpdate
511
- * @param bool $clearCache
512
  */
513
- public function update($settings, $redirectAfterUpdate = true, $clearCache = true)
514
  {
515
  $settingsNotNull = array();
516
 
@@ -538,12 +552,14 @@ class Settings
538
  // The following are only triggered IF the user submitted the form from "Settings" area
539
  if (Misc::getVar('post', 'wpacu_settings_nonce')) {
540
  // "Site-Wide Common Unloads" tab
541
- $disableGutenbergCssBlockLibrary = isset($_POST[WPACU_PLUGIN_ID . '_global_unloads']['disable_wp_block_library']);
542
- $disableJQueryMigrate = isset($_POST[WPACU_PLUGIN_ID . '_global_unloads']['disable_jquery_migrate']);
543
- $disableCommentReply = isset($_POST[WPACU_PLUGIN_ID . '_global_unloads']['disable_comment_reply']);
 
544
 
545
  $this->updateSiteWideRuleForCommonAssets(array(
546
  'wp_block_library' => $disableGutenbergCssBlockLibrary,
 
547
  'jquery_migrate' => $disableJQueryMigrate,
548
  'comment_reply' => $disableCommentReply
549
  ));
@@ -551,14 +567,21 @@ class Settings
551
  // Some validation
552
  $settings['local_fonts_preload_files'] = strip_tags($settings['local_fonts_preload_files']);
553
  $settings['google_fonts_preload_files'] = strip_tags($settings['google_fonts_preload_files']);
 
 
 
 
 
 
 
 
554
  }
555
 
556
  Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', json_encode(Misc::filterList($settings)));
557
 
558
- if ($clearCache) {
559
- // After settings are saved, clear all cache to re-built the CSS/JS based on the new settings
560
- OptimizeCommon::clearAllCache();
561
- }
562
 
563
  if ($redirectAfterUpdate) {
564
  $this->redirectAfterUpdate();
@@ -573,14 +596,25 @@ class Settings
573
  $wpacuUpdate = new Update;
574
 
575
  $disableGutenbergCssBlockLibrary = $unloadsList['wp_block_library'];
576
- $disableJQueryMigrate = $unloadsList['jquery_migrate'];
577
- $disableCommentReply = $unloadsList['comment_reply'];
 
578
 
579
  /*
580
  * Add element(s) to the global unload rules
581
  */
582
- if ($disableGutenbergCssBlockLibrary) {
583
- $wpacuUpdate->saveToEverywhereUnloads(array('wp-block-library'));
 
 
 
 
 
 
 
 
 
 
584
  }
585
 
586
  if ($disableJQueryMigrate || $disableCommentReply) {
@@ -602,10 +636,23 @@ class Settings
602
  /*
603
  * Remove element(s) from the global unload rules
604
  */
605
- if (! $disableGutenbergCssBlockLibrary) {
606
- $wpacuUpdate->removeEverywhereUnloads(array('wp-block-library' => 'remove'));
 
 
 
 
 
 
 
 
 
 
 
 
607
  }
608
 
 
609
  if (! $disableJQueryMigrate || ! $disableCommentReply) {
610
  $removeFromUnloadList = array();
611
 
@@ -646,4 +693,58 @@ class Settings
646
  wp_redirect(add_query_arg($wpacuQueryString, admin_url('admin.php')));
647
  exit();
648
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  }
105
 
106
  'disable_emojis',
107
  'disable_oembed',
 
108
 
109
  // Stored in 'wpassetcleanup_global_unload' option
110
+ 'disable_dashicons_for_guests', // CSS
111
+ 'disable_wp_block_library', // CSS
112
+ 'disable_jquery_migrate', // JS
113
+ 'disable_comment_reply', // JS
114
 
115
  // <head> CleanUp
116
  'remove_rsd_link',
268
 
269
  if (Misc::getVar('get', 'page') === WPACU_PLUGIN_ID . '_settings') {
270
  add_action('wpacu_admin_notices', array($this, 'notices'));
271
+
272
+ if (function_exists('curl_init')) {
273
+ // Check if the website supports HTTP/2 protocol and based on that advise the admin that combining CSS/JS is likely unnecessary
274
+ add_action( 'admin_footer', array($this, 'ajaxCheckHttp2ProtocolSupportJsCode') );
275
+ }
276
  }
277
+
278
+ add_action( 'wp_ajax_' . WPACU_PLUGIN_ID . '_check_http2_protocol_support', array( $this, 'ajaxCheckHttp2ProtocolSupport' ) );
279
  }
280
 
281
  /**
342
 
343
  $globalUnloadList = Main::instance()->getGlobalUnload();
344
 
345
+ // [CSS]
346
+ if (in_array('dashicons', $globalUnloadList['styles'])) {
347
+ $data['disable_dashicons_for_guests'] = 1;
348
+ }
349
+
350
  if (in_array('wp-block-library', $globalUnloadList['styles'])) {
351
  $data['disable_wp_block_library'] = 1;
352
  }
353
+ // [/CSS]
354
 
355
+ // [JS]
356
  if (in_array('jquery-migrate', $globalUnloadList['scripts'])) {
357
  $data['disable_jquery_migrate'] = 1;
358
  }
360
  if (in_array('comment-reply', $globalUnloadList['scripts'])) {
361
  $data['disable_comment_reply'] = 1;
362
  }
363
+ // [/JS]
364
 
365
  $data['is_optimize_css_enabled_by_other_party'] = OptimizeCss::isOptimizeCssEnabledByOtherParty();
366
  $data['is_optimize_js_enabled_by_other_party'] = OptimizeJs::isOptimizeJsEnabledByOtherParty();
465
  {
466
  $settings = $this->getAll();
467
  $settings[$key] = $value;
468
+ $this->update($settings, false);
469
  }
470
 
471
  /**
475
  {
476
  $settings = $this->getAll();
477
  $settings[$key] = '';
478
+ $this->update($settings, false);
479
  }
480
 
481
  /**
523
  /**
524
  * @param $settings
525
  * @param bool $redirectAfterUpdate
 
526
  */
527
+ public function update($settings, $redirectAfterUpdate = true)
528
  {
529
  $settingsNotNull = array();
530
 
552
  // The following are only triggered IF the user submitted the form from "Settings" area
553
  if (Misc::getVar('post', 'wpacu_settings_nonce')) {
554
  // "Site-Wide Common Unloads" tab
555
+ $disableGutenbergCssBlockLibrary = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_wp_block_library'] );
556
+ $disableJQueryMigrate = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_jquery_migrate'] );
557
+ $disableCommentReply = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_comment_reply'] );
558
+ $disableDashiconsForGuests = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_dashicons_for_guests'] );
559
 
560
  $this->updateSiteWideRuleForCommonAssets(array(
561
  'wp_block_library' => $disableGutenbergCssBlockLibrary,
562
+ 'dashicons' => $disableDashiconsForGuests,
563
  'jquery_migrate' => $disableJQueryMigrate,
564
  'comment_reply' => $disableCommentReply
565
  ));
567
  // Some validation
568
  $settings['local_fonts_preload_files'] = strip_tags($settings['local_fonts_preload_files']);
569
  $settings['google_fonts_preload_files'] = strip_tags($settings['google_fonts_preload_files']);
570
+
571
+ // Apply 'Ignore dependency rule and keep the "children" loaded' for "dashicons" handle if Ninja Forms is active
572
+ // because "nf-display" handle depends on the Dashicons and it could break the forms' styling
573
+ if ($disableDashiconsForGuests && Misc::isPluginActive('ninja-forms/ninja-forms.php')) {
574
+ $mainVarToUse = array();
575
+ $mainVarToUse['wpacu_ignore_child']['styles']['dashicons'] = 1;
576
+ Update::updateIgnoreChild($mainVarToUse);
577
+ }
578
  }
579
 
580
  Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', json_encode(Misc::filterList($settings)));
581
 
582
+ // New Plugin Update (since 6 April 2020): the cache is cleared after page load via AJAX
583
+ // This is done in case the cache directory is large and more time is required to clear it
584
+ // This offers the admin a better user experience (no one likes to wait too much until a page is reloaded, which sometimes could cause confusion)
 
585
 
586
  if ($redirectAfterUpdate) {
587
  $this->redirectAfterUpdate();
596
  $wpacuUpdate = new Update;
597
 
598
  $disableGutenbergCssBlockLibrary = $unloadsList['wp_block_library'];
599
+ $disableJQueryMigrate = $unloadsList['jquery_migrate'];
600
+ $disableCommentReply = $unloadsList['comment_reply'];
601
+ $disableDashiconsForGuests = $unloadsList['dashicons'];
602
 
603
  /*
604
  * Add element(s) to the global unload rules
605
  */
606
+ if ($disableGutenbergCssBlockLibrary || $disableDashiconsForGuests) {
607
+ $unloadList = array();
608
+
609
+ if ($disableGutenbergCssBlockLibrary) {
610
+ $unloadList[] = 'wp-block-library';
611
+ }
612
+
613
+ if ($disableDashiconsForGuests) {
614
+ $unloadList[] = 'dashicons';
615
+ }
616
+
617
+ $wpacuUpdate->saveToEverywhereUnloads($unloadList);
618
  }
619
 
620
  if ($disableJQueryMigrate || $disableCommentReply) {
636
  /*
637
  * Remove element(s) from the global unload rules
638
  */
639
+
640
+ // For Stylesheets (.CSS)
641
+ if (! $disableGutenbergCssBlockLibrary || ! $disableDashiconsForGuests) {
642
+ $removeFromUnloadList = array();
643
+
644
+ if (! $disableGutenbergCssBlockLibrary) {
645
+ $removeFromUnloadList['wp-block-library'] = 'remove';
646
+ }
647
+
648
+ if (! $disableDashiconsForGuests) {
649
+ $removeFromUnloadList['dashicons'] = 'remove';
650
+ }
651
+
652
+ $wpacuUpdate->removeEverywhereUnloads($removeFromUnloadList);
653
  }
654
 
655
+ // For JavaScript (.JS)
656
  if (! $disableJQueryMigrate || ! $disableCommentReply) {
657
  $removeFromUnloadList = array();
658
 
693
  wp_redirect(add_query_arg($wpacuQueryString, admin_url('admin.php')));
694
  exit();
695
  }
696
+
697
+ /**
698
+ *
699
+ */
700
+ public function ajaxCheckHttp2ProtocolSupport()
701
+ {
702
+ if (! isset($_POST['action']) || ! Menu::userCanManageAssets()) {
703
+ return;
704
+ }
705
+
706
+ $ch = curl_init();
707
+
708
+ curl_setopt_array($ch, array(
709
+ CURLOPT_URL => get_site_url(),
710
+ CURLOPT_HEADER => true,
711
+ CURLOPT_NOBODY => true,
712
+ CURLOPT_RETURNTRANSFER => true,
713
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0, // cURL will attempt to make an HTTP/2.0 request (can downgrade to HTTP/1.1)
714
+ ));
715
+
716
+ $response = curl_exec($ch);
717
+
718
+ if ($response !== false && strpos($response, 'HTTP/2') === 0) {
719
+ echo 1;
720
+ } else {
721
+ echo curl_error($ch); // something else happened causing the request to fail
722
+ }
723
+
724
+ curl_close($ch);
725
+
726
+ exit();
727
+ }
728
+
729
+ /**
730
+ *
731
+ */
732
+ public function ajaxCheckHttp2ProtocolSupportJsCode()
733
+ {
734
+ ?>
735
+ <script type="text/javascript">
736
+ jQuery(document).ready(function($) {
737
+ $.post('<?php echo admin_url('admin-ajax.php'); ?>', {
738
+ 'action': '<?php echo WPACU_PLUGIN_ID; ?>_check_http2_protocol_support'
739
+ }, function (result) {
740
+ if (result === '1') {
741
+ $('.wpacu_http2_protocol_is_supported').removeClass('wpacu_hide');
742
+ } else {
743
+ $('.wpacu_verify_http2_protocol').removeClass('wpacu_hide');
744
+ }
745
+ });
746
+ });
747
+ </script>
748
+ <?php
749
+ }
750
  }
classes/Tips.php CHANGED
@@ -33,6 +33,16 @@ HTML;
33
  This CSS file is related to "Contact Form 7" and if you don't load any form on this page (e.g. you use it only on pages such as Contact, Make a booking etc.), then you can safely unload it (e.g. side-wide and make exceptions on the few pages you use it).
34
  HTML;
35
 
 
 
 
 
 
 
 
 
 
 
36
  // JavaScript list
37
  $this->list['js']['wp-embed'] = <<<HTML
38
  To completely disable oEmbeds, you can use "Disable oEmbed (Embeds) Site-Wide" from plugin's "Settings" -&gt; "Site-Wide Common Unloads". It will also prevent this file from loading in the first place and hide it from this location.
33
  This CSS file is related to "Contact Form 7" and if you don't load any form on this page (e.g. you use it only on pages such as Contact, Make a booking etc.), then you can safely unload it (e.g. side-wide and make exceptions on the few pages you use it).
34
  HTML;
35
 
36
+ $this->list['css']['duplicate-post'] = <<<HTML
37
+ This CSS file is meant to style the "Duplicate Post" plugin's menu within the top admin bar and it's loading when the user (with the right privileges) is logged-in. It's NOT meant to load for the guests (non logged-in visitors). You can leave it loaded.
38
+ HTML;
39
+
40
+ $this->list['css']['dashicons'] = <<<HTML
41
+ To avoid breaking admin bar's styling which relies on the Wordpress Dashicons, any unload rule set for this handle will be ignored IF the user is logged-in and the admin bar is showing up.
42
+ HTML;
43
+
44
+
45
+
46
  // JavaScript list
47
  $this->list['js']['wp-embed'] = <<<HTML
48
  To completely disable oEmbeds, you can use "Disable oEmbed (Embeds) Site-Wide" from plugin's "Settings" -&gt; "Site-Wide Common Unloads". It will also prevent this file from loading in the first place and hide it from this location.
classes/Tools.php CHANGED
@@ -2,6 +2,8 @@
2
  namespace WpAssetCleanUp;
3
 
4
  use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
 
 
5
  use WpAssetCleanUp\ThirdParty\Browser;
6
 
7
  /**
@@ -30,6 +32,11 @@ class Tools
30
  */
31
  public $licenseDataRemoved = false;
32
 
 
 
 
 
 
33
  /**
34
  * @var array
35
  */
@@ -111,8 +118,9 @@ class Tools
111
  return;
112
  }
113
 
114
- $this->resetChoice = isset($resetDoneInfoArray['reset_choice']) ? $resetDoneInfoArray['reset_choice'] : '';
115
- $this->licenseDataRemoved = isset($resetDoneInfoArray['license_data_removed']) ? $resetDoneInfoArray['license_data_removed'] : '';
 
116
 
117
  delete_transient('wpacu_reset_done');
118
 
@@ -386,7 +394,7 @@ class Tools
386
 
387
  $return .= 'Disable Emojis (site-wide)? '. (($settings['disable_emojis'] == 1) ? 'Yes' : 'No') . "\n";
388
  $return .= 'Disable oEmbed (Embeds) (site-wide)? '. (($settings['disable_oembed'] == 1) ? 'Yes' : 'No') . "\n";
389
- $return .= 'Disable Dashicons For Guests (site-wide)? '. (($settings['disable_dashicons_for_guests'] == 1) ? 'Yes' : 'No') . "\n";
390
  $return .= 'Disable Gutenberg CSS Block Editor (site-wide)? '. (($settings['disable_wp_block_library'] == 1) ? 'Yes' : 'No') . "\n";
391
  $return .= 'Disable jQuery Migrate (site-wide)? '. (($settings['disable_jquery_migrate'] == 1) ? 'Yes' : 'No') . "\n";
392
  $return .= 'Disable Comment Reply (site-wide)? '. (($settings['disable_comment_reply'] == 1) ? 'Yes' : 'No') . "\n\n";
@@ -662,6 +670,24 @@ SQL;
662
  $this->licenseDataRemoved = true;
663
  }
664
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
  // Remove Asset CleanUp (Pro)'s cache transients
666
  $this->clearAllCacheTransients();
667
  }
@@ -676,8 +702,10 @@ SQL;
676
 
677
  set_transient('wpacu_reset_done',
678
  json_encode(array(
679
- 'reset_choice' => $this->resetChoice,
680
- 'license_data_removed' => $this->licenseDataRemoved)
 
 
681
  ),
682
  30
683
  );
@@ -733,7 +761,11 @@ SQL;
733
  $msg = __('Everything was reset (including settings, individual &amp; bulk unloads, load exceptions) to the same point it was when you first activated the plugin.', 'wp-asset-clean-up');
734
 
735
  if ($this->licenseDataRemoved) {
736
- $msg .= '<span id="wpacu-license-data-removed-msg">'.__('Any license data was also removed, as you requested.', 'wp-asset-clean-up').'</span>';
 
 
 
 
737
  }
738
  }
739
  ?>
2
  namespace WpAssetCleanUp;
3
 
4
  use WpAssetCleanUp\OptimiseAssets\OptimizeCommon;
5
+ use WpAssetCleanUp\OptimiseAssets\OptimizeCss;
6
+ use WpAssetCleanUp\OptimiseAssets\OptimizeJs;
7
  use WpAssetCleanUp\ThirdParty\Browser;
8
 
9
  /**
32
  */
33
  public $licenseDataRemoved = false;
34
 
35
+ /**
36
+ * @var bool
37
+ */
38
+ public $cachedAssetsRemoved = false;
39
+
40
  /**
41
  * @var array
42
  */
118
  return;
119
  }
120
 
121
+ $this->resetChoice = isset($resetDoneInfoArray['reset_choice']) ? $resetDoneInfoArray['reset_choice'] : '';
122
+ $this->licenseDataRemoved = isset($resetDoneInfoArray['license_data_removed']) ? $resetDoneInfoArray['license_data_removed'] : '';
123
+ $this->cachedAssetsRemoved = isset($resetDoneInfoArray['cached_assets_removed']) ? $resetDoneInfoArray['cached_assets_removed'] : '';
124
 
125
  delete_transient('wpacu_reset_done');
126
 
394
 
395
  $return .= 'Disable Emojis (site-wide)? '. (($settings['disable_emojis'] == 1) ? 'Yes' : 'No') . "\n";
396
  $return .= 'Disable oEmbed (Embeds) (site-wide)? '. (($settings['disable_oembed'] == 1) ? 'Yes' : 'No') . "\n";
397
+ $return .= 'Disable Dashicons if Toolbar (top admin bar) is not showing (site-wide)? '. (($settings['disable_dashicons_for_guests'] == 1) ? 'Yes' : 'No') . "\n";
398
  $return .= 'Disable Gutenberg CSS Block Editor (site-wide)? '. (($settings['disable_wp_block_library'] == 1) ? 'Yes' : 'No') . "\n";
399
  $return .= 'Disable jQuery Migrate (site-wide)? '. (($settings['disable_jquery_migrate'] == 1) ? 'Yes' : 'No') . "\n";
400
  $return .= 'Disable Comment Reply (site-wide)? '. (($settings['disable_comment_reply'] == 1) ? 'Yes' : 'No') . "\n\n";
670
  $this->licenseDataRemoved = true;
671
  }
672
 
673
+ // Remove all cached CSS/JS files?
674
+ if (Misc::getVar('post', 'wpacu-remove-cache-assets') !== '') {
675
+ $pathToCacheDirCss = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir();
676
+ $pathToCacheDirJs = WP_CONTENT_DIR . OptimizeJs::getRelPathJsCacheDir();
677
+
678
+ $allCssFiles = glob( $pathToCacheDirCss . '**/*.css' );
679
+ $allJsFiles = glob( $pathToCacheDirJs . '**/*.js' );
680
+ $allCachedAssets = array_merge($allCssFiles, $allJsFiles);
681
+
682
+ if (! empty($allCachedAssets)) {
683
+ foreach ($allCachedAssets as $cachedAssetFile) {
684
+ @unlink($cachedAssetFile);
685
+ }
686
+ }
687
+
688
+ $this->cachedAssetsRemoved = true;
689
+ }
690
+
691
  // Remove Asset CleanUp (Pro)'s cache transients
692
  $this->clearAllCacheTransients();
693
  }
702
 
703
  set_transient('wpacu_reset_done',
704
  json_encode(array(
705
+ 'reset_choice' => $this->resetChoice,
706
+ 'license_data_removed' => $this->licenseDataRemoved,
707
+ 'cached_assets_removed' => $this->cachedAssetsRemoved
708
+ )
709
  ),
710
  30
711
  );
761
  $msg = __('Everything was reset (including settings, individual &amp; bulk unloads, load exceptions) to the same point it was when you first activated the plugin.', 'wp-asset-clean-up');
762
 
763
  if ($this->licenseDataRemoved) {
764
+ $msg .= ' <span id="wpacu-license-data-removed-msg">'.__('The license information was also removed.', 'wp-asset-clean-up').'</span>';
765
+ }
766
+
767
+ if ($this->cachedAssetsRemoved) {
768
+ $msg .= ' <span id="wpacu-cached-assets-removed-msg">'.__('The cached CSS/JS files were also removed.', 'wp-asset-clean-up').'</span>';
769
  }
770
  }
771
  ?>
classes/Update.php CHANGED
@@ -65,7 +65,7 @@ HTML;
65
  add_action('save_post', array($this, 'savePost'));
66
 
67
  // Clear cache (via AJAX) only if the user is logged-in (with the right privileges)
68
- add_action('wp_ajax_' . WPACU_PLUGIN_ID . '_clear_cache', array($this, 'ajaxClearCache'));
69
  }
70
 
71
  /**
@@ -155,8 +155,7 @@ HTML;
155
  self::updateIgnoreChild();
156
 
157
  self::clearTransients();
158
-
159
- }
160
 
161
  /**
162
  *
@@ -295,9 +294,6 @@ HTML;
295
  $this->saveToBulkUnloads();
296
  $this->removeBulkUnloads($post->post_type);
297
 
298
- // Any positions changed?
299
- // For Pro Only
300
-
301
  // Any preloads
302
  Preloads::updatePreloads();
303
 
@@ -312,7 +308,11 @@ HTML;
312
 
313
  self::clearTransients();
314
 
315
- // Note: Cache is cleared after the post/page is updated via a separate AJAX call
 
 
 
 
316
  // To avoid the usage of too much memory (good for shared environments) and avoid any memory related errors showing up to the user which could be confusing
317
  }
318
 
@@ -896,15 +896,21 @@ HTML;
896
  }
897
 
898
  /**
899
- *
900
  */
901
- public static function updateIgnoreChild()
902
  {
903
- if (! Misc::isValidRequest('post', 'wpacu_ignore_child')) {
904
- return;
 
 
 
 
 
 
905
  }
906
 
907
- if (! isset($_POST['wpacu_ignore_child']['styles']) && ! isset($_POST['wpacu_ignore_child']['scripts'])) {
908
  return;
909
  }
910
 
@@ -917,8 +923,8 @@ HTML;
917
  $existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
918
  $existingList = $existingListData['list'];
919
 
920
- if (isset($_POST['wpacu_ignore_child']['styles']) && ! empty($_POST['wpacu_ignore_child']['styles'])) {
921
- foreach ($_POST['wpacu_ignore_child']['styles'] as $styleHandle => $styleVal) {
922
  $styleVal = trim($styleVal);
923
 
924
  if ($styleVal === '' && isset($existingList['styles'][$globalKey][$styleHandle])) {
@@ -929,8 +935,8 @@ HTML;
929
  }
930
  }
931
 
932
- if (isset($_POST['wpacu_ignore_child']['scripts']) && ! empty($_POST['wpacu_ignore_child']['scripts'])) {
933
- foreach ($_POST['wpacu_ignore_child']['scripts'] as $scriptHandle => $scriptVal) {
934
  $scriptVal = trim($scriptVal); // should be '1' (meaning it's true)
935
 
936
  if ($scriptVal === '' && isset($existingList['scripts'][$globalKey][$scriptHandle])) {
@@ -961,7 +967,7 @@ HTML;
961
  $existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
962
  $existingList = $existingListData['list'];
963
 
964
- // $assetType could be 'styles' or 'scripts'
965
  foreach ($assetList as $assetKey => $assetDataHandleList) {
966
  if (empty($assetDataHandleList) || ! in_array($assetKey, array('styles', 'scripts'))) {
967
  continue;
@@ -998,5 +1004,7 @@ HTML;
998
  }
999
 
1000
  OptimizeCommon::clearAllCache();
 
 
1001
  }
1002
  }
65
  add_action('save_post', array($this, 'savePost'));
66
 
67
  // Clear cache (via AJAX) only if the user is logged-in (with the right privileges)
68
+ add_action('wp_ajax_' . WPACU_PLUGIN_ID . '_clear_cache', array($this, 'ajaxClearCache'), PHP_INT_MAX);
69
  }
70
 
71
  /**
155
  self::updateIgnoreChild();
156
 
157
  self::clearTransients();
158
+ }
 
159
 
160
  /**
161
  *
294
  $this->saveToBulkUnloads();
295
  $this->removeBulkUnloads($post->post_type);
296
 
 
 
 
297
  // Any preloads
298
  Preloads::updatePreloads();
299
 
308
 
309
  self::clearTransients();
310
 
311
+ // In case Combine CSS/JS was enabled and there are traces of JSON files in the caching directory
312
+ // Clear them if the caching timing expired as they are not relevant anymore and reduce the disk's space
313
+ OptimizeCommon::clearJsonStorageForPost($postId, true);
314
+
315
+ // Note: Cache is cleared (except the JSON files related to CSS/JS combine option) after the post/page is updated via a separate AJAX call
316
  // To avoid the usage of too much memory (good for shared environments) and avoid any memory related errors showing up to the user which could be confusing
317
  }
318
 
896
  }
897
 
898
  /**
899
+ * @param array $mainVarToUse
900
  */
901
+ public static function updateIgnoreChild($mainVarToUse = array())
902
  {
903
+ // No $mainVarToUse passed? Then it's a $_POST
904
+ // Check if $_POST is empty via Misc::isValidRequest()
905
+ if (empty($mainVarToUse)) {
906
+ if (! Misc::isValidRequest('post', 'wpacu_ignore_child')) {
907
+ return;
908
+ }
909
+
910
+ $mainVarToUse = $_POST;
911
  }
912
 
913
+ if (! isset($mainVarToUse['wpacu_ignore_child']['styles']) && ! isset($mainVarToUse['wpacu_ignore_child']['scripts'])) {
914
  return;
915
  }
916
 
923
  $existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
924
  $existingList = $existingListData['list'];
925
 
926
+ if (isset($mainVarToUse['wpacu_ignore_child']['styles']) && ! empty($mainVarToUse['wpacu_ignore_child']['styles'])) {
927
+ foreach ($mainVarToUse['wpacu_ignore_child']['styles'] as $styleHandle => $styleVal) {
928
  $styleVal = trim($styleVal);
929
 
930
  if ($styleVal === '' && isset($existingList['styles'][$globalKey][$styleHandle])) {
935
  }
936
  }
937
 
938
+ if (isset($mainVarToUse['wpacu_ignore_child']['scripts']) && ! empty($mainVarToUse['wpacu_ignore_child']['scripts'])) {
939
+ foreach ($mainVarToUse['wpacu_ignore_child']['scripts'] as $scriptHandle => $scriptVal) {
940
  $scriptVal = trim($scriptVal); // should be '1' (meaning it's true)
941
 
942
  if ($scriptVal === '' && isset($existingList['scripts'][$globalKey][$scriptHandle])) {
967
  $existingListData = Main::instance()->existingList($existingListJson, $existingListEmpty);
968
  $existingList = $existingListData['list'];
969
 
970
+ // $assetKey could be 'styles' or 'scripts'
971
  foreach ($assetList as $assetKey => $assetDataHandleList) {
972
  if (empty($assetDataHandleList) || ! in_array($assetKey, array('styles', 'scripts'))) {
973
  continue;
1004
  }
1005
 
1006
  OptimizeCommon::clearAllCache();
1007
+
1008
+ exit();
1009
  }
1010
  }
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: gabelivan
3
  Tags: minify css, minify javascript, defer css javascript, page speed, dequeue, performance
4
  Donate link: https://www.gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
5
  Requires at least: 4.5
6
- Tested up to: 5.3.2
7
- Stable tag: 1.3.6.0
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl.html
10
 
@@ -179,6 +179,25 @@ With the recently released "Test Mode" feature, you can safely unload assets on
179
  4. Homepage CSS & JS Management (List sorted by location)
180
 
181
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  = 1.3.6.0 =
183
  * Improved the speed of the generated & printed combined CSS/JS assets by ~30ms (depending on the hosting package and the PHP version used) when the HTML source is altered by avoiding extra useless verifications of the HTML output
184
  * When managing the assets, make sure to show "before" and "after" content (so the user is aware how is that inline tag generated) associated with a handle too (not just the "data" one added via wp_localize_script())
3
  Tags: minify css, minify javascript, defer css javascript, page speed, dequeue, performance
4
  Donate link: https://www.gabelivan.com/items/wp-asset-cleanup-pro/?utm_source=wp_org_lite&utm_medium=donate
5
  Requires at least: 4.5
6
+ Tested up to: 5.4
7
+ Stable tag: 1.3.6.1
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl.html
10
 
179
  4. Homepage CSS & JS Management (List sorted by location)
180
 
181
  == Changelog ==
182
+ = 1.3.6.1 =
183
+ * Increased the speed of unloading (dequeueing) styles & scripts by ~40ms (caching is used to avoid calling the same PHP code during several action hooks)
184
+ * Higher accuracy in stripping 'before' and 'after' associated inline SCRIPT after adding the content to the JS combined file
185
+ * When combining JS content, make sure to extract the right relative path to make it combinable if a local file is loaded and it starts with // in the "src" attribute
186
+ * Show confirmation message when unloading specific files that are very likely needed such as jQuery, Backbone & Underscore libraries
187
+ * Alert the admin when there are unload rules from inactive plugins on pages such as "Bulk Changes" & "Overview"
188
+ * Keep Dashicons loaded if the toolbar (top admin bar) is shown
189
+ * Prevent front-end optimisation code from triggering while the CSS/JS is fetched, thus saving resources and improving the speed of retrieving the assets
190
+ * Optimised the plugin to use less calls to MinifyCss & MinifyJs for hardcoded assets reducing considerably the resources used (sometimes timeout errors are generated in hosts with a lower resources allocated)
191
+ * When a plugin page (e.g. "Settings") is visited within the Dashboard, trigger a maintenance script that will remove inactive handle data information (from handles without any rule attached to it, often from deleted plugins no longer used) from the "wpassetcleanup_global_data" option value (from `options` table), thus making it lighter
192
+ * In many hosting environments, the total number of fields submitted is maximum 1000 (set by default in php.ini); The total number of fields that were sent have been reduced (e.g. hardcoded assets information) as they are only enabled via JavaScript whenever they are relevant to make sure there are less fields sent (to void partial submit and missing data as a result in case the admin has difficulties increase the default 1000 in php.ini)
193
+ * Do not automatically store hardcoded assets info when the CSS/JS manager list is loaded; Instead, store it IF there's a rule attached to it in order to make the contents of the "wpassetcleanup_global_data" option smaller in size (for a lighter database & faster MySQL queries)
194
+ * Clear plugin's cache via AJAX after "Settings" is updated within the Dashboard (this is more effective then clearing it when the page reloads as it could take some time to clear the cache if there are lots of files stored there)
195
+ * Whenever Asset CleanUp's caching is cleared, the Autoptimize (if enabled) caching is also cleared via AJAX (in an asynchronous way) to avoid any broken CSS/JS (rare cases) even for short time
196
+ * Trigger certain actions (to save database & disk space) when the plugin is deactivated: Clear all its transients from the database & Remove the caching directory if it doesn't have any more CSS/JS; If all the plugin's changes were cleared via "Tools" -> "Reset", then deactivating the plugin will completely clear any of its traces
197
+ * The plugin's own files that are needed for the plugin's functionality (they are only loading for the logged-in admin), are loaded asynchronously (CSS) and deferred (JS) to ensure the admin doesn't load them as render-blocking especially when managing the pages in the front-end view
198
+ * The combined CSS tags can now be altered for any reason via add_filter() through the 'wpacu_combined_css_tag' tag name, just like the combined JS tags are via 'wpacu_combined_js_tag'
199
+ * Fix: Remove request to non-existent CSS file within the Dashboard that generated a 404 Not Found error in the browser's console (harmless, but confusing)
200
+
201
  = 1.3.6.0 =
202
  * Improved the speed of the generated & printed combined CSS/JS assets by ~30ms (depending on the hosting package and the PHP version used) when the HTML source is altered by avoiding extra useless verifications of the HTML output
203
  * When managing the assets, make sure to show "before" and "after" content (so the user is aware how is that inline tag generated) associated with a handle too (not just the "data" one added via wp_localize_script())
templates/_admin-page-settings-plugin-areas/_cdn-rewrite-urls.php CHANGED
@@ -40,40 +40,38 @@ $styleTabContent = ($selectedTabArea === $tabIdArea) ? 'style="display: table-ce
40
  $cdnRewriteAreaStyle = ($data['cdn_rewrite_enable'] == 1) ? 'opacity: 1;' : 'opacity: 0.4;';
41
  ?>
42
  <div id="wpacu_cdn_rewrite_enable_area" style="<?php echo $cdnRewriteAreaStyle; ?>">
43
- <div id="wpacu_minify_css_exceptions_area">
44
- <div style="margin-top: 20px; margin-bottom: 0;"></div>
45
- <table>
46
- <tr>
47
- <td style="vertical-align: top;" valign="top">For Stylesheet (.css) Files:&nbsp;&nbsp;</td>
48
- <td style="padding-bottom: 10px;">
49
- <label for="wpacu_cdn_rewrite_url_css"><input id="wpacu_cdn_rewrite_url_css"
50
- name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[cdn_rewrite_url_css]"
51
- value="<?php echo $data['cdn_rewrite_url_css']; ?>"
52
- style="width: 300px;" /><br />
53
- </label>
54
 
55
- <ul style="font-style: italic; line-height: 13px; font-size: 12px; margin-top: 5px; margin-bottom: 0;">
56
- <li>e.g. //css-zone-name.kxcdn.com</li>
57
- <li>zone-name.kxcdn.com etc.</li>
58
- </ul>
59
- </td>
60
- </tr>
61
- <tr>
62
- <td style="vertical-align: top;" valign="top">For JavaScript (.js) Files:&nbsp;&nbsp;</td>
63
- <td style="padding-bottom: 3px;"><label for="wpacu_cdn_rewrite_url_js">
64
- <input id="wpacu_cdn_rewrite_url_js"
65
- name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[cdn_rewrite_url_js]"
66
- value="<?php echo $data['cdn_rewrite_url_js']; ?>"
67
- style="width: 300px;" /><br />
68
- </label>
69
- <ul style="font-style: italic; line-height: 13px; font-size: 12px; margin-top: 5px;">
70
- <li>e.g. //js-zone-name.kxcdn.com</li>
71
- <li>zone-name.kxcdn.com etc.</li>
72
- </ul>
73
- </td>
74
- </tr>
75
- </table>
76
- </div>
77
  <hr />
78
  <p style="margin-top: 10px;"><strong>Note:</strong> Most of the time the CNAME / CDN URL is the same for both CSS &amp; JS files. You can use the same value in both fields.</p>
79
 
40
  $cdnRewriteAreaStyle = ($data['cdn_rewrite_enable'] == 1) ? 'opacity: 1;' : 'opacity: 0.4;';
41
  ?>
42
  <div id="wpacu_cdn_rewrite_enable_area" style="<?php echo $cdnRewriteAreaStyle; ?>">
43
+ <div style="margin-top: 20px; margin-bottom: 0;"></div>
44
+ <table>
45
+ <tr>
46
+ <td style="vertical-align: top;" valign="top">For Stylesheet (.css) Files:&nbsp;&nbsp;</td>
47
+ <td style="padding-bottom: 10px;">
48
+ <label for="wpacu_cdn_rewrite_url_css"><input id="wpacu_cdn_rewrite_url_css"
49
+ name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[cdn_rewrite_url_css]"
50
+ value="<?php echo $data['cdn_rewrite_url_css']; ?>"
51
+ style="width: 300px;" /><br />
52
+ </label>
 
53
 
54
+ <ul style="font-style: italic; line-height: 13px; font-size: 12px; margin-top: 5px; margin-bottom: 0;">
55
+ <li>e.g. //css-zone-name.kxcdn.com</li>
56
+ <li>zone-name.kxcdn.com etc.</li>
57
+ </ul>
58
+ </td>
59
+ </tr>
60
+ <tr>
61
+ <td style="vertical-align: top;" valign="top">For JavaScript (.js) Files:&nbsp;&nbsp;</td>
62
+ <td style="padding-bottom: 3px;"><label for="wpacu_cdn_rewrite_url_js">
63
+ <input id="wpacu_cdn_rewrite_url_js"
64
+ name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[cdn_rewrite_url_js]"
65
+ value="<?php echo $data['cdn_rewrite_url_js']; ?>"
66
+ style="width: 300px;" /><br />
67
+ </label>
68
+ <ul style="font-style: italic; line-height: 13px; font-size: 12px; margin-top: 5px;">
69
+ <li>e.g. //js-zone-name.kxcdn.com</li>
70
+ <li>zone-name.kxcdn.com etc.</li>
71
+ </ul>
72
+ </td>
73
+ </tr>
74
+ </table>
 
75
  <hr />
76
  <p style="margin-top: 10px;"><strong>Note:</strong> Most of the time the CNAME / CDN URL is the same for both CSS &amp; JS files. You can use the same value in both fields.</p>
77
 
templates/_admin-page-settings-plugin-areas/_common-files-unload.php CHANGED
@@ -44,7 +44,7 @@ $styleTabContent = ($selectedTabArea === $tabIdArea) ? 'style="display: table-ce
44
  </th>
45
  <td>
46
  <label class="wpacu_switch">
47
- <input id="wpacu_disable_oembed"
48
  type="checkbox"
49
  <?php echo (($data['disable_oembed'] == 1) ? 'checked="checked"' : ''); ?>
50
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[disable_oembed]"
44
  </th>
45
  <td>
46
  <label class="wpacu_switch">
47
+ <input id="wpacu_disable_wp_embed"
48
  type="checkbox"
49
  <?php echo (($data['disable_oembed'] == 1) ? 'checked="checked"' : ''); ?>
50
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[disable_oembed]"
templates/_admin-page-settings-plugin-areas/_optimize-css.php CHANGED
@@ -29,10 +29,10 @@ $availableForPro = '<a class="go-pro-link-no-style" target="_blank" href="' . WP
29
  ?>
30
  <div class="wpacu-warning" style="font-size: 13px; margin-bottom: 18px;">
31
  <span class="dashicons dashicons-warning"></span> <strong>Incompatibility Notice:</strong>
32
- <?php if ($wpRocketIssues['minify_html']) { ?>
33
  <p style="margin-bottom: 0;">At this time, "<strong>Combine loaded CSS (Stylesheets) into fewer files</strong>" &amp; "<strong>Defer CSS Loaded in the &lt;BODY&gt; (Footer)</strong>" options do not take any effect as "<em>Minify HTML</em>" is active in "WP Rocket" -&gt; "File Optimization" Settings. If you wish to keep WP Rocket's Minify HTML on, consider optimizing CSS with WP Rocket while cleaning the useless CSS with <?php echo WPACU_PLUGIN_TITLE; ?>.</p>
34
  <?php } ?>
35
- <?php if ($wpRocketIssues['optimize_css_delivery']) { ?>
36
  <p style="margin-bottom: 0;"><?php echo WPACU_PLUGIN_TITLE; ?>'s "<strong>Combine loaded CSS (Stylesheets) into fewer files</strong>" &amp; "<strong>Defer CSS Loaded in the &lt;BODY&gt; (Footer)</strong>" options do not take any effect as "<em>Optimize CSS Delivery</em>" is active in "WP Rocket" -&gt; "File Optimization" Settings. The feature is changing the way CSS is delivered by adding critical CSS to the HEAD section of the website as well as preloading the rest of the CSS files before applying their syntax on page loading. This doesn't affect the performance of your website as you can eliminate the bloat with <?php echo WPACU_PLUGIN_TITLE; ?> and use WP Rocket for CSS Optimization/Delivery if that's what works best for your website.</p>
37
  <?php } ?>
38
  </div>
@@ -110,7 +110,7 @@ $availableForPro = '<a class="go-pro-link-no-style" target="_blank" href="' . WP
110
  <tr>
111
  <td colspan="2" style="padding: 0;">
112
  <div style="line-height: 22px; background: #f8f8f8; border-left: 4px solid #008f9c; padding: 10px; margin: 0 0 15px;">
113
- <strong><?php _e('NOTE', 'wp-asset-clean-up'); ?>:</strong> <?php echo __('Concatenating assets is no longer a recommended practice in HTTP/2', 'wp-asset-clean-up'); ?>. &nbsp; <span style="color: #0073aa;" class="dashicons dashicons-info"></span> <a id="wpacu-http2-info-css-target" href="#wpacu-http2-info-css"><?php _e('Read more', 'wp-asset-clean-up'); ?></a> &nbsp;|&nbsp; <a target="_blank" href="https://tools.keycdn.com/http2-test"><?php _e('Verify if your server has HTTP/2 support', 'wp-asset-clean-up'); ?></a>
114
  </div>
115
  </td>
116
  </tr>
@@ -232,17 +232,15 @@ $availableForPro = '<a class="go-pro-link-no-style" target="_blank" href="' . WP
232
 
233
  <div id="wpacu_inline_css_files_list_area">
234
  <div style="margin: 12px 0 6px;"><?php _e('Alternatively or in addition to automatic inlining, you can place the relative path(s) or part of them to the files you wish to inline below:', 'wp-asset-clean-up'); ?> (<strong><?php _e('one per line', 'wp-asset-clean-up'); ?></strong>):</div>
 
235
  <label for="wpacu_inline_css_files_list">
236
  <textarea style="width: 100%;"
237
  rows="4"
238
  id="wpacu_inline_css_files_list"
239
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[inline_css_files_list]"><?php echo $data['inline_css_files_list']; ?></textarea>
240
  </label>
241
-
242
- <p><strong>Examples</strong> (you don't have to add the full URL, as it's recommended to use relative paths, especially if you use dev/staging environments or change the domain name of your website):</p>
243
  <code>/wp-content/plugins/plugin-title/styles/small-file.css<br />/wp-content/themes/my-wp-theme-dir/css/small.css</code>
244
-
245
- <p style="margin-top: 18px;"><span class="dashicons dashicons-warning" style="color: #ffc107;"></span> <strong>Note:</strong> Please input the sources to the original CSS files (one per line), not to any optimized ones (which are usually located in <em><?php echo str_replace(site_url(), '', WP_CONTENT_URL) . OptimizeCommon::getRelPathPluginCacheDir(); ?></em>).</p>
246
  </div>
247
  </div>
248
  <hr />
29
  ?>
30
  <div class="wpacu-warning" style="font-size: 13px; margin-bottom: 18px;">
31
  <span class="dashicons dashicons-warning"></span> <strong>Incompatibility Notice:</strong>
32
+ <?php if (isset($wpRocketIssues['minify_html']) && $wpRocketIssues['minify_html']) { ?>
33
  <p style="margin-bottom: 0;">At this time, "<strong>Combine loaded CSS (Stylesheets) into fewer files</strong>" &amp; "<strong>Defer CSS Loaded in the &lt;BODY&gt; (Footer)</strong>" options do not take any effect as "<em>Minify HTML</em>" is active in "WP Rocket" -&gt; "File Optimization" Settings. If you wish to keep WP Rocket's Minify HTML on, consider optimizing CSS with WP Rocket while cleaning the useless CSS with <?php echo WPACU_PLUGIN_TITLE; ?>.</p>
34
  <?php } ?>
35
+ <?php if (isset($wpRocketIssues['optimize_css_delivery']) && $wpRocketIssues['optimize_css_delivery']) { ?>
36
  <p style="margin-bottom: 0;"><?php echo WPACU_PLUGIN_TITLE; ?>'s "<strong>Combine loaded CSS (Stylesheets) into fewer files</strong>" &amp; "<strong>Defer CSS Loaded in the &lt;BODY&gt; (Footer)</strong>" options do not take any effect as "<em>Optimize CSS Delivery</em>" is active in "WP Rocket" -&gt; "File Optimization" Settings. The feature is changing the way CSS is delivered by adding critical CSS to the HEAD section of the website as well as preloading the rest of the CSS files before applying their syntax on page loading. This doesn't affect the performance of your website as you can eliminate the bloat with <?php echo WPACU_PLUGIN_TITLE; ?> and use WP Rocket for CSS Optimization/Delivery if that's what works best for your website.</p>
37
  <?php } ?>
38
  </div>
110
  <tr>
111
  <td colspan="2" style="padding: 0;">
112
  <div style="line-height: 22px; background: #f8f8f8; border-left: 4px solid #008f9c; padding: 10px; margin: 0 0 15px;">
113
+ <strong><?php _e('NOTE', 'wp-asset-clean-up'); ?>:</strong> <?php echo __('Concatenating assets is no longer a recommended practice in HTTP/2', 'wp-asset-clean-up'); ?>. &nbsp; <a id="wpacu-http2-info-css-target" href="#wpacu-http2-info-css"><?php _e('Read more', 'wp-asset-clean-up'); ?></a> &nbsp;/&nbsp; <a class="wpacu_hide wpacu_verify_http2_protocol" target="_blank" href="https://tools.keycdn.com/http2-test"><strong><?php _e('Verify if the website is delivered through the HTTP/2 network protocol', 'wp-asset-clean-up'); ?></strong></a> <span class="wpacu_hide wpacu_http2_protocol_is_supported" style="color: green; font-weight: 400;"><span class="dashicons dashicons-yes-alt"></span> Your website `<span style="font-weight: 500;"><?php echo get_site_url(); ?></span>` is delivered through the HTTP/2 network protocol.</span>
114
  </div>
115
  </td>
116
  </tr>
232
 
233
  <div id="wpacu_inline_css_files_list_area">
234
  <div style="margin: 12px 0 6px;"><?php _e('Alternatively or in addition to automatic inlining, you can place the relative path(s) or part of them to the files you wish to inline below:', 'wp-asset-clean-up'); ?> (<strong><?php _e('one per line', 'wp-asset-clean-up'); ?></strong>):</div>
235
+ <p style="margin-top: 8px;"><span class="dashicons dashicons-warning" style="color: #ffc107;"></span> <strong>Note:</strong> Please input the sources to the original CSS files (one per line) like in the examples below, not to the cached/optimized ones (which are usually located in <em><?php echo str_replace(site_url(), '', WP_CONTENT_URL) . OptimizeCommon::getRelPathPluginCacheDir(); ?></em>).</p>
236
  <label for="wpacu_inline_css_files_list">
237
  <textarea style="width: 100%;"
238
  rows="4"
239
  id="wpacu_inline_css_files_list"
240
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[inline_css_files_list]"><?php echo $data['inline_css_files_list']; ?></textarea>
241
  </label>
242
+ <p style="margin-bottom: 6px;"><strong>Examples</strong> (you don't have to add the full URL, as it's recommended to use relative paths, especially if you use dev/staging environments or change the domain name of your website):</p>
 
243
  <code>/wp-content/plugins/plugin-title/styles/small-file.css<br />/wp-content/themes/my-wp-theme-dir/css/small.css</code>
 
 
244
  </div>
245
  </div>
246
  <hr />
templates/_admin-page-settings-plugin-areas/_optimize-js.php CHANGED
@@ -103,7 +103,7 @@ $availableForProMoveScriptsToBody = '<a class="go-pro-link-no-style" target="_bl
103
  <tr>
104
  <td colspan="2" style="padding: 0;">
105
  <div style="line-height: 22px; background: #f8f8f8; border-left: 4px solid #008f9c; padding: 10px; margin: 0 0 15px;">
106
- <strong><?php _e('NOTE', 'wp-asset-clean-up'); ?>:</strong> <?php echo __('Concatenating assets is no longer a recommended practice in HTTP/2', 'wp-asset-clean-up'); ?>. &nbsp; <span style="color: #0073aa;" class="dashicons dashicons-info"></span> <a id="wpacu-http2-info-js-target" href="#wpacu-http2-info-js"><?php _e('Read more', 'wp-asset-clean-up'); ?></a> &nbsp;|&nbsp; <a target="_blank" href="https://tools.keycdn.com/http2-test"><?php _e('Verify if your server has HTTP/2 support', 'wp-asset-clean-up'); ?></a>
107
  </div>
108
  </td>
109
  </tr>
@@ -279,17 +279,15 @@ $availableForProMoveScriptsToBody = '<a class="go-pro-link-no-style" target="_bl
279
 
280
  <div id="wpacu_inline_js_files_list_area">
281
  <div style="margin: 12px 0 6px;"><?php _e('Alternatively or in addition to automatic inlining, you can place the relative path(s) or part of them to the files you wish to inline below:', 'wp-asset-clean-up'); ?> (<strong><?php _e('one per line', 'wp-asset-clean-up'); ?></strong>):</div>
 
282
  <label for="wpacu_inline_js_files_list">
283
  <textarea style="width: 100%;"
284
  rows="4"
285
  id="wpacu_inline_js_files_list"
286
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[inline_js_files_list]"><?php echo $data['inline_js_files_list']; ?></textarea>
287
  </label>
288
-
289
- <p><strong>Examples</strong> (you don't have to add the full URL, as it's recommended to use relative paths, especially if you use dev/staging environments or change the domain name of your website):</p>
290
  <code>/wp-content/plugins/plugin-title/scripts/small-file.js<br />/wp-content/themes/my-wp-theme-dir/js/small.js</code>
291
-
292
- <p style="margin-top: 18px;"><span class="dashicons dashicons-warning"></span> <strong>Note:</strong> Please input the sources to the original JavaScript files (one per line), not to any optimized ones (which are usually located in <em><?php echo str_replace(site_url(), '', WP_CONTENT_URL) . OptimizeCommon::getRelPathPluginCacheDir(); ?></em>)</p>
293
  </div>
294
  </div>
295
  </td>
103
  <tr>
104
  <td colspan="2" style="padding: 0;">
105
  <div style="line-height: 22px; background: #f8f8f8; border-left: 4px solid #008f9c; padding: 10px; margin: 0 0 15px;">
106
+ <strong><?php _e('NOTE', 'wp-asset-clean-up'); ?>:</strong> <?php echo __('Concatenating assets is no longer a recommended practice in HTTP/2', 'wp-asset-clean-up'); ?>. &nbsp; <a id="wpacu-http2-info-js-target" href="#wpacu-http2-info-js"><?php _e('Read more', 'wp-asset-clean-up'); ?></a> &nbsp;/&nbsp; <a class="wpacu_hide wpacu_verify_http2_protocol" target="_blank" href="https://tools.keycdn.com/http2-test"><strong><?php _e('Verify if the website is delivered through the HTTP/2 network protocol', 'wp-asset-clean-up'); ?></strong></a> <span class="wpacu_hide wpacu_http2_protocol_is_supported" style="color: green; font-weight: 400;"><span class="dashicons dashicons-yes-alt"></span> Your website `<span style="font-weight: 500;"><?php echo get_site_url(); ?></span>` is delivered through the HTTP/2 network protocol.</span>
107
  </div>
108
  </td>
109
  </tr>
279
 
280
  <div id="wpacu_inline_js_files_list_area">
281
  <div style="margin: 12px 0 6px;"><?php _e('Alternatively or in addition to automatic inlining, you can place the relative path(s) or part of them to the files you wish to inline below:', 'wp-asset-clean-up'); ?> (<strong><?php _e('one per line', 'wp-asset-clean-up'); ?></strong>):</div>
282
+ <p style="margin-top: 8px;"><span class="dashicons dashicons-warning" style="color: #ffc107;"></span> <strong>Note:</strong> Please input the sources to the original JavaScript files (one per line) like in the examples below, not to the cached/optimized ones (which are usually located in <em><?php echo str_replace(site_url(), '', WP_CONTENT_URL) . OptimizeCommon::getRelPathPluginCacheDir(); ?></em>)</p>
283
  <label for="wpacu_inline_js_files_list">
284
  <textarea style="width: 100%;"
285
  rows="4"
286
  id="wpacu_inline_js_files_list"
287
  name="<?php echo WPACU_PLUGIN_ID . '_settings'; ?>[inline_js_files_list]"><?php echo $data['inline_js_files_list']; ?></textarea>
288
  </label>
289
+ <p style="margin-bottom: 6px;"><strong>Examples</strong> (you don't have to add the full URL, as it's recommended to use relative paths, especially if you use dev/staging environments or change the domain name of your website):</p>
 
290
  <code>/wp-content/plugins/plugin-title/scripts/small-file.js<br />/wp-content/themes/my-wp-theme-dir/js/small.js</code>
 
 
291
  </div>
292
  </div>
293
  </td>
templates/_admin-page-settings-plugin-areas/_plugin-usage-settings.php CHANGED
@@ -42,7 +42,7 @@ foreach (\WpAssetCleanUp\MetaBoxes::$noMetaBoxesForPostTypes as $noMetaBoxesForP
42
  <div id="wpacu-settings-assets-retrieval-mode" <?php if (! ($data['dashboard_show'] == 1)) { echo 'style="display: none;"'; } ?>>
43
  <ul id="wpacu-dom-get-type-selections">
44
  <li>
45
- <label for="wpacu_dom_get_type"><?php _e('Select a retrieval way', 'wp-asset-clean-up'); ?>:</label>
46
  </li>
47
  <li>
48
  <label>
@@ -455,7 +455,9 @@ foreach (\WpAssetCleanUp\MetaBoxes::$noMetaBoxesForPostTypes as $noMetaBoxesForP
455
  </div>
456
  </div>
457
 
 
458
  <!-- [wpacu_lite] -->
 
459
  <div id="wpacu-deactivate-modal-info" class="wpacu-modal" style="padding-top: 60px;">
460
  <div class="wpacu-modal-content" style="max-width: 650px;">
461
  <span class="wpacu-close">&times;</span>
@@ -466,4 +468,6 @@ foreach (\WpAssetCleanUp\MetaBoxes::$noMetaBoxesForPostTypes as $noMetaBoxesForP
466
  <img style="margin: 0 auto; width: 100%; max-width: 500px; display: table;" src="<?php echo WPACU_PLUGIN_URL. '/assets/images/wpacu-deactivate-modal.jpg'; ?>" alt="" />
467
  </div>
468
  </div>
469
- <!-- [/wpacu_lite] -->
 
 
42
  <div id="wpacu-settings-assets-retrieval-mode" <?php if (! ($data['dashboard_show'] == 1)) { echo 'style="display: none;"'; } ?>>
43
  <ul id="wpacu-dom-get-type-selections">
44
  <li>
45
+ <label><?php _e('Select a retrieval way', 'wp-asset-clean-up'); ?>:</label>
46
  </li>
47
  <li>
48
  <label>
455
  </div>
456
  </div>
457
 
458
+ <!-- removeIf(development) -->
459
  <!-- [wpacu_lite] -->
460
+ <!--
461
  <div id="wpacu-deactivate-modal-info" class="wpacu-modal" style="padding-top: 60px;">
462
  <div class="wpacu-modal-content" style="max-width: 650px;">
463
  <span class="wpacu-close">&times;</span>
468
  <img style="margin: 0 auto; width: 100%; max-width: 500px; display: table;" src="<?php echo WPACU_PLUGIN_URL. '/assets/images/wpacu-deactivate-modal.jpg'; ?>" alt="" />
469
  </div>
470
  </div>
471
+ -->
472
+ <!-- [/wpacu_lite] -->
473
+ <!-- endRemoveIf(development) -->
templates/admin-page-overview.php CHANGED
@@ -31,10 +31,21 @@ include_once '_top-area.php';
31
  </thead>
32
  <?php
33
  foreach ($data['handles']['styles'] as $handle => $handleData) {
34
- ?>
35
- <tr class="wpacu_global_rule_row wpacu_bulk_change_row">
 
 
 
 
 
36
  <td>
37
- <?php \WpAssetCleanUp\Overview::renderHandleTd($handle, 'styles', $data); ?>
 
 
 
 
 
 
38
  </td>
39
  <td>
40
  <?php
@@ -86,10 +97,21 @@ include_once '_top-area.php';
86
  </thead>
87
  <?php
88
  foreach ($data['handles']['scripts'] as $handle => $handleData) {
 
 
 
 
 
89
  ?>
90
- <tr class="wpacu_global_rule_row wpacu_bulk_change_row">
91
  <td>
92
- <?php \WpAssetCleanUp\Overview::renderHandleTd($handle, 'scripts', $data); ?>
 
 
 
 
 
 
93
  </td>
94
  <td>
95
  <?php
31
  </thead>
32
  <?php
33
  foreach ($data['handles']['styles'] as $handle => $handleData) {
34
+ // [wpacu_lite]
35
+ // Traces from the PRO version in case a downgrade to LITE was made
36
+ $hasProTraces = (strpos($handle, 'wpacu_hardcoded_') !== false);
37
+ $trStyle = $hasProTraces ? 'opacity: 0.5;' : '';
38
+ // [/wpacu_lite]
39
+ ?>
40
+ <tr class="wpacu_global_rule_row wpacu_bulk_change_row" style="<?php echo $trStyle; ?>">
41
  <td>
42
+ <?php
43
+ \WpAssetCleanUp\Overview::renderHandleTd($handle, 'styles', $data);
44
+
45
+ if ($hasProTraces) {
46
+ echo ' &#10230; Inactive rule left from the PRO version';
47
+ }
48
+ ?>
49
  </td>
50
  <td>
51
  <?php
97
  </thead>
98
  <?php
99
  foreach ($data['handles']['scripts'] as $handle => $handleData) {
100
+ // [wpacu_lite]
101
+ // Traces from the PRO version in case a downgrade to LITE was made
102
+ $hasProTraces = (strpos($handle, 'wpacu_hardcoded_') !== false);
103
+ $trStyle = $hasProTraces ? 'opacity: 0.5;' : '';
104
+ // [/wpacu_lite]
105
  ?>
106
+ <tr class="wpacu_global_rule_row wpacu_bulk_change_row" style="<?php echo $trStyle; ?>">
107
  <td>
108
+ <?php
109
+ \WpAssetCleanUp\Overview::renderHandleTd($handle, 'scripts', $data);
110
+
111
+ if ($hasProTraces) {
112
+ echo ' &#10230; Inactive rule left from the PRO version';
113
+ }
114
+ ?>
115
  </td>
116
  <td>
117
  <?php
templates/admin-page-tools.php CHANGED
@@ -33,10 +33,16 @@ do_action('wpacu_admin_notices');
33
 
34
  <div id="wpacu-license-data-remove-area">
35
  <label for="wpacu-remove-license-data">
36
- <input id="wpacu-remove-license-data" type="checkbox" name="wpacu-remove-license-data" value="1" /> <?php _e('Also remove license data (not recommended, unless you\'re uninstalling / deleting the plugin)', 'wp-asset-clean-up'); ?>
37
  </label>
38
  </div>
39
 
 
 
 
 
 
 
40
  <div id="wpacu-warning-read"><span class="dashicons dashicons-warning"></span> <strong><?php _e('Please read carefully below what the chosen action does as this process is NOT reversible.', 'wp-asset-clean-up'); ?></strong></div>
41
 
42
  <div id="wpacu-warning-reset-settings" class="wpacu-warning">
33
 
34
  <div id="wpacu-license-data-remove-area">
35
  <label for="wpacu-remove-license-data">
36
+ <input id="wpacu-remove-license-data" type="checkbox" name="wpacu-remove-license-data" value="1" /> <?php _e('Also remove any license data left from the Pro version if you ever used it (if you switched from Pro to Lite to make tests, but want to switch back to Pro, then do not choose this option)', 'wp-asset-clean-up'); ?>
37
  </label>
38
  </div>
39
 
40
+ <div id="wpacu-cache-assets-remove-area">
41
+ <label for="wpacu-remove-cache-assets">
42
+ <input id="wpacu-remove-cache-assets" type="checkbox" name="wpacu-remove-cache-assets" value="1" /> <?php echo sprintf(__('Also remove any cached CSS/JS files from %s', 'wp-asset-clean-up'), '<code>/'.basename(WP_CONTENT_DIR) . \WpAssetCleanUp\OptimiseAssets\OptimizeCommon::getRelPathPluginCacheDir().'</code>'); ?> (please be careful as there might be cached pages - e.g. people previewing your page via Google Cache - still making reference to the CSS/JS files, you can leave it unchecked if you are not about it)
43
+ </label>
44
+ </div>
45
+
46
  <div id="wpacu-warning-read"><span class="dashicons dashicons-warning"></span> <strong><?php _e('Please read carefully below what the chosen action does as this process is NOT reversible.', 'wp-asset-clean-up'); ?></strong></div>
47
 
48
  <div id="wpacu-warning-reset-settings" class="wpacu-warning">
templates/meta-box-loaded-assets/_asset-script-single-row.php CHANGED
@@ -67,7 +67,13 @@ if ($isGroupUnloaded) {
67
  // [/wpacu_lite]
68
 
69
  if (! empty($extraInfo)) {
70
- echo '<div style="margin: 0 0 10px;">'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</div>';
 
 
 
 
 
 
71
  }
72
  ?>
73
 
67
  // [/wpacu_lite]
68
 
69
  if (! empty($extraInfo)) {
70
+ $stylingDiv = 'margin: 0 0 10px;';
71
+
72
+ if (isset($hasNoSrc) && $hasNoSrc) {
73
+ $stylingDiv = 'margin: 15px 0 10px;';
74
+ }
75
+
76
+ echo '<div style="'.$stylingDiv.'">'.implode(' &nbsp;/&nbsp; ', $extraInfo).'</div>';
77
  }
78
  ?>
79
 
templates/meta-box-loaded-assets/_asset-script-single-row/_extra_inline.php CHANGED
@@ -16,14 +16,20 @@ if ($data['row']['extra_data_js'] || $data['row']['extra_before_js'] || $data['r
16
  href="#"><?php _e('Show', 'wp-asset-clean-up'); ?> / <?php _e('Hide', 'wp-asset-clean-up'); ?></a>
17
  <div class="wpacu-assets-inline-code-collapsible-content <?php if ($inlineCodeStatus !== 'contracted') { echo 'wpacu-open'; } ?>">
18
  <?php
19
- $extraKeys = array(
20
  'data' => 'CDATA added via wp_localize_script()',
21
  'before' => 'Before the tag:',
22
  'after' => 'After the tag:'
23
  );
24
 
25
- foreach ($extraKeys as $extraKeyValue => $extraKeyText) {
26
- $inlineScriptContent = $data['row']['extra_'.$extraKeyValue.'_js'];
 
 
 
 
 
 
27
 
28
  if (is_array($inlineScriptContent) && in_array($extraKeyValue, array('before', 'after'))) {
29
  $inlineScriptContent = (string)ltrim(implode("\n", $inlineScriptContent));
16
  href="#"><?php _e('Show', 'wp-asset-clean-up'); ?> / <?php _e('Hide', 'wp-asset-clean-up'); ?></a>
17
  <div class="wpacu-assets-inline-code-collapsible-content <?php if ($inlineCodeStatus !== 'contracted') { echo 'wpacu-open'; } ?>">
18
  <?php
19
+ $extraInlineKeys = array(
20
  'data' => 'CDATA added via wp_localize_script()',
21
  'before' => 'Before the tag:',
22
  'after' => 'After the tag:'
23
  );
24
 
25
+ foreach ($extraInlineKeys as $extraKeyValue => $extraKeyText) {
26
+ $keyToMatch = 'extra_'.$extraKeyValue.'_js';
27
+
28
+ if ( ! isset($data['row'][$keyToMatch]) ) {
29
+ continue;
30
+ }
31
+
32
+ $inlineScriptContent = $data['row'][$keyToMatch];
33
 
34
  if (is_array($inlineScriptContent) && in_array($extraKeyValue, array('before', 'after'))) {
35
  $inlineScriptContent = (string)ltrim(implode("\n", $inlineScriptContent));
templates/meta-box-loaded-assets/_assets-hardcoded-list.php CHANGED
@@ -42,7 +42,7 @@ if ($totalHardcodedTags === 0) {
42
  action hook (despite the name, it is used for enqueuing both scripts and styles) which is the proper one to use when enqueuing scripts and styles that are meant to appear on
43
  the front end. The standard functions that are used inside the hook to do an enqueuing are: <a target="_blank"
44
  href="https://developer.wordpress.org/reference/functions/wp_enqueue_style/">wp_enqueue_style()</a>,
45
- <a target="_blank" href="https://codex.wordpress.org/Function_Reference/wp_add_inline_style">wp_add_inline_style()</a>
46
  <a target="_blank" href="https://developer.wordpress.org/reference/functions/wp_enqueue_script/">wp_enqueue_script()</a>
47
  &amp; <a target="_blank"
48
  href="https://developer.wordpress.org/reference/functions/wp_add_inline_script/">wp_add_inline_script()</a>. The tags could have been added via editing the PHP code (not using the right standard functions), directly inside posts content, widgets or via plugins such as "Insert Headers and Footers", "Head, Footer and Post Injections", etc. Be careful when unloading any of these tags as they might be related to Google Analytics/AdWords, StatCounter, Facebook Pixel, etc.
@@ -224,4 +224,3 @@ if ($totalHardcodedTags === 0) {
224
  </div>
225
  </div>
226
  <?php
227
-
42
  action hook (despite the name, it is used for enqueuing both scripts and styles) which is the proper one to use when enqueuing scripts and styles that are meant to appear on
43
  the front end. The standard functions that are used inside the hook to do an enqueuing are: <a target="_blank"
44
  href="https://developer.wordpress.org/reference/functions/wp_enqueue_style/">wp_enqueue_style()</a>,
45
+ <a target="_blank" href="https://codex.wordpress.org/Function_Reference/wp_add_inline_style">wp_add_inline_style()</a>,
46
  <a target="_blank" href="https://developer.wordpress.org/reference/functions/wp_enqueue_script/">wp_enqueue_script()</a>
47
  &amp; <a target="_blank"
48
  href="https://developer.wordpress.org/reference/functions/wp_add_inline_script/">wp_add_inline_script()</a>. The tags could have been added via editing the PHP code (not using the right standard functions), directly inside posts content, widgets or via plugins such as "Insert Headers and Footers", "Head, Footer and Post Injections", etc. Be careful when unloading any of these tags as they might be related to Google Analytics/AdWords, StatCounter, Facebook Pixel, etc.
224
  </div>
225
  </div>
226
  <?php
 
templates/meta-box-loaded-assets/_hardcoded/_asset-script-single-row-hardcoded.php CHANGED
@@ -44,7 +44,8 @@ if (! isset($data)) {
44
  $enableViewMore = true;
45
  }
46
  ?>
47
- <div class="wpacu-hardcoded-code-area <?php if ($enableViewMore) { ?>wpacu-has-view-more<?php } ?>">
 
48
  <?php
49
  if ($tagBelongsTo = \WpAssetCleanUp\HardcodedAssets::belongsTo($data['row']['obj']->tag_output)) {
50
  echo '<div style="margin-bottom: 10px;">'.__('Belongs to', 'wp-asset-clean-up').': <strong>'.$tagBelongsTo . '</strong></div>';
@@ -62,6 +63,7 @@ if (! isset($data)) {
62
  ?>
63
  <p class="wpacu-view-more-link-area" style="margin: 0 !important; padding: 15px !important;"><a href="#" class="<?php echo $wpacuViewMoreCodeBtnClass; ?>"><?php _e('View more', 'wp-asset-clean-up'); ?></a></p>
64
  <?php } ?>
 
65
  </div>
66
  <?php
67
  }
44
  $enableViewMore = true;
45
  }
46
  ?>
47
+ <div class="wpacu-hardcoded-code-area">
48
+ <div class="<?php if ($enableViewMore) { ?>wpacu-has-view-more<?php } ?>">
49
  <?php
50
  if ($tagBelongsTo = \WpAssetCleanUp\HardcodedAssets::belongsTo($data['row']['obj']->tag_output)) {
51
  echo '<div style="margin-bottom: 10px;">'.__('Belongs to', 'wp-asset-clean-up').': <strong>'.$tagBelongsTo . '</strong></div>';
63
  ?>
64
  <p class="wpacu-view-more-link-area" style="margin: 0 !important; padding: 15px !important;"><a href="#" class="<?php echo $wpacuViewMoreCodeBtnClass; ?>"><?php _e('View more', 'wp-asset-clean-up'); ?></a></p>
65
  <?php } ?>
66
+ </div>
67
  </div>
68
  <?php
69
  }
templates/meta-box-loaded-assets/_hardcoded/_asset-style-single-row-hardcoded.php CHANGED
@@ -44,24 +44,26 @@ if (! isset($data)) {
44
  $enableViewMore = true;
45
  }
46
  ?>
47
- <div class="wpacu-hardcoded-code-area <?php if ($enableViewMore) { ?>wpacu-has-view-more<?php } ?>">
48
- <?php
49
- if ($tagBelongsTo = \WpAssetCleanUp\HardcodedAssets::belongsTo($data['row']['obj']->tag_output)) {
50
- echo '<div style="margin-bottom: 10px;">'.__('Belongs to', 'wp-asset-clean-up').': <strong>'.$tagBelongsTo . '</strong></div>';
51
- }
 
52
 
53
- if ($data['row']['obj']->inside_conditional_comment) {
54
- echo '<span><img style="vertical-align: middle;" width="25" height="25" src="'.WPACU_PLUGIN_URL.'/assets/icons/icon-ie.svg" alt="" title="Microsoft / Public domain" />&nbsp;<span style="font-weight: 400; color: #1C87CF;">Loads only in Internet Explorer based on the following condition:</span> <em>if '.$data['row']['obj']->inside_conditional_comment.'</em></span>';
55
- }
56
- ?>
57
- <div>
58
- <pre><code><?php echo htmlentities( $data['row']['obj']->tag_output ); ?></code></pre>
59
- </div>
60
- <?php if ($enableViewMore) {
61
- $wpacuViewMoreCodeBtnClass = ! is_admin() ? 'wpacu-view-more-code' : 'button';
62
  ?>
63
- <p class="wpacu-view-more-link-area" style="margin: 0 !important; padding: 15px !important;"><a href="#" class="<?php echo $wpacuViewMoreCodeBtnClass; ?>"><?php _e('View more', 'wp-asset-clean-up'); ?></a></p>
64
- <?php } ?>
 
 
 
 
 
 
 
65
  </div>
66
  <?php
67
  }
44
  $enableViewMore = true;
45
  }
46
  ?>
47
+ <div class="wpacu-hardcoded-code-area">
48
+ <div class="<?php if ($enableViewMore) { ?>wpacu-has-view-more<?php } ?>">
49
+ <?php
50
+ if ($tagBelongsTo = \WpAssetCleanUp\HardcodedAssets::belongsTo($data['row']['obj']->tag_output)) {
51
+ echo '<div style="margin-bottom: 10px;">'.__('Belongs to', 'wp-asset-clean-up').': <strong>'.$tagBelongsTo . '</strong></div>';
52
+ }
53
 
54
+ if ($data['row']['obj']->inside_conditional_comment) {
55
+ echo '<span><img style="vertical-align: middle;" width="25" height="25" src="'.WPACU_PLUGIN_URL.'/assets/icons/icon-ie.svg" alt="" title="Microsoft / Public domain" />&nbsp;<span style="font-weight: 400; color: #1C87CF;">Loads only in Internet Explorer based on the following condition:</span> <em>if '.$data['row']['obj']->inside_conditional_comment.'</em></span>';
56
+ }
 
 
 
 
 
 
57
  ?>
58
+ <div>
59
+ <pre><code><?php echo htmlentities( $data['row']['obj']->tag_output ); ?></code></pre>
60
+ </div>
61
+ <?php if ($enableViewMore) {
62
+ $wpacuViewMoreCodeBtnClass = ! is_admin() ? 'wpacu-view-more-code' : 'button';
63
+ ?>
64
+ <p class="wpacu-view-more-link-area" style="margin: 0 !important; padding: 15px !important;"><a href="#" class="<?php echo $wpacuViewMoreCodeBtnClass; ?>"><?php _e('View more', 'wp-asset-clean-up'); ?></a></p>
65
+ <?php } ?>
66
+ </div>
67
  </div>
68
  <?php
69
  }
wpacu-load.php CHANGED
@@ -60,6 +60,9 @@ new \WpAssetCleanUp\Info();
60
  // Any debug?
61
  new \WpAssetCleanUp\Debug();
62
 
 
 
 
63
  // Common functions for both CSS & JS combinations
64
  // Clear CSS/JS caching functionality
65
  $wpacuOptimizeCommon = new \WpAssetCleanUp\OptimiseAssets\OptimizeCommon();
60
  // Any debug?
61
  new \WpAssetCleanUp\Debug();
62
 
63
+ // Maintenance
64
+ new \WpAssetCleanUp\Maintenance();
65
+
66
  // Common functions for both CSS & JS combinations
67
  // Clear CSS/JS caching functionality
68
  $wpacuOptimizeCommon = new \WpAssetCleanUp\OptimiseAssets\OptimizeCommon();
wpacu.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  * Plugin Name: Asset CleanUp: Page Speed Booster
4
  * Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
5
- * Version: 1.3.6.0
6
  * Description: Unload Chosen Scripts & Styles from Posts/Pages to reduce HTTP Requests, Combine/Minify CSS/JS files
7
  * Author: Gabriel Livan
8
  * Author URI: http://gabelivan.com/
@@ -12,7 +12,7 @@
12
 
13
  // Is the Pro version triggered before the Lite one and are both plugins active?
14
  if (! defined('WPACU_PLUGIN_VERSION')) {
15
- define('WPACU_PLUGIN_VERSION', '1.3.6.0');
16
  }
17
 
18
  // Exit if accessed directly
@@ -107,13 +107,12 @@ define('WPACU_PLUGIN_GO_PRO_URL', 'https://www.gabelivan.com/items/wp-asset-cl
107
  // Global Values
108
  define('WPACU_LOAD_ASSETS_REQ_KEY', WPACU_PLUGIN_ID . '_load');
109
 
110
- require_once WPACU_PLUGIN_DIR.'/wpacu-load.php';
111
-
112
  $wpacuGetLoadedAssetsAction = ((isset($_REQUEST[WPACU_LOAD_ASSETS_REQ_KEY]) && $_REQUEST[WPACU_LOAD_ASSETS_REQ_KEY])
113
  || (isset($_REQUEST['action']) && $_REQUEST['action'] === WPACU_PLUGIN_ID.'_get_loaded_assets'));
114
-
115
  define('WPACU_GET_LOADED_ASSETS_ACTION', $wpacuGetLoadedAssetsAction);
116
 
 
 
117
  if (WPACU_GET_LOADED_ASSETS_ACTION === true || ! is_admin()) {
118
  add_action('init', static function() {
119
  // "Smart Slider 3" & "WP Rocket" compatibility fix | triggered ONLY when the assets are fetched
2
  /*
3
  * Plugin Name: Asset CleanUp: Page Speed Booster
4
  * Plugin URI: https://wordpress.org/plugins/wp-asset-clean-up/
5
+ * Version: 1.3.6.1
6
  * Description: Unload Chosen Scripts & Styles from Posts/Pages to reduce HTTP Requests, Combine/Minify CSS/JS files
7
  * Author: Gabriel Livan
8
  * Author URI: http://gabelivan.com/
12
 
13
  // Is the Pro version triggered before the Lite one and are both plugins active?
14
  if (! defined('WPACU_PLUGIN_VERSION')) {
15
+ define('WPACU_PLUGIN_VERSION', '1.3.6.1');
16
  }
17
 
18
  // Exit if accessed directly
107
  // Global Values
108
  define('WPACU_LOAD_ASSETS_REQ_KEY', WPACU_PLUGIN_ID . '_load');
109
 
 
 
110
  $wpacuGetLoadedAssetsAction = ((isset($_REQUEST[WPACU_LOAD_ASSETS_REQ_KEY]) && $_REQUEST[WPACU_LOAD_ASSETS_REQ_KEY])
111
  || (isset($_REQUEST['action']) && $_REQUEST['action'] === WPACU_PLUGIN_ID.'_get_loaded_assets'));
 
112
  define('WPACU_GET_LOADED_ASSETS_ACTION', $wpacuGetLoadedAssetsAction);
113
 
114
+ require_once WPACU_PLUGIN_DIR.'/wpacu-load.php';
115
+
116
  if (WPACU_GET_LOADED_ASSETS_ACTION === true || ! is_admin()) {
117
  add_action('init', static function() {
118
  // "Smart Slider 3" & "WP Rocket" compatibility fix | triggered ONLY when the assets are fetched