diff --git a/src/DOMAPI/HTMLCollectionOf.js b/src/MutationObserverAPI.js similarity index 100% rename from src/DOMAPI/HTMLCollectionOf.js rename to src/MutationObserverAPI.js diff --git a/src/MutationObserverAPI.res b/src/MutationObserverAPI.res new file mode 100644 index 0000000..b581c8d --- /dev/null +++ b/src/MutationObserverAPI.res @@ -0,0 +1,19 @@ +open DOMAPI + +/** +[See MutationObserver on MDN](https://developer.mozilla.org/docs/Web/API/MutationObserver) +*/ +@editor.completeFrom(MutationObserver) +type mutationObserver + +type mutationObserverInit = { + mutable childList?: bool, + mutable attributes?: bool, + mutable characterData?: bool, + mutable subtree?: bool, + mutable attributeOldValue?: bool, + mutable characterDataOldValue?: bool, + mutable attributeFilter?: array, +} + +type mutationObserverCallback = (array, mutationObserver) => unit diff --git a/src/MutationObserverAPI/MutationObserver.js b/src/MutationObserverAPI/MutationObserver.js new file mode 100644 index 0000000..d856702 --- /dev/null +++ b/src/MutationObserverAPI/MutationObserver.js @@ -0,0 +1,2 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE +/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/src/MutationObserverAPI/MutationObserver.res b/src/MutationObserverAPI/MutationObserver.res new file mode 100644 index 0000000..057bd0a --- /dev/null +++ b/src/MutationObserverAPI/MutationObserver.res @@ -0,0 +1,27 @@ +open DOMAPI +open MutationObserverAPI + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/MutationObserver) +*/ +@new +external make: mutationObserverCallback => mutationObserver = "MutationObserver" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/MutationObserver/observe) +*/ +@send +external observe: (mutationObserver, ~target: node, ~options: mutationObserverInit=?) => unit = + "observe" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/MutationObserver/disconnect) +*/ +@send +external disconnect: mutationObserver => unit = "disconnect" + +/** +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/MutationObserver/takeRecords) +*/ +@send +external takeRecords: mutationObserver => array = "takeRecords" diff --git a/tests/MutationObserverAPI/MutationObserver__test.js b/tests/MutationObserverAPI/MutationObserver__test.js new file mode 100644 index 0000000..80212a5 --- /dev/null +++ b/tests/MutationObserverAPI/MutationObserver__test.js @@ -0,0 +1,28 @@ +// Generated by ReScript, PLEASE EDIT WITH CARE + + +let observer = new MutationObserver((mutations, obs) => { + let button = document.querySelector("button"); + if (button !== null) { + console.log(button); + obs.disconnect(); + } + console.log(mutations); +}); + +observer.observe(document, { + childList: true, + subtree: true +}); + +let records = observer.takeRecords(); + +console.log(records.length); + +observer.disconnect(); + +export { + observer, + records, +} +/* observer Not a pure module */ diff --git a/tests/MutationObserverAPI/MutationObserver__test.res b/tests/MutationObserverAPI/MutationObserver__test.res new file mode 100644 index 0000000..7ae0662 --- /dev/null +++ b/tests/MutationObserverAPI/MutationObserver__test.res @@ -0,0 +1,21 @@ +let observer = MutationObserver.make((mutations, obs) => { + let button = Global.document->Document.querySelector("button") + switch button->Null.toOption { + | Some(button) => { + Console.log(button) + obs->MutationObserver.disconnect + } + | None => () + } + Console.log(mutations) +}) + +observer->MutationObserver.observe( + ~target=Global.document->Document.asNode, + ~options={childList: true, subtree: true}, +) + +let records = observer->MutationObserver.takeRecords +Console.log(records->Array.length) + +observer->MutationObserver.disconnect