diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 8 | ||||
-rw-r--r-- | components/script/dom/element.rs | 72 | ||||
-rw-r--r-- | components/script/dom/htmlelement.rs | 14 | ||||
-rw-r--r-- | components/script/lib.rs | 2 |
4 files changed, 48 insertions, 48 deletions
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs index f2cb3b4e5ce..71220f6e87b 100644 --- a/components/script/dom/cssstyledeclaration.rs +++ b/components/script/dom/cssstyledeclaration.rs @@ -18,7 +18,7 @@ use servo_arc::Arc; use servo_url::ServoUrl; use std::ascii::AsciiExt; use style::attr::AttrValue; -use style::properties::{Importance, PropertyDeclarationBlock, PropertyId, LonghandId, ShorthandId}; +use style::properties::{DeclarationSource, Importance, PropertyDeclarationBlock, PropertyId, LonghandId, ShorthandId}; use style::properties::{parse_one_declaration_into, parse_style_attribute, SourcePropertyDeclaration}; use style::selector_parser::PseudoElement; use style::shared_lock::Locked; @@ -274,7 +274,11 @@ impl CSSStyleDeclaration { // Step 7 // Step 8 - *changed = pdb.extend_reset(declarations.drain(), importance); + *changed = pdb.extend( + declarations.drain(), + importance, + DeclarationSource::CssOm, + ); Ok(()) }) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index c16eb7f0699..f6e5357df10 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -89,24 +89,24 @@ use script_layout_interface::message::ReflowGoal; use script_thread::ScriptThread; use selectors::Element as SelectorsElement; use selectors::attr::{AttrSelectorOperation, NamespaceConstraint, CaseSensitivity}; -use selectors::matching::{ElementSelectorFlags, LocalMatchingContext, MatchingContext, MatchingMode}; +use selectors::matching::{ElementSelectorFlags, LocalMatchingContext, MatchingContext, RelevantLinkStatus}; use selectors::matching::{HAS_EDGE_CHILD_SELECTOR, HAS_SLOW_SELECTOR, HAS_SLOW_SELECTOR_LATER_SIBLINGS}; -use selectors::matching::{RelevantLinkStatus, matches_selector_list}; use selectors::sink::Push; use servo_arc::Arc; use servo_atoms::Atom; use std::ascii::AsciiExt; use std::borrow::Cow; use std::cell::{Cell, Ref}; -use std::convert::TryFrom; use std::default::Default; use std::fmt; use std::mem; use std::rc::Rc; +use std::str::FromStr; use style::CaseSensitivityExt; use style::applicable_declarations::ApplicableDeclarationBlock; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use style::context::QuirksMode; +use style::dom_apis; use style::element_state::*; use style::invalidation::element::restyle_hints::RESTYLE_SELF; use style::properties::{Importance, PropertyDeclaration, PropertyDeclarationBlock, parse_style_attribute}; @@ -213,10 +213,10 @@ pub enum AdjacentPosition { BeforeEnd, } -impl<'a> TryFrom<&'a str> for AdjacentPosition { - type Error = Error; +impl FromStr for AdjacentPosition { + type Err = Error; - fn try_from(position: &'a str) -> Result<AdjacentPosition, Self::Error> { + fn from_str(position: &str) -> Result<Self, Self::Err> { match_ignore_ascii_case! { &*position, "beforebegin" => Ok(AdjacentPosition::BeforeBegin), "afterbegin" => Ok(AdjacentPosition::AfterBegin), @@ -2197,18 +2197,16 @@ impl ElementMethods for Element { // https://dom.spec.whatwg.org/#dom-element-matches fn Matches(&self, selectors: DOMString) -> Fallible<bool> { - match SelectorParser::parse_author_origin_no_namespace(&selectors) { - Err(_) => Err(Error::Syntax), - Ok(selectors) => { - let quirks_mode = document_from_node(self).quirks_mode(); - let root = DomRoot::from_ref(self); - // FIXME(bholley): Consider an nth-index cache here. - let mut ctx = MatchingContext::new(MatchingMode::Normal, None, None, - quirks_mode); - ctx.scope_element = Some(root.opaque()); - Ok(matches_selector_list(&selectors, &root, &mut ctx)) - } - } + let selectors = + match SelectorParser::parse_author_origin_no_namespace(&selectors) { + Err(_) => return Err(Error::Syntax), + Ok(selectors) => selectors, + }; + + let quirks_mode = document_from_node(self).quirks_mode(); + let element = DomRoot::from_ref(self); + + Ok(dom_apis::element_matches(&element, &selectors, quirks_mode)) } // https://dom.spec.whatwg.org/#dom-element-webkitmatchesselector @@ -2218,32 +2216,24 @@ impl ElementMethods for Element { // https://dom.spec.whatwg.org/#dom-element-closest fn Closest(&self, selectors: DOMString) -> Fallible<Option<DomRoot<Element>>> { - match SelectorParser::parse_author_origin_no_namespace(&selectors) { - Err(_) => Err(Error::Syntax), - Ok(selectors) => { - let self_root = DomRoot::from_ref(self); - let root = self.upcast::<Node>(); - for element in root.inclusive_ancestors() { - if let Some(element) = DomRoot::downcast::<Element>(element) { - let quirks_mode = document_from_node(self).quirks_mode(); - // FIXME(bholley): Consider an nth-index cache here. - let mut ctx = MatchingContext::new(MatchingMode::Normal, None, None, - quirks_mode); - ctx.scope_element = Some(self_root.opaque()); - if matches_selector_list(&selectors, &element, &mut ctx) { - return Ok(Some(element)); - } - } - } - Ok(None) - } - } + let selectors = + match SelectorParser::parse_author_origin_no_namespace(&selectors) { + Err(_) => return Err(Error::Syntax), + Ok(selectors) => selectors, + }; + + let quirks_mode = document_from_node(self).quirks_mode(); + Ok(dom_apis::element_closest( + DomRoot::from_ref(self), + &selectors, + quirks_mode, + )) } // https://dom.spec.whatwg.org/#dom-element-insertadjacentelement fn InsertAdjacentElement(&self, where_: DOMString, element: &Element) -> Fallible<Option<DomRoot<Element>>> { - let where_ = AdjacentPosition::try_from(&*where_)?; + let where_ = where_.parse::<AdjacentPosition>()?; let inserted_node = self.insert_adjacent(where_, element.upcast())?; Ok(inserted_node.map(|node| DomRoot::downcast(node).unwrap())) } @@ -2255,7 +2245,7 @@ impl ElementMethods for Element { let text = Text::new(data, &document_from_node(self)); // Step 2. - let where_ = AdjacentPosition::try_from(&*where_)?; + let where_ = where_.parse::<AdjacentPosition>()?; self.insert_adjacent(where_, text.upcast()).map(|_| ()) } @@ -2263,7 +2253,7 @@ impl ElementMethods for Element { fn InsertAdjacentHTML(&self, position: DOMString, text: DOMString) -> ErrorResult { // Step 1. - let position = AdjacentPosition::try_from(&*position)?; + let position = position.parse::<AdjacentPosition>()?; let context = match position { AdjacentPosition::BeforeBegin | AdjacentPosition::AfterEnd => { diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 9f671e2d10c..87d362dfab8 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -375,11 +375,19 @@ impl HTMLElementMethods for HTMLElement { static DATA_PREFIX: &str = "data-"; static DATA_HYPHEN_SEPARATOR: char = '\x2d'; +fn is_ascii_uppercase(c: char) -> bool { + 'A' <= c && c <= 'Z' +} + +fn is_ascii_lowercase(c: char) -> bool { + 'a' <= c && c <= 'w' +} + fn to_snake_case(name: DOMString) -> DOMString { let mut attr_name = String::with_capacity(name.len() + DATA_PREFIX.len()); attr_name.push_str(DATA_PREFIX); for ch in name.chars() { - if ch.is_ascii_uppercase() { + if is_ascii_uppercase(ch) { attr_name.push(DATA_HYPHEN_SEPARATOR); attr_name.push(ch.to_ascii_lowercase()); } else { @@ -400,7 +408,7 @@ fn to_camel_case(name: &str) -> Option<DOMString> { return None; } let name = &name[5..]; - let has_uppercase = name.chars().any(|curr_char| curr_char.is_ascii_uppercase()); + let has_uppercase = name.chars().any(|curr_char| is_ascii_uppercase(curr_char)); if has_uppercase { return None; } @@ -410,7 +418,7 @@ fn to_camel_case(name: &str) -> Option<DOMString> { //check for hyphen followed by character if curr_char == DATA_HYPHEN_SEPARATOR { if let Some(next_char) = name_chars.next() { - if next_char.is_ascii_lowercase() { + if is_ascii_lowercase(next_char) { result.push(next_char.to_ascii_uppercase()); } else { result.push(curr_char); diff --git a/components/script/lib.rs b/components/script/lib.rs index 6a6a40417e3..cf7f26db094 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -2,7 +2,6 @@ * 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/. */ -#![feature(ascii_ctype)] #![feature(box_syntax)] #![feature(conservative_impl_trait)] #![feature(const_fn)] @@ -14,7 +13,6 @@ #![feature(on_unimplemented)] #![feature(plugin)] #![feature(proc_macro)] -#![feature(try_from)] #![deny(unsafe_code)] #![allow(non_snake_case)] |