react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / cssom / lib / CSSStyleRule.js
81143 views//.CommonJS1var CSSOM = {2CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,3CSSRule: require("./CSSRule").CSSRule4};5///CommonJS678/**9* @constructor10* @see http://dev.w3.org/csswg/cssom/#cssstylerule11* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule12*/13CSSOM.CSSStyleRule = function CSSStyleRule() {14CSSOM.CSSRule.call(this);15this.selectorText = "";16this.style = new CSSOM.CSSStyleDeclaration;17this.style.parentRule = this;18};1920CSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule;21CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule;22CSSOM.CSSStyleRule.prototype.type = 1;2324Object.defineProperty(CSSOM.CSSStyleRule.prototype, "cssText", {25get: function() {26var text;27if (this.selectorText) {28text = this.selectorText + " {" + this.style.cssText + "}";29} else {30text = "";31}32return text;33},34set: function(cssText) {35var rule = CSSOM.CSSStyleRule.parse(cssText);36this.style = rule.style;37this.selectorText = rule.selectorText;38}39});404142/**43* NON-STANDARD44* lightweight version of parse.js.45* @param {string} ruleText46* @return CSSStyleRule47*/48CSSOM.CSSStyleRule.parse = function(ruleText) {49var i = 0;50var state = "selector";51var index;52var j = i;53var buffer = "";5455var SIGNIFICANT_WHITESPACE = {56"selector": true,57"value": true58};5960var styleRule = new CSSOM.CSSStyleRule;61var selector, name, value, priority="";6263for (var character; character = ruleText.charAt(i); i++) {6465switch (character) {6667case " ":68case "\t":69case "\r":70case "\n":71case "\f":72if (SIGNIFICANT_WHITESPACE[state]) {73// Squash 2 or more white-spaces in the row into 174switch (ruleText.charAt(i - 1)) {75case " ":76case "\t":77case "\r":78case "\n":79case "\f":80break;81default:82buffer += " ";83break;84}85}86break;8788// String89case '"':90j = i + 1;91index = ruleText.indexOf('"', j) + 1;92if (!index) {93throw '" is missing';94}95buffer += ruleText.slice(i, index);96i = index - 1;97break;9899case "'":100j = i + 1;101index = ruleText.indexOf("'", j) + 1;102if (!index) {103throw "' is missing";104}105buffer += ruleText.slice(i, index);106i = index - 1;107break;108109// Comment110case "/":111if (ruleText.charAt(i + 1) === "*") {112i += 2;113index = ruleText.indexOf("*/", i);114if (index === -1) {115throw new SyntaxError("Missing */");116} else {117i = index + 1;118}119} else {120buffer += character;121}122break;123124case "{":125if (state === "selector") {126styleRule.selectorText = buffer.trim();127buffer = "";128state = "name";129}130break;131132case ":":133if (state === "name") {134name = buffer.trim();135buffer = "";136state = "value";137} else {138buffer += character;139}140break;141142case "!":143if (state === "value" && ruleText.indexOf("!important", i) === i) {144priority = "important";145i += "important".length;146} else {147buffer += character;148}149break;150151case ";":152if (state === "value") {153styleRule.style.setProperty(name, buffer.trim(), priority);154priority = "";155buffer = "";156state = "name";157} else {158buffer += character;159}160break;161162case "}":163if (state === "value") {164styleRule.style.setProperty(name, buffer.trim(), priority);165priority = "";166buffer = "";167} else if (state === "name") {168break;169} else {170buffer += character;171}172state = "selector";173break;174175default:176buffer += character;177break;178179}180}181182return styleRule;183184};185186187//.CommonJS188exports.CSSStyleRule = CSSOM.CSSStyleRule;189///CommonJS190191192