diff options
Diffstat (limited to 'components/script/dom/htmlareaelement.rs')
-rw-r--r-- | components/script/dom/htmlareaelement.rs | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs index c4272fde753..ffc2eb2b23a 100644 --- a/components/script/dom/htmlareaelement.rs +++ b/components/script/dom/htmlareaelement.rs @@ -2,23 +2,32 @@ * 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::HTMLAreaElementBinding; -use dom::bindings::codegen::InheritTypes::HTMLAreaElementDerived; -use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::codegen::Bindings::HTMLAreaElementBinding::HTMLAreaElementMethods; +use dom::bindings::codegen::InheritTypes::{HTMLAreaElementDerived, HTMLElementCast}; +use dom::bindings::codegen::InheritTypes::ElementCast; +use dom::bindings::js::{MutNullableJS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::document::Document; +use dom::domtokenlist::DOMTokenList; +use dom::element::Element; use dom::element::HTMLAreaElementTypeId; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; 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; #[jstraceable] #[must_root] #[privatize] pub struct HTMLAreaElement { - htmlelement: HTMLElement + htmlelement: HTMLElement, + rel_list: MutNullableJS<DOMTokenList>, } impl HTMLAreaElementDerived for EventTarget { @@ -30,7 +39,8 @@ impl HTMLAreaElementDerived for EventTarget { impl HTMLAreaElement { fn new_inherited(localName: DOMString, prefix: Option<DOMString>, document: JSRef<Document>) -> HTMLAreaElement { HTMLAreaElement { - htmlelement: HTMLElement::new_inherited(HTMLAreaElementTypeId, localName, prefix, document) + htmlelement: HTMLElement::new_inherited(HTMLAreaElementTypeId, localName, prefix, document), + rel_list: Default::default(), } } @@ -41,8 +51,33 @@ impl HTMLAreaElement { } } +impl<'a> VirtualMethods for JSRef<'a, HTMLAreaElement> { + fn super_type<'a>(&'a self) -> Option<&'a VirtualMethods> { + let htmlelement: &JSRef<HTMLElement> = HTMLElementCast::from_borrowed_ref(self); + Some(htmlelement as &VirtualMethods) + } + + 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 HTMLAreaElement { fn reflector<'a>(&'a self) -> &'a Reflector { self.htmlelement.reflector() } } + +impl<'a> HTMLAreaElementMethods for JSRef<'a, HTMLAreaElement> { + 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() + } +} |