View Javadoc
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  }