mirror of
https://github.com/servo/servo.git
synced 2025-06-24 17:14:33 +01:00
Implement Element.localName.(fixes #2188)
This commit is contained in:
parent
c6bdc7b7f2
commit
dfe5215b88
10 changed files with 32 additions and 28 deletions
|
@ -348,7 +348,7 @@ impl<'le> LayoutElement<'le> {
|
|||
impl<'le> TElement for LayoutElement<'le> {
|
||||
#[inline]
|
||||
fn get_local_name<'a>(&'a self) -> &'a str {
|
||||
self.element.tag_name.as_slice()
|
||||
self.element.local_name.as_slice()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -514,7 +514,7 @@ impl Document {
|
|||
struct ImagesFilter;
|
||||
impl CollectionFilter for ImagesFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"img"
|
||||
elem.get().local_name == ~"img"
|
||||
}
|
||||
}
|
||||
let filter = ~ImagesFilter;
|
||||
|
@ -526,7 +526,7 @@ impl Document {
|
|||
struct EmbedsFilter;
|
||||
impl CollectionFilter for EmbedsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"embed"
|
||||
elem.get().local_name == ~"embed"
|
||||
}
|
||||
}
|
||||
let filter = ~EmbedsFilter;
|
||||
|
@ -543,7 +543,7 @@ impl Document {
|
|||
struct LinksFilter;
|
||||
impl CollectionFilter for LinksFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
(elem.get().tag_name == ~"a" || elem.get().tag_name == ~"area") &&
|
||||
(elem.get().local_name == ~"a" || elem.get().local_name == ~"area") &&
|
||||
elem.get_attribute(Null, "href").is_some()
|
||||
}
|
||||
}
|
||||
|
@ -556,7 +556,7 @@ impl Document {
|
|||
struct FormsFilter;
|
||||
impl CollectionFilter for FormsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"form"
|
||||
elem.get().local_name == ~"form"
|
||||
}
|
||||
}
|
||||
let filter = ~FormsFilter;
|
||||
|
@ -568,7 +568,7 @@ impl Document {
|
|||
struct ScriptsFilter;
|
||||
impl CollectionFilter for ScriptsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"script"
|
||||
elem.get().local_name == ~"script"
|
||||
}
|
||||
}
|
||||
let filter = ~ScriptsFilter;
|
||||
|
@ -580,7 +580,7 @@ impl Document {
|
|||
struct AnchorsFilter;
|
||||
impl CollectionFilter for AnchorsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"a" && elem.get_attribute(Null, "name").is_some()
|
||||
elem.get().local_name == ~"a" && elem.get_attribute(Null, "name").is_some()
|
||||
}
|
||||
}
|
||||
let filter = ~AnchorsFilter;
|
||||
|
@ -592,7 +592,7 @@ impl Document {
|
|||
struct AppletsFilter;
|
||||
impl CollectionFilter for AppletsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"applet"
|
||||
elem.get().local_name == ~"applet"
|
||||
}
|
||||
}
|
||||
let filter = ~AppletsFilter;
|
||||
|
|
|
@ -34,7 +34,7 @@ use std::cast;
|
|||
#[deriving(Encodable)]
|
||||
pub struct Element {
|
||||
node: Node,
|
||||
tag_name: DOMString, // TODO: This should be an atom, not a DOMString.
|
||||
local_name: DOMString, // TODO: This should be an atom, not a DOMString.
|
||||
namespace: Namespace,
|
||||
prefix: Option<DOMString>,
|
||||
attrs: ~[JS<Attr>],
|
||||
|
@ -140,10 +140,10 @@ pub enum ElementTypeId {
|
|||
//
|
||||
|
||||
impl Element {
|
||||
pub fn new_inherited(type_id: ElementTypeId, tag_name: DOMString, namespace: Namespace, prefix: Option<DOMString>, document: JS<Document>) -> Element {
|
||||
pub fn new_inherited(type_id: ElementTypeId, local_name: DOMString, namespace: Namespace, prefix: Option<DOMString>, document: JS<Document>) -> Element {
|
||||
Element {
|
||||
node: Node::new_inherited(ElementNodeTypeId(type_id), document),
|
||||
tag_name: tag_name,
|
||||
local_name: local_name,
|
||||
namespace: namespace,
|
||||
prefix: prefix,
|
||||
attrs: ~[],
|
||||
|
@ -152,8 +152,8 @@ impl Element {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn new(tag_name: DOMString, namespace: Namespace, prefix: Option<DOMString>, document: &JS<Document>) -> JS<Element> {
|
||||
let element = Element::new_inherited(ElementTypeId, tag_name, namespace, prefix, document.clone());
|
||||
pub fn new(local_name: DOMString, namespace: Namespace, prefix: Option<DOMString>, document: &JS<Document>) -> JS<Element> {
|
||||
let element = Element::new_inherited(ElementTypeId, local_name, namespace, prefix, document.clone());
|
||||
Node::reflect_node(~element, document, ElementBinding::Wrap)
|
||||
}
|
||||
|
||||
|
@ -440,7 +440,7 @@ impl Element {
|
|||
if self.namespace != namespace::HTML {
|
||||
return false
|
||||
}
|
||||
match self.tag_name.as_slice() {
|
||||
match self.local_name.as_slice() {
|
||||
/* List of void elements from
|
||||
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#html-fragment-serialization-algorithm */
|
||||
"area" | "base" | "basefont" | "bgsound" | "br" | "col" | "embed" |
|
||||
|
@ -457,6 +457,10 @@ impl Element {
|
|||
self.namespace.to_str().to_owned()
|
||||
}
|
||||
|
||||
pub fn LocalName(&self) -> DOMString {
|
||||
self.local_name.clone()
|
||||
}
|
||||
|
||||
// http://dom.spec.whatwg.org/#dom-element-prefix
|
||||
pub fn GetPrefix(&self) -> Option<DOMString> {
|
||||
self.prefix.clone()
|
||||
|
@ -466,10 +470,10 @@ impl Element {
|
|||
pub fn TagName(&self) -> DOMString {
|
||||
match self.prefix {
|
||||
None => {
|
||||
self.tag_name.to_ascii_upper()
|
||||
self.local_name.to_ascii_upper()
|
||||
}
|
||||
Some(ref prefix_str) => {
|
||||
(*prefix_str + ":" + self.tag_name).to_ascii_upper()
|
||||
(*prefix_str + ":" + self.local_name).to_ascii_upper()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ impl HTMLCollection {
|
|||
}
|
||||
impl CollectionFilter for TagNameFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == self.tag
|
||||
elem.get().local_name == self.tag
|
||||
}
|
||||
}
|
||||
let filter = TagNameFilter {
|
||||
|
@ -79,7 +79,7 @@ impl HTMLCollection {
|
|||
}
|
||||
impl CollectionFilter for TagNameNSFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().namespace == self.namespace && elem.get().tag_name == self.tag
|
||||
elem.get().namespace == self.namespace && elem.get().local_name == self.tag
|
||||
}
|
||||
}
|
||||
let filter = TagNameNSFilter {
|
||||
|
|
|
@ -45,7 +45,7 @@ impl HTMLDataListElement {
|
|||
struct HTMLDataListOptionsFilter;
|
||||
impl CollectionFilter for HTMLDataListOptionsFilter {
|
||||
fn filter(&self, elem: &JS<Element>, _root: &JS<Node>) -> bool {
|
||||
elem.get().tag_name == ~"option"
|
||||
elem.get().local_name == ~"option"
|
||||
}
|
||||
}
|
||||
let node: JS<Node> = NodeCast::from(abstract_self);
|
||||
|
|
|
@ -76,7 +76,7 @@ impl HTMLFieldSetElement {
|
|||
static tag_names: StaticStringVec = &["button", "fieldset", "input",
|
||||
"keygen", "object", "output", "select", "textarea"];
|
||||
let root: &JS<Element> = &ElementCast::to(root).unwrap();
|
||||
elem != root && tag_names.iter().any(|&tag_name| tag_name == elem.get().tag_name)
|
||||
elem != root && tag_names.iter().any(|&tag_name| tag_name == elem.get().local_name)
|
||||
}
|
||||
}
|
||||
let node: JS<Node> = NodeCast::from(abstract_self);
|
||||
|
|
|
@ -72,7 +72,7 @@ fn serialize_text(text: &JS<Text>) -> ~str {
|
|||
match text.get().characterdata.node.parent_node {
|
||||
Some(ref parent) if parent.is_element() => {
|
||||
let elem: JS<Element> = ElementCast::to(parent).unwrap();
|
||||
match elem.get().tag_name.as_slice() {
|
||||
match elem.get().local_name.as_slice() {
|
||||
"style" | "script" | "xmp" | "iframe" |
|
||||
"noembed" | "noframes" | "plaintext" |
|
||||
"noscript" if elem.get().namespace == namespace::HTML => {
|
||||
|
@ -94,12 +94,12 @@ fn serialize_doctype(doctype: &JS<DocumentType>) -> ~str {
|
|||
}
|
||||
|
||||
fn serialize_elem(elem: &JS<Element>, open_elements: &mut ~[~str]) -> ~str {
|
||||
let mut rv = ~"<" + elem.get().tag_name;
|
||||
let mut rv = ~"<" + elem.get().local_name;
|
||||
for attr in elem.get().attrs.iter() {
|
||||
rv.push_str(serialize_attr(attr));
|
||||
};
|
||||
rv.push_str(">");
|
||||
match elem.get().tag_name.as_slice() {
|
||||
match elem.get().local_name.as_slice() {
|
||||
"pre" | "listing" | "textarea" if elem.get().namespace == namespace::HTML => {
|
||||
match elem.get().node.first_child {
|
||||
Some(ref child) if child.is_text() => {
|
||||
|
@ -114,7 +114,7 @@ fn serialize_elem(elem: &JS<Element>, open_elements: &mut ~[~str]) -> ~str {
|
|||
_ => {}
|
||||
}
|
||||
if !elem.get().is_void() {
|
||||
open_elements.push(elem.get().tag_name.clone());
|
||||
open_elements.push(elem.get().local_name.clone());
|
||||
}
|
||||
rv
|
||||
}
|
||||
|
|
|
@ -1327,7 +1327,7 @@ impl Node {
|
|||
ElementNodeTypeId(..) => {
|
||||
let element: JS<Element> = ElementCast::to(node).unwrap();
|
||||
let element = element.get();
|
||||
let element = build_element_from_tag(element.tag_name.clone(), &document);
|
||||
let element = build_element_from_tag(element.local_name.clone(), &document);
|
||||
NodeCast::from(&element)
|
||||
},
|
||||
TextNodeTypeId => {
|
||||
|
@ -1591,7 +1591,7 @@ impl Node {
|
|||
let other_element: JS<Element> = ElementCast::to(other).unwrap();
|
||||
// FIXME: namespace prefix
|
||||
(element.get().namespace == other_element.get().namespace) &&
|
||||
(element.get().tag_name == other_element.get().tag_name) &&
|
||||
(element.get().local_name == other_element.get().local_name) &&
|
||||
(element.get().attrs.len() == other_element.get().attrs.len())
|
||||
}
|
||||
fn is_equal_processinginstruction(node: &JS<Node>, other: &JS<Node>) -> bool {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
interface Element : Node {
|
||||
|
||||
readonly attribute DOMString? prefix;
|
||||
// readonly attribute DOMString localName;
|
||||
readonly attribute DOMString localName;
|
||||
|
||||
[Constant]
|
||||
readonly attribute DOMString namespaceURI;
|
||||
|
|
|
@ -1056,7 +1056,7 @@ impl ScriptTask {
|
|||
|
||||
if node.is_element() {
|
||||
let element: JS<Element> = ElementCast::to(&node).unwrap();
|
||||
if "a" == element.get().tag_name {
|
||||
if "a" == element.get().local_name {
|
||||
self.load_url_from_element(page, &element)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue