/
browser.js
52 lines (40 loc) · 1.18 KB
/
browser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
var attr = 'data-isostyle-id';
function getStyleNode (id) {
var head = document.getElementsByTagName('head')[0];
return head.querySelector('[' + attr + '=' + JSON.stringify(id) + ']');
}
function sanatize (src) {
var items = {
'<': '<',
'>': '>',
'"': '"',
'&': '&'
};
return src.replace(/[<>"&]/g, function(res) {
return items[res];
});
}
function isostyle (style, id) {
if ('object' != typeof document || !document.createElement) {
return exports._cssMarkup = exports._cssMarkup || [], void exports._cssMarkup.push('<style type="text/css" ' + attr + '="' + sanatize(id) + '">' + style + "</style>\n");
}
var element = getStyleNode(id);
if (style === '') {
if (element) {
element.parentNode.removeChild(element);
}
return;
}
if (element) {
for (; element.firstChild; ) {
element.removeChild(element.firstChild);
}
} else {
element = document.createElement('style');
element.type = 'text/css';
element.setAttribute(attr, id);
document.getElementsByTagName('head')[0].appendChild(element);
}
element.styleSheet ? element.styleSheet.cssText = style : element.appendChild(document.createTextNode(style));
}
module.exports = isostyle;