lib/loadCSS.js
/*! loadCSS: load a CSS file asynchronously. [c]2016 @scottjehl, Filament Group, Inc. Licensed MIT */
load a CSS file asynchronously. [c]2016 @scottjehl, Filament Group, Inc. Licensed MIT
load a CSS file asynchronously . [ c ] 2016 @scottjehl Filament Group Inc . Licensed MIT
function loadCSS(href, before, media) {
  var doc = window.document;
  var ss = doc.createElement('link');
  var ref;
  if (before) {
    ref = before;
  } else {
    var refs = (doc.body || doc.getElementsByTagName('head')[0]).childNodes;
    ref = refs[refs.length - 1];
  }
  var sheets = doc.styleSheets;
  ss.rel = 'stylesheet';
  ss.href = href;
  ss.media = 'only x';
  function ready(cb) {
    if (doc.body) {
      return cb();
    }
    setTimeout(function() {
      ready(cb);
    });
  }
  ready(function() {
    ref.parentNode.insertBefore(ss, (before ? ref : ref.nextSibling));
  });
  var onloadcssdefined = function(cb) {
    var resolvedHref = ss.href;
    var i = sheets.length;
    while (i--) {
      if (sheets[i].href === resolvedHref) {
        return cb();
      }
    }
    setTimeout(function() {
      onloadcssdefined(cb);
    });
  };
  function loadCB() {
    if (ss.addEventListener) {
      ss.removeEventListener('load', loadCB);
    }
    ss.media = media || 'all';
  }
  if (ss.addEventListener) {
    ss.addEventListener('load', loadCB);
  }
  ss.onloadcssdefined = onloadcssdefined;
  onloadcssdefined(loadCB);
  return ss;
}
function loadCSS ( href , before , media ) { var doc = window . document ; var ss = doc . createElement ( 'link' ) ; var ref ; if ( before ) { ref = before ; } else { var refs = ( doc . body || doc . getElementsByTagName ( 'head' ) [ 0 ] ) . childNodes ; ref = refs [ refs . length - 1 ] ; } var sheets = doc . styleSheets ; ss . rel = 'stylesheet' ; ss . href = href ; ss . media = 'only x' ; function ready ( cb ) { if ( doc . body ) { return cb ( ) ; } setTimeout ( function ( ) { ready ( cb ) ; } ) ; } ready ( function ( ) { ref . parentNode . insertBefore ( ss , ( before ? ref : ref . nextSibling ) ) ; } ) ; var onloadcssdefined = function ( cb ) { var resolvedHref = ss . href ; var i = sheets . length ; while ( i -- ) { if ( sheets [ i ] . href === resolvedHref ) { return cb ( ) ; } } setTimeout ( function ( ) { onloadcssdefined ( cb ) ; } ) ; } ; function loadCB ( ) { if ( ss . addEventListener ) { ss . removeEventListener ( 'load' , loadCB ) ; } ss . media = media || 'all' ; } if ( ss . addEventListener ) { ss . addEventListener ( 'load' , loadCB ) ; } ss . onloadcssdefined = onloadcssdefined ; onloadcssdefined ( loadCB ) ; return ss ; }
loadCSS: load a CSS file asynchronously.
loadCSS : load a CSS file asynchronously .
// Arguments explained: // `href` [REQUIRED] is the URL for your CSS file. // `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before // By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document. // `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all' // temporarily set media to something inapplicable to ensure it'll fetch without blocking render // wait until body is defined before injecting link. This ensures a non-blocking load in IE11. // Inject link // Note: the ternary preserves the existing behavior of 'before' argument, but we could choose to change the argument to 'after' in a later release and standardize on ref.nextSibling for all refs // Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/ // A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet. // once loaded, set link's media back to `all` so that the stylesheet applies once it loads