aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-07-06 10:55:41 -0700
committerGitHub <noreply@github.com>2017-07-06 10:55:41 -0700
commitf18782fb0e10e150f44719d9899a62b84ecb7adc (patch)
treef4a9add947aa9c923b49055c2a0291cd8978fecc /components/script
parent901525c9116ee0945781811c97fd3395db7c5cf9 (diff)
parent11026600151af2ad51486a7d9ee56b8f1d7391ce (diff)
downloadservo-f18782fb0e10e150f44719d9899a62b84ecb7adc.tar.gz
servo-f18782fb0e10e150f44719d9899a62b84ecb7adc.zip
Auto merge of #17578 - pyfisch:input-event, r=jdm
Implement the InputEvent Add WebIDL, from UI Events working draft. Implement script type for event. Note that actually firing InputEvents is not part of this commit. <!-- Please describe your changes on the following line: --> As part of my effort to improve [keyboard handling](https://groups.google.com/forum/#!topic/mozilla.dev.servo/e6R7eBDjo4M) it is necessary to introduce the InputEvent. While I have a working prototype using the input event this still needs a lot of work before it can be merged into servo. cc @jdm <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17578) <!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/inputevent.rs73
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/InputEvent.webidl21
3 files changed, 95 insertions, 0 deletions
diff --git a/components/script/dom/inputevent.rs b/components/script/dom/inputevent.rs
new file mode 100644
index 00000000000..c080ea0c917
--- /dev/null
+++ b/components/script/dom/inputevent.rs
@@ -0,0 +1,73 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use dom::bindings::codegen::Bindings::InputEventBinding::{self, InputEventMethods};
+use dom::bindings::codegen::Bindings::UIEventBinding::UIEventBinding::UIEventMethods;
+use dom::bindings::error::Fallible;
+use dom::bindings::js::{Root, RootedReference};
+use dom::bindings::reflector::reflect_dom_object;
+use dom::bindings::str::DOMString;
+use dom::uievent::UIEvent;
+use dom::window::Window;
+use dom_struct::dom_struct;
+
+#[dom_struct]
+pub struct InputEvent {
+ uievent: UIEvent,
+ data: Option<DOMString>,
+ is_composing: bool,
+}
+
+impl InputEvent {
+ pub fn new(window: &Window,
+ type_: DOMString,
+ can_bubble: bool,
+ cancelable: bool,
+ view: Option<&Window>,
+ detail: i32,
+ data: Option<DOMString>,
+ is_composing: bool) -> Root<InputEvent> {
+ let ev = reflect_dom_object(box InputEvent {
+ uievent: UIEvent::new_inherited(),
+ data: data,
+ is_composing: is_composing,
+ },
+ window,
+ InputEventBinding::Wrap);
+ ev.uievent.InitUIEvent(type_, can_bubble, cancelable, view, detail);
+ ev
+ }
+
+ pub fn Constructor(window: &Window,
+ type_: DOMString,
+ init: &InputEventBinding::InputEventInit)
+ -> Fallible<Root<InputEvent>> {
+ let event = InputEvent::new(window,
+ type_,
+ init.parent.parent.bubbles,
+ init.parent.parent.cancelable,
+ init.parent.view.r(),
+ init.parent.detail,
+ init.data.clone(),
+ init.isComposing);
+ Ok(event)
+ }
+}
+
+impl InputEventMethods for InputEvent {
+ // https://w3c.github.io/uievents/#dom-inputevent-data
+ fn GetData(&self) -> Option<DOMString> {
+ self.data.clone()
+ }
+
+ // https://w3c.github.io/uievents/#dom-inputevent-iscomposing
+ fn IsComposing(&self) -> bool {
+ self.is_composing
+ }
+
+ // https://dom.spec.whatwg.org/#dom-event-istrusted
+ fn IsTrusted(&self) -> bool {
+ self.uievent.IsTrusted()
+ }
+}
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index 6f800625148..1a2a3fc7171 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -372,6 +372,7 @@ pub mod htmlulistelement;
pub mod htmlunknownelement;
pub mod htmlvideoelement;
pub mod imagedata;
+pub mod inputevent;
pub mod keyboardevent;
pub mod location;
pub mod mediaerror;
diff --git a/components/script/dom/webidls/InputEvent.webidl b/components/script/dom/webidls/InputEvent.webidl
new file mode 100644
index 00000000000..30e668b5e43
--- /dev/null
+++ b/components/script/dom/webidls/InputEvent.webidl
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+/*
+ * The origin of this IDL file is
+ * https://w3c.github.io/uievents/#idl-inputevent
+ *
+ */
+
+// https://w3c.github.io/uievents/#idl-inputevent
+[Constructor(DOMString type, optional InputEventInit eventInitDict)]
+interface InputEvent : UIEvent {
+ readonly attribute DOMString? data;
+ readonly attribute boolean isComposing;
+};
+
+// https://w3c.github.io/uievents/#idl-inputeventinit
+dictionary InputEventInit : UIEventInit {
+ DOMString? data = null;
+ boolean isComposing = false;
+};