mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
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:
parent
9a13cf6bda
commit
1102660015
6 changed files with 97 additions and 15 deletions
73
components/script/dom/inputevent.rs
Normal file
73
components/script/dom/inputevent.rs
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -372,6 +372,7 @@ pub mod htmlulistelement;
|
||||||
pub mod htmlunknownelement;
|
pub mod htmlunknownelement;
|
||||||
pub mod htmlvideoelement;
|
pub mod htmlvideoelement;
|
||||||
pub mod imagedata;
|
pub mod imagedata;
|
||||||
|
pub mod inputevent;
|
||||||
pub mod keyboardevent;
|
pub mod keyboardevent;
|
||||||
pub mod location;
|
pub mod location;
|
||||||
pub mod mediaerror;
|
pub mod mediaerror;
|
||||||
|
|
21
components/script/dom/webidls/InputEvent.webidl
Normal file
21
components/script/dom/webidls/InputEvent.webidl
Normal 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;
|
||||||
|
};
|
|
@ -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
|
|
||||||
|
|
|
@ -25960,7 +25960,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"mozilla/interfaces.html": [
|
"mozilla/interfaces.html": [
|
||||||
"49dd9f6ef449813f2ce943d4c9fac351357e5c74",
|
"ffdc606aaf989ef8bcdecef8cef8764bbb2ae1b2",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"mozilla/interfaces.js": [
|
"mozilla/interfaces.js": [
|
||||||
|
|
|
@ -140,6 +140,7 @@ test_interfaces([
|
||||||
"HTMLVideoElement",
|
"HTMLVideoElement",
|
||||||
"ImageData",
|
"ImageData",
|
||||||
"Image",
|
"Image",
|
||||||
|
"InputEvent",
|
||||||
"KeyboardEvent",
|
"KeyboardEvent",
|
||||||
"Location",
|
"Location",
|
||||||
"MediaError",
|
"MediaError",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue