servo: Merge #11333 - Include <button type=submit> data whilst constructing the form dataset (from Manishearth:submit-submit-button); r=nox

This makes it possible to close things in github (see
https://github.com/Manishearth/mitochondria/issues/1)

- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors

Either:
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

Source-Repo: https://github.com/servo/servo
Source-Revision: de79f967752c91ddd4f6eab8f2f4135572f305fa
This commit is contained in:
Manish Goregaokar 2016-05-23 04:18:09 -07:00
Родитель 796b631fca
Коммит 9912f2cea8
3 изменённых файлов: 46 добавлений и 5 удалений

Просмотреть файл

@ -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
()

Просмотреть файл

@ -623,8 +623,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
@ -652,7 +654,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,