aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/cssstyledeclaration.rs8
-rw-r--r--components/script/dom/element.rs72
-rw-r--r--components/script/dom/htmlelement.rs14
-rw-r--r--components/script/lib.rs2
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)]