| OLD | NEW |
| (Empty) |
| 1 //.CommonJS | |
| 2 var CSSOM = { | |
| 3 CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaratio
n, | |
| 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 CSSOM.CSSRule.call(this); | |
| 16 this.selectorText = ""; | |
| 17 this.style = new CSSOM.CSSStyleDeclaration; | |
| 18 this.style.parentRule = this; | |
| 19 }; | |
| 20 | |
| 21 CSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule; | |
| 22 CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule; | |
| 23 CSSOM.CSSStyleRule.prototype.type = 1; | |
| 24 | |
| 25 CSSOM.CSSStyleRule.prototype.__defineGetter__("cssText", function() { | |
| 26 var text; | |
| 27 if (this.selectorText) { | |
| 28 text = this.selectorText + " {" + this.style.cssText + "}"; | |
| 29 } else { | |
| 30 text = ""; | |
| 31 } | |
| 32 return text; | |
| 33 }); | |
| 34 | |
| 35 CSSOM.CSSStyleRule.prototype.__defineSetter__("cssText", function(cssText) { | |
| 36 var rule = CSSOM.CSSStyleRule.parse(cssText); | |
| 37 this.style = rule.style; | |
| 38 this.selectorText = rule.selectorText; | |
| 39 }); | |
| 40 | |
| 41 | |
| 42 /** | |
| 43 * NON-STANDARD | |
| 44 * lightweight version of parse.js. | |
| 45 * @param {string} ruleText | |
| 46 * @return CSSStyleRule | |
| 47 */ | |
| 48 CSSOM.CSSStyleRule.parse = function(ruleText) { | |
| 49 var i = 0; | |
| 50 var state = "selector"; | |
| 51 var index; | |
| 52 var j = i; | |
| 53 var buffer = ""; | |
| 54 | |
| 55 var SIGNIFICANT_WHITESPACE = { | |
| 56 "selector": true, | |
| 57 "value": true | |
| 58 }; | |
| 59 | |
| 60 var styleRule = new CSSOM.CSSStyleRule; | |
| 61 var selector, name, value, priority=""; | |
| 62 | |
| 63 for (var character; character = ruleText.charAt(i); i++) { | |
| 64 | |
| 65 switch (character) { | |
| 66 | |
| 67 case " ": | |
| 68 case "\t": | |
| 69 case "\r": | |
| 70 case "\n": | |
| 71 case "\f": | |
| 72 if (SIGNIFICANT_WHITESPACE[state]) { | |
| 73 // Squash 2 or more white-spaces in the row into
1 | |
| 74 switch (ruleText.charAt(i - 1)) { | |
| 75 case " ": | |
| 76 case "\t": | |
| 77 case "\r": | |
| 78 case "\n": | |
| 79 case "\f": | |
| 80 break; | |
| 81 default: | |
| 82 buffer += " "; | |
| 83 break; | |
| 84 } | |
| 85 } | |
| 86 break; | |
| 87 | |
| 88 // String | |
| 89 case '"': | |
| 90 j = i + 1; | |
| 91 index = ruleText.indexOf('"', j) + 1; | |
| 92 if (!index) { | |
| 93 throw '" is missing'; | |
| 94 } | |
| 95 buffer += ruleText.slice(i, index); | |
| 96 i = index - 1; | |
| 97 break; | |
| 98 | |
| 99 case "'": | |
| 100 j = i + 1; | |
| 101 index = ruleText.indexOf("'", j) + 1; | |
| 102 if (!index) { | |
| 103 throw "' is missing"; | |
| 104 } | |
| 105 buffer += ruleText.slice(i, index); | |
| 106 i = index - 1; | |
| 107 break; | |
| 108 | |
| 109 // Comment | |
| 110 case "/": | |
| 111 if (ruleText.charAt(i + 1) === "*") { | |
| 112 i += 2; | |
| 113 index = ruleText.indexOf("*/", i); | |
| 114 if (index === -1) { | |
| 115 throw new SyntaxError("Missing */"); | |
| 116 } else { | |
| 117 i = index + 1; | |
| 118 } | |
| 119 } else { | |
| 120 buffer += character; | |
| 121 } | |
| 122 break; | |
| 123 | |
| 124 case "{": | |
| 125 if (state === "selector") { | |
| 126 styleRule.selectorText = buffer.trim(); | |
| 127 buffer = ""; | |
| 128 state = "name"; | |
| 129 } | |
| 130 break; | |
| 131 | |
| 132 case ":": | |
| 133 if (state === "name") { | |
| 134 name = buffer.trim(); | |
| 135 buffer = ""; | |
| 136 state = "value"; | |
| 137 } else { | |
| 138 buffer += character; | |
| 139 } | |
| 140 break; | |
| 141 | |
| 142 case "!": | |
| 143 if (state === "value" && ruleText.indexOf("!important",
i) === i) { | |
| 144 priority = "important"; | |
| 145 i += "important".length; | |
| 146 } else { | |
| 147 buffer += character; | |
| 148 } | |
| 149 break; | |
| 150 | |
| 151 case ";": | |
| 152 if (state === "value") { | |
| 153 styleRule.style.setProperty(name, buffer.trim(),
priority); | |
| 154 priority = ""; | |
| 155 buffer = ""; | |
| 156 state = "name"; | |
| 157 } else { | |
| 158 buffer += character; | |
| 159 } | |
| 160 break; | |
| 161 | |
| 162 case "}": | |
| 163 if (state === "value") { | |
| 164 styleRule.style.setProperty(name, buffer.trim(),
priority); | |
| 165 priority = ""; | |
| 166 buffer = ""; | |
| 167 } else if (state === "name") { | |
| 168 break; | |
| 169 } else { | |
| 170 buffer += character; | |
| 171 } | |
| 172 state = "selector"; | |
| 173 break; | |
| 174 | |
| 175 default: | |
| 176 buffer += character; | |
| 177 break; | |
| 178 | |
| 179 } | |
| 180 } | |
| 181 | |
| 182 return styleRule; | |
| 183 | |
| 184 }; | |
| 185 | |
| 186 | |
| 187 //.CommonJS | |
| 188 exports.CSSStyleRule = CSSOM.CSSStyleRule; | |
| 189 ///CommonJS | |
| OLD | NEW |