1 /*
2 * Copyright (c) 2002-2026 Gargoyle Software Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 * https://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 package org.htmlunit.javascript.host.event;
16
17 import org.htmlunit.corejs.javascript.ScriptableObject;
18 import org.htmlunit.javascript.JavaScriptEngine;
19 import org.htmlunit.javascript.configuration.JsxClass;
20 import org.htmlunit.javascript.configuration.JsxConstructor;
21 import org.htmlunit.javascript.configuration.JsxFunction;
22 import org.htmlunit.javascript.configuration.JsxGetter;
23
24 /**
25 * JavaScript host object for {@code CustomEvent}.
26 *
27 * @author Ahmed Ashour
28 * @author Ronald Brill
29 *
30 * @see <a href="https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent">MDN Documentation</a>
31 */
32 @JsxClass
33 public class CustomEvent extends Event {
34
35 /** The data passed when initializing the event. */
36 private Object detail_;
37
38 /**
39 * Creates an instance of this event.
40 *
41 * @param type the event type
42 * @param details the event details (optional)
43 */
44 @Override
45 @JsxConstructor
46 public void jsConstructor(final String type, final ScriptableObject details) {
47 super.jsConstructor(JavaScriptEngine.toString(type), details);
48
49 if (details != null && !JavaScriptEngine.isUndefined(details)) {
50 final Object detail = details.get("detail", details);
51 if (NOT_FOUND != detail) {
52 detail_ = detail;
53 }
54 }
55 }
56
57 /**
58 * Initializes the custom event.
59 *
60 * @param type the event type
61 * @param bubbles whether the event bubbles
62 * @param cancelable whether the event can be canceled
63 * @param detail the custom detail data for the event
64 */
65 @JsxFunction
66 public void initCustomEvent(
67 final String type,
68 final boolean bubbles,
69 final boolean cancelable,
70 final Object detail) {
71 initEvent(type, bubbles, cancelable);
72 detail_ = detail;
73 }
74
75 /**
76 * Returns any data passed when the event was initialized.
77 *
78 * @return any data passed when the event was initialized
79 */
80 @JsxGetter
81 public Object getDetail() {
82 return detail_;
83 }
84 }