aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/cssgroupingrule.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-11-17 14:34:45 -0800
committerManish Goregaokar <manishsmail@gmail.com>2016-11-23 09:32:43 -0800
commita9cd17ae96880a91c6699c311ccc357a2acd97b9 (patch)
treed390e7101d4f4ff74f1052528bb8e024b7a08a9f /components/script/dom/cssgroupingrule.rs
parentcada5d7c0354d82c0ba6053f772eb5b8b3f6d954 (diff)
downloadservo-a9cd17ae96880a91c6699c311ccc357a2acd97b9.tar.gz
servo-a9cd17ae96880a91c6699c311ccc357a2acd97b9.zip
Add CSSGroupingRule.{cssRules, insertRule(), deleteRule()}
Diffstat (limited to 'components/script/dom/cssgroupingrule.rs')
-rw-r--r--components/script/dom/cssgroupingrule.rs48
1 files changed, 44 insertions, 4 deletions
diff --git a/components/script/dom/cssgroupingrule.rs b/components/script/dom/cssgroupingrule.rs
index 34d7a9d15b6..4c08727b229 100644
--- a/components/script/dom/cssgroupingrule.rs
+++ b/components/script/dom/cssgroupingrule.rs
@@ -2,29 +2,69 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use dom::bindings::reflector::Reflectable;
use dom::bindings::codegen::Bindings::CSSGroupingRuleBinding;
-use dom::bindings::js::Root;
+use dom::bindings::codegen::Bindings::CSSGroupingRuleBinding::CSSGroupingRuleMethods;
+use dom::bindings::codegen::Bindings::CSSRuleBinding::CSSRuleBinding::CSSRuleMethods;
+use dom::bindings::error::{ErrorResult, Fallible};
+use dom::bindings::inheritance::Castable;
+use dom::bindings::js::{JS, MutNullableHeap, Root};
use dom::bindings::reflector::reflect_dom_object;
+use dom::bindings::str::DOMString;
use dom::cssrule::CSSRule;
+use dom::cssrulelist::{CSSRuleList, RulesSource};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use style::stylesheets::CssRules as StyleCssRules;
#[dom_struct]
pub struct CSSGroupingRule {
cssrule: CSSRule,
+ #[ignore_heap_size_of = "Arc"]
+ rules: StyleCssRules,
+ rulelist: MutNullableHeap<JS<CSSRuleList>>,
}
impl CSSGroupingRule {
- pub fn new_inherited(parent: Option<&CSSStyleSheet>) -> CSSGroupingRule {
+ pub fn new_inherited(parent: Option<&CSSStyleSheet>,
+ rules: StyleCssRules) -> CSSGroupingRule {
CSSGroupingRule {
cssrule: CSSRule::new_inherited(parent),
+ rules: rules,
+ rulelist: MutNullableHeap::new(None),
}
}
#[allow(unrooted_must_root)]
- pub fn new(window: &Window, parent: Option<&CSSStyleSheet>) -> Root<CSSGroupingRule> {
- reflect_dom_object(box CSSGroupingRule::new_inherited(parent),
+ pub fn new(window: &Window, parent: Option<&CSSStyleSheet>, rules: StyleCssRules) -> Root<CSSGroupingRule> {
+ reflect_dom_object(box CSSGroupingRule::new_inherited(parent, rules),
window,
CSSGroupingRuleBinding::Wrap)
}
+
+ fn rulelist(&self) -> Root<CSSRuleList> {
+ let sheet = self.upcast::<CSSRule>().GetParentStyleSheet();
+ let sheet = sheet.as_ref().map(|s| &**s);
+ self.rulelist.or_init(|| CSSRuleList::new(self.global().as_window(),
+ sheet,
+ RulesSource::Rules(self.rules.clone())))
+ }
+}
+
+impl CSSGroupingRuleMethods for CSSGroupingRule {
+ // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-cssrules
+ fn CssRules(&self) -> Root<CSSRuleList> {
+ // XXXManishearth check origin clean flag
+ self.rulelist()
+ }
+
+ // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-insertrule
+ fn InsertRule(&self, rule: DOMString, index: u32) -> Fallible<u32> {
+ self.rulelist().insert_rule(&rule, index, /* nested */ true)
+ }
+
+ // https://drafts.csswg.org/cssom/#dom-cssgroupingrule-deleterule
+ fn DeleteRule(&self, index: u32) -> ErrorResult {
+ self.rulelist().remove_rule(index)
+ }
}