summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/features/fit-textareas.tsx41
1 files changed, 8 insertions, 33 deletions
diff --git a/source/features/fit-textareas.tsx b/source/features/fit-textareas.tsx
index 46ac127f..e4c5f206 100644
--- a/source/features/fit-textareas.tsx
+++ b/source/features/fit-textareas.tsx
@@ -1,41 +1,29 @@
import './fit-textareas.css';
-import select from 'select-dom';
-import delegate, {DelegateEvent} from 'delegate-it';
import {isSafari} from 'webext-detect-page';
import fitTextarea from 'fit-textarea';
import * as pageDetect from 'github-url-detection';
import features from '../feature-manager';
-import onPrMergePanelOpen from '../github-events/on-pr-merge-panel-open';
+import observe from '../helpers/selector-observer';
function inputListener({target}: Event): void {
fitTextarea(target as HTMLTextAreaElement);
}
-function watchTextarea(textarea: HTMLTextAreaElement): void {
- textarea.addEventListener('input', inputListener); // The user triggers `input` event
- textarea.addEventListener('change', inputListener); // File uploads trigger `change` events
+function watchTextarea(textarea: HTMLTextAreaElement, {signal}: SignalAsOptions): void {
+ textarea.addEventListener('input', inputListener, {signal}); // The user triggers `input` event
+ textarea.addEventListener('change', inputListener, {signal}); // File uploads trigger `change` events
+ textarea.form?.addEventListener('reset', inputListener, {signal});
fitTextarea(textarea);
// Disable constrained native feature
textarea.classList.replace('js-size-to-fit', 'rgh-fit-textareas');
}
-function focusListener({delegateTarget: textarea}: DelegateEvent<Event, HTMLTextAreaElement>): void {
- watchTextarea(textarea);
-}
-
-function fitPrCommitMessageBox(): void {
- watchTextarea(select('textarea[name="commit_message"]')!);
-}
-
function init(signal: AbortSignal): void {
- // Exclude PR review box because it's in a `position:fixed` container; The scroll HAS to appear within the fixed element.
- delegate('textarea:not(#pull_request_review_body)', 'focusin', focusListener, {signal});
-
- for (const textArea of select.all('textarea')) {
- watchTextarea(textArea);
- }
+ // Exclude PR review box because it's in a `position:fixed` container;
+ // The scroll HAS to appear within the fixed element.
+ observe('textarea:not(#pull_request_review_body)', watchTextarea, {signal});
}
void features.add(import.meta.url, {
@@ -45,18 +33,5 @@ void features.add(import.meta.url, {
exclude: [
isSafari,
],
- awaitDomReady: true, // TODO: Probably doesn't have to
init,
-}, {
- include: [
- pageDetect.isPRConversation,
- ],
- exclude: [
- isSafari,
- ],
- additionalListeners: [
- onPrMergePanelOpen,
- ],
- onlyAdditionalListeners: true,
- init: fitPrCommitMessageBox,
});