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.
This commit is contained in:
Pyfisch 2017-06-30 21:54:13 +02:00
parent 9a13cf6bda
commit 1102660015
6 changed files with 97 additions and 15 deletions

View file

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

View file

@ -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;

View file

@ -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;
};

View file

@ -1,14 +0,0 @@
[inputevent-constructor.html]
type: testharness
[InputEvent constructor without InputEventInit.]
expected: FAIL
[InputEvent construtor with InputEventInit where data is null]
expected: FAIL
[InputEvent construtor with InputEventInit where data is empty string]
expected: FAIL
[InputEvent construtor with InputEventInit where data is non empty string]
expected: FAIL

View file

@ -25960,7 +25960,7 @@
"testharness"
],
"mozilla/interfaces.html": [
"49dd9f6ef449813f2ce943d4c9fac351357e5c74",
"ffdc606aaf989ef8bcdecef8cef8764bbb2ae1b2",
"testharness"
],
"mozilla/interfaces.js": [

View file

@ -140,6 +140,7 @@ test_interfaces([
"HTMLVideoElement",
"ImageData",
"Image",
"InputEvent",
"KeyboardEvent",
"Location",
"MediaError",