fg-loadcss
Advanced tools
Comparing version 2.0.0 to 2.0.1-0
@@ -16,16 +16,26 @@ /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ | ||
// rel=preload feature support test | ||
rp.support = function(){ | ||
// runs once and returns a function for compat purposes | ||
rp.support = (function(){ | ||
var ret; | ||
try { | ||
return w.document.createElement( "link" ).relList.supports( "preload" ); | ||
ret = w.document.createElement( "link" ).relList.supports( "preload" ); | ||
} catch (e) { | ||
return false; | ||
ret = false; | ||
} | ||
}; | ||
return function(){ | ||
return ret; | ||
}; | ||
})(); | ||
// if preload isn't supported, get an asynchronous load by using a non-matching media attribute | ||
// then change that media back to its intended value on load | ||
rp.bindMediaToggle = function( link, media ){ | ||
rp.bindMediaToggle = function( link ){ | ||
// remember existing media attr for ultimate state, or default to 'all' | ||
var finalMedia = link.media || "all"; | ||
function enableStylesheet(){ | ||
link.media = media; | ||
link.media = finalMedia; | ||
} | ||
// bind load handlers to enable media | ||
if( link.addEventListener ){ | ||
@@ -36,2 +46,9 @@ link.addEventListener( "load", enableStylesheet ); | ||
} | ||
// Set rel and non-applicable media type to start an async request | ||
// note: timeout allows this to happen async to let rendering continue in IE | ||
setTimeout(function(){ | ||
link.rel = "stylesheet"; | ||
link.media = "only x"; | ||
}); | ||
// also enable media after 3 seconds, | ||
@@ -44,2 +61,3 @@ // which will catch very old browsers (android 2.x, old firefox) that don't support onload on link | ||
rp.poly = function(){ | ||
// double check this to prevent external calls from running | ||
if( rp.support() ){ | ||
@@ -53,16 +71,17 @@ return; | ||
if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){ | ||
// remember existing media attr for ultimate state, or default to 'all' | ||
var finalMedia = link.media || "all"; | ||
// bind listeners to toggle media back | ||
rp.bindMediaToggle( link, finalMedia ); | ||
// if preload is not supported, kick off an asynchronous request by using a non-matching media query and rel=stylesheet | ||
link.media = "x"; | ||
link.rel = "stylesheet"; | ||
// prevent rerunning on link | ||
link.setAttribute( "data-loadcss", true ); | ||
// bind listeners to toggle media back | ||
rp.bindMediaToggle( link ); | ||
} | ||
} | ||
}; | ||
// if unsupported, run the polyfill | ||
if( !rp.support() ){ | ||
// run once at least | ||
rp.poly(); | ||
// rerun poly on an interval until onload | ||
var run = w.setInterval( rp.poly, 300 ); | ||
var run = w.setInterval( rp.poly, 500 ); | ||
if( w.addEventListener ){ | ||
@@ -79,5 +98,5 @@ w.addEventListener( "load", function(){ | ||
} | ||
}; | ||
// run once at least | ||
rp.poly(); | ||
} | ||
// commonjs | ||
@@ -84,0 +103,0 @@ if( typeof exports !== "undefined" ){ |
@@ -1,1 +0,1 @@ | ||
!function(t){"use strict";t.loadCSS||(t.loadCSS=function(){});var e=loadCSS.relpreload={};e.support=function(){try{return t.document.createElement("link").relList.supports("preload")}catch(t){return!1}},e.bindMediaToggle=function(t,e){function a(){t.media=e}t.addEventListener?t.addEventListener("load",a):t.attachEvent&&t.attachEvent("onload",a),setTimeout(a,3e3)},e.poly=function(){if(!e.support()){for(var a=t.document.getElementsByTagName("link"),n=0;n<a.length;n++){var o=a[n];if("preload"===o.rel&&"style"===o.getAttribute("as")&&!o.getAttribute("data-loadcss")){var l=o.media||"all";e.bindMediaToggle(o,l),o.media="x",o.rel="stylesheet",o.setAttribute("data-loadcss",!0)}}var d=t.setInterval(e.poly,300);t.addEventListener?t.addEventListener("load",function(){e.poly(),t.clearInterval(d)}):t.attachEvent&&t.attachEvent("onload",function(){e.poly(),t.clearInterval(d)})}},e.poly(),"undefined"!=typeof exports?exports.loadCSS=loadCSS:t.loadCSS=loadCSS}("undefined"!=typeof global?global:this); | ||
!function(t){"use strict";t.loadCSS||(t.loadCSS=function(){});var e=loadCSS.relpreload={};if(e.support=function(){var e;try{e=t.document.createElement("link").relList.supports("preload")}catch(t){e=!1}return function(){return e}}(),e.bindMediaToggle=function(t){function e(){t.media=a}var a=t.media||"all";t.addEventListener?t.addEventListener("load",e):t.attachEvent&&t.attachEvent("onload",e),setTimeout(function(){t.rel="stylesheet",t.media="only x"}),setTimeout(e,3e3)},e.poly=function(){if(!e.support())for(var a=t.document.getElementsByTagName("link"),n=0;n<a.length;n++){var o=a[n];"preload"!==o.rel||"style"!==o.getAttribute("as")||o.getAttribute("data-loadcss")||(o.setAttribute("data-loadcss",!0),e.bindMediaToggle(o))}},!e.support()){e.poly();var a=t.setInterval(e.poly,500);t.addEventListener?t.addEventListener("load",function(){e.poly(),t.clearInterval(a)}):t.attachEvent&&t.attachEvent("onload",function(){e.poly(),t.clearInterval(a)})}"undefined"!=typeof exports?exports.loadCSS=loadCSS:t.loadCSS=loadCSS}("undefined"!=typeof global?global:this); |
{ | ||
"name": "fg-loadcss", | ||
"version": "2.0.0", | ||
"version": "2.0.1-0", | ||
"description": "A function for loading CSS asynchronously", | ||
@@ -5,0 +5,0 @@ "main": "src/loadCSS.js", |
@@ -16,16 +16,26 @@ /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ | ||
// rel=preload feature support test | ||
rp.support = function(){ | ||
// runs once and returns a function for compat purposes | ||
rp.support = (function(){ | ||
var ret; | ||
try { | ||
return w.document.createElement( "link" ).relList.supports( "preload" ); | ||
ret = w.document.createElement( "link" ).relList.supports( "preload" ); | ||
} catch (e) { | ||
return false; | ||
ret = false; | ||
} | ||
}; | ||
return function(){ | ||
return ret; | ||
}; | ||
})(); | ||
// if preload isn't supported, get an asynchronous load by using a non-matching media attribute | ||
// then change that media back to its intended value on load | ||
rp.bindMediaToggle = function( link, media ){ | ||
rp.bindMediaToggle = function( link ){ | ||
// remember existing media attr for ultimate state, or default to 'all' | ||
var finalMedia = link.media || "all"; | ||
function enableStylesheet(){ | ||
link.media = media; | ||
link.media = finalMedia; | ||
} | ||
// bind load handlers to enable media | ||
if( link.addEventListener ){ | ||
@@ -36,2 +46,9 @@ link.addEventListener( "load", enableStylesheet ); | ||
} | ||
// Set rel and non-applicable media type to start an async request | ||
// note: timeout allows this to happen async to let rendering continue in IE | ||
setTimeout(function(){ | ||
link.rel = "stylesheet"; | ||
link.media = "only x"; | ||
}); | ||
// also enable media after 3 seconds, | ||
@@ -44,2 +61,3 @@ // which will catch very old browsers (android 2.x, old firefox) that don't support onload on link | ||
rp.poly = function(){ | ||
// double check this to prevent external calls from running | ||
if( rp.support() ){ | ||
@@ -53,16 +71,17 @@ return; | ||
if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){ | ||
// remember existing media attr for ultimate state, or default to 'all' | ||
var finalMedia = link.media || "all"; | ||
// bind listeners to toggle media back | ||
rp.bindMediaToggle( link, finalMedia ); | ||
// if preload is not supported, kick off an asynchronous request by using a non-matching media query and rel=stylesheet | ||
link.media = "x"; | ||
link.rel = "stylesheet"; | ||
// prevent rerunning on link | ||
link.setAttribute( "data-loadcss", true ); | ||
// bind listeners to toggle media back | ||
rp.bindMediaToggle( link ); | ||
} | ||
} | ||
}; | ||
// if unsupported, run the polyfill | ||
if( !rp.support() ){ | ||
// run once at least | ||
rp.poly(); | ||
// rerun poly on an interval until onload | ||
var run = w.setInterval( rp.poly, 300 ); | ||
var run = w.setInterval( rp.poly, 500 ); | ||
if( w.addEventListener ){ | ||
@@ -79,5 +98,5 @@ w.addEventListener( "load", function(){ | ||
} | ||
}; | ||
// run once at least | ||
rp.poly(); | ||
} | ||
// commonjs | ||
@@ -84,0 +103,0 @@ if( typeof exports !== "undefined" ){ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
104874
2605
1