=== Plugin Name === Contributors: pcfreak30 Donate link: http://www.paypal.me/pcfreak30 Tags: optimize, wp-rocket, footer javascript, lazy load, async js, async javascript, speed Requires at least: 4.2.0 Tested up to: 5.4 Stable tag: trunk License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html WordPress plugin to do a better job with your scripts and improve lazy loading. Depends on WP-Rocket This is NOT an official addon to WP-Rocket! == Description == **This is NOT an official addon to WP-Rocket!** This plugin will do the following: * Process all inline and external JS to one file, not multiple, and put at the footer with async on * Put all *localized* scripts together before the primary script above * Automatically optimize popular 3rd party services including: * Tawk.to * WP Rockets lazyload * Google Analytics * Double Click Google Analytics * Avvo.com Tracking * Pushcrew Tracking * Clicky Tracking * Facebook Pixel Tracking * MCAfee Secure * Sumo Ne * Pingdom Prum * Google Tag Manager * Mouse Flow * Cornerstone Page Builder * Automatically lazy load popular widgets if https://wordpress.org/plugins/lazy-load-xt/ or https://wordpress.org/plugins/a3-lazy-load/ are active. Services include: * Google Maps with Avada theme * All Facebook social widgets * All Twitter social widgets * All Google Plus social widgets * All Google Adsense advertisements * Google Re-captcha * Tumbler * Amazon Ads * Stumble Upon * VK.com * WooCommerce Social Media Share Buttons plugin * Any iframe * Blog Her Ads * Video embeds (click to activate) * Pin Interest If you are looking for a professional team to get your WordPress site to run faster, check us out for our speed optimization services at [Rank Grow Digital](https://rankgrowdigital.com/) == Installation == This section describes how to install the plugin and get it working. 1. Upload the plugin files to the `/wp-content/plugins/rocket-footer-js` directory, or install the plugin through the WordPress plugins screen directly. 2. Activate the plugin through the 'Plugins' screen in WordPress 4. Clear WP-Rocket cache and view HTML source! == Changelog == ### 3.2.3 ### * Bug: Fix typo in HubSpotForms module and fix broken code * Bug: Handle edge case of HTML5 video not fully lazyloading due to jQuery not triggering on loadeddata event * Feature: Add a pseudo css API to allow any elements background image to be lazyloaded * Enhancement: Add filters around enqueuing auxiliary scripts & default to not load the imagefixes script so that modules can flag it on at runtime * Enhancement: Add micro-optimization by serving preminified versions of polyfills and lazysizes * Enhancement: Improve cache management by deleting cache files when the objects are purged to handle edge cases * Enhancement: Add support for purging cache via cron, using rocket_footer_js_background_cache_purge_item_threshold filter, and preload cache if enabled after * Enhancement: Videos Module: Only set src/data-src if this is a video. If video is autoplay before we process it, skip it * Enhancement: Videos Module: Add vimeo support * Compatibility: Videos Module: Add videojs compatibility * Compatibility: Add visual composer compatibility to lazy load background images * Compatibility: Add custom event polyfill * Compatibility: Add compatibility with wp-rocket's lazyload ### 3.2.2 ### * Enhancement: Skip processing background image if it is flagged for no lazy load * Enhancement: Centralize multibyte encoding for entities into the DOMDocument class so that style tags do not get processed ### 3.2.1 ### * Bug: For elementor module, if in admin, functions should still run * Bug: Encode both scripts and styles in DOM processing due to further edge cases found * Enhancement: Add a3 lazy load excludes as a consideration for determining if lazy load is on * Enhancement: Defer init checks for Elementor modules so that lazy load excludes can be processed * Enhancement: Add support for wp-rocket file excludes * Enhancement: For elementor module, add an option for a video thumbnail to have a custom alt attribute * Enhancement: For video lazyload, add support for custom alt attribute, and fall back to oembed title * Enhancement: Ensure wp-rocket preload only runs on cron by conditionally deferring it * Integration: Add lazyload compatibility for WP Ultimate Post Grid ### 3.2.0 ### * Bug: Add more compatibility fixes with a3 lazy load * Bug: Fix bugs with jQuery compatibility of lazySizes * Bug: Don't try and do processing during JSON/API requests * Bug/Enhancement: Misc fixes and improvements to the video lazyload * Bug: Remove the preload functionality from lazySizes * Feature: Integrate WebPExpress support to allow WebP to work with other integrations/modules and to enable a separate cache for webp when supported * Feature: Enable lazyload to be managed per element inside the Elementor Editor * Compatibility: Add compatibility css for elementor in the video lazyload * Compatibility: Add more Fusion logo options to be processed by CDN * Compatibility: Prevent divi from concatenating JS * Integration: Add compatibility with smart slider for lazy load * Integration: Add compatibility with EWWW to prevent image processing from running on LazyLoaded Video thumbnails due to the excessive processing time * Integration: Add compatibility With Essential Addons for Elementor * Integration: Ignore hubspot forms in JS rewrite module and add LazyLoad Compatibility with HubSpot * Integration: Add lazyload compatibility with Fusion portfolio elements * Integration: Add lazyload compatibility with Fusion's lazySizes * Integration: Add compatibility with Rank Math SEO * Enhancement: Add hooks to allow the minify cache key to be modified * Enhancement: Ensure picturefill JS script is loaded if CSS plugin is not active * Enhancement: Improve rendering of lazyloaded elements with lazySizes * Enhancement: Enable the video thumbnail to be a responsive image based on all image sizes registered, and support conditionally lazyloading it. Also support integration with WEBP. * Enhancement: Improve check for if lazy load should be enabled * Enhancement: Add filter to bypass reading/saving of cache * Enhancement: Refactor and improve the divi lazyload suypport for videos * Enhancement: Add webp support to MetaSlider * Enhancement: Add compatibility with the wp-rocket preloader to ensure that it will run * Enhancement: If the wp-rocket preloader is on, then run the preloader when site cache is cleared * Enhancement: Clear a post cache when the post is saved * Enhancement: Add support for a lazyloaded video thumbnail to not be lazyloaded via a data attribute, and expose that in the elementor editor * Enhancement: Allow a lazyloaded video thumbnail to have it's responsive size manually set and expose that in the Elementor editor ### 3.1.2 ### * Compatibility: Remove lazy load compatibility script for master slider as it is no longer needed ### 3.1.1 ### * Bug: Verify that the found background properties have settings in elementor compatibility module * Bug: Add background lazyload attribute to lazy load compatibility code * Enhancement: Add font display swap to TypeKit module ### 3.1.0 ### * Bug: Fix lazy load CSS to not be position absolute * Bug: Hash the url without possible use of a CDN * Bug: Fix gravity forms recaptcha lazy load support * Enhancement: Migrate from lazyLoadXT to lazysizes for increase performance and less bugs with lazy load. For technical details the "intersection observer" version is used with polyfill's * Compatibility: Fix with wp-rocket 3.1.x to prevent the default minify from processing and causing edge cases * Compatibility: Add lazy load compatibility with Elementor image widget and sections/column backgrounds and overlays * Compatibility: Add lazy load compatibility with Elementor Pro posst grid cards and slick slider * Compatibility: Add lazy load support for Google Maps widgets and combine Google Maps Pro module ### 3.0.16 ### * Bug: Fix lazy load CSS to not be position absolute * Bug: Fix edge case bug with DOMDocument mangling HTML entities * Compatibility: Google Plus shut down, so support removed ### 3.0.15 ### * Bug: Fix using css minify instead of JS minify ### 3.0.14 ### * Bug: Set url scheme to prevent no protocol urls from bugging output * Bug: Use prevAll and use find over children * Bug: Don't process if url is empty * Enhancement: Ensure avatar images are processed though CDN * Enhancement: Add autoplay support for vimeo * Compatibility: Add lazy load compatibility with "Recaptcha In WP Comments Form" plugin * Compatibility: Add generic recaptcha lazy load support * Compatibility: Add integration with Listify for lazyload compatibility * Compatibility: Add integration with Buttonizer for lazy load compatibility * Compatibility: Add integration with Masterslider for lazylopad compatibility * Compatibility: Change file purge filter for compatibility with wp-rocket 3.2 * Misc: Update readme with more clear disclaimer ### 3.0.13 ### * Bug: Bug fix fusion framework integration with opengraph and cdn causing crash * Compatibility: Force override html minification outside admin to ensure it does not process before plugin html minification runs. This is prep for a sister CSS plugin update ### 3.0.12 ### * Compatibility: Add support for use proof to be optimized * Compatibility: Add support for convert kit to be optimized * Compatibility: Add compatibility with thrive theme framework to ensure the logo's are processed for CDN replacements * Compatibility: Add compatibility with thrive leads to ensure that shortcodes get processed for CDN replacements * Compatibility: Add elementor ultimate addons compatibility for the gallery element and before/after slider * Compatibility: Add elementor compatibility for the tab element * Compatibility: Add CDN/device icon compatibility with avada/fusion framework ### 3.0.11 ### * Bug: Inline tag encoding processed empty tags and outputted garbled data that caused JS errors. Empty tags are no longer encoded ### 3.0.10 ### * Bug: Always encrypt scripts if there is content to prevent processing edge cases * Bug: Remove found script in rewrite modules and inject remaining code as a new script to get re-processed to ensure nothing gets silently deleted * Bug: Handle case where CDN domain may be just a domain and not a url * Integration: Add CookieBot rewrite module * Integration: Add CallRail rewrite module to skip processing * Enhancement: Prevent any mediaelement embeds from auto starting for lazy loads * Compatibility: Add integration with fusion framework to handle the privacy feature for lazy load compatibility * Compatibility: Put autoplay in allow attribute due to chrome video changes * Compatibility: Add compatibility with wp-rocket 3.1 due to JS minify class change ### 3.0.9 ### * Bug: jQuery wrap appears to set the style attribute and not with and height so work around it * Bug: Use maybe_unserialize in revolution slider integration module for forcing javascript options * Bug: Set iframes with lazyloaded-video class to max width of 100% to prevent overflowing in video * Feature: Add function to enable using a class video-size-linked-to-VIDEOID on a video iframe to force it to use the size of another video via jQuery in edge cases where the image sizes don't match * Enhancement: Disable a3 lazy load if enabled but we are logged in and not caching logged in users, but allow filter `rocket_footer_js_lazy_load_members_override` to override * Enhancement: Add css class lazyloaded-video to processed videos to be styled * Compatibility: Add compatibility with theme fusion avada/fusion builder * Compatibility: Add compatibility with fusion builder/visual composer combination to convert css class to data-attribute for video size linking * Compatibility: Add further CSS compatibility with Visual Composer * Compatibility: Re-render fusion carousel when any of its images are lazy loaded * Compatibility: Add compatibility CSS with visual composer to override margins ### 3.0.8 ### * Don't use PHP_INT_MAX on rocket_buffer ### 3.0.7 ### * Bug: Don't process background images if lazy load is not enabled * Bug: Add workaround to force divi parallax's to re-render on lazyload as well as the default all * Integration: Add genesis framework integration * Enhancement: Ensure get_rocket_cdn_url uses all css/js zones * Enhancement: Better handling of video lazy load placeholder size and support p tags * Compatibility: Add rewrite module to Prevent Stripe.js from being minified as they don't allow it * Compatibility: Add magiczoom compatibility with lazy load * Compatibility: Add MemberPress integration to force bundled zxcvbn script to be CDN'ified * Compatibility: Add compatibility with AddThis script to exclude script since it doesn't function minified ### 3.0.6 ### * Enable autoplay on lazy load videos * Add loading spinner CSS for lazy load videos ### 3.0.5 ### * Add fb-like-box class to list of facebook widgets to lazyload * Don't check libxml version on body fix * Exclude Shareaholic JS from minify ### 3.0.4 ### * Update framework ### 3.0.3 ### * Remove accidental global font override * Remove bad lazy loading default that could interfere with minify ### 3.0.2 ### * Fix Bugs in Video lazy loading * Prevent crash from undefined is_plugin_active in some situations * Skip lazy load iframe if is in a noscript ### 3.0.1 ### * Fix Bug in Google Plus lazy loading ### 3.0.0 ### This is considered a ***MAJOR*** release due to the amount of effort that has been invested since the last release in 2017 * BUGS!: Too many bug fixes to give out in detail. It would be ideal to review git commits in this case * Feature: Add lazyloading for CSS background images * Feature: Add lazy load for google full page ads * Feature: Add Big Bat support * Feature: Add rewrite support for Klaviyo Analytics * Feature: Add rewrite support for Youtube embed/iframe API * Integration: Add integration with Wonder Plugin Carousel * Integration: Add integration with Smart Slider 3 * Integration: Add integration with Qocode Theme Framework * Integration: Add integration with MetaSlider * Integration: Add integration with Google Maps Widget Pro * Integration: Add integration with Divi Popup Builder * Integration: Add integration with Bridge Theme * Integration: Add Audio integration to properly handle HTML 5 audio * Integration: Add a3 lazy load integration to ensure CDN is used for all content * Integration: Add integration with Gravity Forms * Integration: Add Lazyload support for Qode Framework google maps * Integration: Add integration with Divi Builder * Integration: Add integration with BNE flyout * Integration: Add integration with WPEX theme framework * Integration: Add integration with PressCore Theme framework * Enhancement/Bug: Bundle a patched and updated a3 lazy Load lazyload XT library version * Enhancement: Automatically download the most high resolution youtube thumbnail * Enhancement: Ensure lazy load supports iframes with new script * Compatibility: Add compatibility with Visual Composer * Compatibility: Add revslider lazy load compatibility * Compatibility: Add woocommerce integration to disable many cache hooks to reduce problems * Compatibility: Add Divi LazyLoad compatibility * Compatibility: Disable lazy load if divi frontend pagebuilder is running * Compatibility: Add workaround technique for processing inline javascript that has html * Deprecated: Remove google tag manager minify since it causes problems ### 2.0.0 ### This is a ***MAJOR*** release and over 50% of the code is rewritten. While it has been extensively tested, there may still be bugs! Please test in a development site before deploying! Due to the amount of work, only a summary of this version will be detailed below. * ***Major*** rewrite using new composer based framework. * Feature: Add McAfee Secure integration * Feature: Add Revolution Slider integration * Feature: Add video embed lazyload and download thumnails locally * Feature: Add Pin Interest lazyLoad * Feature: Add Blog Her Ads lazyload * Feature: Hijack JS document.write to enable 3rd party scripts to inject html safely * Feature: Add Hub Spot rewriting * Feature: Add Pindom Prum rewrite ### 1.4.6 ### * Strip returns in rocket_footer_js_rewrite_js_loaders * Improve Google Analytics to conditionally handle ssl * Bug fix hanging of Facebook Pixel fbq calls * Add Pushcrew Tracking * Ensure Facebook SDK is only loaded 1 time * Refactor Google Plus to use simpler xpath queries and set a dummy pixel image to emsure it is picked up by lazy load * Add support for Google Plus loaded via JS * Improve twitter regex * Add Tumbler support * Improve Google Adsense support and skip ads where there is no ins tag as this is likely a full page or alternate ad * Add Amazon Ads support * Add Stumble Upon support * Add VK.com support * For Google Adsense, Amazon Ads, and Google Plus, if lazy load is off and the scripts are normal tags, flag to not minify so the scripts are not broken * Add support for WooCommerce Social Media Share Buttons plugin * Use WP_DEBUG_LOG over WP_DEBUG in rocket_footer_js_debug_enabled * Fix logic in rocket_footer_js_debug_enabled that may cause debug to be on by mistake ### 1.4.5 ### * Improve facebook pixel support to prevent possible runtime errors ### 1.4.4 ### * Add support for Avvo.com tracking * Ensure zxcvbn password meter is not changed on login and signup pages ### 1.4.3 ### * Update Page Links To compatibility ### 1.4.2 ### * Improve UTF-8 character handling * Add support for googleanalytics plugin * Improve GA regex * Add compatibility with N2Extend framework ### 1.4.1 ### * Add support for Sumo Me ### 1.4.0 ### * Improve multi-line comment regex * Rebuild cache system without using SQL ### 1.3.9 ### * Extract and minify GA calls ### 1.3.8 ### * Remove comments from js since JSMin doesn't do it by using a new function rocket_footer_js_minify * Run rocket_footer_js_process_remote_script and rocket_footer_js_process_local_script when using cached data as well * If rocket_footer_js_process_remote_script/rocket_footer_js_process_local_script return a modified script, then use the original in the cache but minified so it gets processed again properly the next request * Inline scripts were not getting cached * Removed duplicate minify call for remote scripts * Cache the tawk.to script * Fix tawk.to minify call ### 1.3.7 ### * Ensure home uses the active URL scheme * Pass $tags_ref to rocket_footer_js_process_local_script not $tags * Change rocket_footer_js_process_local_script signature to use $tags by reference * Add support for Facebook Pixel * Add support for Pixel Your Site plugin since it stores the pixel code in its own script * Add support for Google Web Fonts JS loader ### 1.3.6 ### * Automatically lazy load iframes if they are not lazy loaded already ### 1.3.5 ### * Ensure async attribute is compatible with XHTML ### 1.3.4 ### * Ensure lazy load comments don't get stripped by html minify by using tag markers and doing a regex replacement after minification * Improve Twitter regex to support another variation * Improve Facebook regex to support another variation * Add support for DoubleClick GA * Add support for Google Adsense lazy loading ### 1.3.3 ### * Add compatibility hack for older libxml * Skip text/html scripts ### 1.3.2 ### * Treat google maps as loading async with a typeof timer and load infobox async if it exists * Check document.readyState to run map function in case the window load event already ran ### 1.3.1 ### * Move debug code to rocket_footer_js_debug_enabled function * Move web fetch code to rocket_footer_js_remote_fetch function * Use rocket_add_url_protocol in rocket_footer_js_rewrite_js_loaders ### 1.3.0 ### * Auto optimize Tawk.to, WP Rockets lazyload, and google analytics to use normal tags instead of javascript loaders so they can get minified * If minify is enabled due to LazyLoadXT or A3_Lazy_Load support, then lazy load facebook, twitter, google plus widgets, and avada google maps (if Avada_GoogleMap exists and google maps is on) * Enqueue LazyLoadXT widget extension if lazyload is enabled since lazy load plugins don't supply it * Improve lazy load regex patterns * Split minify to rocket_footer_js_process_remote_script and rocket_footer_js_process_locate_script functions with associated filters to hook into * Minify emojione in tawk.to JS * Add hook rocket_footer_js_rewrite_js_loaders to allow pre-processing before minification * Add support for avada google maps lazy loading * Remove duplicate google maps API scripts and prioritize the first one that has an API key * Only lazy load google maps if there is any script content * Added function rocket_footer_js_lazyload_script to reduce code duplication ### 1.2.3 ### * Ensure url scheme is set correctly when converting from a CDN domain ### 1.2.2 ### * Disable minify on AMP pages ### 1.2.1 ### * Tested on WordPress 4.7 * Ensure PHP 5.3 compatibility ### 1.2.0 ### * Correct/improve relative URL logic * Prevent html from being minified before JS to prevent issues with detection * Add new minify cache system to reduce computation time required to minify a page **Notice: This new cache system could cause unknown issues. While it has been tested, not every situation can be accounted for. Contact me if you hit a problem.** **Notice: Cache is stored in transients, so only a normal wp-rocket purge will clear everything** ### 1.1.16 ### * Fix logic bug in data-no-minify check ### 1.1.15 ### * Check for relative URL's * Add compatibility support for "Page Links To" since it does naughty things with buffering ### 1.1.14 ### * Bugfix fetching JS from filesystem with http\Url * Add a newline into the automatic semicolon insertion for the case that the last text is a comment ### 1.1.13 ### * Ensure zxcvbn is loaded normally and not async ### 1.1.12 ### * Exclude js template script tags ### 1.1.11 ### * Check for sourcemaps and add a new line to prevent syntax errors ### 1.1.10 ### * Check for off in display_errors ### 1.1.9 ### * Catch errors if WP_Error is returned or status code is not 200 or 304 or its empty * Log errors if debug mode is enabled or PHP display_errors is enabled * Disable minify when debug is on regardless of settings * Log processed scripts in debug mode * Move query string check to only run for local files ### 1.1.8 ### * Web fetch dynamic scripts being defined as not having a JS extension * Add regex to remove broken conditional comments out of inline js ### 1.1.7 ### * Add constant DONOTMINIFYJS and function is_rocket_post_excluded_option to minify status check ### 1.1.6 ### * If file is external, we do not want to treat the response as a filesystem path * Always set the url domain back to home_url() because it will need to be that even if the original is a CDN or not ### 1.1.5 ### * Use home URL and ABSPATH for the site root and not assume everything is in wp-content ### 1.1.4 ### * Use a http_build_url shim as a fallback instead of deactivating with an error ### 1.1.3 ### * Set main script tag to async ### 1.1.2 ### * Minified wrong JS buffer for inline JS * Don't prepend semicolon since its already conditionally prepended for inline JS ### 1.1.1 ### * Add detection for PHP HTTP PECL extension * Update code commentation and PHPDoc blocks ### 1.1.0 ### * Changed logic to disable minify setting on front end and combine all scripts + minify if option is set (excluding localized scripts) to a new file in minify cache folder. File name will have user ID if logged in to be unique. * Keep application/ld+json in the header ### 1.0.2 ### * Exclude JS extension from slug name and ensure remote file is saved with a JS extension ### 1.0.1 ### * Check for CDN files in remote tags and convert back to a local filename for minification * Do variable cleanup ### 1.0.0 ### * Initial version
pcfreak30/rocket-footer-js
WordPress plugin to force all JS to the footer including inline scripts. Extends WP-Rocket
PHPGPL-2.0