@@ -2,7 +2,12 @@ function warn(message) {
2
2
console . warn ( `squashed-merge-message: ${ message } ` ) ;
3
3
}
4
4
5
- function copyPrDescription ( event ) {
5
+ function debug ( message ) {
6
+ console . debug ( `squashed-merge-message: ${ message } ` ) ;
7
+ }
8
+
9
+ function copyPrDescription ( ) {
10
+ debug ( 'copy PR description' ) ;
6
11
const prTitleEl = document . getElementById ( 'issue_title' ) ;
7
12
if ( ! prTitleEl ) {
8
13
warn ( 'failed to find PR title element' ) ;
@@ -54,13 +59,16 @@ function copyPrDescription(event) {
54
59
}
55
60
56
61
function waitForElement ( selector ) {
62
+ debug ( `wait for element ${ selector } ` ) ;
57
63
return new Promise ( resolve => {
58
64
if ( document . querySelector ( selector ) ) {
65
+ debug ( `found element ${ selector } ` ) ;
59
66
return resolve ( document . querySelector ( selector ) ) ;
60
67
}
61
68
62
69
const observer = new MutationObserver ( ( ) => {
63
70
if ( document . querySelector ( selector ) ) {
71
+ debug ( `found element ${ selector } ` ) ;
64
72
resolve ( document . querySelector ( selector ) ) ;
65
73
observer . disconnect ( ) ;
66
74
}
@@ -73,7 +81,8 @@ function waitForElement(selector) {
73
81
} ) ;
74
82
}
75
83
76
- async function addMergeListener ( event ) {
84
+ async function addMergeListener ( ) {
85
+ debug ( 'add merge listener' ) ;
77
86
const prMergePanel = await waitForElement ( '.js-merge-pr:not(.is-rebasing)' ) ;
78
87
if ( ! prMergePanel ) {
79
88
warn ( 'failed to find PR merge panel' ) ;
@@ -83,7 +92,24 @@ async function addMergeListener(event) {
83
92
prMergePanel . addEventListener ( 'details:toggled' , copyPrDescription ) ;
84
93
}
85
94
95
+ async function addPjaxEndListener ( ) {
96
+ debug ( 'add pjax:end listener' ) ;
97
+ document . addEventListener ( 'pjax:end' , addMergeListener ) ;
98
+ }
99
+
100
+ async function addCommentsListener ( ) {
101
+ debug ( 'add comments listener' ) ;
102
+ const comments = await waitForElement ( '.js-discussion' ) ;
103
+ if ( ! comments ) {
104
+ warn ( 'failed to find comments' ) ;
105
+ return ;
106
+ }
107
+ const observer = new MutationObserver ( addMergeListener ) ;
108
+ observer . observe ( comments , { childList : true } ) ;
109
+ }
110
+
86
111
function main ( ) {
112
+ debug ( 'main' ) ;
87
113
// Only run on PR pages
88
114
if ( ! window . location . pathname . match ( '/pull/[0-9]+$' ) ) return ;
89
115
@@ -92,15 +118,11 @@ function main() {
92
118
93
119
// And on AJAX events
94
120
// (Happens when you switch from PR diff or commits back to merge)
95
- document . addEventListener ( 'pjax:end' , addMergeListener ) ;
121
+ addPjaxEndListener ( ) ;
96
122
97
123
// And when new comments are added, removed, edited, etc.
98
124
// (Something about how GitHub refreshes the comments discards all events ¯\_(ツ)_/¯)
99
- const comments = document . querySelector ( '.js-discussion' ) ;
100
- if ( comments ) {
101
- const observer = new MutationObserver ( addMergeListener ) ;
102
- observer . observe ( comments , { childList : true } ) ;
103
- }
125
+ addCommentsListener ( ) ;
104
126
}
105
127
106
128
main ( ) ;
0 commit comments