stylus-source 0.15.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.DS_Store +0 -0
- data/README.md +3 -0
- data/lib/.DS_Store +0 -0
- data/lib/node_modules/cssom/.idea/CSSOM.iml +9 -0
- data/lib/node_modules/cssom/.idea/dictionaries/nv.xml +3 -0
- data/lib/node_modules/cssom/.idea/encodings.xml +5 -0
- data/lib/node_modules/cssom/.idea/misc.xml +17 -0
- data/lib/node_modules/cssom/.idea/modules.xml +9 -0
- data/lib/node_modules/cssom/.idea/projectCodeStyle.xml +82 -0
- data/lib/node_modules/cssom/.idea/vcs.xml +8 -0
- data/lib/node_modules/cssom/.idea/workspace.xml +467 -0
- data/lib/node_modules/cssom/.livereload +19 -0
- data/lib/node_modules/cssom/Jakefile +37 -0
- data/lib/node_modules/cssom/README.mdown +33 -0
- data/lib/node_modules/cssom/Rakefile +23 -0
- data/lib/node_modules/cssom/docs/.livereload +19 -0
- data/lib/node_modules/cssom/docs/bar.css +3 -0
- data/lib/node_modules/cssom/docs/demo.css +0 -0
- data/lib/node_modules/cssom/docs/foo.css +4 -0
- data/lib/node_modules/cssom/docs/parse.html +170 -0
- data/lib/node_modules/cssom/docs/parse2.html +431 -0
- data/lib/node_modules/cssom/index.html +100 -0
- data/lib/node_modules/cssom/lib/CSSImportRule.js +34 -0
- data/lib/node_modules/cssom/lib/CSSMediaRule.js +38 -0
- data/lib/node_modules/cssom/lib/CSSOM.js +3 -0
- data/lib/node_modules/cssom/lib/CSSRule.js +38 -0
- data/lib/node_modules/cssom/lib/CSSStyleDeclaration.js +130 -0
- data/lib/node_modules/cssom/lib/CSSStyleRule.js +187 -0
- data/lib/node_modules/cssom/lib/CSSStyleSheet.js +85 -0
- data/lib/node_modules/cssom/lib/MediaList.js +61 -0
- data/lib/node_modules/cssom/lib/StyleSheet.js +15 -0
- data/lib/node_modules/cssom/lib/clone.js +69 -0
- data/lib/node_modules/cssom/lib/index.js +10 -0
- data/lib/node_modules/cssom/lib/parse.js +195 -0
- data/lib/node_modules/cssom/media.html +17 -0
- data/lib/node_modules/cssom/package.json +30 -0
- data/lib/node_modules/cssom/plugins/toHTML.js +32 -0
- data/lib/node_modules/cssom/server/index.html +22 -0
- data/lib/node_modules/cssom/server/index.js +21 -0
- data/lib/node_modules/cssom/shorthands.html +21 -0
- data/lib/node_modules/cssom/test/CSSStyleDeclaration.test.js +35 -0
- data/lib/node_modules/cssom/test/CSSStyleRule.test.js +12 -0
- data/lib/node_modules/cssom/test/CSSStyleSheet.test.js +16 -0
- data/lib/node_modules/cssom/test/MediaList.test.js +21 -0
- data/lib/node_modules/cssom/test/clone.test.js +38 -0
- data/lib/node_modules/cssom/test/fixtures/dummy.css +3 -0
- data/lib/node_modules/cssom/test/helper.js +97 -0
- data/lib/node_modules/cssom/test/index.html +42 -0
- data/lib/node_modules/cssom/test/parse.test.js +346 -0
- data/lib/node_modules/cssom/test/vendor/qunit.css +189 -0
- data/lib/node_modules/cssom/test/vendor/qunit.js +1341 -0
- data/lib/node_modules/growl/History.md +16 -0
- data/lib/node_modules/growl/Readme.md +74 -0
- data/lib/node_modules/growl/lib/growl.js +82 -0
- data/lib/node_modules/growl/package.json +6 -0
- data/lib/node_modules/growl/test.js +17 -0
- data/lib/stylus/colors.js +156 -0
- data/lib/stylus/convert/css.js +130 -0
- data/lib/stylus/errors.js +58 -0
- data/lib/stylus/functions/image.js +120 -0
- data/lib/stylus/functions/index.js +722 -0
- data/lib/stylus/functions/index.styl +123 -0
- data/lib/stylus/functions/url.js +98 -0
- data/lib/stylus/lexer.js +728 -0
- data/lib/stylus/middleware.js +223 -0
- data/lib/stylus/nodes/arguments.js +65 -0
- data/lib/stylus/nodes/binop.js +54 -0
- data/lib/stylus/nodes/block.js +99 -0
- data/lib/stylus/nodes/boolean.js +103 -0
- data/lib/stylus/nodes/call.js +57 -0
- data/lib/stylus/nodes/charset.js +42 -0
- data/lib/stylus/nodes/comment.js +32 -0
- data/lib/stylus/nodes/each.js +56 -0
- data/lib/stylus/nodes/expression.js +168 -0
- data/lib/stylus/nodes/fontface.js +55 -0
- data/lib/stylus/nodes/function.js +104 -0
- data/lib/stylus/nodes/group.js +79 -0
- data/lib/stylus/nodes/hsla.js +256 -0
- data/lib/stylus/nodes/ident.js +127 -0
- data/lib/stylus/nodes/if.js +55 -0
- data/lib/stylus/nodes/import.js +30 -0
- data/lib/stylus/nodes/index.js +52 -0
- data/lib/stylus/nodes/jsliteral.js +32 -0
- data/lib/stylus/nodes/keyframes.js +78 -0
- data/lib/stylus/nodes/literal.js +92 -0
- data/lib/stylus/nodes/media.js +42 -0
- data/lib/stylus/nodes/node.js +209 -0
- data/lib/stylus/nodes/null.js +72 -0
- data/lib/stylus/nodes/page.js +43 -0
- data/lib/stylus/nodes/params.js +72 -0
- data/lib/stylus/nodes/property.js +72 -0
- data/lib/stylus/nodes/return.js +44 -0
- data/lib/stylus/nodes/rgba.js +335 -0
- data/lib/stylus/nodes/root.js +50 -0
- data/lib/stylus/nodes/selector.js +57 -0
- data/lib/stylus/nodes/string.js +120 -0
- data/lib/stylus/nodes/ternary.js +51 -0
- data/lib/stylus/nodes/unaryop.js +46 -0
- data/lib/stylus/nodes/unit.js +207 -0
- data/lib/stylus/parser.js +1514 -0
- data/lib/stylus/renderer.js +157 -0
- data/lib/stylus/source.rb +7 -0
- data/lib/stylus/stack/frame.js +66 -0
- data/lib/stylus/stack/index.js +146 -0
- data/lib/stylus/stack/scope.js +53 -0
- data/lib/stylus/stylus.js +102 -0
- data/lib/stylus/token.js +53 -0
- data/lib/stylus/utils.js +237 -0
- data/lib/stylus/visitor/compiler.js +472 -0
- data/lib/stylus/visitor/evaluator.js +1070 -0
- data/lib/stylus/visitor/index.js +31 -0
- data/stylus-source.gemspec +15 -0
- metadata +158 -0
@@ -0,0 +1,100 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<style type="text/css">
|
3
|
+
html, body {
|
4
|
+
background: #CCC;
|
5
|
+
font-size: 14px;
|
6
|
+
margin: 0;
|
7
|
+
height: 100%;
|
8
|
+
}
|
9
|
+
table {
|
10
|
+
width: 100%;
|
11
|
+
border-collapse: collapse;
|
12
|
+
}
|
13
|
+
td {
|
14
|
+
width: 50%;
|
15
|
+
padding: 0;
|
16
|
+
vertical-align: top;
|
17
|
+
}
|
18
|
+
#output, #style {
|
19
|
+
width: 49%;
|
20
|
+
min-height: 99%;
|
21
|
+
display: inline-block;
|
22
|
+
vertical-align: top;
|
23
|
+
}
|
24
|
+
#style {
|
25
|
+
position: absolute;
|
26
|
+
top: 0;
|
27
|
+
height: 100%;
|
28
|
+
left: 4px;
|
29
|
+
width: 49%;
|
30
|
+
background: #FFF;
|
31
|
+
border: 1px solid #999;
|
32
|
+
font: 14px monospace;
|
33
|
+
white-space: pre-wrap;
|
34
|
+
}
|
35
|
+
#output {
|
36
|
+
position: absolute;
|
37
|
+
top: 0;
|
38
|
+
min-height: 100%;
|
39
|
+
right: 0;
|
40
|
+
width: 50%;
|
41
|
+
margin: 0;
|
42
|
+
padding: 4px;
|
43
|
+
box-sizing: border-box;
|
44
|
+
-webkit-box-sizing: border-box;
|
45
|
+
background: #333;
|
46
|
+
}
|
47
|
+
|
48
|
+
.rule {
|
49
|
+
color: #8CB7D1;
|
50
|
+
}
|
51
|
+
.name {
|
52
|
+
color: #D7AA69;
|
53
|
+
}
|
54
|
+
.value {
|
55
|
+
color: #D7AA69;
|
56
|
+
}
|
57
|
+
.brace-open, .brace-close, .colon, .semicolon {
|
58
|
+
color: #625035;
|
59
|
+
}
|
60
|
+
/*@import url("test/fixtures/dummy.css") screen, handheld;*/
|
61
|
+
@media screen, all {
|
62
|
+
body {
|
63
|
+
color: black;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
</style>
|
67
|
+
|
68
|
+
<textarea id="style">.rule {
|
69
|
+
display: block;
|
70
|
+
}
|
71
|
+
.properties {
|
72
|
+
display: block;
|
73
|
+
}</textarea>
|
74
|
+
<pre id="output"></pre>
|
75
|
+
|
76
|
+
|
77
|
+
<script type="text/javascript" src="lib/StyleSheet.js"></script>
|
78
|
+
<script type="text/javascript" src="lib/CSSStyleSheet.js"></script>
|
79
|
+
<script type="text/javascript" src="lib/MediaList.js"></script>
|
80
|
+
<script type="text/javascript" src="lib/CSSRule.js"></script>
|
81
|
+
<script type="text/javascript" src="lib/CSSStyleRule.js"></script>
|
82
|
+
<script type="text/javascript" src="lib/CSSMediaRule.js"></script>
|
83
|
+
<script type="text/javascript" src="lib/CSSStyleDeclaration.js"></script>
|
84
|
+
<script type="text/javascript" src="lib/parse.js"></script>
|
85
|
+
<script type="text/javascript" src="lib/parse.js"></script>
|
86
|
+
<script type="text/javascript" src="plugins/toHTML.js"></script>
|
87
|
+
<script type="text/javascript">
|
88
|
+
CSSStyleSheet.prototype.toHTML = toHTML;
|
89
|
+
window.onload = function(){
|
90
|
+
var style = document.getElementById("style");
|
91
|
+
var output = document.getElementById("output")
|
92
|
+
|
93
|
+
function outputUpdated(){
|
94
|
+
output.innerHTML = parse(style.value).toHTML();
|
95
|
+
}
|
96
|
+
|
97
|
+
style.onkeyup = outputUpdated;
|
98
|
+
outputUpdated();
|
99
|
+
}
|
100
|
+
</script>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
//.CommonJS
|
2
|
+
var CSSOM = {
|
3
|
+
CSSRule: require("./CSSRule").CSSRule,
|
4
|
+
CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet,
|
5
|
+
MediaList: require("./MediaList").MediaList
|
6
|
+
};
|
7
|
+
///CommonJS
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @constructor
|
12
|
+
* @see http://dev.w3.org/csswg/cssom/#cssimportrule
|
13
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule
|
14
|
+
*/
|
15
|
+
CSSOM.CSSImportRule = function CSSImportRule() {
|
16
|
+
this.href = "";
|
17
|
+
this.media = new CSSOM.MediaList;
|
18
|
+
this.styleSheet = new CSSOM.CSSStyleSheet;
|
19
|
+
};
|
20
|
+
|
21
|
+
CSSOM.CSSImportRule.prototype = new CSSOM.CSSRule;
|
22
|
+
CSSOM.CSSImportRule.prototype.constructor = CSSOM.CSSImportRule;
|
23
|
+
CSSOM.CSSImportRule.prototype.type = 3;
|
24
|
+
CSSOM.CSSImportRule.prototype.__defineGetter__("cssText", function() {
|
25
|
+
return "@import url("+ this.href +") "+ this.media.mediaText +";"
|
26
|
+
});
|
27
|
+
CSSOM.CSSImportRule.prototype.__defineSetter__("cssText", function() {
|
28
|
+
return "@import url("+ this.href +") "+ this.media.mediaText +";"
|
29
|
+
});
|
30
|
+
|
31
|
+
|
32
|
+
//.CommonJS
|
33
|
+
exports.CSSImportRule = CSSOM.CSSImportRule;
|
34
|
+
///CommonJS
|
@@ -0,0 +1,38 @@
|
|
1
|
+
//.CommonJS
|
2
|
+
var CSSOM = {
|
3
|
+
CSSRule: require("./CSSRule").CSSRule,
|
4
|
+
MediaList: require("./MediaList").MediaList
|
5
|
+
};
|
6
|
+
///CommonJS
|
7
|
+
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @constructor
|
11
|
+
* @see http://dev.w3.org/csswg/cssom/#cssmediarule
|
12
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule
|
13
|
+
*/
|
14
|
+
CSSOM.CSSMediaRule = function CSSMediaRule() {
|
15
|
+
this.media = new CSSOM.MediaList;
|
16
|
+
this.cssRules = [];
|
17
|
+
};
|
18
|
+
|
19
|
+
CSSOM.CSSMediaRule.prototype = new CSSOM.CSSRule;
|
20
|
+
CSSOM.CSSMediaRule.prototype.constructor = CSSOM.CSSMediaRule;
|
21
|
+
CSSOM.CSSMediaRule.prototype.type = 4;
|
22
|
+
//FIXME
|
23
|
+
//CSSOM.CSSMediaRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;
|
24
|
+
//CSSOM.CSSMediaRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;
|
25
|
+
|
26
|
+
// http://opensource.apple.com/source/WebCore/WebCore-658.28/css/CSSMediaRule.cpp
|
27
|
+
CSSOM.CSSMediaRule.prototype.__defineGetter__("cssText", function() {
|
28
|
+
var cssTexts = [];
|
29
|
+
for (var i=0, length=this.cssRules.length; i < length; i++) {
|
30
|
+
cssTexts.push(this.cssRules[i].cssText);
|
31
|
+
}
|
32
|
+
return "@media " + this.media.mediaText + " {" + cssTexts.join("") + "}"
|
33
|
+
});
|
34
|
+
|
35
|
+
|
36
|
+
//.CommonJS
|
37
|
+
exports.CSSMediaRule = CSSOM.CSSMediaRule;
|
38
|
+
///CommonJS
|
@@ -0,0 +1,38 @@
|
|
1
|
+
//.CommonJS
|
2
|
+
var CSSOM = {};
|
3
|
+
///CommonJS
|
4
|
+
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @constructor
|
8
|
+
* @see http://dev.w3.org/csswg/cssom/#the-cssrule-interface
|
9
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule
|
10
|
+
*/
|
11
|
+
CSSOM.CSSRule = function CSSRule() {
|
12
|
+
this.parentRule = null;
|
13
|
+
};
|
14
|
+
|
15
|
+
CSSOM.CSSRule.STYLE_RULE = 1;
|
16
|
+
CSSOM.CSSRule.IMPORT_RULE = 3;
|
17
|
+
CSSOM.CSSRule.MEDIA_RULE = 4;
|
18
|
+
CSSOM.CSSRule.FONT_FACE_RULE = 5;
|
19
|
+
CSSOM.CSSRule.PAGE_RULE = 6;
|
20
|
+
CSSOM.CSSRule.WEBKIT_KEYFRAMES_RULE = 8;
|
21
|
+
CSSOM.CSSRule.WEBKIT_KEYFRAME_RULE = 9;
|
22
|
+
|
23
|
+
// Obsolete in CSSOM http://dev.w3.org/csswg/cssom/
|
24
|
+
//CSSOM.CSSRule.UNKNOWN_RULE = 0;
|
25
|
+
//CSSOM.CSSRule.CHARSET_RULE = 2;
|
26
|
+
|
27
|
+
// Never implemented
|
28
|
+
//CSSOM.CSSRule.VARIABLES_RULE = 7;
|
29
|
+
|
30
|
+
CSSOM.CSSRule.prototype = {
|
31
|
+
constructor: CSSOM.CSSRule
|
32
|
+
//FIXME
|
33
|
+
};
|
34
|
+
|
35
|
+
|
36
|
+
//.CommonJS
|
37
|
+
exports.CSSRule = CSSOM.CSSRule;
|
38
|
+
///CommonJS
|
@@ -0,0 +1,130 @@
|
|
1
|
+
//.CommonJS
|
2
|
+
var CSSOM = {};
|
3
|
+
///CommonJS
|
4
|
+
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @constructor
|
8
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration
|
9
|
+
*/
|
10
|
+
CSSOM.CSSStyleDeclaration = function CSSStyleDeclaration(){
|
11
|
+
this.length = 0;
|
12
|
+
|
13
|
+
// NON-STANDARD
|
14
|
+
this._importants = {};
|
15
|
+
};
|
16
|
+
|
17
|
+
|
18
|
+
CSSOM.CSSStyleDeclaration.prototype = {
|
19
|
+
|
20
|
+
constructor: CSSOM.CSSStyleDeclaration,
|
21
|
+
|
22
|
+
/**
|
23
|
+
*
|
24
|
+
* @param {string} name
|
25
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue
|
26
|
+
* @return {string} the value of the property if it has been explicitly set for this declaration block.
|
27
|
+
* Returns the empty string if the property has not been set.
|
28
|
+
*/
|
29
|
+
getPropertyValue: function(name) {
|
30
|
+
return this[name] || ""
|
31
|
+
},
|
32
|
+
|
33
|
+
/**
|
34
|
+
*
|
35
|
+
* @param {string} name
|
36
|
+
* @param {string} value
|
37
|
+
* @param {string} [priority=null] "important" or null
|
38
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty
|
39
|
+
*/
|
40
|
+
setProperty: function(name, value, priority) {
|
41
|
+
if (this[name]) {
|
42
|
+
// Property already exist. Overwrite it.
|
43
|
+
var index = Array.prototype.indexOf.call(this, name);
|
44
|
+
if (index < 0) {
|
45
|
+
this[this.length] = name;
|
46
|
+
this.length++;
|
47
|
+
}
|
48
|
+
} else {
|
49
|
+
// New property.
|
50
|
+
this[this.length] = name;
|
51
|
+
this.length++;
|
52
|
+
}
|
53
|
+
this[name] = value;
|
54
|
+
this._importants[name] = priority;
|
55
|
+
},
|
56
|
+
|
57
|
+
/**
|
58
|
+
*
|
59
|
+
* @param {string} name
|
60
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty
|
61
|
+
* @return {string} the value of the property if it has been explicitly set for this declaration block.
|
62
|
+
* Returns the empty string if the property has not been set or the property name does not correspond to a known CSS property.
|
63
|
+
*/
|
64
|
+
removeProperty: function(name) {
|
65
|
+
if (!(name in this)) {
|
66
|
+
return ""
|
67
|
+
}
|
68
|
+
var index = Array.prototype.indexOf.call(this, name);
|
69
|
+
if (index < 0) {
|
70
|
+
return ""
|
71
|
+
}
|
72
|
+
var prevValue = this[name];
|
73
|
+
this[name] = "";
|
74
|
+
|
75
|
+
// That's what WebKit and Opera do
|
76
|
+
Array.prototype.splice.call(this, index, 1);
|
77
|
+
|
78
|
+
// That's what Firefox does
|
79
|
+
//this[index] = ""
|
80
|
+
|
81
|
+
return prevValue
|
82
|
+
},
|
83
|
+
|
84
|
+
getPropertyCSSValue: function() {
|
85
|
+
//FIXME
|
86
|
+
},
|
87
|
+
|
88
|
+
/**
|
89
|
+
*
|
90
|
+
* @param {String} name
|
91
|
+
*/
|
92
|
+
getPropertyPriority: function(name) {
|
93
|
+
return this._importants[name] || "";
|
94
|
+
},
|
95
|
+
|
96
|
+
|
97
|
+
/**
|
98
|
+
* element.style.overflow = "auto"
|
99
|
+
* element.style.getPropertyShorthand("overflow-x")
|
100
|
+
* -> "overflow"
|
101
|
+
*/
|
102
|
+
getPropertyShorthand: function() {
|
103
|
+
//FIXME
|
104
|
+
},
|
105
|
+
|
106
|
+
isPropertyImplicit: function() {
|
107
|
+
//FIXME
|
108
|
+
},
|
109
|
+
|
110
|
+
// Doesn't work in IE < 9
|
111
|
+
get cssText(){
|
112
|
+
var properties = [];
|
113
|
+
for (var i=0, length=this.length; i < length; ++i) {
|
114
|
+
var name = this[i];
|
115
|
+
var value = this.getPropertyValue(name);
|
116
|
+
var priority = this.getPropertyPriority(name);
|
117
|
+
if (priority) {
|
118
|
+
priority = " !" + priority;
|
119
|
+
}
|
120
|
+
properties[i] = name + ": " + value + priority + ";";
|
121
|
+
}
|
122
|
+
return properties.join(" ")
|
123
|
+
}
|
124
|
+
|
125
|
+
};
|
126
|
+
|
127
|
+
|
128
|
+
//.CommonJS
|
129
|
+
exports.CSSStyleDeclaration = CSSOM.CSSStyleDeclaration;
|
130
|
+
///CommonJS
|
@@ -0,0 +1,187 @@
|
|
1
|
+
//.CommonJS
|
2
|
+
var CSSOM = {
|
3
|
+
CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
|
4
|
+
CSSRule: require("./CSSRule").CSSRule
|
5
|
+
};
|
6
|
+
///CommonJS
|
7
|
+
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @constructor
|
11
|
+
* @see http://dev.w3.org/csswg/cssom/#cssstylerule
|
12
|
+
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule
|
13
|
+
*/
|
14
|
+
CSSOM.CSSStyleRule = function CSSStyleRule() {
|
15
|
+
this.selectorText = "";
|
16
|
+
this.style = new CSSOM.CSSStyleDeclaration;
|
17
|
+
};
|
18
|
+
|
19
|
+
CSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule;
|
20
|
+
CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule;
|
21
|
+
CSSOM.CSSStyleRule.prototype.type = 1;
|
22
|
+
|
23
|
+
CSSOM.CSSStyleRule.prototype.__defineGetter__("cssText", function() {
|
24
|
+
var text;
|
25
|
+
if (this.selectorText) {
|
26
|
+
text = this.selectorText + " {" + this.style.cssText + "}";
|
27
|
+
} else {
|
28
|
+
text = "";
|
29
|
+
}
|
30
|
+
return text;
|
31
|
+
});
|
32
|
+
|
33
|
+
CSSOM.CSSStyleRule.prototype.__defineSetter__("cssText", function(cssText) {
|
34
|
+
var rule = CSSOM.CSSStyleRule.parse(cssText);
|
35
|
+
this.style = rule.style;
|
36
|
+
this.selectorText = rule.selectorText;
|
37
|
+
});
|
38
|
+
|
39
|
+
|
40
|
+
/**
|
41
|
+
* NON-STANDARD
|
42
|
+
* lightweight version of parse.js.
|
43
|
+
* @param {string} ruleText
|
44
|
+
* @return CSSStyleRule
|
45
|
+
*/
|
46
|
+
CSSOM.CSSStyleRule.parse = function(ruleText) {
|
47
|
+
var i = 0;
|
48
|
+
var state = "selector";
|
49
|
+
var index;
|
50
|
+
var j = i;
|
51
|
+
var buffer = "";
|
52
|
+
|
53
|
+
var SIGNIFICANT_WHITESPACE = {
|
54
|
+
"selector": true,
|
55
|
+
"value": true
|
56
|
+
};
|
57
|
+
|
58
|
+
var styleRule = new CSSOM.CSSStyleRule;
|
59
|
+
var selector, name, value, priority="";
|
60
|
+
|
61
|
+
for (var character; character = ruleText.charAt(i); i++) {
|
62
|
+
|
63
|
+
switch (character) {
|
64
|
+
|
65
|
+
case " ":
|
66
|
+
case "\t":
|
67
|
+
case "\r":
|
68
|
+
case "\n":
|
69
|
+
case "\f":
|
70
|
+
if (SIGNIFICANT_WHITESPACE[state]) {
|
71
|
+
// Squash 2 or more white-spaces in the row into 1
|
72
|
+
switch (ruleText.charAt(i - 1)) {
|
73
|
+
case " ":
|
74
|
+
case "\t":
|
75
|
+
case "\r":
|
76
|
+
case "\n":
|
77
|
+
case "\f":
|
78
|
+
break;
|
79
|
+
default:
|
80
|
+
buffer += " ";
|
81
|
+
break;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
break;
|
85
|
+
|
86
|
+
// String
|
87
|
+
case '"':
|
88
|
+
j = i + 1;
|
89
|
+
index = ruleText.indexOf('"', j) + 1;
|
90
|
+
if (!index) {
|
91
|
+
throw '" is missing';
|
92
|
+
}
|
93
|
+
buffer += ruleText.slice(i, index);
|
94
|
+
i = index - 1;
|
95
|
+
break;
|
96
|
+
|
97
|
+
case "'":
|
98
|
+
j = i + 1;
|
99
|
+
index = ruleText.indexOf("'", j) + 1;
|
100
|
+
if (!index) {
|
101
|
+
throw "' is missing";
|
102
|
+
}
|
103
|
+
buffer += ruleText.slice(i, index);
|
104
|
+
i = index - 1;
|
105
|
+
break;
|
106
|
+
|
107
|
+
// Comment
|
108
|
+
case "/":
|
109
|
+
if (ruleText.charAt(i + 1) == "*") {
|
110
|
+
i += 2;
|
111
|
+
index = ruleText.indexOf("*/", i);
|
112
|
+
if (index == -1) {
|
113
|
+
throw SyntaxError("Missing */");
|
114
|
+
} else {
|
115
|
+
i = index + 1;
|
116
|
+
}
|
117
|
+
} else {
|
118
|
+
buffer += character;
|
119
|
+
}
|
120
|
+
break;
|
121
|
+
|
122
|
+
case "{":
|
123
|
+
if (state == "selector") {
|
124
|
+
styleRule.selectorText = buffer.trim();
|
125
|
+
buffer = "";
|
126
|
+
state = "name";
|
127
|
+
}
|
128
|
+
break;
|
129
|
+
|
130
|
+
case ":":
|
131
|
+
if (state == "name") {
|
132
|
+
name = buffer.trim();
|
133
|
+
buffer = "";
|
134
|
+
state = "value";
|
135
|
+
} else {
|
136
|
+
buffer += character;
|
137
|
+
}
|
138
|
+
break;
|
139
|
+
|
140
|
+
case "!":
|
141
|
+
if (state == "value" && ruleText.indexOf("!important", i) === i) {
|
142
|
+
priority = "important";
|
143
|
+
i += "important".length;
|
144
|
+
} else {
|
145
|
+
buffer += character;
|
146
|
+
}
|
147
|
+
break;
|
148
|
+
|
149
|
+
case ";":
|
150
|
+
if (state == "value") {
|
151
|
+
styleRule.style.setProperty(name, buffer.trim(), priority);
|
152
|
+
priority = "";
|
153
|
+
buffer = "";
|
154
|
+
state = "name";
|
155
|
+
} else {
|
156
|
+
buffer += character;
|
157
|
+
}
|
158
|
+
break;
|
159
|
+
|
160
|
+
case "}":
|
161
|
+
if (state == "value") {
|
162
|
+
styleRule.style.setProperty(name, buffer.trim(), priority);
|
163
|
+
priority = "";
|
164
|
+
buffer = "";
|
165
|
+
} else if (state == "name") {
|
166
|
+
break;
|
167
|
+
} else {
|
168
|
+
buffer += character;
|
169
|
+
}
|
170
|
+
state = "selector";
|
171
|
+
break;
|
172
|
+
|
173
|
+
default:
|
174
|
+
buffer += character;
|
175
|
+
break;
|
176
|
+
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
return styleRule;
|
181
|
+
|
182
|
+
};
|
183
|
+
|
184
|
+
|
185
|
+
//.CommonJS
|
186
|
+
exports.CSSStyleRule = CSSOM.CSSStyleRule;
|
187
|
+
///CommonJS
|