diff options
| author | Arpit Chakladar <arpitchakladar+git@gmail.com> | 2026-07-13 23:32:26 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-13 23:32:26 +0530 |
| commit | ce401d03e75bcbfd1cdfa963954e0807219fb80d (patch) | |
| tree | 52a813c1705a952312c20c328b00fa845a3453f9 /src/shared/observe-dom.ts | |
| parent | 98e7019c61ea0ffe344ef7ce809d38d62254a9fc (diff) | |
| parent | dfba7ff6fff7bde33b40a343a2318b35c429b40f (diff) | |
| download | banglar-bhumi-utils-ce401d03e75bcbfd1cdfa963954e0807219fb80d.tar.gz banglar-bhumi-utils-ce401d03e75bcbfd1cdfa963954e0807219fb80d.zip | |
Merge pull request #6 from arpitchakladar/adding-documentation-comments
Adding documentation comments
Diffstat (limited to 'src/shared/observe-dom.ts')
| -rw-r--r-- | src/shared/observe-dom.ts | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/shared/observe-dom.ts b/src/shared/observe-dom.ts index e82ce1e..ee6a51f 100644 --- a/src/shared/observe-dom.ts +++ b/src/shared/observe-dom.ts @@ -1,17 +1,20 @@ type ObserveDOMCallback = () => boolean; -let callbacks: (ObserveDOMCallback | null)[] = []; -let callbacksCalledCount = 0; +const callbacks: ObserveDOMCallback[] = []; +/** + * Starts a MutationObserver on the document that invokes each + * registered callback. A callback should return `true` when it + * has completed its work; once all callbacks are done the observer + * disconnects. + */ const observer = new MutationObserver(() => { for (let i = 0; i < callbacks.length; i++) { const callback = callbacks[i]; - if (callback && callback()) { - callbacksCalledCount++; - callbacks[i] = null; - } + if (callback()) + callbacks.splice(i, 1); - if (callbacksCalledCount >= callbacks.length) { + if (callbacks.length <= 0) { observer.disconnect(); break; @@ -24,6 +27,14 @@ observer.observe(document, { subtree: true }); -export function observeDOM(callback: ObserveDOMCallback) { +/** + * Registers a callback to run on DOM mutations. + * The callback is invoked on each mutation tick and should return `true` + * when its work is finished. When all callbacks have completed the + * observer stops. + * + * @param callback - Function that returns `true` when done. + */ +export function observeDOM(callback: ObserveDOMCallback): void { callbacks.push(callback); }; |
