1 | "use strict";
|
---|
2 |
|
---|
3 | /* istanbul ignore next */
|
---|
4 | var replaceText = function replaceText() {
|
---|
5 | var textStore = [];
|
---|
6 | return function replace(index, replacement) {
|
---|
7 | textStore[index] = replacement;
|
---|
8 | return textStore.filter(Boolean).join("\n");
|
---|
9 | };
|
---|
10 | }();
|
---|
11 | /* istanbul ignore next */
|
---|
12 |
|
---|
13 |
|
---|
14 | function apply(style, index, remove, obj) {
|
---|
15 | var css = remove ? "" : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
|
---|
16 |
|
---|
17 | /* istanbul ignore if */
|
---|
18 |
|
---|
19 | if (style.styleSheet) {
|
---|
20 | style.styleSheet.cssText = replaceText(index, css);
|
---|
21 | } else {
|
---|
22 | var cssNode = document.createTextNode(css);
|
---|
23 | var childNodes = style.childNodes;
|
---|
24 |
|
---|
25 | if (childNodes[index]) {
|
---|
26 | style.removeChild(childNodes[index]);
|
---|
27 | }
|
---|
28 |
|
---|
29 | if (childNodes.length) {
|
---|
30 | style.insertBefore(cssNode, childNodes[index]);
|
---|
31 | } else {
|
---|
32 | style.appendChild(cssNode);
|
---|
33 | }
|
---|
34 | }
|
---|
35 | }
|
---|
36 |
|
---|
37 | var singletonData = {
|
---|
38 | singleton: null,
|
---|
39 | singletonCounter: 0
|
---|
40 | };
|
---|
41 | /* istanbul ignore next */
|
---|
42 |
|
---|
43 | function domAPI(options) {
|
---|
44 | // eslint-disable-next-line no-undef,no-use-before-define
|
---|
45 | var styleIndex = singletonData.singletonCounter++;
|
---|
46 | var style = // eslint-disable-next-line no-undef,no-use-before-define
|
---|
47 | singletonData.singleton || ( // eslint-disable-next-line no-undef,no-use-before-define
|
---|
48 | singletonData.singleton = options.insertStyleElement(options));
|
---|
49 | return {
|
---|
50 | update: function update(obj) {
|
---|
51 | apply(style, styleIndex, false, obj);
|
---|
52 | },
|
---|
53 | remove: function remove(obj) {
|
---|
54 | apply(style, styleIndex, true, obj);
|
---|
55 | }
|
---|
56 | };
|
---|
57 | }
|
---|
58 |
|
---|
59 | module.exports = domAPI; |
---|