diff options
Diffstat (limited to 'source/features/highlight-deleted-and-added-files-in-diffs.tsx')
-rw-r--r-- | source/features/highlight-deleted-and-added-files-in-diffs.tsx | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/source/features/highlight-deleted-and-added-files-in-diffs.tsx b/source/features/highlight-deleted-and-added-files-in-diffs.tsx index dc3e5cac..36d8078a 100644 --- a/source/features/highlight-deleted-and-added-files-in-diffs.tsx +++ b/source/features/highlight-deleted-and-added-files-in-diffs.tsx @@ -1,19 +1,21 @@ import React from 'dom-chef'; import select from 'select-dom'; -import oneTime from 'onetime'; -import {observe} from 'selector-observer'; import elementReady from 'element-ready'; import * as pageDetect from 'github-url-detection'; +import {observe, Observer} from 'selector-observer'; import features from '.'; import {observeOneMutation} from '../helpers/simplified-element-observer'; +let observer: Observer; + async function loadDeferred(jumpList: Element): Promise<void> { - const loadJumpList = (jumpList: Element) => jumpList.parentElement!.dispatchEvent(new MouseEvent('mouseover')); - loadJumpList(jumpList); - // The event listener might not have been attached yet, so we can try twice - setTimeout(loadJumpList, 1000, jumpList); + // This event will trigger the loading, but if run too early, GitHub might not have attached the listener yet, so we try multiple times. + const retrier = setInterval(() => { + jumpList.parentElement!.dispatchEvent(new MouseEvent('mouseover')); + }, 100); await observeOneMutation(jumpList); + clearInterval(retrier); } async function init(): Promise<void> { @@ -25,7 +27,7 @@ async function init(): Promise<void> { await loadDeferred(fileList!); } - observe('.file-info [href]:not(.rgh-pr-file-state)', { + observer = observe('.file-info [href]:not(.rgh-pr-file-state)', { constructor: HTMLAnchorElement, add(filename) { filename.classList.add('rgh-pr-file-state'); @@ -65,6 +67,7 @@ void features.add({ pageDetect.isPRFile404, pageDetect.isPRCommit404 ], - init: oneTime(init), + init, + deinit: () => observer.abort(), waitForDomReady: false }); |