feat: enable form elements in web
This commit is contained in:
1 parent
c4556d050e
commit
8f9d15db4a
3 files changed
+34
-1
No files matched your search
@@ -198,6 +198,8 @@ export class Interpreter {
|
|||||||
this.RemoveEventListener(edit.root, edit.event_name);
|
this.RemoveEventListener(edit.root, edit.event_name);
|
||||||
break;
|
break;
|
||||||
case "NewEventListener":
|
case "NewEventListener":
|
||||||
|
// this handler is only provided on desktop implementations since this
|
||||||
|
// method is not used by the web implementation
|
||||||
let handler = (event) => {
|
let handler = (event) => {
|
||||||
let target = event.target;
|
let target = event.target;
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
|
|||||||
@@ -207,6 +207,8 @@ export class Interpreter {
|
|||||||
this.RemoveEventListener(edit.root, edit.event_name);
|
this.RemoveEventListener(edit.root, edit.event_name);
|
||||||
break;
|
break;
|
||||||
case "NewEventListener":
|
case "NewEventListener":
|
||||||
|
// this handler is only provided on desktop implementations since this
|
||||||
|
// method is not used by the web implementation
|
||||||
let handler = (event) => {
|
let handler = (event) => {
|
||||||
let target = event.target;
|
let target = event.target;
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
|
|||||||
+30
-1
@@ -215,7 +215,36 @@ fn virtual_event_from_websys_event(event: web_sys::Event) -> Arc<dyn Any + Send
|
|||||||
})
|
})
|
||||||
.expect("only an InputElement or TextAreaElement or an element with contenteditable=true can have an oninput event listener");
|
.expect("only an InputElement or TextAreaElement or an element with contenteditable=true can have an oninput event listener");
|
||||||
|
|
||||||
let values = std::collections::HashMap::new();
|
let mut values = std::collections::HashMap::new();
|
||||||
|
|
||||||
|
if let Some(form) = target.dyn_ref::<web_sys::HtmlFormElement>() {
|
||||||
|
let elements = form.elements();
|
||||||
|
for x in 0..elements.length() {
|
||||||
|
let element = elements.item(x).unwrap();
|
||||||
|
if let Some(name) = element.get_attribute("name") {
|
||||||
|
let value: String = (&element)
|
||||||
|
.dyn_ref()
|
||||||
|
.map(|input: &web_sys::HtmlInputElement| {
|
||||||
|
match input.type_().as_str() {
|
||||||
|
"checkbox" => {
|
||||||
|
match input.checked() {
|
||||||
|
true => "true".to_string(),
|
||||||
|
false => "false".to_string(),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => input.value()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.or_else(|| target.dyn_ref().map(|input: &web_sys::HtmlTextAreaElement| input.value()))
|
||||||
|
.or_else(|| target.dyn_ref().map(|input: &web_sys::HtmlSelectElement| input.value()))
|
||||||
|
.or_else(|| target.dyn_ref::<web_sys::HtmlElement>().unwrap().text_content())
|
||||||
|
.expect("only an InputElement or TextAreaElement or an element with contenteditable=true can have an oninput event listener");
|
||||||
|
|
||||||
|
values.insert(name, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Arc::new(FormData { value, values })
|
Arc::new(FormData { value, values })
|
||||||
}
|
}
|
||||||
"click" | "contextmenu" | "doubleclick" | "drag" | "dragend" | "dragenter" | "dragexit"
|
"click" | "contextmenu" | "doubleclick" | "drag" | "dragend" | "dragenter" | "dragexit"
|
||||||
|
|||||||
Reference in new issue
Block a user