summaryrefslogtreecommitdiff
path: root/source/features/highlight-deleted-and-added-files-in-diffs.tsx
diff options
context:
space:
mode:
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.tsx19
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
});