script/dom/event/
compositionevent.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use js::rust::HandleObject;
8use script_bindings::reflector::{
9 reflect_dom_object_with_cx, reflect_dom_object_with_proto_and_cx,
10};
11use style::Atom;
12
13use crate::dom::bindings::codegen::Bindings::CompositionEventBinding::{
14 self, CompositionEventMethods,
15};
16use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEvent_Binding::UIEventMethods;
17use crate::dom::bindings::error::Fallible;
18use crate::dom::bindings::root::DomRoot;
19use crate::dom::bindings::str::DOMString;
20use crate::dom::uievent::UIEvent;
21use crate::dom::window::Window;
22
23#[dom_struct]
24pub(crate) struct CompositionEvent {
25 uievent: UIEvent,
26 data: DOMString,
27}
28
29impl CompositionEvent {
30 pub(crate) fn new_inherited() -> CompositionEvent {
31 CompositionEvent {
32 uievent: UIEvent::new_inherited(),
33 data: DOMString::new(),
34 }
35 }
36
37 pub(crate) fn new_uninitialized(
38 cx: &mut JSContext,
39 window: &Window,
40 ) -> DomRoot<CompositionEvent> {
41 reflect_dom_object_with_cx(Box::new(CompositionEvent::new_inherited()), window, cx)
42 }
43
44 #[expect(clippy::too_many_arguments)]
45 pub(crate) fn new(
46 cx: &mut JSContext,
47 window: &Window,
48 event_type: Atom,
49 can_bubble: bool,
50 cancelable: bool,
51 view: Option<&Window>,
52 detail: i32,
53 data: DOMString,
54 ) -> DomRoot<CompositionEvent> {
55 Self::new_with_proto(
56 cx, window, None, event_type, can_bubble, cancelable, view, detail, data,
57 )
58 }
59
60 #[expect(clippy::too_many_arguments)]
61 fn new_with_proto(
62 cx: &mut JSContext,
63 window: &Window,
64 proto: Option<HandleObject>,
65 event_type: Atom,
66 can_bubble: bool,
67 cancelable: bool,
68 view: Option<&Window>,
69 detail: i32,
70 data: DOMString,
71 ) -> DomRoot<CompositionEvent> {
72 let ev = reflect_dom_object_with_proto_and_cx(
73 Box::new(CompositionEvent {
74 uievent: UIEvent::new_inherited(),
75 data,
76 }),
77 window,
78 proto,
79 cx,
80 );
81 ev.uievent
82 .init_event(event_type, can_bubble, cancelable, view, detail);
83 ev
84 }
85
86 pub(crate) fn data(&self) -> &DOMString {
87 &self.data
88 }
89}
90
91impl CompositionEventMethods<crate::DomTypeHolder> for CompositionEvent {
92 fn Constructor(
94 cx: &mut JSContext,
95 window: &Window,
96 proto: Option<HandleObject>,
97 event_type: DOMString,
98 init: &CompositionEventBinding::CompositionEventInit,
99 ) -> Fallible<DomRoot<CompositionEvent>> {
100 let event = CompositionEvent::new_with_proto(
101 cx,
102 window,
103 proto,
104 event_type.into(),
105 init.parent.parent.bubbles,
106 init.parent.parent.cancelable,
107 init.parent.view.as_deref(),
108 init.parent.detail,
109 init.data.clone(),
110 );
111 Ok(event)
112 }
113
114 fn Data(&self) -> DOMString {
116 self.data.clone()
117 }
118
119 fn IsTrusted(&self) -> bool {
121 self.uievent.IsTrusted()
122 }
123}