diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/features/batch-mark-files-as-viewed.tsx | 2 | ||||
-rw-r--r-- | source/features/clone-branch.tsx | 2 | ||||
-rw-r--r-- | source/features/close-out-of-view-modals.tsx | 2 | ||||
-rw-r--r-- | source/features/convert-release-to-draft.tsx | 2 | ||||
-rw-r--r-- | source/features/copy-file.tsx | 2 | ||||
-rw-r--r-- | source/features/first-published-tag-for-merged-pr.tsx | 9 | ||||
-rw-r--r-- | source/features/hide-useless-comments.tsx | 2 | ||||
-rw-r--r-- | source/features/prevent-duplicate-pr-submission.tsx | 2 | ||||
-rw-r--r-- | source/features/prevent-pr-commit-link-loss.tsx | 2 | ||||
-rw-r--r-- | source/features/quick-review-buttons.tsx | 2 | ||||
-rw-r--r-- | source/features/warning-for-disallow-edits.tsx | 4 | ||||
-rw-r--r-- | source/github-events/on-conversation-header-update.ts | 12 | ||||
-rw-r--r-- | source/github-events/on-field-keydown.tsx | 2 | ||||
-rw-r--r-- | source/globals.d.ts | 2 | ||||
-rw-r--r-- | source/options.tsx | 2 |
15 files changed, 31 insertions, 18 deletions
diff --git a/source/features/batch-mark-files-as-viewed.tsx b/source/features/batch-mark-files-as-viewed.tsx index b5d26fa3..8f518978 100644 --- a/source/features/batch-mark-files-as-viewed.tsx +++ b/source/features/batch-mark-files-as-viewed.tsx @@ -8,7 +8,7 @@ import {clickAll} from './toggle-everything-with-alt'; let previousFile: HTMLElement | undefined; -function remember(event: delegate.Event<Event, HTMLFormElement>): void { +function remember(event: delegate.Event): void { previousFile = event.delegateTarget.closest<HTMLElement>('.js-file')!; } diff --git a/source/features/clone-branch.tsx b/source/features/clone-branch.tsx index 92a7f64f..0ae953f4 100644 --- a/source/features/clone-branch.tsx +++ b/source/features/clone-branch.tsx @@ -38,7 +38,7 @@ async function createBranch(newBranchName: string, baseSha: string): Promise<tru return response.ok || response.message; } -async function cloneBranch({delegateTarget: cloneButton}: delegate.Event<MouseEvent, HTMLButtonElement>): Promise<void> { +async function cloneBranch({delegateTarget: cloneButton}: delegate.Event): Promise<void> { const branchName = cloneButton.closest('[branch]')!.getAttribute('branch')!; const currentBranch = getBranchBaseSha(branchName); diff --git a/source/features/close-out-of-view-modals.tsx b/source/features/close-out-of-view-modals.tsx index 650f542e..88a8044c 100644 --- a/source/features/close-out-of-view-modals.tsx +++ b/source/features/close-out-of-view-modals.tsx @@ -25,7 +25,7 @@ const observer = new IntersectionObserver(entries => { let lastOpen: number; let delegation: delegate.Subscription; -function menuActivatedHandler(event: CustomEvent): void { +function menuActivatedHandler(event: delegate.Event): void { const details = event.target as HTMLDetailsElement; // Safety check #3742 diff --git a/source/features/convert-release-to-draft.tsx b/source/features/convert-release-to-draft.tsx index f05d62cb..3bbabc24 100644 --- a/source/features/convert-release-to-draft.tsx +++ b/source/features/convert-release-to-draft.tsx @@ -7,7 +7,7 @@ import features from '.'; import * as api from '../github-helpers/api'; import LoadingIcon from '../github-helpers/icon-loading'; -async function convertToDraft({delegateTarget: draftButton}: delegate.Event<MouseEvent, HTMLButtonElement>): Promise<void> { +async function convertToDraft({delegateTarget: draftButton}: delegate.Event): Promise<void> { try { draftButton.append(<LoadingIcon className="ml-2 v-align-text-bottom" width={16}/>); diff --git a/source/features/copy-file.tsx b/source/features/copy-file.tsx index c2f4f924..8ee7fd27 100644 --- a/source/features/copy-file.tsx +++ b/source/features/copy-file.tsx @@ -7,7 +7,7 @@ import copyToClipboard from 'copy-text-to-clipboard'; import features from '.'; import {groupButtons} from '../github-helpers/group-buttons'; -function handleClick({delegateTarget: button}: delegate.Event<MouseEvent, HTMLButtonElement>): void { +function handleClick({delegateTarget: button}: delegate.Event): void { const file = button.closest('.Box, .js-gist-file-update-container')!; const content = select.all('.blob-code-inner', file) .map(({innerText: line}) => line === '\n' ? '' : line) // Must be `.innerText` diff --git a/source/features/first-published-tag-for-merged-pr.tsx b/source/features/first-published-tag-for-merged-pr.tsx index d5901789..135bbc1a 100644 --- a/source/features/first-published-tag-for-merged-pr.tsx +++ b/source/features/first-published-tag-for-merged-pr.tsx @@ -6,8 +6,8 @@ import * as pageDetect from 'github-url-detection'; import features from '.'; import fetchDom from '../helpers/fetch-dom'; -import observeElement from '../helpers/simplified-element-observer'; import {buildRepoURL, getRepo} from '../github-helpers'; +import onConversationHeaderUpdate from '../github-events/on-conversation-header-update'; const getFirstTag = cache.function(async (commit: string): Promise<string | undefined> => { const firstTag = await fetchDom<HTMLAnchorElement>( @@ -50,7 +50,8 @@ void features.add(__filebasename, { include: [ () => pageDetect.isPRConversation() && pageDetect.isMergedPR() ], - init() { - observeElement(select('#partial-discussion-header')!.parentElement!, init); - } + additionalListeners: [ + onConversationHeaderUpdate + ], + init }); diff --git a/source/features/hide-useless-comments.tsx b/source/features/hide-useless-comments.tsx index 30a8d847..3cfb89b7 100644 --- a/source/features/hide-useless-comments.tsx +++ b/source/features/hide-useless-comments.tsx @@ -8,7 +8,7 @@ import * as pageDetect from 'github-url-detection'; import features from '.'; import isUselessComment from '../helpers/is-useless-comment'; -async function unhide(event: delegate.Event<MouseEvent, HTMLButtonElement>): Promise<void> { +async function unhide(event: delegate.Event): Promise<void> { for (const comment of select.all('.rgh-hidden-comment')) { comment.hidden = false; } diff --git a/source/features/prevent-duplicate-pr-submission.tsx b/source/features/prevent-duplicate-pr-submission.tsx index 743d8da8..1d14061f 100644 --- a/source/features/prevent-duplicate-pr-submission.tsx +++ b/source/features/prevent-duplicate-pr-submission.tsx @@ -5,7 +5,7 @@ import features from '.'; let previousSubmission = 0; -function preventSubmit(event: delegate.Event<MouseEvent, HTMLButtonElement>): void { +function preventSubmit(event: delegate.Event): void { if (Date.now() - previousSubmission < 1000) { event.preventDefault(); } diff --git a/source/features/prevent-pr-commit-link-loss.tsx b/source/features/prevent-pr-commit-link-loss.tsx index 80ea157e..88191cd8 100644 --- a/source/features/prevent-pr-commit-link-loss.tsx +++ b/source/features/prevent-pr-commit-link-loss.tsx @@ -25,7 +25,7 @@ function getUI(field: HTMLTextAreaElement): HTMLElement { ); } -const updateUI = debounceFn(({delegateTarget: field}: delegate.Event<InputEvent, HTMLTextAreaElement>): void => { +const updateUI = debounceFn(({delegateTarget: field}: delegate.Event<Event, HTMLTextAreaElement>): void => { // The replacement logic is not just in the regex, so it alone can't be used to detect the need for the replacement if (field.value === field.value.replace(prCommitUrlRegex, preventPrCommitLinkLoss) && field.value === field.value.replace(prCompareUrlRegex, preventPrCompareLinkLoss)) { getUI(field).remove(); diff --git a/source/features/quick-review-buttons.tsx b/source/features/quick-review-buttons.tsx index a67dba0e..1985e635 100644 --- a/source/features/quick-review-buttons.tsx +++ b/source/features/quick-review-buttons.tsx @@ -73,7 +73,7 @@ function init(): false | void { select('[type="submit"]:not([name])', form)!.remove(); // The selector excludes the "Cancel" button // This will prevent submission when clicking "Comment" and "Request changes" without entering a comment and no other review comments are pending - delegate<HTMLButtonElement>(form, 'button', 'click', ({delegateTarget: {value}}) => { + delegate(form, 'button', 'click', ({delegateTarget: {value}}) => { const pendingComments = looseParseInt(select('.js-reviews-toggle .js-pending-review-comment-count')!); const submissionRequiresComment = pendingComments === 0 && (value === 'reject' || value === 'comment'); select('#pull_request_review_body', form)!.toggleAttribute('required', submissionRequiresComment); diff --git a/source/features/warning-for-disallow-edits.tsx b/source/features/warning-for-disallow-edits.tsx index 8606cf25..39bdf76f 100644 --- a/source/features/warning-for-disallow-edits.tsx +++ b/source/features/warning-for-disallow-edits.tsx @@ -23,7 +23,7 @@ function update(checkbox: HTMLInputElement): void { } } -function toggleHandler(event: delegate.Event<UIEvent, HTMLInputElement>): void { +function toggleHandler(event: delegate.Event<Event, HTMLInputElement>): void { update(event.delegateTarget); } @@ -34,7 +34,7 @@ function init(): void | false { } update(checkbox); // The sidebar checkbox may already be un-checked - delegate(document, '[name="collab_privs"]', 'change', toggleHandler); + delegate(document, 'input[name="collab_privs"]', 'change', toggleHandler); } void features.add(__filebasename, { diff --git a/source/github-events/on-conversation-header-update.ts b/source/github-events/on-conversation-header-update.ts new file mode 100644 index 00000000..7c85df79 --- /dev/null +++ b/source/github-events/on-conversation-header-update.ts @@ -0,0 +1,12 @@ +import select from 'select-dom'; + +import observeElement from '../helpers/simplified-element-observer'; + +export default function onConversationHeaderUpdate(callback: VoidFunction): void { + const conversationHeader = select('#partial-discussion-header'); + if (conversationHeader) { + observeElement(conversationHeader.parentElement!, callback, { + childList: true + }); + } +} diff --git a/source/github-events/on-field-keydown.tsx b/source/github-events/on-field-keydown.tsx index 1b4be8c1..1b7104e3 100644 --- a/source/github-events/on-field-keydown.tsx +++ b/source/github-events/on-field-keydown.tsx @@ -4,7 +4,7 @@ import delegate from 'delegate-it'; type DelegateFieldEvent = delegate.EventHandler<KeyboardEvent, HTMLTextAreaElement>; function onFieldKeydown(selector: string, callback: DelegateFieldEvent): void { - delegate<HTMLTextAreaElement, KeyboardEvent>(document, selector, 'keydown', event => { + delegate<HTMLTextAreaElement, 'keydown'>(document, selector, 'keydown', event => { const field = event.delegateTarget; // The suggester is GitHub’s autocomplete dropdown diff --git a/source/globals.d.ts b/source/globals.d.ts index 7c87ebed..ac8fcde4 100644 --- a/source/globals.d.ts +++ b/source/globals.d.ts @@ -32,10 +32,10 @@ interface GlobalEventHandlersEventMap { 'page:loaded': CustomEvent; 'pjax:start': CustomEvent; 'session:resume': CustomEvent; + 'input': InputEvent; // Remove once no longer necessary (2022?) } declare namespace JSX { - interface Element extends SVGElement, HTMLElement, DocumentFragment {} interface IntrinsicElements { 'clipboard-copy': IntrinsicElements.button & {for?: string}; 'details-dialog': IntrinsicElements.div & {tabindex: string}; diff --git a/source/options.tsx b/source/options.tsx index 6cbeecb9..87d412cb 100644 --- a/source/options.tsx +++ b/source/options.tsx @@ -212,7 +212,7 @@ function addEventListeners(): void { select('[name="personalToken"]')!.addEventListener('input', validateToken); // Ensure all links open in a new tab #3181 - delegate(document, '[href^="http"]', 'click', (event: delegate.Event<MouseEvent, HTMLAnchorElement>) => { + delegate(document, 'a[href^="http"]', 'click', event => { event.preventDefault(); window.open(event.delegateTarget.href); }); |