aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/inputevent.rs
diff options
context:
space:
mode:
authorPyfisch <pyfisch@gmail.com>2017-06-30 21:54:13 +0200
committerPyfisch <pyfisch@gmail.com>2017-07-06 19:37:55 +0200
commit11026600151af2ad51486a7d9ee56b8f1d7391ce (patch)
tree632c2d6ffce17dc887608e656872ab4a69fa2cad /components/script/dom/inputevent.rs
parent9a13cf6bdaa823369f29d7d0f4469087cf17ce6a (diff)
downloadservo-11026600151af2ad51486a7d9ee56b8f1d7391ce.tar.gz
servo-11026600151af2ad51486a7d9ee56b8f1d7391ce.zip
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.
Diffstat (limited to 'components/script/dom/inputevent.rs')
-rw-r--r--components/script/dom/inputevent.rs73
1 files changed, 73 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()
+ }
+}