diff options
Diffstat (limited to 'components/script/dom/css.rs')
-rw-r--r-- | components/script/dom/css.rs | 81 |
1 files changed, 55 insertions, 26 deletions
diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs index 0e4a7f85065..8c9600549c5 100644 --- a/components/script/dom/css.rs +++ b/components/script/dom/css.rs @@ -1,51 +1,80 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * 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/. */ + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use cssparser::{Parser, serialize_identifier}; -use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; -use dom::bindings::error::Fallible; -use dom::bindings::reflector::Reflector; -use dom::bindings::str::DOMString; -use dom::window::Window; +use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::reflector::Reflector; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; +use crate::dom::window::Window; +use crate::dom::worklet::Worklet; +use cssparser::{serialize_identifier, Parser, ParserInput}; use dom_struct::dom_struct; -use style::parser::{LengthParsingMode, ParserContext}; -use style::stylesheets::CssRuleType; -use style::supports::{Declaration, parse_condition_or_declaration}; +use style::context::QuirksMode; +use style::parser::ParserContext; +use style::stylesheets::supports_rule::{parse_condition_or_declaration, Declaration}; +use style::stylesheets::{CssRuleType, Origin}; +use style_traits::ParsingMode; #[dom_struct] pub struct CSS { reflector_: Reflector, } +#[allow(non_snake_case)] impl CSS { - /// http://dev.w3.org/csswg/cssom/#serialize-an-identifier + /// <http://dev.w3.org/csswg/cssom/#serialize-an-identifier> pub fn Escape(_: &Window, ident: DOMString) -> Fallible<DOMString> { let mut escaped = String::new(); serialize_identifier(&ident, &mut escaped).unwrap(); Ok(DOMString::from(escaped)) } - /// https://drafts.csswg.org/css-conditional/#dom-css-supports + /// <https://drafts.csswg.org/css-conditional/#dom-css-supports> pub fn Supports(win: &Window, property: DOMString, value: DOMString) -> bool { - let decl = Declaration { prop: property.into(), val: value.into() }; + let mut decl = String::new(); + serialize_identifier(&property, &mut decl).unwrap(); + decl.push_str(": "); + decl.push_str(&value); + let decl = Declaration(decl); let url = win.Document().url(); - let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Supports), - LengthParsingMode::Default); + let context = ParserContext::new( + Origin::Author, + &url, + Some(CssRuleType::Style), + ParsingMode::DEFAULT, + QuirksMode::NoQuirks, + None, + None, + ); decl.eval(&context) } - /// https://drafts.csswg.org/css-conditional/#dom-css-supports + /// <https://drafts.csswg.org/css-conditional/#dom-css-supports> pub fn Supports_(win: &Window, condition: DOMString) -> bool { - let mut input = Parser::new(&condition); - let cond = parse_condition_or_declaration(&mut input); - if let Ok(cond) = cond { - let url = win.Document().url(); - let context = ParserContext::new_for_cssom(&url, win.css_error_reporter(), Some(CssRuleType::Supports), - LengthParsingMode::Default); - cond.eval(&context) - } else { - false - } + let mut input = ParserInput::new(&condition); + let mut input = Parser::new(&mut input); + let cond = match parse_condition_or_declaration(&mut input) { + Ok(c) => c, + Err(..) => return false, + }; + + let url = win.Document().url(); + let context = ParserContext::new( + Origin::Author, + &url, + Some(CssRuleType::Style), + ParsingMode::DEFAULT, + QuirksMode::NoQuirks, + None, + None, + ); + cond.eval(&context, &Default::default()) + } + + /// <https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet> + pub fn PaintWorklet(win: &Window) -> DomRoot<Worklet> { + win.paint_worklet() } } |