@acemir/cssom 0.9.23 → 0.9.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/CSSOM.js +2113 -1269
- package/lib/CSSConditionRule.js +3 -1
- package/lib/CSSContainerRule.js +20 -9
- package/lib/CSSCounterStyleRule.js +36 -2
- package/lib/CSSDocumentRule.js +10 -2
- package/lib/CSSFontFaceRule.js +9 -2
- package/lib/CSSGroupingRule.js +65 -9
- package/lib/CSSHostRule.js +22 -6
- package/lib/CSSImportRule.js +49 -39
- package/lib/CSSKeyframeRule.js +9 -2
- package/lib/CSSKeyframesRule.js +20 -7
- package/lib/CSSLayerBlockRule.js +20 -9
- package/lib/CSSLayerStatementRule.js +9 -5
- package/lib/CSSMediaRule.js +20 -9
- package/lib/CSSNamespaceRule.js +27 -17
- package/lib/CSSNestedDeclarations.js +9 -5
- package/lib/CSSOM.js +16 -1
- package/lib/CSSPageRule.js +11 -155
- package/lib/CSSRule.js +10 -0
- package/lib/CSSScopeRule.js +13 -5
- package/lib/CSSStartingStyleRule.js +20 -6
- package/lib/CSSStyleRule.js +11 -157
- package/lib/CSSStyleSheet.js +115 -4
- package/lib/CSSSupportsRule.js +19 -8
- package/lib/CSSValueExpression.js +3 -1
- package/lib/MediaList.js +3 -1
- package/lib/StyleSheet.js +24 -1
- package/lib/errorUtils.js +23 -16
- package/lib/index.js +2 -0
- package/lib/parse.js +1521 -784
- package/package.json +1 -1
|
@@ -22,9 +22,15 @@ CSSOM.CSSNestedDeclarations = function CSSNestedDeclarations() {
|
|
|
22
22
|
this.__style.parentRule = this;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
CSSOM.CSSNestedDeclarations.prototype =
|
|
25
|
+
CSSOM.CSSNestedDeclarations.prototype = Object.create(CSSOM.CSSRule.prototype);
|
|
26
26
|
CSSOM.CSSNestedDeclarations.prototype.constructor = CSSOM.CSSNestedDeclarations;
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
Object.setPrototypeOf(CSSOM.CSSNestedDeclarations, CSSOM.CSSRule);
|
|
29
|
+
|
|
30
|
+
Object.defineProperty(CSSOM.CSSNestedDeclarations.prototype, "type", {
|
|
31
|
+
value: 0,
|
|
32
|
+
writable: false
|
|
33
|
+
});
|
|
28
34
|
|
|
29
35
|
Object.defineProperty(CSSOM.CSSNestedDeclarations.prototype, "style", {
|
|
30
36
|
get: function() {
|
|
@@ -42,9 +48,7 @@ Object.defineProperty(CSSOM.CSSNestedDeclarations.prototype, "style", {
|
|
|
42
48
|
Object.defineProperty(CSSOM.CSSNestedDeclarations.prototype, "cssText", {
|
|
43
49
|
get: function () {
|
|
44
50
|
return this.style.cssText;
|
|
45
|
-
}
|
|
46
|
-
configurable: true,
|
|
47
|
-
enumerable: true,
|
|
51
|
+
}
|
|
48
52
|
});
|
|
49
53
|
|
|
50
54
|
//.CommonJS
|
package/lib/CSSOM.js
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
var
|
|
1
|
+
var __globalObject = null;
|
|
2
2
|
|
|
3
|
+
var CSSOM = {
|
|
4
|
+
setup: function(opts) {
|
|
5
|
+
if (opts.globalObject) {
|
|
6
|
+
__globalObject = opts.globalObject;
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
getGlobalObject: function() {
|
|
10
|
+
return __globalObject;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//.CommonJS
|
|
15
|
+
exports.setup = CSSOM.setup;
|
|
16
|
+
exports.getGlobalObject = CSSOM.getGlobalObject;
|
|
17
|
+
///CommonJS
|
|
3
18
|
|
package/lib/CSSPageRule.js
CHANGED
|
@@ -24,9 +24,11 @@ CSSOM.CSSPageRule = function CSSPageRule() {
|
|
|
24
24
|
this.__style.parentRule = this;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
CSSOM.CSSPageRule.prototype =
|
|
27
|
+
CSSOM.CSSPageRule.prototype = Object.create(CSSOM.CSSGroupingRule.prototype);
|
|
28
28
|
CSSOM.CSSPageRule.prototype.constructor = CSSOM.CSSPageRule;
|
|
29
29
|
|
|
30
|
+
Object.setPrototypeOf(CSSOM.CSSPageRule, CSSOM.CSSGroupingRule);
|
|
31
|
+
|
|
30
32
|
Object.defineProperty(CSSOM.CSSPageRule.prototype, "type", {
|
|
31
33
|
value: 6,
|
|
32
34
|
writable: false
|
|
@@ -106,170 +108,24 @@ Object.defineProperty(CSSOM.CSSPageRule.prototype, "style", {
|
|
|
106
108
|
|
|
107
109
|
Object.defineProperty(CSSOM.CSSPageRule.prototype, "cssText", {
|
|
108
110
|
get: function() {
|
|
109
|
-
var values = ""
|
|
111
|
+
var values = "";
|
|
110
112
|
if (this.cssRules.length) {
|
|
111
113
|
var valuesArr = [" {"];
|
|
112
114
|
this.style.cssText && valuesArr.push(this.style.cssText);
|
|
113
|
-
valuesArr.push(this.cssRules.
|
|
114
|
-
|
|
115
|
+
valuesArr.push(this.cssRules.reduce(function(acc, rule){
|
|
116
|
+
if (rule.cssText !== "") {
|
|
117
|
+
acc.push(rule.cssText);
|
|
118
|
+
}
|
|
119
|
+
return acc;
|
|
120
|
+
}, []).join("\n "));
|
|
121
|
+
values = valuesArr.join("\n ") + "\n}";
|
|
115
122
|
} else {
|
|
116
123
|
values = " {" + (this.style.cssText ? " " + this.style.cssText : "") + " }";
|
|
117
124
|
}
|
|
118
125
|
return "@page" + (this.selectorText ? " " + this.selectorText : "") + values;
|
|
119
|
-
},
|
|
120
|
-
set: function(cssText) {
|
|
121
|
-
if (typeof value === "string") {
|
|
122
|
-
var rule = CSSOM.CSSPageRule.parse(cssText);
|
|
123
|
-
this.__style = rule.style;
|
|
124
|
-
this.selectorText = rule.selectorText;
|
|
125
|
-
}
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
|
|
129
|
-
/**
|
|
130
|
-
* NON-STANDARD
|
|
131
|
-
* lightweight version of parse.js.
|
|
132
|
-
* @param {string} ruleText
|
|
133
|
-
* @return CSSPageRule
|
|
134
|
-
*/
|
|
135
|
-
CSSOM.CSSPageRule.parse = function(ruleText) {
|
|
136
|
-
var i = 0;
|
|
137
|
-
var state = "selector";
|
|
138
|
-
var index;
|
|
139
|
-
var j = i;
|
|
140
|
-
var buffer = "";
|
|
141
|
-
|
|
142
|
-
var SIGNIFICANT_WHITESPACE = {
|
|
143
|
-
"selector": true,
|
|
144
|
-
"value": true
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
var pageRule = new CSSOM.CSSPageRule();
|
|
148
|
-
var name, priority="";
|
|
149
|
-
|
|
150
|
-
for (var character; (character = ruleText.charAt(i)); i++) {
|
|
151
|
-
|
|
152
|
-
switch (character) {
|
|
153
|
-
|
|
154
|
-
case " ":
|
|
155
|
-
case "\t":
|
|
156
|
-
case "\r":
|
|
157
|
-
case "\n":
|
|
158
|
-
case "\f":
|
|
159
|
-
if (SIGNIFICANT_WHITESPACE[state]) {
|
|
160
|
-
// Squash 2 or more white-spaces in the row into 1
|
|
161
|
-
switch (ruleText.charAt(i - 1)) {
|
|
162
|
-
case " ":
|
|
163
|
-
case "\t":
|
|
164
|
-
case "\r":
|
|
165
|
-
case "\n":
|
|
166
|
-
case "\f":
|
|
167
|
-
break;
|
|
168
|
-
default:
|
|
169
|
-
buffer += " ";
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
break;
|
|
174
|
-
|
|
175
|
-
// String
|
|
176
|
-
case '"':
|
|
177
|
-
j = i + 1;
|
|
178
|
-
index = ruleText.indexOf('"', j) + 1;
|
|
179
|
-
if (!index) {
|
|
180
|
-
throw '" is missing';
|
|
181
|
-
}
|
|
182
|
-
buffer += ruleText.slice(i, index);
|
|
183
|
-
i = index - 1;
|
|
184
|
-
break;
|
|
185
|
-
|
|
186
|
-
case "'":
|
|
187
|
-
j = i + 1;
|
|
188
|
-
index = ruleText.indexOf("'", j) + 1;
|
|
189
|
-
if (!index) {
|
|
190
|
-
throw "' is missing";
|
|
191
|
-
}
|
|
192
|
-
buffer += ruleText.slice(i, index);
|
|
193
|
-
i = index - 1;
|
|
194
|
-
break;
|
|
195
|
-
|
|
196
|
-
// Comment
|
|
197
|
-
case "/":
|
|
198
|
-
if (ruleText.charAt(i + 1) === "*") {
|
|
199
|
-
i += 2;
|
|
200
|
-
index = ruleText.indexOf("*/", i);
|
|
201
|
-
if (index === -1) {
|
|
202
|
-
throw new SyntaxError("Missing */");
|
|
203
|
-
} else {
|
|
204
|
-
i = index + 1;
|
|
205
|
-
}
|
|
206
|
-
} else {
|
|
207
|
-
buffer += character;
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
|
|
211
|
-
case "{":
|
|
212
|
-
if (state === "selector") {
|
|
213
|
-
pageRule.selectorText = buffer.trim();
|
|
214
|
-
buffer = "";
|
|
215
|
-
state = "name";
|
|
216
|
-
}
|
|
217
|
-
break;
|
|
218
|
-
|
|
219
|
-
case ":":
|
|
220
|
-
if (state === "name") {
|
|
221
|
-
name = buffer.trim();
|
|
222
|
-
buffer = "";
|
|
223
|
-
state = "value";
|
|
224
|
-
} else {
|
|
225
|
-
buffer += character;
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
228
|
-
|
|
229
|
-
case "!":
|
|
230
|
-
if (state === "value" && ruleText.indexOf("!important", i) === i) {
|
|
231
|
-
priority = "important";
|
|
232
|
-
i += "important".length;
|
|
233
|
-
} else {
|
|
234
|
-
buffer += character;
|
|
235
|
-
}
|
|
236
|
-
break;
|
|
237
|
-
|
|
238
|
-
case ";":
|
|
239
|
-
if (state === "value") {
|
|
240
|
-
pageRule.style.setProperty(name, buffer.trim(), priority);
|
|
241
|
-
priority = "";
|
|
242
|
-
buffer = "";
|
|
243
|
-
state = "name";
|
|
244
|
-
} else {
|
|
245
|
-
buffer += character;
|
|
246
|
-
}
|
|
247
|
-
break;
|
|
248
|
-
|
|
249
|
-
case "}":
|
|
250
|
-
if (state === "value") {
|
|
251
|
-
pageRule.style.setProperty(name, buffer.trim(), priority);
|
|
252
|
-
priority = "";
|
|
253
|
-
buffer = "";
|
|
254
|
-
} else if (state === "name") {
|
|
255
|
-
break;
|
|
256
|
-
} else {
|
|
257
|
-
buffer += character;
|
|
258
|
-
}
|
|
259
|
-
state = "selector";
|
|
260
|
-
break;
|
|
261
|
-
|
|
262
|
-
default:
|
|
263
|
-
buffer += character;
|
|
264
|
-
break;
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return pageRule;
|
|
270
|
-
|
|
271
|
-
};
|
|
272
|
-
|
|
273
129
|
//.CommonJS
|
|
274
130
|
exports.CSSPageRule = CSSOM.CSSPageRule;
|
|
275
131
|
///CommonJS
|
package/lib/CSSRule.js
CHANGED
|
@@ -43,6 +43,16 @@ Object.defineProperties(CSSOM.CSSRule.prototype, {
|
|
|
43
43
|
enumerable: true
|
|
44
44
|
},
|
|
45
45
|
|
|
46
|
+
cssText: {
|
|
47
|
+
get: function() {
|
|
48
|
+
// Default getter: subclasses should override this
|
|
49
|
+
return "";
|
|
50
|
+
},
|
|
51
|
+
set: function(cssText) {
|
|
52
|
+
return cssText;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
46
56
|
parentRule: {
|
|
47
57
|
get: function() {
|
|
48
58
|
return this.__parentRule
|
package/lib/CSSScopeRule.js
CHANGED
|
@@ -16,9 +16,10 @@ CSSOM.CSSScopeRule = function CSSScopeRule() {
|
|
|
16
16
|
this.__end = null;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
CSSOM.CSSScopeRule.prototype =
|
|
19
|
+
CSSOM.CSSScopeRule.prototype = Object.create(CSSOM.CSSGroupingRule.prototype);
|
|
20
20
|
CSSOM.CSSScopeRule.prototype.constructor = CSSOM.CSSScopeRule;
|
|
21
21
|
|
|
22
|
+
Object.setPrototypeOf(CSSOM.CSSScopeRule, CSSOM.CSSGroupingRule);
|
|
22
23
|
|
|
23
24
|
Object.defineProperties(CSSOM.CSSScopeRule.prototype, {
|
|
24
25
|
type: {
|
|
@@ -27,11 +28,18 @@ Object.defineProperties(CSSOM.CSSScopeRule.prototype, {
|
|
|
27
28
|
},
|
|
28
29
|
cssText: {
|
|
29
30
|
get: function () {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
var values = "";
|
|
32
|
+
var valuesArr = [" {"];
|
|
33
|
+
if (this.cssRules.length) {
|
|
34
|
+
valuesArr.push(this.cssRules.reduce(function(acc, rule){
|
|
35
|
+
if (rule.cssText !== "") {
|
|
36
|
+
acc.push(rule.cssText);
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, []).join("\n "));
|
|
33
40
|
}
|
|
34
|
-
|
|
41
|
+
values = valuesArr.join("\n ") + "\n}";
|
|
42
|
+
return "@scope" + (this.start ? " (" + this.start + ")" : "") + (this.end ? " to (" + this.end + ")" : "") + values;
|
|
35
43
|
},
|
|
36
44
|
configurable: true,
|
|
37
45
|
enumerable: true,
|
|
@@ -15,20 +15,34 @@ CSSOM.CSSStartingStyleRule = function CSSStartingStyleRule() {
|
|
|
15
15
|
CSSOM.CSSGroupingRule.call(this);
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
CSSOM.CSSStartingStyleRule.prototype =
|
|
18
|
+
CSSOM.CSSStartingStyleRule.prototype = Object.create(CSSOM.CSSGroupingRule.prototype);
|
|
19
19
|
CSSOM.CSSStartingStyleRule.prototype.constructor = CSSOM.CSSStartingStyleRule;
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
Object.setPrototypeOf(CSSOM.CSSStartingStyleRule, CSSOM.CSSGroupingRule);
|
|
22
|
+
|
|
23
|
+
Object.defineProperty(CSSOM.CSSStartingStyleRule.prototype, "type", {
|
|
24
|
+
value: 1002,
|
|
25
|
+
writable: false
|
|
26
|
+
});
|
|
27
|
+
|
|
21
28
|
//FIXME
|
|
22
29
|
//CSSOM.CSSStartingStyleRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
|
|
23
30
|
//CSSOM.CSSStartingStyleRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
|
|
24
31
|
|
|
25
32
|
Object.defineProperty(CSSOM.CSSStartingStyleRule.prototype, "cssText", {
|
|
26
33
|
get: function() {
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
var values = "";
|
|
35
|
+
var valuesArr = [" {"];
|
|
36
|
+
if (this.cssRules.length) {
|
|
37
|
+
valuesArr.push(this.cssRules.reduce(function(acc, rule){
|
|
38
|
+
if (rule.cssText !== "") {
|
|
39
|
+
acc.push(rule.cssText);
|
|
40
|
+
}
|
|
41
|
+
return acc;
|
|
42
|
+
}, []).join("\n "));
|
|
30
43
|
}
|
|
31
|
-
|
|
44
|
+
values = valuesArr.join("\n ") + "\n}";
|
|
45
|
+
return "@starting-style" + values;
|
|
32
46
|
}
|
|
33
47
|
});
|
|
34
48
|
|
package/lib/CSSStyleRule.js
CHANGED
|
@@ -26,9 +26,11 @@ CSSOM.CSSStyleRule = function CSSStyleRule() {
|
|
|
26
26
|
this.__style.parentRule = this;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
CSSOM.CSSStyleRule.prototype =
|
|
29
|
+
CSSOM.CSSStyleRule.prototype = Object.create(CSSOM.CSSGroupingRule.prototype);
|
|
30
30
|
CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule;
|
|
31
31
|
|
|
32
|
+
Object.setPrototypeOf(CSSOM.CSSStyleRule, CSSOM.CSSGroupingRule);
|
|
33
|
+
|
|
32
34
|
Object.defineProperty(CSSOM.CSSStyleRule.prototype, "type", {
|
|
33
35
|
value: 1,
|
|
34
36
|
writable: false
|
|
@@ -73,12 +75,17 @@ Object.defineProperty(CSSOM.CSSStyleRule.prototype, "cssText", {
|
|
|
73
75
|
get: function() {
|
|
74
76
|
var text;
|
|
75
77
|
if (this.selectorText) {
|
|
76
|
-
var values = ""
|
|
78
|
+
var values = "";
|
|
77
79
|
if (this.cssRules.length) {
|
|
78
80
|
var valuesArr = [" {"];
|
|
79
81
|
this.style.cssText && valuesArr.push(this.style.cssText);
|
|
80
|
-
valuesArr.push(this.cssRules.
|
|
81
|
-
|
|
82
|
+
valuesArr.push(this.cssRules.reduce(function(acc, rule){
|
|
83
|
+
if (rule.cssText !== "") {
|
|
84
|
+
acc.push(rule.cssText);
|
|
85
|
+
}
|
|
86
|
+
return acc;
|
|
87
|
+
}, []).join("\n "));
|
|
88
|
+
values = valuesArr.join("\n ") + "\n}";
|
|
82
89
|
} else {
|
|
83
90
|
values = " {" + (this.style.cssText ? " " + this.style.cssText : "") + " }";
|
|
84
91
|
}
|
|
@@ -87,162 +94,9 @@ Object.defineProperty(CSSOM.CSSStyleRule.prototype, "cssText", {
|
|
|
87
94
|
text = "";
|
|
88
95
|
}
|
|
89
96
|
return text;
|
|
90
|
-
},
|
|
91
|
-
set: function(cssText) {
|
|
92
|
-
if (typeof cssText === "string") {
|
|
93
|
-
var rule = CSSOM.CSSStyleRule.parse(cssText);
|
|
94
|
-
this.__style = rule.style;
|
|
95
|
-
this.selectorText = rule.selectorText;
|
|
96
|
-
}
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* NON-STANDARD
|
|
103
|
-
* lightweight version of parse.js.
|
|
104
|
-
* @param {string} ruleText
|
|
105
|
-
* @return CSSStyleRule
|
|
106
|
-
*/
|
|
107
|
-
CSSOM.CSSStyleRule.parse = function(ruleText) {
|
|
108
|
-
var i = 0;
|
|
109
|
-
var state = "selector";
|
|
110
|
-
var index;
|
|
111
|
-
var j = i;
|
|
112
|
-
var buffer = "";
|
|
113
|
-
|
|
114
|
-
var SIGNIFICANT_WHITESPACE = {
|
|
115
|
-
"selector": true,
|
|
116
|
-
"value": true
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
var styleRule = new CSSOM.CSSStyleRule();
|
|
120
|
-
var name, priority="";
|
|
121
|
-
|
|
122
|
-
for (var character; (character = ruleText.charAt(i)); i++) {
|
|
123
|
-
|
|
124
|
-
switch (character) {
|
|
125
|
-
|
|
126
|
-
case " ":
|
|
127
|
-
case "\t":
|
|
128
|
-
case "\r":
|
|
129
|
-
case "\n":
|
|
130
|
-
case "\f":
|
|
131
|
-
if (SIGNIFICANT_WHITESPACE[state]) {
|
|
132
|
-
// Squash 2 or more white-spaces in the row into 1
|
|
133
|
-
switch (ruleText.charAt(i - 1)) {
|
|
134
|
-
case " ":
|
|
135
|
-
case "\t":
|
|
136
|
-
case "\r":
|
|
137
|
-
case "\n":
|
|
138
|
-
case "\f":
|
|
139
|
-
break;
|
|
140
|
-
default:
|
|
141
|
-
buffer += " ";
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
break;
|
|
146
|
-
|
|
147
|
-
// String
|
|
148
|
-
case '"':
|
|
149
|
-
j = i + 1;
|
|
150
|
-
index = ruleText.indexOf('"', j) + 1;
|
|
151
|
-
if (!index) {
|
|
152
|
-
throw '" is missing';
|
|
153
|
-
}
|
|
154
|
-
buffer += ruleText.slice(i, index);
|
|
155
|
-
i = index - 1;
|
|
156
|
-
break;
|
|
157
|
-
|
|
158
|
-
case "'":
|
|
159
|
-
j = i + 1;
|
|
160
|
-
index = ruleText.indexOf("'", j) + 1;
|
|
161
|
-
if (!index) {
|
|
162
|
-
throw "' is missing";
|
|
163
|
-
}
|
|
164
|
-
buffer += ruleText.slice(i, index);
|
|
165
|
-
i = index - 1;
|
|
166
|
-
break;
|
|
167
|
-
|
|
168
|
-
// Comment
|
|
169
|
-
case "/":
|
|
170
|
-
if (ruleText.charAt(i + 1) === "*") {
|
|
171
|
-
i += 2;
|
|
172
|
-
index = ruleText.indexOf("*/", i);
|
|
173
|
-
if (index === -1) {
|
|
174
|
-
throw new SyntaxError("Missing */");
|
|
175
|
-
} else {
|
|
176
|
-
i = index + 1;
|
|
177
|
-
}
|
|
178
|
-
} else {
|
|
179
|
-
buffer += character;
|
|
180
|
-
}
|
|
181
|
-
break;
|
|
182
|
-
|
|
183
|
-
case "{":
|
|
184
|
-
if (state === "selector") {
|
|
185
|
-
styleRule.selectorText = buffer.trim();
|
|
186
|
-
buffer = "";
|
|
187
|
-
state = "name";
|
|
188
|
-
}
|
|
189
|
-
break;
|
|
190
|
-
|
|
191
|
-
case ":":
|
|
192
|
-
if (state === "name") {
|
|
193
|
-
name = buffer.trim();
|
|
194
|
-
buffer = "";
|
|
195
|
-
state = "value";
|
|
196
|
-
} else {
|
|
197
|
-
buffer += character;
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
|
|
201
|
-
case "!":
|
|
202
|
-
if (state === "value" && ruleText.indexOf("!important", i) === i) {
|
|
203
|
-
priority = "important";
|
|
204
|
-
i += "important".length;
|
|
205
|
-
} else {
|
|
206
|
-
buffer += character;
|
|
207
|
-
}
|
|
208
|
-
break;
|
|
209
|
-
|
|
210
|
-
case ";":
|
|
211
|
-
if (state === "value") {
|
|
212
|
-
styleRule.style.setProperty(name, buffer.trim(), priority);
|
|
213
|
-
priority = "";
|
|
214
|
-
buffer = "";
|
|
215
|
-
state = "name";
|
|
216
|
-
} else {
|
|
217
|
-
buffer += character;
|
|
218
|
-
}
|
|
219
|
-
break;
|
|
220
|
-
|
|
221
|
-
case "}":
|
|
222
|
-
if (state === "value") {
|
|
223
|
-
styleRule.style.setProperty(name, buffer.trim(), priority);
|
|
224
|
-
priority = "";
|
|
225
|
-
buffer = "";
|
|
226
|
-
} else if (state === "name") {
|
|
227
|
-
break;
|
|
228
|
-
} else {
|
|
229
|
-
buffer += character;
|
|
230
|
-
}
|
|
231
|
-
state = "selector";
|
|
232
|
-
break;
|
|
233
|
-
|
|
234
|
-
default:
|
|
235
|
-
buffer += character;
|
|
236
|
-
break;
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return styleRule;
|
|
242
|
-
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
|
|
246
100
|
//.CommonJS
|
|
247
101
|
exports.CSSStyleRule = CSSOM.CSSStyleRule;
|
|
248
102
|
///CommonJS
|
package/lib/CSSStyleSheet.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//.CommonJS
|
|
2
2
|
var CSSOM = {
|
|
3
|
+
getGlobalObject: require('./CSSOM').getGlobalObject,
|
|
3
4
|
MediaList: require("./MediaList").MediaList,
|
|
4
5
|
StyleSheet: require("./StyleSheet").StyleSheet,
|
|
5
6
|
CSSRuleList: require("./CSSRuleList").CSSRuleList,
|
|
@@ -11,20 +12,52 @@ var errorUtils = require("./errorUtils").errorUtils;
|
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* @constructor
|
|
15
|
+
* @param {CSSStyleSheetInit} [opts] - CSSStyleSheetInit options.
|
|
16
|
+
* @param {string} [opts.baseURL] - The base URL of the stylesheet.
|
|
17
|
+
* @param {boolean} [opts.disabled] - The disabled attribute of the stylesheet.
|
|
18
|
+
* @param {MediaList | string} [opts.media] - The media attribute of the stylesheet.
|
|
14
19
|
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet
|
|
15
20
|
*/
|
|
16
|
-
CSSOM.CSSStyleSheet = function CSSStyleSheet() {
|
|
21
|
+
CSSOM.CSSStyleSheet = function CSSStyleSheet(opts) {
|
|
17
22
|
CSSOM.StyleSheet.call(this);
|
|
18
|
-
this.
|
|
23
|
+
this.__constructed = true;
|
|
24
|
+
this.__cssRules = new CSSOM.CSSRuleList();
|
|
25
|
+
this.__ownerRule = null;
|
|
26
|
+
|
|
27
|
+
if (opts && typeof opts === "object") {
|
|
28
|
+
if (opts.baseURL && typeof opts.baseURL === "string") {
|
|
29
|
+
this.__baseURL = opts.baseURL;
|
|
30
|
+
}
|
|
31
|
+
if (opts.media && typeof opts.media === "string") {
|
|
32
|
+
this.media.mediaText = opts.media;
|
|
33
|
+
}
|
|
34
|
+
if (typeof opts.disabled === "boolean") {
|
|
35
|
+
this.disabled = opts.disabled;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
19
38
|
};
|
|
20
39
|
|
|
21
40
|
|
|
22
|
-
CSSOM.CSSStyleSheet.prototype =
|
|
41
|
+
CSSOM.CSSStyleSheet.prototype = Object.create(CSSOM.StyleSheet.prototype);
|
|
23
42
|
CSSOM.CSSStyleSheet.prototype.constructor = CSSOM.CSSStyleSheet;
|
|
24
43
|
|
|
44
|
+
Object.setPrototypeOf(CSSOM.CSSStyleSheet, CSSOM.StyleSheet);
|
|
45
|
+
|
|
46
|
+
Object.defineProperty(CSSOM.CSSStyleSheet.prototype, "cssRules", {
|
|
47
|
+
get: function() {
|
|
48
|
+
return this.__cssRules;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
25
52
|
Object.defineProperty(CSSOM.CSSStyleSheet.prototype, "rules", {
|
|
26
53
|
get: function() {
|
|
27
|
-
return this.
|
|
54
|
+
return this.__cssRules;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
Object.defineProperty(CSSOM.CSSStyleSheet.prototype, "ownerRule", {
|
|
59
|
+
get: function() {
|
|
60
|
+
return this.__ownerRule;
|
|
28
61
|
}
|
|
29
62
|
});
|
|
30
63
|
|
|
@@ -227,6 +260,84 @@ CSSOM.CSSStyleSheet.prototype.removeRule = function(index) {
|
|
|
227
260
|
this.deleteRule(index);
|
|
228
261
|
};
|
|
229
262
|
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Replaces the rules of a {@link CSSStyleSheet}
|
|
266
|
+
*
|
|
267
|
+
* @returns a promise
|
|
268
|
+
* @see https://www.w3.org/TR/cssom-1/#dom-cssstylesheet-replace
|
|
269
|
+
*/
|
|
270
|
+
CSSOM.CSSStyleSheet.prototype.replace = function(text) {
|
|
271
|
+
var _Promise;
|
|
272
|
+
if (CSSOM.getGlobalObject() && CSSOM.getGlobalObject()['Promise']) {
|
|
273
|
+
_Promise = CSSOM.getGlobalObject()['Promise'];
|
|
274
|
+
} else {
|
|
275
|
+
_Promise = Promise;
|
|
276
|
+
}
|
|
277
|
+
var sheet = this;
|
|
278
|
+
return new _Promise(function (resolve, reject) {
|
|
279
|
+
// If the constructed flag is not set, or the disallow modification flag is set, throw a NotAllowedError DOMException.
|
|
280
|
+
if (!sheet.__constructed || sheet.__disallowModification) {
|
|
281
|
+
reject(errorUtils.createError(sheet, 'DOMException',
|
|
282
|
+
"Failed to execute 'replaceSync' on '" + sheet.constructor.name + "': Not allowed.",
|
|
283
|
+
'NotAllowedError'));
|
|
284
|
+
}
|
|
285
|
+
// Set the disallow modification flag.
|
|
286
|
+
sheet.__disallowModification = true;
|
|
287
|
+
|
|
288
|
+
// In parallel, do these steps:
|
|
289
|
+
setTimeout(function() {
|
|
290
|
+
// Let rules be the result of running parse a stylesheet's contents from text.
|
|
291
|
+
var rules = new CSSOM.CSSRuleList();
|
|
292
|
+
CSSOM.parse(text, { styleSheet: sheet, cssRules: rules });
|
|
293
|
+
// If rules contains one or more @import rules, remove those rules from rules.
|
|
294
|
+
var i = 0;
|
|
295
|
+
while (i < rules.length) {
|
|
296
|
+
if (rules[i].constructor.name === 'CSSImportRule') {
|
|
297
|
+
rules.splice(i, 1);
|
|
298
|
+
} else {
|
|
299
|
+
i++;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Set sheet's CSS rules to rules.
|
|
303
|
+
sheet.__cssRules = rules;
|
|
304
|
+
// Unset sheet’s disallow modification flag.
|
|
305
|
+
delete sheet.__disallowModification;
|
|
306
|
+
// Resolve promise with sheet.
|
|
307
|
+
resolve(sheet);
|
|
308
|
+
})
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Synchronously replaces the rules of a {@link CSSStyleSheet}
|
|
314
|
+
*
|
|
315
|
+
* @see https://www.w3.org/TR/cssom-1/#dom-cssstylesheet-replacesync
|
|
316
|
+
*/
|
|
317
|
+
CSSOM.CSSStyleSheet.prototype.replaceSync = function(text) {
|
|
318
|
+
var sheet = this;
|
|
319
|
+
// If the constructed flag is not set, or the disallow modification flag is set, throw a NotAllowedError DOMException.
|
|
320
|
+
if (!sheet.__constructed || sheet.__disallowModification) {
|
|
321
|
+
errorUtils.throwError(sheet, 'DOMException',
|
|
322
|
+
"Failed to execute 'replaceSync' on '" + sheet.constructor.name + "': Not allowed.",
|
|
323
|
+
'NotAllowedError');
|
|
324
|
+
}
|
|
325
|
+
// Let rules be the result of running parse a stylesheet's contents from text.
|
|
326
|
+
var rules = new CSSOM.CSSRuleList();
|
|
327
|
+
CSSOM.parse(text, { styleSheet: sheet, cssRules: rules });
|
|
328
|
+
// If rules contains one or more @import rules, remove those rules from rules.
|
|
329
|
+
var i = 0;
|
|
330
|
+
while (i < rules.length) {
|
|
331
|
+
if (rules[i].constructor.name === 'CSSImportRule') {
|
|
332
|
+
rules.splice(i, 1);
|
|
333
|
+
} else {
|
|
334
|
+
i++;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// Set sheet's CSS rules to rules.
|
|
338
|
+
sheet.__cssRules = rules;
|
|
339
|
+
}
|
|
340
|
+
|
|
230
341
|
/**
|
|
231
342
|
* NON-STANDARD
|
|
232
343
|
* @return {string} serialize stylesheet
|