diff options
author | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-11-19 11:57:39 -0400 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno.d@partner.samsung.com> | 2014-12-19 14:07:43 -0400 |
commit | 628ee92d73f2b090de6e7e48a59f4412c0ef3b6d (patch) | |
tree | cd3d088cf17cd4816bebdf765318f9ee05cf26c0 /components/script/dom/domstringmap.rs | |
parent | e1a7d99df75282d1d8e8bc3b7336fad6c54ef3a2 (diff) | |
download | servo-628ee92d73f2b090de6e7e48a59f4412c0ef3b6d.tar.gz servo-628ee92d73f2b090de6e7e48a59f4412c0ef3b6d.zip |
Implement HTMLElement.dataset
Make DOMStringMap use related Element's custom attributes values.
Diffstat (limited to 'components/script/dom/domstringmap.rs')
-rw-r--r-- | components/script/dom/domstringmap.rs | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/components/script/dom/domstringmap.rs b/components/script/dom/domstringmap.rs index 26218445c80..ff4990eb5f6 100644 --- a/components/script/dom/domstringmap.rs +++ b/components/script/dom/domstringmap.rs @@ -2,51 +2,56 @@ * 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::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::DOMStringMapBinding; use dom::bindings::codegen::Bindings::DOMStringMapBinding::DOMStringMapMethods; +use dom::bindings::error::ErrorResult; use dom::bindings::global::GlobalRef; -use dom::bindings::js::{JSRef, Temporary}; +use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; +use dom::node::window_from_node; +use dom::htmlelement::{HTMLElement, HTMLElementCustomAttributeHelpers}; use servo_util::str::DOMString; -use std::collections::HashMap; - #[dom_struct] pub struct DOMStringMap { - map: DOMRefCell<HashMap<DOMString, DOMString>>, reflector_: Reflector, + element: JS<HTMLElement>, } impl DOMStringMap { - fn new_inherited() -> DOMStringMap { + fn new_inherited(element: JSRef<HTMLElement>) -> DOMStringMap { DOMStringMap { - map: DOMRefCell::new(HashMap::new()), reflector_: Reflector::new(), + element: JS::from_rooted(element), } } - pub fn new(global: GlobalRef) -> Temporary<DOMStringMap> { - reflect_dom_object(box DOMStringMap::new_inherited(), - global, DOMStringMapBinding::Wrap) + pub fn new(element: JSRef<HTMLElement>) -> Temporary<DOMStringMap> { + let window = window_from_node(element).root(); + reflect_dom_object(box DOMStringMap::new_inherited(element), + GlobalRef::Window(window.root_ref()), DOMStringMapBinding::Wrap) } } +// https://html.spec.whatwg.org/#domstringmap impl<'a> DOMStringMapMethods for JSRef<'a, DOMStringMap> { - fn NamedCreator(self, name: DOMString, value: DOMString) { - self.map.borrow_mut().insert(name, value); + fn NamedCreator(self, name: DOMString, value: DOMString) -> ErrorResult { + self.NamedSetter(name, value) } fn NamedDeleter(self, name: DOMString) { - self.map.borrow_mut().remove(&name); + let element = self.element.root(); + element.delete_custom_attr(name) } - fn NamedSetter(self, name: DOMString, value: DOMString) { - self.map.borrow_mut().insert(name, value); + fn NamedSetter(self, name: DOMString, value: DOMString) -> ErrorResult { + let element = self.element.root(); + element.set_custom_attr(name, value) } fn NamedGetter(self, name: DOMString, found: &mut bool) -> DOMString { - match self.map.borrow().get(&name) { + let element = self.element.root(); + match element.get_custom_attr(name) { Some(value) => { *found = true; value.clone() |