diff --git a/servo/components/script/dom/htmloptionelement.rs b/servo/components/script/dom/htmloptionelement.rs index b9df3cc83d07..eabda88f4f8d 100644 --- a/servo/components/script/dom/htmloptionelement.rs +++ b/servo/components/script/dom/htmloptionelement.rs @@ -91,6 +91,35 @@ impl<'a> HTMLOptionElementMethods for JSRef<'a, HTMLOptionElement> { let node: JSRef = NodeCast::from_ref(self); node.SetTextContent(Some(value)) } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-value + fn Value(self) -> DOMString { + let element: JSRef = ElementCast::from_ref(self); + let attr = &atom!("value"); + if element.has_attribute(attr) { + element.get_string_attribute(attr) + } else { + self.Text() + } + } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-value + make_setter!(SetValue, "value") + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-label + fn Label(self) -> DOMString { + let element: JSRef = ElementCast::from_ref(self); + let attr = &atom!("label"); + if element.has_attribute(attr) { + element.get_string_attribute(attr) + } else { + self.Text() + } + } + + // https://html.spec.whatwg.org/multipage/forms.html#attr-option-label + make_setter!(SetLabel, "label") + } impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { @@ -110,7 +139,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLOptionElement> { let node: JSRef = NodeCast::from_ref(*self); node.set_disabled_state(true); node.set_enabled_state(false); - }, + } _ => () } } diff --git a/servo/components/script/dom/webidls/HTMLOptionElement.webidl b/servo/components/script/dom/webidls/HTMLOptionElement.webidl index 5c3f4b37f6ac..9126e24d7908 100644 --- a/servo/components/script/dom/webidls/HTMLOptionElement.webidl +++ b/servo/components/script/dom/webidls/HTMLOptionElement.webidl @@ -6,12 +6,12 @@ // http://www.whatwg.org/html/#htmloptionelement //[NamedConstructor=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)] interface HTMLOptionElement : HTMLElement { - attribute boolean disabled; + attribute boolean disabled; //readonly attribute HTMLFormElement? form; - // attribute DOMString label; + attribute DOMString label; // attribute boolean defaultSelected; // attribute boolean selected; - // attribute DOMString value; + attribute DOMString value; attribute DOMString text; //readonly attribute long index;