diff options
author | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-01 13:33:19 -0500 |
---|---|---|
committer | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-06 15:28:55 -0500 |
commit | a322c6079b623fc9e4f710ec22b21712fb295767 (patch) | |
tree | a54441cd2bbc52b205d88916464f2d9d5a971388 /components/script/dom/htmloutputelement.rs | |
parent | fd2950e903aab2c6d56d537a71a2a25ccd0307e5 (diff) | |
download | servo-a322c6079b623fc9e4f710ec22b21712fb295767.tar.gz servo-a322c6079b623fc9e4f710ec22b21712fb295767.zip |
Now passing output tests as well as anyone
Diffstat (limited to 'components/script/dom/htmloutputelement.rs')
-rw-r--r-- | components/script/dom/htmloutputelement.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs index 9314672d3d0..548c81bb1b4 100644 --- a/components/script/dom/htmloutputelement.rs +++ b/components/script/dom/htmloutputelement.rs @@ -3,10 +3,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use crate::dom::attr::Attr; +use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::HTMLOutputElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLOutputElementBinding::HTMLOutputElementMethods; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; +use crate::dom::bindings::str::DOMString; use crate::dom::document::Document; use crate::dom::element::{AttributeMutation, Element}; use crate::dom::htmlelement::HTMLElement; @@ -23,6 +25,7 @@ pub struct HTMLOutputElement { htmlelement: HTMLElement, form_owner: MutNullableDom<HTMLFormElement>, labels_node_list: MutNullableDom<NodeList>, + default_value_override: DomRefCell<Option<DOMString>>, } impl HTMLOutputElement { @@ -35,6 +38,7 @@ impl HTMLOutputElement { htmlelement: HTMLElement::new_inherited(local_name, prefix, document), form_owner: Default::default(), labels_node_list: Default::default(), + default_value_override: DomRefCell::new(None), } } @@ -52,6 +56,11 @@ impl HTMLOutputElement { HTMLOutputElementBinding::Wrap, ) } + + pub fn reset(&self) { + Node::string_replace_all(self.DefaultValue(), self.upcast::<Node>()); + *self.default_value_override.borrow_mut() = None; + } } impl HTMLOutputElementMethods for HTMLOutputElement { @@ -68,6 +77,43 @@ impl HTMLOutputElementMethods for HTMLOutputElement { // https://html.spec.whatwg.org/multipage/#dom-lfe-labels make_labels_getter!(Labels, labels_node_list); + + // https://html.spec.whatwg.org/multipage/#dom-output-defaultvaleu + fn DefaultValue(&self) -> DOMString { + let dvo = self.default_value_override.borrow(); + if let Some(ref dv) = *dvo { + dv.clone() + } else { + self.upcast::<Node>().descendant_text_content() + } + } + + // https://html.spec.whatwg.org/multipage/#dom-output-defaultvalue + fn SetDefaultValue(&self, value: DOMString) { + if self.default_value_override.borrow().is_none() { + // Step 1 ("and return") + Node::string_replace_all(value.clone(), self.upcast::<Node>()); + } else { + // Step 2, if not returned from step 1 + *self.default_value_override.borrow_mut() = Some(value); + } + } + + // https://html.spec.whatwg.org/multipage/#dom-output-value + fn Value(&self) -> DOMString { + self.upcast::<Node>().descendant_text_content() + } + + // https://html.spec.whatwg.org/multipage/#dom-output-value + fn SetValue(&self, value: DOMString) { + *self.default_value_override.borrow_mut() = Some(self.DefaultValue()); + Node::string_replace_all(value, self.upcast::<Node>()); + } + + // https://html.spec.whatwg.org/multipage/#dom-output-type + fn Type(&self) -> DOMString { + return DOMString::from("output"); + } } impl VirtualMethods for HTMLOutputElement { |