From e1a7d99df75282d1d8e8bc3b7336fad6c54ef3a2 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Tue, 9 Dec 2014 13:33:53 -0400 Subject: [PATCH] Added Element::set_custom_attribute --- components/script/dom/element.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 00f481dcd32..d2ce2576d3e 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -609,6 +609,7 @@ pub trait AttributeHandlers { value: DOMString, prefix: Option); fn set_attribute(self, name: &Atom, value: AttrValue); + fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult; fn do_set_attribute(self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, cb: |JSRef| -> bool); @@ -678,6 +679,23 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { ns!(""), None, |attr| *attr.local_name() == *name); } + // https://html.spec.whatwg.org/multipage/dom.html#attr-data-* + fn set_custom_attribute(self, name: DOMString, value: DOMString) -> ErrorResult { + // Step 1. + match xml_name_type(name.as_slice()) { + InvalidXMLName => return Err(InvalidCharacter), + _ => {} + } + + // Steps 2-5. + let name = Atom::from_slice(name.as_slice()); + let value = self.parse_attribute(&ns!(""), &name, value); + self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| { + *attr.name() == name && *attr.namespace() == ns!("") + }); + Ok(()) + } + fn do_set_attribute(self, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option, cb: |JSRef| -> bool) { @@ -941,7 +959,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { let name = Atom::from_slice(name.as_slice()); let value = self.parse_attribute(&ns!(""), &name, value); self.do_set_attribute(name.clone(), value, name.clone(), ns!(""), None, |attr| { - attr.name().as_slice() == name.as_slice() + *attr.name() == name }); Ok(()) }