isomorphic-style-loader
Version:
CSS style loader for Webpack optimized for critical path CSS rendering and isomoprhic web apps
78 lines (75 loc) • 2.26 kB
JavaScript
/*! Isomorphic Style Loader | MIT License | https://github.com/kriasoft/isomorphic-style-loader */
;
var inserted = {};
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
return String.fromCharCode("0x" + p1);
}));
}
function removeCss(ids) {
ids.forEach(function (id) {
if (--inserted[id] <= 0) {
var elem = document.getElementById(id);
if (elem) {
elem.parentNode.removeChild(elem);
}
}
});
}
function insertCss(styles, _temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$replace = _ref.replace,
replace = _ref$replace === void 0 ? false : _ref$replace,
_ref$prepend = _ref.prepend,
prepend = _ref$prepend === void 0 ? false : _ref$prepend,
_ref$prefix = _ref.prefix,
prefix = _ref$prefix === void 0 ? 's' : _ref$prefix;
var ids = [];
for (var i = 0; i < styles.length; i++) {
var _styles$i = styles[i],
moduleId = _styles$i[0],
css = _styles$i[1],
media = _styles$i[2],
sourceMap = _styles$i[3];
var id = "" + prefix + moduleId + "-" + i;
ids.push(id);
if (inserted[id]) {
if (!replace) {
inserted[id]++;
continue;
}
}
inserted[id] = 1;
var elem = document.getElementById(id);
var create = false;
if (!elem) {
create = true;
elem = document.createElement('style');
elem.setAttribute('type', 'text/css');
elem.id = id;
if (media) {
elem.setAttribute('media', media);
}
}
var cssText = css;
if (sourceMap && typeof btoa === 'function') {
cssText += "\n/*# sourceMappingURL=data:application/json;base64," + b64EncodeUnicode(JSON.stringify(sourceMap)) + "*/";
cssText += "\n/*# sourceURL=" + sourceMap.file + "?" + id + "*/";
}
if ('textContent' in elem) {
elem.textContent = cssText;
} else {
elem.styleSheet.cssText = cssText;
}
if (create) {
if (prepend) {
document.head.insertBefore(elem, document.head.childNodes[0]);
} else {
document.head.appendChild(elem);
}
}
}
return removeCss.bind(null, ids);
}
module.exports = insertCss;
//# sourceMappingURL=insertCss.js.map