@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
35 lines • 4.95 kB
JavaScript
/**
* Dispatches a keydown event from an element.
*
* @param type - The event type
* @param key - The KeyCode type
* @param target - The target element
* @returns The event
*
* @example
* createKeyboardEvent('keydown', ENTER, myInputNativeElement);
*/
export function createKeyboardEvent(type, key, target) {
// NOTE: Cannot 'type' the event here due to the note about FireFox below
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const event = document.createEvent('KeyboardEvent');
event.initEvent(type, true, false);
const originalPreventDefault = event.preventDefault;
// NOTE: Webkit Browsers don't set the keyCode when calling the init function.
// See related bug https://bugs.webkit.org/show_bug.cgi?id=16735
Object.defineProperties(event, {
code: { get: () => key.code },
key: { get: () => key.code },
keyCode: { get: () => key.keyCode },
target: { get: () => target },
});
// NOTE: IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
event.preventDefault = function () {
Object.defineProperty(event, 'defaultPrevented', { get: () => true });
// FIXME: Not sure why this `as any` is needed now
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return originalPreventDefault.apply(this, arguments);
};
return event;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtleWJvYXJkLWV2ZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy90ZXN0aW5nLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL2V2ZW50cy9jcmVhdGUta2V5Ym9hcmQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsSUFBWSxFQUNaLEdBQVksRUFDWixNQUFnQjtJQUVoQix5RUFBeUU7SUFDekUsOERBQThEO0lBQzlELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFRLENBQUM7SUFDM0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sc0JBQXNCLEdBQWUsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUVoRSw4RUFBOEU7SUFDOUUsZ0VBQWdFO0lBQ2hFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7UUFDN0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDN0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDNUIsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7UUFDbkMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRTtLQUM5QixDQUFDLENBQUM7SUFFSCwwRkFBMEY7SUFDMUYsS0FBSyxDQUFDLGNBQWMsR0FBRztRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLGtEQUFrRDtRQUNsRCw4REFBOEQ7UUFDOUQsT0FBTyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQWdCLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7SUFFRixPQUFPLEtBQXNCLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAdGVybWludXMvbmd4LXRvb2xzL2tleWNvZGVzJztcblxuXG4vKipcbiAqIERpc3BhdGNoZXMgYSBrZXlkb3duIGV2ZW50IGZyb20gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBldmVudCB0eXBlXG4gKiBAcGFyYW0ga2V5IC0gVGhlIEtleUNvZGUgdHlwZVxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgZWxlbWVudFxuICogQHJldHVybnMgVGhlIGV2ZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGNyZWF0ZUtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBFTlRFUiwgbXlJbnB1dE5hdGl2ZUVsZW1lbnQpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlS2V5Ym9hcmRFdmVudChcbiAgdHlwZTogc3RyaW5nLFxuICBrZXk6IEtleUNvZGUsXG4gIHRhcmdldD86IEVsZW1lbnQsXG4pOiBLZXlib2FyZEV2ZW50IHtcbiAgLy8gTk9URTogQ2Fubm90ICd0eXBlJyB0aGUgZXZlbnQgaGVyZSBkdWUgdG8gdGhlIG5vdGUgYWJvdXQgRmlyZUZveCBiZWxvd1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlib2FyZEV2ZW50JykgYXMgYW55O1xuICBldmVudC5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgZmFsc2UpO1xuICBjb25zdCBvcmlnaW5hbFByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkID0gZXZlbnQucHJldmVudERlZmF1bHQ7XG5cbiAgLy8gTk9URTogV2Via2l0IEJyb3dzZXJzIGRvbid0IHNldCB0aGUga2V5Q29kZSB3aGVuIGNhbGxpbmcgdGhlIGluaXQgZnVuY3Rpb24uXG4gIC8vIFNlZSByZWxhdGVkIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MzVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZXZlbnQsIHtcbiAgICBjb2RlOiB7IGdldDogKCkgPT4ga2V5LmNvZGUgfSxcbiAgICBrZXk6IHsgZ2V0OiAoKSA9PiBrZXkuY29kZSB9LFxuICAgIGtleUNvZGU6IHsgZ2V0OiAoKSA9PiBrZXkua2V5Q29kZSB9LFxuICAgIHRhcmdldDogeyBnZXQ6ICgpID0+IHRhcmdldCB9LFxuICB9KTtcblxuICAvLyBOT1RFOiBJRSB3b24ndCBzZXQgYGRlZmF1bHRQcmV2ZW50ZWRgIG9uIHN5bnRoZXRpYyBldmVudHMgc28gd2UgbmVlZCB0byBkbyBpdCBtYW51YWxseS5cbiAgZXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpOiB2b2lkIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICdkZWZhdWx0UHJldmVudGVkJywgeyBnZXQ6ICgpID0+IHRydWUgfSk7XG4gICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoeSB0aGlzIGBhcyBhbnlgIGlzIG5lZWRlZCBub3dcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiBvcmlnaW5hbFByZXZlbnREZWZhdWx0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyBhcyBhbnkpO1xuICB9O1xuXG4gIHJldHVybiBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xufVxuIl19