mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Include <button type=submit> data whilst constructing the form dataset
This commit is contained in:
parent
6b039612ba
commit
102cdaa7cc
3 changed files with 46 additions and 5 deletions
|
@ -14,8 +14,9 @@ use dom::event::Event;
|
|||
use dom::eventtarget::EventTarget;
|
||||
use dom::htmlelement::HTMLElement;
|
||||
use dom::htmlfieldsetelement::HTMLFieldSetElement;
|
||||
use dom::htmlformelement::{FormControl, FormSubmitter, ResetFrom};
|
||||
use dom::htmlformelement::{SubmittedFrom, HTMLFormElement};
|
||||
use dom::htmlformelement::HTMLFormElement;
|
||||
use dom::htmlformelement::{FormControl, FormDatum, FormDatumValue};
|
||||
use dom::htmlformelement::{FormSubmitter, ResetFrom, SubmittedFrom};
|
||||
use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
|
||||
use dom::nodelist::NodeList;
|
||||
use dom::validation::Validatable;
|
||||
|
@ -137,6 +138,39 @@ impl HTMLButtonElementMethods for HTMLButtonElement {
|
|||
}
|
||||
}
|
||||
|
||||
impl HTMLButtonElement {
|
||||
/// https://html.spec.whatwg.org/multipage/#constructing-the-form-data-set
|
||||
/// Steps range from 3.1 to 3.7 (specific to HTMLButtonElement)
|
||||
pub fn form_datum(&self, submitter: Option<FormSubmitter>) -> Option<FormDatum> {
|
||||
// Step 3.1: disabled state check is in get_unclean_dataset
|
||||
|
||||
// Step 3.1: only run steps if this is the submitter
|
||||
if let Some(FormSubmitter::ButtonElement(submitter)) = submitter {
|
||||
if submitter != self {
|
||||
return None
|
||||
}
|
||||
} else {
|
||||
return None
|
||||
}
|
||||
// Step 3.2
|
||||
let ty = self.Type();
|
||||
// Step 3.4
|
||||
let name = self.Name();
|
||||
|
||||
if name.is_empty() {
|
||||
// Step 3.1: Must have a name
|
||||
return None;
|
||||
}
|
||||
|
||||
// Step 3.9
|
||||
Some(FormDatum {
|
||||
ty: ty,
|
||||
name: name,
|
||||
value: FormDatumValue::String(self.Value())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl VirtualMethods for HTMLButtonElement {
|
||||
fn super_type(&self) -> Option<&VirtualMethods> {
|
||||
Some(self.upcast::<HTMLElement>() as &VirtualMethods)
|
||||
|
|
|
@ -548,7 +548,12 @@ impl HTMLFormElement {
|
|||
data_set.push(datum);
|
||||
}
|
||||
}
|
||||
HTMLElementTypeId::HTMLButtonElement |
|
||||
HTMLElementTypeId::HTMLButtonElement => {
|
||||
let button = child.downcast::<HTMLButtonElement>().unwrap();
|
||||
if let Some(datum) = button.form_datum(submitter) {
|
||||
data_set.push(datum);
|
||||
}
|
||||
}
|
||||
HTMLElementTypeId::HTMLObjectElement => {
|
||||
// Unimplemented
|
||||
()
|
||||
|
|
|
@ -605,8 +605,10 @@ 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
|
||||
/// Steps range from 3.1 to 3.7 (specific to HTMLInputElement)
|
||||
pub fn form_datum(&self, submitter: Option<FormSubmitter>) -> Option<FormDatum> {
|
||||
// 3.1: disabled state check is in get_unclean_dataset
|
||||
|
||||
// Step 3.2
|
||||
let ty = self.type_();
|
||||
// Step 3.4
|
||||
|
@ -634,7 +636,7 @@ impl HTMLInputElement {
|
|||
|
||||
}
|
||||
|
||||
// Step 3.6
|
||||
// Step 3.9
|
||||
Some(FormDatum {
|
||||
ty: DOMString::from(&*ty), // FIXME(ajeffrey): Convert directly from Atoms to DOMStrings
|
||||
name: name,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue