diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-02-03 07:04:11 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-02-03 07:04:11 +0530 |
commit | ae20f2556bc7807b39b6649ac1f738644abcc26a (patch) | |
tree | bcc59a2bd4ab73367e3201417ae7e5fe59bc4849 /components/script/dom | |
parent | ea385fdd117cf68e6550782371142a85a2a2af8a (diff) | |
parent | a1c830f1c13d75186d8d1a759ed73a0eac433179 (diff) | |
download | servo-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.rs | 4 | ||||
-rw-r--r-- | components/script/dom/cssstyledeclaration.rs | 2 | ||||
-rw-r--r-- | components/script/dom/element.rs | 98 | ||||
-rw-r--r-- | components/script/dom/htmlbuttonelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlfieldsetelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlinputelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmloptgroupelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmloptionelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmlselectelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmltextareaelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/node.rs | 5 | ||||
-rw-r--r-- | components/script/dom/window.rs | 2 |
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; |