mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Port element traits to use atoms instead of strings.
This commit is contained in:
parent
3670ee6f1f
commit
33dcb08f02
5 changed files with 15 additions and 15 deletions
|
@ -12,6 +12,7 @@ use util::{LayoutDataAccess, LayoutDataWrapper};
|
|||
use wrapper::{LayoutElement, LayoutNode, PostorderNodeMutTraversal, ThreadSafeLayoutNode};
|
||||
|
||||
use gfx::font_context::FontContext;
|
||||
use servo_util::atom::Atom;
|
||||
use servo_util::cache::{Cache, LRUCache, SimpleHashCache};
|
||||
use servo_util::namespace::Null;
|
||||
use servo_util::smallvec::{SmallVec, SmallVec16};
|
||||
|
@ -162,10 +163,7 @@ pub struct StyleSharingCandidateCache {
|
|||
pub struct StyleSharingCandidate {
|
||||
pub style: Arc<ComputedValues>,
|
||||
pub parent_style: Arc<ComputedValues>,
|
||||
|
||||
// TODO(pcwalton): Intern.
|
||||
pub local_name: DOMString,
|
||||
|
||||
pub local_name: Atom,
|
||||
pub class: Option<DOMString>,
|
||||
}
|
||||
|
||||
|
@ -224,14 +222,14 @@ impl StyleSharingCandidate {
|
|||
Some(StyleSharingCandidate {
|
||||
style: style.take_unwrap(),
|
||||
parent_style: parent_style.take_unwrap(),
|
||||
local_name: element.get_local_name().to_str(),
|
||||
local_name: element.get_local_name().clone(),
|
||||
class: element.get_attr(&Null, "class")
|
||||
.map(|string| string.to_str()),
|
||||
})
|
||||
}
|
||||
|
||||
fn can_share_style_with(&self, element: &LayoutElement) -> bool {
|
||||
if element.get_local_name() != self.local_name.as_slice() {
|
||||
if *element.get_local_name() != self.local_name {
|
||||
return false
|
||||
}
|
||||
match (&self.class, element.get_attr(&Null, "class")) {
|
||||
|
|
|
@ -47,6 +47,7 @@ use script::dom::node::{DocumentNodeTypeId, ElementNodeTypeId, Node, NodeTypeId}
|
|||
use script::dom::node::{LayoutNodeHelpers, RawLayoutNodeHelpers, TextNodeTypeId};
|
||||
use script::dom::text::Text;
|
||||
use servo_msg::constellation_msg::{PipelineId, SubpageId};
|
||||
use servo_util::atom::Atom;
|
||||
use servo_util::namespace::Namespace;
|
||||
use servo_util::namespace;
|
||||
use servo_util::str::is_whitespace;
|
||||
|
@ -359,8 +360,8 @@ impl<'le> LayoutElement<'le> {
|
|||
|
||||
impl<'le> TElement for LayoutElement<'le> {
|
||||
#[inline]
|
||||
fn get_local_name<'a>(&'a self) -> &'a str {
|
||||
self.element.local_name.as_slice()
|
||||
fn get_local_name<'a>(&'a self) -> &'a Atom {
|
||||
&self.element.local_name
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -201,7 +201,7 @@ impl LayoutElementHelpers for JS<Element> {
|
|||
|
||||
pub trait ElementHelpers {
|
||||
fn html_element_in_html_document(&self) -> bool;
|
||||
fn get_local_name<'a>(&'a self) -> &'a str;
|
||||
fn get_local_name<'a>(&'a self) -> &'a Atom;
|
||||
fn get_namespace<'a>(&'a self) -> &'a Namespace;
|
||||
}
|
||||
|
||||
|
@ -212,8 +212,8 @@ impl<'a> ElementHelpers for JSRef<'a, Element> {
|
|||
is_html && node.owner_doc().root().is_html_document
|
||||
}
|
||||
|
||||
fn get_local_name<'a>(&'a self) -> &'a str {
|
||||
self.deref().local_name.as_slice()
|
||||
fn get_local_name<'a>(&'a self) -> &'a Atom {
|
||||
&self.deref().local_name
|
||||
}
|
||||
|
||||
fn get_namespace<'a>(&'a self) -> &'a Namespace {
|
||||
|
@ -912,7 +912,7 @@ impl<'a> style::TElement for JSRef<'a, Element> {
|
|||
_ => None,
|
||||
}
|
||||
}
|
||||
fn get_local_name<'a>(&'a self) -> &'a str {
|
||||
fn get_local_name<'a>(&'a self) -> &'a Atom {
|
||||
(self as &ElementHelpers).get_local_name()
|
||||
}
|
||||
fn get_namespace<'a>(&'a self) -> &'a Namespace {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
//! style.
|
||||
|
||||
use selectors::AttrSelector;
|
||||
use servo_util::atom::Atom;
|
||||
use servo_util::namespace::Namespace;
|
||||
|
||||
|
||||
|
@ -22,7 +23,7 @@ pub trait TNode<E:TElement> : Clone {
|
|||
pub trait TElement {
|
||||
fn get_attr(&self, namespace: &Namespace, attr: &str) -> Option<&'static str>;
|
||||
fn get_link(&self) -> Option<&'static str>;
|
||||
fn get_local_name<'a>(&'a self) -> &'a str;
|
||||
fn get_local_name<'a>(&'a self) -> &'a Atom;
|
||||
fn get_namespace<'a>(&'a self) -> &'a Namespace;
|
||||
fn get_hover_state(&self) -> bool;
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ impl SelectorMap {
|
|||
// TODO(pradeep): Case-sensitivity depends on the document type.
|
||||
SelectorMap::get_matching_rules_from_hash_ignoring_case(node,
|
||||
&self.element_hash,
|
||||
element.get_local_name(),
|
||||
element.get_local_name().as_slice(),
|
||||
matching_rules_list,
|
||||
shareable);
|
||||
|
||||
|
@ -678,7 +678,7 @@ fn matches_simple_selector<E:TElement,
|
|||
// TODO: intern element names
|
||||
LocalNameSelector(ref name) => {
|
||||
let element = element.as_element();
|
||||
element.get_local_name().eq_ignore_ascii_case(name.as_slice())
|
||||
element.get_local_name().as_slice().eq_ignore_ascii_case(name.as_slice())
|
||||
}
|
||||
|
||||
NamespaceSelector(ref namespace) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue