#import <UIEvents/EventModifier.idl>

[Exposed=Window]
interface KeyboardEvent : UIEvent {

    constructor(DOMString type, optional KeyboardEventInit eventInitDict = {});

    // 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;

    readonly attribute unsigned long charCode;
    readonly attribute unsigned long keyCode;

    boolean getModifierState(DOMString keyArg);

};

dictionary KeyboardEventInit : EventModifierInit {
    DOMString key = "";
    DOMString code = "";
    unsigned long location = 0;
    boolean repeat = false;
    boolean isComposing = false;
    unsigned long charCode = 0;
    unsigned long keyCode = 0;
};
