@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 • 5.07 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
var event = document.createEvent('KeyboardEvent');
event.initEvent(type, true, false);
var 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: function () { return key.code; } },
key: { get: function () { return key.code; } },
keyCode: { get: function () { return key.keyCode; } },
target: { get: function () { return 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: function () { return 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtleWJvYXJkLWV2ZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy90ZXN0aW5nLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL2V2ZW50cy9jcmVhdGUta2V5Ym9hcmQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsSUFBWSxFQUNaLEdBQVksRUFDWixNQUFnQjtJQUVoQix5RUFBeUU7SUFDekUsOERBQThEO0lBQzlELElBQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFRLENBQUM7SUFDM0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLElBQU0sc0JBQXNCLEdBQWUsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUVoRSw4RUFBOEU7SUFDOUUsZ0VBQWdFO0lBQ2hFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7UUFDN0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQU0sT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFSLENBQVEsRUFBRTtRQUM3QixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBTSxPQUFBLEdBQUcsQ0FBQyxJQUFJLEVBQVIsQ0FBUSxFQUFFO1FBQzVCLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFNLE9BQUEsR0FBRyxDQUFDLE9BQU8sRUFBWCxDQUFXLEVBQUU7UUFDbkMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQU0sT0FBQSxNQUFNLEVBQU4sQ0FBTSxFQUFFO0tBQzlCLENBQUMsQ0FBQztJQUVILDBGQUEwRjtJQUMxRixLQUFLLENBQUMsY0FBYyxHQUFHO1FBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQU0sT0FBQSxJQUFJLEVBQUosQ0FBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxrREFBa0Q7UUFDbEQsOERBQThEO1FBQzlELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFnQixDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFzQixDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlDb2RlIH0gZnJvbSAnQHRlcm1pbnVzL25neC10b29scy9rZXljb2Rlcyc7XG5cblxuLyoqXG4gKiBEaXNwYXRjaGVzIGEga2V5ZG93biBldmVudCBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHR5cGUgLSBUaGUgZXZlbnQgdHlwZVxuICogQHBhcmFtIGtleSAtIFRoZSBLZXlDb2RlIHR5cGVcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAqIEByZXR1cm5zIFRoZSBldmVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBjcmVhdGVLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgRU5URVIsIG15SW5wdXROYXRpdmVFbGVtZW50KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkRXZlbnQoXG4gIHR5cGU6IHN0cmluZyxcbiAga2V5OiBLZXlDb2RlLFxuICB0YXJnZXQ/OiBFbGVtZW50LFxuKTogS2V5Ym9hcmRFdmVudCB7XG4gIC8vIE5PVEU6IENhbm5vdCAndHlwZScgdGhlIGV2ZW50IGhlcmUgZHVlIHRvIHRoZSBub3RlIGFib3V0IEZpcmVGb3ggYmVsb3dcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnS2V5Ym9hcmRFdmVudCcpIGFzIGFueTtcbiAgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHRydWUsIGZhbHNlKTtcbiAgY29uc3Qgb3JpZ2luYWxQcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZCA9IGV2ZW50LnByZXZlbnREZWZhdWx0O1xuXG4gIC8vIE5PVEU6IFdlYmtpdCBCcm93c2VycyBkb24ndCBzZXQgdGhlIGtleUNvZGUgd2hlbiBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLlxuICAvLyBTZWUgcmVsYXRlZCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzM1XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGV2ZW50LCB7XG4gICAgY29kZTogeyBnZXQ6ICgpID0+IGtleS5jb2RlIH0sXG4gICAga2V5OiB7IGdldDogKCkgPT4ga2V5LmNvZGUgfSxcbiAgICBrZXlDb2RlOiB7IGdldDogKCkgPT4ga2V5LmtleUNvZGUgfSxcbiAgICB0YXJnZXQ6IHsgZ2V0OiAoKSA9PiB0YXJnZXQgfSxcbiAgfSk7XG5cbiAgLy8gTk9URTogSUUgd29uJ3Qgc2V0IGBkZWZhdWx0UHJldmVudGVkYCBvbiBzeW50aGV0aWMgZXZlbnRzIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHkuXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnZGVmYXVsdFByZXZlbnRlZCcsIHsgZ2V0OiAoKSA9PiB0cnVlIH0pO1xuICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB3aHkgdGhpcyBgYXMgYW55YCBpcyBuZWVkZWQgbm93XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gb3JpZ2luYWxQcmV2ZW50RGVmYXVsdC5hcHBseSh0aGlzLCBhcmd1bWVudHMgYXMgYW55KTtcbiAgfTtcblxuICByZXR1cm4gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcbn1cbiJdfQ==