mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
created sourced names w/o past names map part
This commit is contained in:
parent
f73e1453ca
commit
2108a85764
1 changed files with 75 additions and 0 deletions
75
components/script/dom/htmlformelement.rs
Executable file → Normal file
75
components/script/dom/htmlformelement.rs
Executable file → Normal file
|
@ -64,6 +64,8 @@ use std::cell::Cell;
|
||||||
use style::attr::AttrValue;
|
use style::attr::AttrValue;
|
||||||
use style::str::split_html_space_chars;
|
use style::str::split_html_space_chars;
|
||||||
|
|
||||||
|
use crate::dom::bindings::codegen::UnionTypes::RadioNodeListOrElement;
|
||||||
|
|
||||||
#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
|
#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
|
||||||
pub struct GenerationId(u32);
|
pub struct GenerationId(u32);
|
||||||
|
|
||||||
|
@ -253,6 +255,79 @@ impl HTMLFormElementMethods for HTMLFormElement {
|
||||||
let elements = self.Elements();
|
let elements = self.Elements();
|
||||||
elements.IndexedGetter(index)
|
elements.IndexedGetter(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn NamedGetter(&self, name: DOMString) -> Option<RadioNodeListOrElement> {
|
||||||
|
// return Option::Some::<RadioNodeListOrElement>;
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/forms.html#the-form-element:supported-property-names
|
||||||
|
fn SupportedPropertyNames(&self) -> Vec<DOMString> {
|
||||||
|
|
||||||
|
enum SourcedNameSource {
|
||||||
|
Id,
|
||||||
|
Name,
|
||||||
|
Past(std::time::Duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SourcedName {
|
||||||
|
name: DOMString,
|
||||||
|
element: DomRoot<Element>,
|
||||||
|
source: SourcedNameSource,
|
||||||
|
}
|
||||||
|
|
||||||
|
// vector to store sourced names tuple information
|
||||||
|
let mut sourcedNamesVec: Vec<SourcedName> = Vec::new();
|
||||||
|
|
||||||
|
// let controls = self.controls.borrow_mut(); - line 849 → unsure of which "borrow" to use
|
||||||
|
let controls = self.controls.borrow(); // line 807 in this file
|
||||||
|
|
||||||
|
// controls - list of form elements
|
||||||
|
// check all listed elements first, push to sourcedNamesVec as per spec
|
||||||
|
for child in controls.iter() {
|
||||||
|
|
||||||
|
if child.is_html_element() { // if child.is_listed()
|
||||||
|
|
||||||
|
if child.has_attribute(&local_name!("id")) {
|
||||||
|
// https://learning-rust.github.io/docs/b2.structs.html
|
||||||
|
let entry = SourcedName {name: child.get_string_attribute(&local_name!("id")), element: child.root_element(), source: SourcedNameSource::Id};
|
||||||
|
sourcedNamesVec.push(entry);
|
||||||
|
}
|
||||||
|
else if child.has_attribute(&local_name!("name")) {
|
||||||
|
let entry = SourcedName {name: child.get_string_attribute(&local_name!("name")), element: child.root_element(), source: SourcedNameSource::Name};
|
||||||
|
sourcedNamesVec.push(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check img elements now, push to sourcedNamesVec as per spec
|
||||||
|
for child in controls.iter() {
|
||||||
|
// https://doc.servo.org/src/script/dom/htmlelement.rs.html#645-665
|
||||||
|
// if child.get_string_attribute(&local_name!("type")) == "image" {
|
||||||
|
|
||||||
|
// https://users.rust-lang.org/t/how-check-type-of-variable/33845/7
|
||||||
|
if child.is::<HTMLImageElement>() {
|
||||||
|
|
||||||
|
if child.has_attribute(&local_name!("id")) {
|
||||||
|
// https://learning-rust.github.io/docs/b2.structs.html
|
||||||
|
let entry = SourcedName {name: child.get_string_attribute(&local_name!("id")), element: child.root_element(), source: SourcedNameSource::Id};
|
||||||
|
sourcedNamesVec.push(entry);
|
||||||
|
}
|
||||||
|
else if child.has_attribute(&local_name!("name")) {
|
||||||
|
let entry = SourcedName {name: child.get_string_attribute(&local_name!("name")), element: child.root_element(), source: SourcedNameSource::Name};
|
||||||
|
sourcedNamesVec.push(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return list of names
|
||||||
|
let mut namesVec: Vec<DOMString> = Vec::new();
|
||||||
|
for elem in sourcedNamesVec.iter() {
|
||||||
|
namesVec.push(elem.name.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
return namesVec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
|
#[derive(Clone, Copy, MallocSizeOf, PartialEq)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue