mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #7892 - anthgur:form-data-refactor, r=jdm
Refactor html form dataset collection Factor out FormDatum collection for `<input>` Improve early return logic for getting the FormDatum from an `<input>` Condense element type patterns Proposed to close #7851 <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7892) <!-- Reviewable:end -->
This commit is contained in:
commit
94dc98717b
2 changed files with 79 additions and 84 deletions
|
@ -21,7 +21,7 @@ use dom::element::{AttributeMutation, Element, ElementTypeId, RawLayoutElementHe
|
|||
use dom::event::{Event, EventBubbles, EventCancelable};
|
||||
use dom::eventtarget::{EventTarget, EventTargetTypeId};
|
||||
use dom::htmlelement::{HTMLElement, HTMLElementTypeId};
|
||||
use dom::htmlformelement::{FormControl, FormSubmitter, HTMLFormElement};
|
||||
use dom::htmlformelement::{FormControl, FormSubmitter, HTMLFormElement, FormDatum};
|
||||
use dom::htmlformelement::{ResetFrom, SubmittedFrom};
|
||||
use dom::keyboardevent::KeyboardEvent;
|
||||
use dom::node::{Node, NodeDamage, NodeTypeId};
|
||||
|
@ -408,6 +408,44 @@ impl HTMLInputElement {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_form_datum<'a>(&self, submitter: Option<FormSubmitter<'a>>) -> Option<FormDatum> {
|
||||
let ty = self.Type();
|
||||
let name = self.Name();
|
||||
let is_submitter = match submitter {
|
||||
Some(FormSubmitter::InputElement(s)) => {
|
||||
self == s
|
||||
},
|
||||
_ => false
|
||||
};
|
||||
|
||||
match &*ty {
|
||||
"submit" | "button" | "reset" if !is_submitter => return None,
|
||||
"radio" | "checkbox" => {
|
||||
if !self.Checked() || name.is_empty() {
|
||||
return None;
|
||||
}
|
||||
},
|
||||
"image" | "file" => return None, // Unimplemented
|
||||
_ => {
|
||||
if name.is_empty() {
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut value = self.Value();
|
||||
if ty == "radio" || ty == "checkbox" {
|
||||
if value.is_empty() {
|
||||
value = "on".to_owned();
|
||||
}
|
||||
}
|
||||
Some(FormDatum {
|
||||
ty: ty,
|
||||
name: name,
|
||||
value: value
|
||||
})
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#radio-button-group
|
||||
fn get_radio_group_name(&self) -> Option<Atom> {
|
||||
//TODO: determine form owner
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue