diff options
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() |