diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-11-23 10:27:49 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-23 10:27:49 -0800 |
commit | 996756687cd741ad0d30029022638bdcceecb563 (patch) | |
tree | 9aba8b65f32fec042ee4020e1189a53fd8e7eaaa /components/script/dom/cssstylesheet.rs | |
parent | bc1e18c29e4f53ca8ed38cf2bc4e7cd912d70f93 (diff) | |
parent | 95cbf1a885da6125665b73ab1829ac229e6db822 (diff) | |
download | servo-996756687cd741ad0d30029022638bdcceecb563.tar.gz servo-996756687cd741ad0d30029022638bdcceecb563.zip |
Auto merge of #14241 - Manishearth:mut-cssom, r=SimonSapin
CSSOM: Whole ton of things
CSSOM is now starting to be useful!
Based on #14190. Only the <s>last commit</s> last two commits need review.
cc @xidorn . This doesn't change the style API, but adds useful methods.
part of #11420
This adds:
- `insertRule()` and `deleteRule()` on `CSSStyleSheet`, `CSSGroupingRule`
- `.style` getters on link and style elements
- Keyframes-backed `CSSRules` and `CSSKeyframesRule.cssRules`
- `CSSGroupingRule.cssRules`
- `prefix` and `namespaceURI` attributes of `CSSNamespaceRule`
- Fixups regarding parent stylesheets
r? @SimonSapin
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14241)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/cssstylesheet.rs')
-rw-r--r-- | components/script/dom/cssstylesheet.rs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/components/script/dom/cssstylesheet.rs b/components/script/dom/cssstylesheet.rs index d5a9342a75a..2e2ac45d867 100644 --- a/components/script/dom/cssstylesheet.rs +++ b/components/script/dom/cssstylesheet.rs @@ -4,10 +4,11 @@ use dom::bindings::codegen::Bindings::CSSStyleSheetBinding; use dom::bindings::codegen::Bindings::CSSStyleSheetBinding::CSSStyleSheetMethods; +use dom::bindings::error::{ErrorResult, Fallible}; use dom::bindings::js::{JS, Root, MutNullableHeap}; use dom::bindings::reflector::{reflect_dom_object, Reflectable}; use dom::bindings::str::DOMString; -use dom::cssrulelist::CSSRuleList; +use dom::cssrulelist::{CSSRuleList, RulesSource}; use dom::stylesheet::StyleSheet; use dom::window::Window; use std::sync::Arc; @@ -40,12 +41,33 @@ impl CSSStyleSheet { window, CSSStyleSheetBinding::Wrap) } + + fn rulelist(&self) -> Root<CSSRuleList> { + self.rulelist.or_init(|| CSSRuleList::new(self.global().as_window(), + Some(self), + RulesSource::Rules(self.style_stylesheet + .rules.clone()))) + } } impl CSSStyleSheetMethods for CSSStyleSheet { // https://drafts.csswg.org/cssom/#dom-cssstylesheet-cssrules fn CssRules(&self) -> Root<CSSRuleList> { - self.rulelist.or_init(|| CSSRuleList::new(self.global().as_window(), self, self.style_stylesheet.rules.clone())) + // XXXManishearth check origin clean flag + // https://github.com/servo/servo/issues/14327 + self.rulelist() + } + + // https://drafts.csswg.org/cssom/#dom-cssstylesheet-insertrule + fn InsertRule(&self, rule: DOMString, index: u32) -> Fallible<u32> { + // XXXManishearth check origin clean flag + self.rulelist().insert_rule(&rule, index, /* nested */ false) + } + + // https://drafts.csswg.org/cssom/#dom-cssstylesheet-deleterule + fn DeleteRule(&self, index: u32) -> ErrorResult { + // XXXManishearth check origin clean flag + self.rulelist().remove_rule(index) } } |