// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. /** * An event that describes user interaction with the keyboard. * * The [type] of the event identifies what kind of interaction occurred. * * See also: * * * [KeyboardEvent](https://developer.mozilla.org/en/DOM/KeyboardEvent) at MDN. */ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { /** * Programmatically create a KeyboardEvent. * * Due to browser differences, keyCode, charCode, or keyIdentifier values * cannot be specified in this base level constructor. This constructor * enables the user to programmatically create and dispatch a [KeyboardEvent], * but it will not contain any particular key content. For programmatically * creating keyboard events with specific key value contents, see the custom * Event [KeyEvent]. */ factory $CLASSNAME(String type, { Window$NULLABLE view, bool canBubble: true, bool cancelable: true, int$NULLABLE location, int$NULLABLE keyLocation, // Legacy alias for location bool ctrlKey: false, bool altKey: false, bool shiftKey: false, bool metaKey: false}) { if (view == null) { view = window; } location ??= keyLocation ?? 1; KeyboardEvent e = document._createEvent("KeyboardEvent") $#NULLSAFECAST(as KeyboardEvent); e._initKeyboardEvent(type, canBubble, cancelable, view, "", location, ctrlKey, altKey, shiftKey, metaKey); return e; } void _initKeyboardEvent(String type, bool canBubble, bool cancelable, Window$NULLABLE view, String keyIdentifier, int$NULLABLE location, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) { if (JS('bool', 'typeof(#.initKeyEvent) == "function"', this)) { // initKeyEvent is only in Firefox (instead of initKeyboardEvent). It has // a slightly different signature, and allows you to specify keyCode and // charCode as the last two arguments, but we just set them as the default // since they can't be specified in other browsers. JS('void', '#.initKeyEvent(#, #, #, #, #, #, #, #, 0, 0)', this, type, canBubble, cancelable, view, ctrlKey, altKey, shiftKey, metaKey); } else { // initKeyboardEvent is for all other browsers. JS('void', '#.initKeyboardEvent(#, #, #, #, #, #, #, #, #, #)', this, type, canBubble, cancelable, view, keyIdentifier, location, ctrlKey, altKey, shiftKey, metaKey); } } int get keyCode native; int get charCode native; int$NULLABLE get which => _which; $!MEMBERS }