-
Notifications
You must be signed in to change notification settings - Fork 1
/
readme.txt
555 lines (405 loc) · 23.5 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
=== 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