From 982c4ea2d8c9d0ae414ea69f20d561022f3b98cc Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 22 Aug 2017 12:01:35 +0200 Subject: [PATCH] Add CompositionEvent bindings --- components/script/dom/compositionevent.rs | 64 +++++++++++++++++++ components/script/dom/mod.rs | 1 + .../dom/webidls/CompositionEvent.webidl | 20 ++++++ resources/prefs.json | 1 + 4 files changed, 86 insertions(+) create mode 100644 components/script/dom/compositionevent.rs create mode 100644 components/script/dom/webidls/CompositionEvent.webidl diff --git a/components/script/dom/compositionevent.rs b/components/script/dom/compositionevent.rs new file mode 100644 index 00000000000..c1f84386ade --- /dev/null +++ b/components/script/dom/compositionevent.rs @@ -0,0 +1,64 @@ +/* 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::CompositionEventBinding::{self, CompositionEventMethods}; +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 CompositionEvent { + uievent: UIEvent, + data: DOMString, +} + +impl CompositionEvent { + pub fn new(window: &Window, + type_: DOMString, + can_bubble: bool, + cancelable: bool, + view: Option<&Window>, + detail: i32, + data: DOMString) -> Root { + let ev = reflect_dom_object(box CompositionEvent { + uievent: UIEvent::new_inherited(), + data: data, + }, + window, + CompositionEventBinding::Wrap); + ev.uievent.InitUIEvent(type_, can_bubble, cancelable, view, detail); + ev + } + + pub fn Constructor(window: &Window, + type_: DOMString, + init: &CompositionEventBinding::CompositionEventInit) + -> Fallible> { + let event = CompositionEvent::new(window, + type_, + init.parent.parent.bubbles, + init.parent.parent.cancelable, + init.parent.view.r(), + init.parent.detail, + init.data.clone()); + Ok(event) + } +} + +impl CompositionEventMethods for CompositionEvent { + // https://w3c.github.io/uievents/#dom-compositionevent-data + fn Data(&self) -> DOMString { + self.data.clone() + } + + // 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 a3b280668e3..448d11ad1c5 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -236,6 +236,7 @@ pub mod characterdata; pub mod client; pub mod closeevent; pub mod comment; +pub mod compositionevent; pub mod console; mod create; pub mod crypto; diff --git a/components/script/dom/webidls/CompositionEvent.webidl b/components/script/dom/webidls/CompositionEvent.webidl new file mode 100644 index 00000000000..becec52a7b2 --- /dev/null +++ b/components/script/dom/webidls/CompositionEvent.webidl @@ -0,0 +1,20 @@ +/* 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-compositionevent + * + */ + +// https://w3c.github.io/uievents/#idl-compositionevent +[Pref="dom.compositionevent.enabled", Constructor(DOMString type, optional CompositionEventInit eventInitDict)] +interface CompositionEvent : UIEvent { + readonly attribute DOMString data; +}; + +// https://w3c.github.io/uievents/#idl-compositioneventinit +dictionary CompositionEventInit : UIEventInit { + DOMString data = ""; +}; + diff --git a/resources/prefs.json b/resources/prefs.json index 8e28e622e7a..f726cb288f4 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -1,6 +1,7 @@ { "dom.bluetooth.enabled": false, "dom.bluetooth.testing.enabled": false, + "dom.compositionevent.enabled": false, "dom.customelements.enabled": false, "dom.forcetouch.enabled": false, "dom.gamepad.enabled": false,