/** * Polyfill for KeyboardEvent * - Constructor. */ (function (window) { 'use strict'; try { new window.KeyboardEvent('event', { bubbles: true, cancelable: true }); } catch (e) { // We can't use `KeyboardEvent` in old WebKit because `initKeyboardEvent` // doesn't seem to populate some properties (`keyCode`, `which`) that // are read-only. const KeyboardEventOriginal = window.Event; const KeyboardEvent = function (eventName, options) { options = options || {}; const event = document.createEvent('Event'); event.initEvent(eventName, !!options.bubbles, !!options.cancelable); event.view = options.view || document.defaultView; event.key = options.key || options.keyIdentifier || ''; event.keyCode = options.keyCode || 0; event.code = options.code || ''; event.charCode = options.charCode || 0; event.char = options.char || ''; event.which = options.which || 0; event.location = options.location || options.keyLocation || 0; event.ctrlKey = !!options.ctrlKey; event.altKey = !!options.altKey; event.shiftKey = !!options.shiftKey; event.metaKey = !!options.metaKey; event.repeat = !!options.repeat; return event; }; KeyboardEvent.prototype = KeyboardEventOriginal.prototype; window.KeyboardEvent = KeyboardEvent; } }(window));