MCPcopy
hub / github.com/refined-github/refined-github / observe

Function observe

source/helpers/selector-observer.tsx:29–113  ·  view source on GitHub ↗
(
	selectors: Selector | readonly Selector[],
	listener: ObserverListener<ExpectedElement>,
	{signal, stopOnDomReady, once, ancestor}: Options = {},
)

Source from the content-addressed store, hash-verified

27});
28
29export default function observe<
30 Selector extends string,
31 ExpectedElement extends ParseSelector<Selector, HTMLElement | SVGElement>,
32>(
33 selectors: Selector | readonly Selector[],
34 listener: ObserverListener<ExpectedElement>,
35 {signal, stopOnDomReady, once, ancestor}: Options = {},
36): void {
37 if (signal?.aborted) {
38 return;
39 }
40
41 if (stopOnDomReady) {
42 const delayedDomReady = signalFromPromise((async () => {
43 await domLoaded;
44 await delay(100); // Allow the animation and events to complete; Also adds support for ajaxed pages
45 })());
46
47 signal = mergeSignals(signal, delayedDomReady);
48 }
49
50 let onceController: AbortController | undefined;
51 if (once) {
52 onceController = new AbortController();
53 signal = mergeSignals(signal, onceController.signal);
54 }
55
56 const selector = typeof selectors === 'string' ? selectors : selectors.join(',\n');
57 const seenMark = 'rgh-seen-' + getCallerId(ancestor);
58
59 registerAnimation();
60
61 const rule = document.createElement('style');
62 // Enable when/if needed
63 // if (isDevelopmentVersion()) {
64 // // For debuggability
65 // rule.setAttribute('s', selector);
66 // }
67
68 rule.textContent = css`
69 :where(${selector}):not(.${seenMark}) {
70 animation: 1ms ${animation};
71 }
72 `;
73 document.body.prepend(rule);
74 signal?.addEventListener('abort', () => {
75 rule.remove();
76 });
77
78 let wasCalled = false;
79 // Capture stack outside
80 const currentFeature = parseFeatureNameFromStack();
81 (async () => {
82 const {logging} = await optionsStorage.getAll();
83 if (!logging) {
84 return;
85 }
86

Callers 15

waitForPrMergeFunction · 0.85
waitForElementFunction · 0.85
initFunction · 0.85
initOnceFunction · 0.85
initFunction · 0.85
initFunction · 0.85
initFunction · 0.85
initFunction · 0.85
initFunction · 0.85
initPrConversationFunction · 0.85
initOnceFunction · 0.85
initFunction · 0.85

Calls 7

delayFunction · 0.85
getCallerIdFunction · 0.85
listenerFunction · 0.85
prependMethod · 0.80
removeMethod · 0.80
matchesMethod · 0.80

Tested by

no test coverage detected