dom/webidl/MouseEvent.webidl
author Masayuki Nakano <masayuki@d-toybox.com>
Wed, 05 Oct 2022 23:08:55 +0000
changeset 637019 b240ded22d2669e57be192ee17c9384288fc6354
parent 635948 8a62d45d03cfe41d7f33b9e629d4ed03b9b4abba
permissions -rw-r--r--
Bug 1782042 - Add reported test case to WPT r=hiro Depends on D158549 Differential Revision: https://phabricator.services.mozilla.com/D158551

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/.
 *
 * For more information on this interface please see
 * http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html
 * https://drafts.csswg.org/cssom-view/#extensions-to-the-mouseevent-interface
 *
 * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
 * liability, trademark and document use rules apply.
 */

interface nsIScreen;

[Exposed=Window]
interface MouseEvent : UIEvent {
  constructor(DOMString typeArg,
              optional MouseEventInit mouseEventInitDict = {});

  [NeedsCallerType]
  readonly attribute long           screenX;
  [NeedsCallerType]
  readonly attribute long           screenY;

  [ChromeOnly]
  readonly attribute nsIScreen?     screen;

  readonly attribute long           pageX;
  readonly attribute long           pageY;
  readonly attribute long           clientX;
  readonly attribute long           clientY;
  [BinaryName="clientX"]
  readonly attribute long           x;
  [BinaryName="clientY"]
  readonly attribute long           y;
  readonly attribute long           offsetX;
  readonly attribute long           offsetY;
  readonly attribute boolean        ctrlKey;
  readonly attribute boolean        shiftKey;
  readonly attribute boolean        altKey;
  readonly attribute boolean        metaKey;
  readonly attribute short          button;
  readonly attribute unsigned short buttons;
  readonly attribute EventTarget?   relatedTarget;
  [Pref="dom.mouse_event.region.enabled"]
  readonly attribute DOMString?     region;

  // Pointer Lock
  readonly attribute long           movementX;
  readonly attribute long           movementY;

  // Deprecated in DOM Level 3:
undefined initMouseEvent(DOMString typeArg,
                         optional boolean canBubbleArg = false,
                         optional boolean cancelableArg = false,
                         optional Window? viewArg = null,
                         optional long detailArg = 0,
                         optional long screenXArg = 0,
                         optional long screenYArg = 0,
                         optional long clientXArg = 0,
                         optional long clientYArg = 0,
                         optional boolean ctrlKeyArg = false,
                         optional boolean altKeyArg = false,
                         optional boolean shiftKeyArg = false,
                         optional boolean metaKeyArg = false,
                         optional short buttonArg = 0,
                         optional EventTarget? relatedTargetArg = null);
  // Introduced in DOM Level 3:
  boolean                           getModifierState(DOMString keyArg);
};

// Suggested initMouseEvent replacement initializer:
dictionary MouseEventInit : EventModifierInit {
  // Attributes for MouseEvent:
  long           screenX       = 0;
  long           screenY       = 0;
  long           clientX       = 0;
  long           clientY       = 0;
  short          button        = 0;
  // Note: "buttons" was not previously initializable through initMouseEvent!
  unsigned short buttons       = 0;
  EventTarget?   relatedTarget = null;

  // Pointer Lock
  long           movementX = 0;
  long           movementY = 0;
};

// Mozilla extensions
partial interface MouseEvent
{
  // Finger or touch pressure event value
  // ranges between 0.0 and 1.0
  [Deprecated="MouseEvent_MozPressure"]
  readonly attribute float mozPressure;

  const unsigned short    MOZ_SOURCE_UNKNOWN    = 0;
  const unsigned short    MOZ_SOURCE_MOUSE      = 1;
  const unsigned short    MOZ_SOURCE_PEN        = 2;
  const unsigned short    MOZ_SOURCE_ERASER     = 3;
  const unsigned short    MOZ_SOURCE_CURSOR     = 4;
  const unsigned short    MOZ_SOURCE_TOUCH      = 5;
  const unsigned short    MOZ_SOURCE_KEYBOARD   = 6;

  readonly attribute unsigned short mozInputSource;

  undefined initNSMouseEvent(DOMString typeArg,
                             optional boolean canBubbleArg = false,
                             optional boolean cancelableArg = false,
                             optional Window? viewArg = null,
                             optional long detailArg = 0,
                             optional long screenXArg = 0,
                             optional long screenYArg = 0,
                             optional long clientXArg = 0,
                             optional long clientYArg = 0,
                             optional boolean ctrlKeyArg = false,
                             optional boolean altKeyArg = false,
                             optional boolean shiftKeyArg = false,
                             optional boolean metaKeyArg = false,
                             optional short buttonArg = 0,
                             optional EventTarget? relatedTargetArg = null,
                             optional float pressure = 0,
                             optional unsigned short inputSourceArg = 0);

  /**
   * preventClickEvent() prevents the following "click", "auxclick" and
   * "dblclick" events of "mousedown" and "mouseup" events.
   */
  [ChromeOnly]
  undefined preventClickEvent();

  /**
   * Returns true if the following "click", "auxclick" and "dblclick"
   * events of "mousedown" and "mouseup" events are prevented.
   */
  [ChromeOnly]
  boolean clickEventPrevented();
};