summaryrefslogtreecommitdiff
path: root/source/features/avoid-accidental-submissions.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'source/features/avoid-accidental-submissions.tsx')
-rw-r--r--source/features/avoid-accidental-submissions.tsx46
1 files changed, 33 insertions, 13 deletions
diff --git a/source/features/avoid-accidental-submissions.tsx b/source/features/avoid-accidental-submissions.tsx
index 5390046a..80893a6e 100644
--- a/source/features/avoid-accidental-submissions.tsx
+++ b/source/features/avoid-accidental-submissions.tsx
@@ -1,7 +1,9 @@
+import React from 'dom-chef';
import select from 'select-dom';
import delegate from 'delegate-it';
import * as pageDetect from 'github-url-detection';
+import {isMac} from '../github-helpers';
import features from '.';
function addQuickSubmit(): void {
@@ -9,32 +11,50 @@ function addQuickSubmit(): void {
}
function onKeyDown(event: delegate.Event<KeyboardEvent, HTMLInputElement>): void {
+ const field = event.delegateTarget;
+ const form = field.form!;
if (
event.key !== 'Enter'
|| event.ctrlKey
|| event.metaKey
|| event.isComposing // #4323
- || select.exists('.suggester', event.delegateTarget.form!) // GitHub’s autocomplete dropdown
+ || select.exists([
+ '.suggester', // GitHub’s autocomplete dropdown
+ '.rgh-avoid-accidental-submissions',
+ ], form)
) {
return;
}
+ if (select.exists('.btn-primary[type="submit"]:disabled', form)) {
+ return;
+ }
+
+ const spacingClasses = pageDetect.isNewFile() || pageDetect.isEditingFile() ? 'my-1' : 'mt-2 mb-n1';
+
+ const message = (
+ <p className={'rgh-avoid-accidental-submissions ' + spacingClasses}>
+ A submission via <kbd>enter</kbd> has been prevented. You can press <kbd>enter</kbd> again or use <kbd>{isMac ? 'cmd' : 'ctrl'}</kbd><kbd>enter</kbd>.
+ </p>
+ );
+ if (pageDetect.isNewFile() || pageDetect.isEditingFile() || pageDetect.isPRConversation()) {
+ field.after(message);
+ } else {
+ field.parentElement!.append(message);
+ }
+
event.preventDefault();
- select([
- '#issue_body',
- '#pull_request_body',
- '#commit-description-textarea',
- '#merge_message_field',
- ], event.delegateTarget.form!)!.focus();
}
+const inputElements = [
+ 'form.new_issue input#issue_title',
+ 'input#pull_request_title',
+ 'input#commit-summary-input',
+ '#merge_title_field',
+];
+
function init(): void {
- delegate(document, [
- 'form.new_issue input#issue_title',
- 'input#pull_request_title',
- 'input#commit-summary-input',
- '#merge_title_field',
- ].join(','), 'keydown', onKeyDown);
+ delegate(document, inputElements.join(','), 'keydown', onKeyDown);
}
void features.add(__filebasename, {