summaryrefslogtreecommitdiff
path: root/source/github-events/on-field-keydown.tsx
blob: 1b7104e3d6fe3626ecb91e02e9810544760060a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import select from 'select-dom';
import delegate from 'delegate-it';

type DelegateFieldEvent = delegate.EventHandler<KeyboardEvent, HTMLTextAreaElement>;

function onFieldKeydown(selector: string, callback: DelegateFieldEvent): void {
	delegate<HTMLTextAreaElement, 'keydown'>(document, selector, 'keydown', event => {
		const field = event.delegateTarget;

		// The suggester is GitHub’s autocomplete dropdown
		if (select.exists('.suggester', field.form!) || event.isComposing) {
			return;
		}

		callback(event);
	}, {
		// Adds support for `esc` key; GitHub seems to use `stopPropagation` on it
		capture: true
	});
}

export function onCommentFieldKeydown(callback: DelegateFieldEvent): void {
	onFieldKeydown('.js-comment-field, #commit-description-textarea', callback);
}

export function onConversationTitleFieldKeydown(callback: DelegateFieldEvent): void {
	onFieldKeydown('#issue_title', callback);
}