diff options
author | Achal Shah <achals@gmail.com> | 2014-11-23 02:03:45 -0800 |
---|---|---|
committer | Achal Shah <achals@gmail.com> | 2014-11-23 23:37:13 -0800 |
commit | 23ed1f705bb278e213928db59e9151484d24f4d9 (patch) | |
tree | a1b63dba4f6aec30a7c7e13e7145eb966888899c /components/script/dom/htmlanchorelement.rs | |
parent | 90007ee781e53f65344a24a0bdbeb86d5c0fe065 (diff) | |
download | servo-23ed1f705bb278e213928db59e9151484d24f4d9.tar.gz servo-23ed1f705bb278e213928db59e9151484d24f4d9.zip |
Implement HTML{Anchor,Area,Link}Element.relList.
https://github.com/servo/servo/issues/3994
Diffstat (limited to 'components/script/dom/htmlanchorelement.rs')
-rw-r--r-- | components/script/dom/htmlanchorelement.rs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 72c5d2fe7ae..2b1d615a4bf 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -2,6 +2,7 @@ * 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/. */ +use dom::attr::AttrValue; use dom::bindings::codegen::Bindings::AttrBinding::AttrMethods; use dom::bindings::codegen::Bindings::EventBinding::EventMethods; use dom::bindings::codegen::Bindings::HTMLAnchorElementBinding; @@ -9,9 +10,10 @@ use dom::bindings::codegen::Bindings::HTMLAnchorElementBinding::HTMLAnchorElemen use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::InheritTypes::HTMLAnchorElementDerived; use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast}; -use dom::bindings::js::{JSRef, Temporary, OptionalRootable}; +use dom::bindings::js::{MutNullableJS, JSRef, Temporary, OptionalRootable}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::document::{Document, DocumentHelpers}; +use dom::domtokenlist::DOMTokenList; use dom::element::{Element, AttributeHandlers, HTMLAnchorElementTypeId}; use dom::event::Event; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; @@ -19,11 +21,14 @@ use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use dom::virtualmethods::VirtualMethods; +use std::default::Default; +use string_cache::Atom; use servo_util::str::DOMString; #[dom_struct] pub struct HTMLAnchorElement { - htmlelement: HTMLElement + htmlelement: HTMLElement, + rel_list: MutNullableJS<DOMTokenList>, } impl HTMLAnchorElementDerived for EventTarget { @@ -35,7 +40,8 @@ impl HTMLAnchorElementDerived for EventTarget { impl HTMLAnchorElement { fn new_inherited(localName: DOMString, prefix: Option<DOMString>, document: JSRef<Document>) -> HTMLAnchorElement { HTMLAnchorElement { - htmlelement: HTMLElement::new_inherited(HTMLAnchorElementTypeId, localName, prefix, document) + htmlelement: HTMLElement::new_inherited(HTMLAnchorElementTypeId, localName, prefix, document), + rel_list: Default::default(), } } @@ -84,6 +90,13 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLAnchorElement> { } self.handle_event_impl(event); } + + fn parse_plain_attribute(&self, name: &Atom, value: DOMString) -> AttrValue { + match name { + &atom!("rel") => AttrValue::from_tokenlist(value), + _ => self.super_type().unwrap().parse_plain_attribute(name, value), + } + } } impl Reflectable for HTMLAnchorElement { @@ -102,4 +115,13 @@ impl<'a> HTMLAnchorElementMethods for JSRef<'a, HTMLAnchorElement> { let node: JSRef<Node> = NodeCast::from_ref(self); node.SetTextContent(Some(value)) } + + fn RelList(self) -> Temporary<DOMTokenList> { + if self.rel_list.get().is_none() { + let element: JSRef<Element> = ElementCast::from_ref(self); + let rel_list = DOMTokenList::new(element, &atom!("rel")); + self.rel_list.assign(Some(rel_list)); + } + self.rel_list.get().unwrap() + } } |