diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2017-01-03 11:10:12 -0800 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2017-01-07 23:17:52 -0800 |
commit | b4a83b6cec77a0e27362f85542e4b588301fc0a2 (patch) | |
tree | bda97de0102baab4181a6e084ee9dcb9a8a44f36 /components/script/dom/cssmediarule.rs | |
parent | 1b0842e228d2b67d972d32e76b0d694c2888c394 (diff) | |
download | servo-b4a83b6cec77a0e27362f85542e4b588301fc0a2.tar.gz servo-b4a83b6cec77a0e27362f85542e4b588301fc0a2.zip |
CSSOM bits for @supports: CSSConditionRule and CSSSupportsRule, with conditionText attribute
Diffstat (limited to 'components/script/dom/cssmediarule.rs')
-rw-r--r-- | components/script/dom/cssmediarule.rs | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs index b6b04dde9d8..438b390aea5 100644 --- a/components/script/dom/cssmediarule.rs +++ b/components/script/dom/cssmediarule.rs @@ -2,24 +2,26 @@ * 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 cssparser::Parser; use dom::bindings::codegen::Bindings::CSSMediaRuleBinding; use dom::bindings::codegen::Bindings::CSSMediaRuleBinding::CSSMediaRuleMethods; use dom::bindings::js::{MutNullableJS, Root}; use dom::bindings::reflector::{DomObject, reflect_dom_object}; use dom::bindings::str::DOMString; -use dom::cssgroupingrule::CSSGroupingRule; +use dom::cssconditionrule::CSSConditionRule; use dom::cssrule::SpecificCSSRule; use dom::cssstylesheet::CSSStyleSheet; use dom::medialist::MediaList; use dom::window::Window; use parking_lot::RwLock; use std::sync::Arc; +use style::media_queries::parse_media_query_list; use style::stylesheets::MediaRule; use style_traits::ToCss; #[dom_struct] pub struct CSSMediaRule { - cssrule: CSSGroupingRule, + cssrule: CSSConditionRule, #[ignore_heap_size_of = "Arc"] mediarule: Arc<RwLock<MediaRule>>, medialist: MutNullableJS<MediaList>, @@ -30,7 +32,7 @@ impl CSSMediaRule { -> CSSMediaRule { let list = mediarule.read().rules.clone(); CSSMediaRule { - cssrule: CSSGroupingRule::new_inherited(parent_stylesheet, list), + cssrule: CSSConditionRule::new_inherited(parent_stylesheet, list), mediarule: mediarule, medialist: MutNullableJS::new(None), } @@ -48,6 +50,22 @@ impl CSSMediaRule { self.medialist.or_init(|| MediaList::new(self.global().as_window(), self.mediarule.read().media_queries.clone())) } + + /// https://drafts.csswg.org/css-conditional-3/#the-cssmediarule-interface + pub fn get_condition_text(&self) -> DOMString { + let rule = self.mediarule.read(); + let list = rule.media_queries.read(); + list.to_css_string().into() + } + + /// https://drafts.csswg.org/css-conditional-3/#the-cssmediarule-interface + pub fn set_condition_text(&self, text: DOMString) { + let mut input = Parser::new(&text); + let new_medialist = parse_media_query_list(&mut input); + let rule = self.mediarule.read(); + let mut list = rule.media_queries.write(); + *list = new_medialist; + } } impl SpecificCSSRule for CSSMediaRule { |