diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmlformelement.rs | 11 | ||||
-rw-r--r-- | components/script/dom/htmlinputelement.rs | 21 |
2 files changed, 22 insertions, 10 deletions
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index f7c3b7272a7..bccc2912772 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -219,16 +219,21 @@ impl HTMLFormElement { win.pipeline(), load_data)).unwrap(); } + /// https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set + /// Steps range from 1 to 3 fn get_unclean_dataset(&self, submitter: Option<FormSubmitter>) -> Vec<FormDatum> { let node = self.upcast::<Node>(); // TODO: This is an incorrect way of getting controls owned // by the form, but good enough until html5ever lands + // Step 1-2 node.traverse_preorder().filter_map(|child| { + // Step 3.1: The field element is disabled. match child.downcast::<Element>() { Some(el) if !el.get_disabled_state() => (), _ => return None, } + // Step 3.1: The field element has a datalist element ancestor. if child.ancestors() .any(|a| Root::downcast::<HTMLDataListElement>(a).is_some()) { return None; @@ -238,6 +243,7 @@ impl HTMLFormElement { match element { HTMLElementTypeId::HTMLInputElement => { let input = child.downcast::<HTMLInputElement>().unwrap(); + // Step 3.2-3.7 input.get_form_datum(submitter) } HTMLElementTypeId::HTMLButtonElement | @@ -257,9 +263,9 @@ impl HTMLFormElement { // https://html.spec.whatwg.org/multipage/#the-directionality } + /// https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set pub fn get_form_dataset(&self, submitter: Option<FormSubmitter>) -> Vec<FormDatum> { fn clean_crlf(s: &str) -> DOMString { - // https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set // Step 4 let mut buf = "".to_owned(); let mut prev = ' '; @@ -290,8 +296,8 @@ impl HTMLFormElement { DOMString::from(buf) } + // Step 1-3 let mut ret = self.get_unclean_dataset(submitter); - // https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set // Step 4 for datum in &mut ret { match &*datum.ty { @@ -302,6 +308,7 @@ impl HTMLFormElement { } } }; + // Step 5 ret } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 13af224bef1..092e963840b 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -423,8 +423,12 @@ impl HTMLInputElement { } } + /// https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set + /// Steps range from 3.1 to 3.7 which related to the HTMLInputElement pub fn get_form_datum(&self, submitter: Option<FormSubmitter>) -> Option<FormDatum> { + // Step 3.2 let ty = self.type_(); + // Step 3.4 let name = self.Name(); let is_submitter = match submitter { Some(FormSubmitter::InputElement(s)) => { @@ -434,21 +438,22 @@ impl HTMLInputElement { }; match ty { + // Step 3.1: it's a button but it is not submitter. atom!("submit") | atom!("button") | atom!("reset") if !is_submitter => return None, - atom!("radio") | atom!("checkbox") => { - if !self.Checked() || name.is_empty() { - return None; - } + // Step 3.1: it's the "Checkbox" or "Radio Button" and whose checkedness is false. + atom!("radio") | atom!("checkbox") => if !self.Checked() || name.is_empty() { + return None; }, atom!("image") | atom!("file") => return None, // Unimplemented - _ => { - if name.is_empty() { - return None; - } + // Step 3.1: it's not the "Image Button" and doesn't have a name attribute. + _ => if name.is_empty() { + return None; } + } let mut value = self.Value(); + // Step 3.6 if ty == atom!("radio") || ty == atom!("checkbox") { if value.is_empty() { value = DOMString::from("on"); |