aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-02-03 07:04:11 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-02-03 07:04:11 +0530
commitae20f2556bc7807b39b6649ac1f738644abcc26a (patch)
treebcc59a2bd4ab73367e3201417ae7e5fe59bc4849 /components/script/dom
parentea385fdd117cf68e6550782371142a85a2a2af8a (diff)
parenta1c830f1c13d75186d8d1a759ed73a0eac433179 (diff)
downloadservo-ae20f2556bc7807b39b6649ac1f738644abcc26a.tar.gz
servo-ae20f2556bc7807b39b6649ac1f738644abcc26a.zip
Auto merge of #9510 - nox:bump-selectors, r=SimonSapin
Update rust-selectors This commits updates rust-selectors to use the generic parser, and as such it moves the element state into the style crate. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9510) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/trace.rs4
-rw-r--r--components/script/dom/cssstyledeclaration.rs2
-rw-r--r--components/script/dom/element.rs98
-rw-r--r--components/script/dom/htmlbuttonelement.rs2
-rw-r--r--components/script/dom/htmlelement.rs2
-rw-r--r--components/script/dom/htmlfieldsetelement.rs2
-rw-r--r--components/script/dom/htmlinputelement.rs2
-rw-r--r--components/script/dom/htmloptgroupelement.rs2
-rw-r--r--components/script/dom/htmloptionelement.rs2
-rw-r--r--components/script/dom/htmlselectelement.rs2
-rw-r--r--components/script/dom/htmltextareaelement.rs2
-rw-r--r--components/script/dom/node.rs5
-rw-r--r--components/script/dom/window.rs2
13 files changed, 65 insertions, 62 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index e62bd5d9583..1362731339a 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -65,8 +65,6 @@ use profile_traits::mem::ProfilerChan as MemProfilerChan;
use profile_traits::time::ProfilerChan as TimeProfilerChan;
use script_thread::ScriptChan;
use script_traits::{LayoutMsg, ScriptMsg, TimerEventId, TimerSource, UntrustedNodeAddress};
-use selectors::parser::PseudoElement;
-use selectors::states::*;
use serde::{Deserialize, Serialize};
use smallvec::SmallVec;
use std::boxed::FnBox;
@@ -84,8 +82,10 @@ use std::sync::atomic::AtomicBool;
use std::sync::mpsc::{Receiver, Sender};
use string_cache::{Atom, Namespace, QualName};
use style::attr::{AttrIdentifier, AttrValue};
+use style::element_state::*;
use style::properties::PropertyDeclarationBlock;
use style::restyle_hints::ElementSnapshot;
+use style::selector_impl::PseudoElement;
use style::values::specified::Length;
use url::Url;
use util::str::{DOMString, LengthOrPercentageOrAuto};
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 479d2e00f95..f6683f9eae5 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -11,7 +11,6 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::element::{Element, StylePriority};
use dom::node::{Node, NodeDamage, document_from_node, window_from_node};
use dom::window::Window;
-use selectors::parser::PseudoElement;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::cell::Ref;
@@ -19,6 +18,7 @@ use string_cache::Atom;
use style::error_reporting::ParseErrorReporter;
use style::properties::{PropertyDeclaration, Shorthand};
use style::properties::{is_supported_property, parse_one_declaration};
+use style::selector_impl::PseudoElement;
use util::str::{DOMString, str_join};
// http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 66cad82dbb8..d093380b008 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -68,7 +68,6 @@ use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks};
use selectors::matching::{DeclarationBlock, matches};
use selectors::matching::{common_style_affecting_attributes, rare_style_affecting_attributes};
use selectors::parser::{AttrSelector, NamespaceConstraint, parse_author_origin_selector_list_from_str};
-use selectors::states::*;
use smallvec::VecLike;
use std::ascii::AsciiExt;
use std::borrow::Cow;
@@ -77,10 +76,12 @@ use std::default::Default;
use std::mem;
use std::sync::Arc;
use string_cache::{Atom, Namespace, QualName};
+use style::element_state::*;
use style::error_reporting::ParseErrorReporter;
use style::properties::DeclaredValue;
use style::properties::longhands::{self, background_image, border_spacing, font_family, font_size};
use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, parse_style_attribute};
+use style::selector_impl::{NonTSPseudoClass, ServoSelectorImpl};
use style::values::CSSFloat;
use style::values::specified::{self, CSSColor, CSSRGBA, LengthOrPercentage};
use util::mem::HeapSizeOf;
@@ -1689,17 +1690,9 @@ impl VirtualMethods for Element {
}
}
-macro_rules! state_getter {
- ($(
- $(#[$Flag_attr: meta])*
- state $css: expr => $variant: ident / $method: ident /
- $flag: ident = $value: expr,
- )+) => {
- $( fn $method(&self) -> bool { Element::get_state(self).contains($flag) } )+
- }
-}
-
impl<'a> ::selectors::Element for Root<Element> {
+ type Impl = ServoSelectorImpl;
+
fn parent_element(&self) -> Option<Root<Element>> {
self.upcast::<Node>().GetParentElement()
}
@@ -1734,46 +1727,52 @@ impl<'a> ::selectors::Element for Root<Element> {
})
}
- fn is_link(&self) -> bool {
- // FIXME: This is HTML only.
- let node = self.upcast::<Node>();
- match node.type_id() {
- // https://html.spec.whatwg.org/multipage/#selector-link
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAreaElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLinkElement)) => {
- self.has_attribute(&atom!("href"))
- },
- _ => false,
- }
- }
-
- #[inline]
- fn is_unvisited_link(&self) -> bool {
- self.is_link()
- }
-
- #[inline]
- fn is_visited_link(&self) -> bool {
- // https://github.com/servo/servo/issues/8718
- false
- }
-
fn get_local_name(&self) -> &Atom {
self.local_name()
}
+
fn get_namespace(&self) -> &Namespace {
self.namespace()
}
- state_pseudo_classes!(state_getter);
+ fn match_non_ts_pseudo_class(&self, pseudo_class: NonTSPseudoClass) -> bool {
+ match pseudo_class {
+ // https://github.com/servo/servo/issues/8718
+ NonTSPseudoClass::Link |
+ NonTSPseudoClass::AnyLink => self.is_link(),
+ NonTSPseudoClass::Visited => false,
+
+ NonTSPseudoClass::ServoNonZeroBorder => {
+ match self.downcast::<HTMLTableElement>() {
+ None => false,
+ Some(this) => {
+ match this.get_border() {
+ None | Some(0) => false,
+ Some(_) => true,
+ }
+ }
+ }
+ },
+
+ NonTSPseudoClass::Active |
+ NonTSPseudoClass::Focus |
+ NonTSPseudoClass::Hover |
+ NonTSPseudoClass::Enabled |
+ NonTSPseudoClass::Disabled |
+ NonTSPseudoClass::Checked |
+ NonTSPseudoClass::Indeterminate =>
+ Element::get_state(self).contains(pseudo_class.state_flag()),
+ }
+ }
fn get_id(&self) -> Option<Atom> {
self.id_attribute.borrow().clone()
}
+
fn has_class(&self, name: &Atom) -> bool {
Element::has_class(&**self, name)
}
+
fn each_class<F>(&self, mut callback: F)
where F: FnMut(&Atom)
{
@@ -1785,17 +1784,6 @@ impl<'a> ::selectors::Element for Root<Element> {
}
}
}
- fn has_servo_nonzero_border(&self) -> bool {
- match self.downcast::<HTMLTableElement>() {
- None => false,
- Some(this) => {
- match this.get_border() {
- None | Some(0) => false,
- Some(_) => true,
- }
- }
- }
- }
fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool
where F: Fn(&str) -> bool
@@ -1886,6 +1874,20 @@ impl Element {
}
}
+ fn is_link(&self) -> bool {
+ // FIXME: This is HTML only.
+ let node = self.upcast::<Node>();
+ match node.type_id() {
+ // https://html.spec.whatwg.org/multipage/#selector-link
+ NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAreaElement)) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLinkElement)) => {
+ self.has_attribute(&atom!("href"))
+ },
+ _ => false,
+ }
+ }
+
/// Please call this method *only* for real click events
///
/// https://html.spec.whatwg.org/multipage/#run-authentic-click-activation-steps
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index 5a8ffaf0df6..31d4b0a8740 100644
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -20,10 +20,10 @@ use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
use dom::nodelist::NodeList;
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use std::ascii::AsciiExt;
use std::cell::Cell;
use string_cache::Atom;
+use style::element_state::*;
use util::str::DOMString;
#[derive(JSTraceable, PartialEq, Copy, Clone)]
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index f0348c27b76..ce5d9a1f27a 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -30,13 +30,13 @@ use dom::node::{Node, SEQUENTIALLY_FOCUSABLE};
use dom::node::{document_from_node, window_from_node};
use dom::nodelist::NodeList;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::default::Default;
use std::intrinsics;
use std::rc::Rc;
use string_cache::Atom;
+use style::element_state::*;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index 009f9f93282..0390d9aa599 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -16,8 +16,8 @@ use dom::htmllegendelement::HTMLLegendElement;
use dom::node::{Node, window_from_node};
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use string_cache::Atom;
+use style::element_state::*;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index 368285f8a9f..e7116b5d8ce 100644
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -32,10 +32,10 @@ use msg::constellation_msg::ConstellationChan;
use script_thread::ScriptThreadEventCategory::InputEvent;
use script_thread::{CommonScriptMsg, Runnable};
use script_traits::ScriptMsg as ConstellationMsg;
-use selectors::states::*;
use std::borrow::ToOwned;
use std::cell::Cell;
use string_cache::Atom;
+use style::element_state::*;
use textinput::KeyReaction::{DispatchInput, Nothing, RedrawSelection, TriggerDefaultAction};
use textinput::Lines::Single;
use textinput::TextInput;
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index b0624d426f9..a554377ea7a 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -13,8 +13,8 @@ use dom::htmlelement::HTMLElement;
use dom::htmloptionelement::HTMLOptionElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use string_cache::Atom;
+use style::element_state::*;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs
index 3e6019384ab..cd521702a34 100644
--- a/components/script/dom/htmloptionelement.rs
+++ b/components/script/dom/htmloptionelement.rs
@@ -18,9 +18,9 @@ use dom::htmlselectelement::HTMLSelectElement;
use dom::node::{Node, UnbindContext};
use dom::text::Text;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use std::cell::Cell;
use string_cache::Atom;
+use style::element_state::*;
use util::str::{DOMString, split_html_space_chars, str_join};
#[dom_struct]
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 6db068d6da2..1b5ddb22183 100644
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -20,8 +20,8 @@ use dom::node::{Node, UnbindContext, window_from_node};
use dom::nodelist::NodeList;
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
-use selectors::states::*;
use string_cache::Atom;
+use style::element_state::*;
use util::str::DOMString;
#[dom_struct]
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index 95f1438f6e3..dfcfdc77f73 100644
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -26,9 +26,9 @@ use dom::nodelist::NodeList;
use dom::virtualmethods::VirtualMethods;
use msg::constellation_msg::ConstellationChan;
use script_traits::ScriptMsg as ConstellationMsg;
-use selectors::states::*;
use std::cell::Cell;
use string_cache::Atom;
+use style::element_state::*;
use textinput::{KeyReaction, Lines, TextInput};
use util::str::DOMString;
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 33dadfe527b..9c4e52b495d 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -63,6 +63,7 @@ use std::default::Default;
use std::iter::{self, FilterMap, Peekable};
use std::mem;
use string_cache::{Atom, Namespace, QualName};
+use style::selector_impl::ServoSelectorImpl;
use util::str::DOMString;
use util::thread_state;
use uuid::Uuid;
@@ -291,12 +292,12 @@ impl Node {
}
pub struct QuerySelectorIterator {
- selectors: Vec<Selector>,
+ selectors: Vec<Selector<ServoSelectorImpl>>,
iterator: TreeIterator,
}
impl<'a> QuerySelectorIterator {
- fn new(iter: TreeIterator, selectors: Vec<Selector>)
+ fn new(iter: TreeIterator, selectors: Vec<Selector<ServoSelectorImpl>>)
-> QuerySelectorIterator {
QuerySelectorIterator {
selectors: selectors,
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 2ca2090e547..c8ea1d9f0f8 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -58,7 +58,6 @@ use script_thread::{HistoryTraversalThreadSource, FileReadingThreadSource, Senda
use script_thread::{ScriptChan, ScriptPort, MainThreadScriptChan, MainThreadScriptMsg, RunnableWrapper};
use script_traits::{DocumentState, MsDuration, ScriptToCompositorMsg, TimerEvent, TimerEventId};
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg, TimerEventRequest, TimerSource};
-use selectors::parser::PseudoElement;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::cell::Cell;
@@ -74,6 +73,7 @@ use std::sync::mpsc::{Sender, channel};
use string_cache::Atom;
use style::context::ReflowGoal;
use style::error_reporting::ParseErrorReporter;
+use style::selector_impl::PseudoElement;
use time;
use timers::{ActiveTimers, IsInterval, ScheduledCallback, TimerCallback, TimerHandle};
use url::Url;