UNPKG

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
/*! Isomorphic Style Loader | MIT License | https://github.com/kriasoft/isomorphic-style-loader */ 'use strict'; 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