Skip to content
This repository was archived by the owner on Jan 24, 2023. It is now read-only.

Commit e1449ff

Browse files
authored
Wait for PR merge panel (#24)
It seems GitHub is now dynamically creating the PR merge panel which means it is not present at the time squashed-merge-message runs. Using MutationObserver, we can wait for the element to appear before adding any listeners to it. Fixes #23
1 parent 740322d commit e1449ff

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

content.js

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,32 @@ function copyPrDescription(event) {
5050
messageFields.forEach(f => f.value = commitBody);
5151
}
5252

53-
function addMergeListener(event) {
54-
const prMergePanel = document.querySelector('.js-merge-pr:not(.is-rebasing)');
55-
if (!prMergePanel) return;
53+
function waitForElement(selector) {
54+
return new Promise(resolve => {
55+
if (document.querySelector(selector)) {
56+
return resolve(document.querySelector(selector));
57+
}
58+
59+
const observer = new MutationObserver(() => {
60+
if (document.querySelector(selector)) {
61+
resolve(document.querySelector(selector));
62+
observer.disconnect();
63+
}
64+
});
65+
66+
observer.observe(document.body, {
67+
childList: true,
68+
subtree: true
69+
});
70+
});
71+
}
72+
73+
async function addMergeListener(event) {
74+
const prMergePanel = await waitForElement('.js-merge-pr:not(.is-rebasing)');
75+
if (!prMergePanel) {
76+
warn('failed to find PR merge panel');
77+
return;
78+
}
5679

5780
prMergePanel.addEventListener('details:toggled', copyPrDescription);
5881
}
@@ -73,7 +96,7 @@ function main() {
7396
const comments = document.querySelector('.js-discussion');
7497
if (comments) {
7598
const observer = new MutationObserver(addMergeListener);
76-
observer.observe(comments, {childList: true});
99+
observer.observe(comments, { childList: true });
77100
}
78101
}
79102

0 commit comments

Comments
 (0)