UNPKG

twreporter-react

Version:

React-Redux site for The Reporter Foundation in Taiwan

156 lines (123 loc) 3.96 kB
'use strict'; var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Isomorphic CSS style loader for Webpack * * Copyright © 2015-2016 Kriasoft, LLC. All rights reserved. * * This source code is licensed under the MIT license found in the * LICENSE.txt file in the root directory of this source tree. */ var prefix = 's'; var inserted = {}; // Base64 encoding and decoding - The "Unicode Problem" // https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) { return String.fromCharCode('0x' + p1); })); } /** * Remove style/link elements for specified node IDs * if they are no longer referenced by UI components. */ function removeCss(ids) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)(ids), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var id = _step.value; if (--inserted[id] <= 0) { var elem = document.getElementById(prefix + id); if (elem) { elem.parentNode.removeChild(elem); } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } /** * Example: * // Insert CSS styles object generated by `css-loader` into DOM * var removeCss = insertCss([[1, 'body { color: red; }']]); * * // Remove it from the DOM * removeCss(); */ function insertCss(styles, options) { var _Object$assign = (0, _assign2.default)({ replace: false, prepend: false }, options); var replace = _Object$assign.replace; var prepend = _Object$assign.prepend; var ids = []; for (var i = 0; i < styles.length; i++) { var _styles$i = (0, _slicedToArray3.default)(styles[i], 4); var moduleId = _styles$i[0]; var css = _styles$i[1]; var media = _styles$i[2]; var sourceMap = _styles$i[3]; var id = moduleId + '-' + i; ids.push(id); if (inserted[id]) { if (!replace) { inserted[id]++; continue; } } inserted[id] = 1; var elem = document.getElementById(prefix + id); var create = false; if (!elem) { create = true; elem = document.createElement('style'); elem.setAttribute('type', 'text/css'); elem.id = prefix + id; if (media) { elem.setAttribute('media', media); } } var cssText = css; if (sourceMap) { cssText += '\n/*# sourceMappingURL=data:application/json;base64,' + b64EncodeUnicode((0, _stringify2.default)(sourceMap)) + '*/'; cssText += '\n/*# sourceURL=' + sourceMap.file + '*/'; } 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;