Skip to main content

ferrijs_std/events/
event.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3use rquickjs::{prelude::Opt, Result, Value};
4
5use crate::utils::object::ObjectExt;
6
7#[rquickjs::class]
8#[derive(rquickjs::class::Trace, rquickjs::JsLifetime)]
9pub struct Event {
10    event_type: String,
11    bubbles: bool,
12    cancelable: bool,
13    composed: bool,
14}
15
16#[rquickjs::methods]
17impl Event {
18    #[qjs(constructor)]
19    pub fn new(event_type: String, options: Opt<Value<'_>>) -> Result<Self> {
20        let mut bubbles = false;
21        let mut cancelable = false;
22        let mut composed = false;
23        if let Some(options) = options.0 {
24            if let Some(opt) = options.get_optional("bubbles")? {
25                bubbles = opt;
26            }
27            if let Some(opt) = options.get_optional("cancelable")? {
28                cancelable = opt;
29            }
30            if let Some(opt) = options.get_optional("composed")? {
31                composed = opt;
32            }
33        }
34        Ok(Self {
35            event_type,
36            bubbles,
37            cancelable,
38            composed,
39        })
40    }
41
42    #[qjs(get)]
43    pub fn bubbles(&self) -> bool {
44        self.bubbles
45    }
46
47    #[qjs(get)]
48    pub fn cancelable(&self) -> bool {
49        self.cancelable
50    }
51
52    #[qjs(get)]
53    pub fn composed(&self) -> bool {
54        self.composed
55    }
56
57    #[qjs(get, rename = "type")]
58    pub fn event_type(&self) -> String {
59        self.event_type.clone()
60    }
61}