Skip to content

Commit

Permalink
feat(keyboard): allow to configure keyevent type
Browse files Browse the repository at this point in the history
when configuring the plugin one can pass the keyEvent as a setting, which accepts 'keyup' and 'keydown'.
Ported for v1
  • Loading branch information
zewa666 authored and StrahilKazlachev committed Dec 17, 2018
1 parent 9416094 commit 2755a0b
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/dialog-renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export class DialogRenderer implements Renderer {

public static trackController(dialogController: DialogController): void {
if (!DialogRenderer.dialogControllers.length) {
DOM.addEventListener('keyup', DialogRenderer.keyboardEventHandler, false);
DOM.addEventListener(dialogController.settings.keyEvent || 'keyup', DialogRenderer.keyboardEventHandler, false);
}
DialogRenderer.dialogControllers.push(dialogController);
}
Expand All @@ -91,7 +91,11 @@ export class DialogRenderer implements Renderer {
DialogRenderer.dialogControllers.splice(i, 1);
}
if (!DialogRenderer.dialogControllers.length) {
DOM.removeEventListener('keyup', DialogRenderer.keyboardEventHandler, false);
DOM.removeEventListener(
dialogController.settings.keyEvent || 'keyup',
DialogRenderer.keyboardEventHandler,
false
);
}
}

Expand Down
9 changes: 9 additions & 0 deletions src/dialog-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Container } from 'aurelia-dependency-injection';
import { ViewStrategy } from 'aurelia-templating';

export type ActionKey = 'Escape' | 'Enter';
export type KeyEventType = 'keyup' | 'keydown';

/**
* All available dialog settings.
Expand Down Expand Up @@ -52,6 +53,14 @@ export interface DialogSettings {
*/
keyboard?: boolean | ActionKey | ActionKey[];

/**
* Determines which type of keyevent should be used to listen for
* ENTER and ESC keys
*
* Default: keyup
*/
keyEvent?: KeyEventType;

/**
* When set to "true" allows for the dismissal of the dialog by clicking outside of it.
*/
Expand Down
12 changes: 12 additions & 0 deletions test/unit/dialog-renderer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,18 @@ describe('DialogRenderer', () => {
expect(DialogRenderer.dialogControllers.length).toBe(2);
done();
});

it('sets ESC key event handler with custom event type', async done => {
spyOn(DOM, 'addEventListener');
const keyEvent = 'keydown';
const first = createRenderer({ keyEvent });
const last = createRenderer();
await show(done, first, last);
expect(DOM.addEventListener).toHaveBeenCalledWith(keyEvent, jasmine.any(Function), false);
expect((DOM.addEventListener as jasmine.Spy).calls.count()).toBe(1);
expect(DialogRenderer.dialogControllers.length).toBe(2);
done();
});
});

describe('on last closed dialog', () => {
Expand Down

0 comments on commit 2755a0b

Please sign in to comment.