rocket-footer-js
rocket-footer-js copied to clipboard
WordPress plugin to force all JS to the footer including inline scripts. Extends WP-Rocket
=== 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
== Installation ==
This section describes how to install the plugin and get it working.
- Upload the plugin files to the
/wp-content/plugins/rocket-footer-js
directory, or install the plugin through the WordPress plugins screen directly. - Activate the plugin through the 'Plugins' screen in WordPress
- 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