/*
 * Copyright (C) 2006 Apple Computer, Inc.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

// https://w3c.github.io/uievents/#interface-KeyboardEvent

[
    Constructor(DOMString type, optional KeyboardEventInit eventInitDict),
    ConstructorCallWith=ScriptState
] interface KeyboardEvent : UIEvent {
    // KeyLocationCode
    const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
    const unsigned long DOM_KEY_LOCATION_LEFT     = 0x01;
    const unsigned long DOM_KEY_LOCATION_RIGHT    = 0x02;
    const unsigned long DOM_KEY_LOCATION_NUMPAD   = 0x03;
    readonly attribute DOMString        key;
    readonly attribute DOMString        code;
    readonly attribute unsigned long    location;
    readonly attribute boolean          ctrlKey;
    readonly attribute boolean          shiftKey;
    readonly attribute boolean          altKey;
    readonly attribute boolean          metaKey;
    readonly attribute boolean          repeat;
    readonly attribute boolean          isComposing;
    boolean getModifierState(DOMString keyArg);

    // https://w3c.github.io/uievents/#idl-interface-KeyboardEvent-initializers
    [CallWith=ScriptState, Measure] void initKeyboardEvent(DOMString type,
                                                           optional boolean bubbles = false,
                                                           optional boolean cancelable = false,
                                                           optional Window? view = null,
                                                           optional DOMString keyIdentifier = "",
                                                           optional unsigned long location = 0,
                                                           optional boolean ctrlKey = false,
                                                           optional boolean altKey = false,
                                                           optional boolean shiftKey = false,
                                                           optional boolean metaKey = false);

    // https://w3c.github.io/uievents/#KeyboardEvent-supplemental-interface
    readonly attribute long charCode;
    readonly attribute long keyCode;
};
