blob: d8df675b337dac913abdeab389de4cc49f803b42 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// Memoization here is used to let onPrMergePanelOpen() be called multiple times without risking multiple attached handlers
import mem from 'mem';
import delegate, {DelegateSubscription, DelegateEvent} from 'delegate-it';
const delegateHandler = mem((callback: EventListener) => (event: DelegateEvent) => {
if (event.delegateTarget.matches('.open')) {
callback(event);
}
});
const sessionResumeHandler = mem((callback: EventListener) => async (event: Event) => {
await Promise.resolve(); // The `session:resume` event fires a bit too early
callback(event);
});
export default function (callback: EventListener): DelegateSubscription[] {
document.addEventListener(
'session:resume',
sessionResumeHandler(callback)
);
return [
{
// Imitate a DelegateSubscription for this event as well
destroy() {
document.removeEventListener(
'session:resume',
sessionResumeHandler(callback)
);
}
},
...delegate(
'#discussion_bucket',
'.js-merge-pr:not(.is-rebasing)',
'details:toggled',
delegateHandler(callback)
)
];
}
|