CSS OM, issue #1
By glazou on Thursday 19 May 2011, 13:51 - CSS and style - Permalink
I am starting with this blog entry a list of CSS Object Model issues I am hitting working on my editor, BlueGriffon. Here's the first issue below, more to come later:
Interface CSSStyleSheet does not deal with rules but only with rule indexes. Just like CSSMediaRule. That has an immediate side effect for content editors willing to edit stylesheets: moving a single rule in the list of rules attached to a parent stylesheet or parent media rule will not preserve the reference to your rule! Given a valid index in a stylesheet sheet, the following code moving the rule down into the list of rules will return false:
var rule = sheet.cssRules.item(index);
var newIndex = sheet.insertRule(rule.cssText, index + 1);
var newRule = sheet.cssRules.item(newIndex);
sheet.deleteRule(index);
alert(rule == newRule);
This is clearly suboptimal. CSSStyleSheet and CSSMediaRule should be able to deal directly with rules. I suggest adding the following to Anne van Kesteren's improvements to the CSS OM:
readonly CSSRule insertCSSRule(CSSRule rule, unsigned long index);
void deleteCSSRule(CSSRule rule);
That way, the code above could become:
var rule = sheet.cssRules.item(index);
sheet.insertCSSRule(rule, index + 1);
And that's all. insertCSSRule() would detect rule is already present in the list of rules of sheet and simply move the rule to its new position.