├── .gitignore ├── .travis.yml ├── .vscode └── settings.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bsconfig.json ├── examples └── dom_example.re ├── lib └── js │ └── tests │ └── Webapi │ ├── Dom │ └── Webapi__Dom__HtmlFormElement__test.js │ ├── Webapi__Base64__test.js │ ├── Webapi__Blob__test.js │ ├── Webapi__File__test.js │ ├── Webapi__Performace__test.js │ ├── Webapi__ReadableStream__test.js │ ├── Webapi__ResizeObserver__test.js │ └── Webapi__Url__test.js ├── package.json ├── scripts └── eventTemplate.re ├── sed.js ├── src ├── Webapi.re └── Webapi │ ├── Canvas │ ├── Webapi__Canvas__Canvas2d.re │ └── Webapi__Canvas__WebGl.re │ ├── Dom │ ├── Webapi__Dom__AnimationEvent.re │ ├── Webapi__Dom__Attr.re │ ├── Webapi__Dom__BeforeUnloadEvent.re │ ├── Webapi__Dom__CdataSection.re │ ├── Webapi__Dom__CharacterData.re │ ├── Webapi__Dom__ChildNode.re │ ├── Webapi__Dom__ClipboardEvent.re │ ├── Webapi__Dom__CloseEvent.re │ ├── Webapi__Dom__Comment.re │ ├── Webapi__Dom__CompositionEvent.re │ ├── Webapi__Dom__CssStyleDeclaration.re │ ├── Webapi__Dom__CustomEvent.re │ ├── Webapi__Dom__Document.re │ ├── Webapi__Dom__DocumentFragment.re │ ├── Webapi__Dom__DocumentOrShadowRoot.re │ ├── Webapi__Dom__DocumentType.re │ ├── Webapi__Dom__DomImplementation.re │ ├── Webapi__Dom__DomRect.re │ ├── Webapi__Dom__DomStringMap.re │ ├── Webapi__Dom__DomTokenList.re │ ├── Webapi__Dom__DragEvent.re │ ├── Webapi__Dom__Element.re │ ├── Webapi__Dom__ErrorEvent.re │ ├── Webapi__Dom__Event.re │ ├── Webapi__Dom__EventTarget.re │ ├── Webapi__Dom__FocusEvent.re │ ├── Webapi__Dom__GlobalEventHandlers.re │ ├── Webapi__Dom__History.re │ ├── Webapi__Dom__HtmlCollection.re │ ├── Webapi__Dom__HtmlDocument.re │ ├── Webapi__Dom__HtmlElement.re │ ├── Webapi__Dom__HtmlFormElement.re │ ├── Webapi__Dom__HtmlImageElement.re │ ├── Webapi__Dom__HtmlInputElement.re │ ├── Webapi__Dom__IdbVersionChangeEvent.re │ ├── Webapi__Dom__Image.re │ ├── Webapi__Dom__InputEvent.re │ ├── Webapi__Dom__KeyboardEvent.re │ ├── Webapi__Dom__Location.re │ ├── Webapi__Dom__MouseEvent.re │ ├── Webapi__Dom__MutationObserver.re │ ├── Webapi__Dom__MutationRecord.re │ ├── Webapi__Dom__NamedNodeMap.re │ ├── Webapi__Dom__Node.re │ ├── Webapi__Dom__NodeFilter.re │ ├── Webapi__Dom__NodeIterator.re │ ├── Webapi__Dom__NodeList.re │ ├── Webapi__Dom__NonDocumentTypeChildNode.re │ ├── Webapi__Dom__NonElementParentNode.re │ ├── Webapi__Dom__PageTransitionEvent.re │ ├── Webapi__Dom__ParentNode.re │ ├── Webapi__Dom__PointerEvent.re │ ├── Webapi__Dom__PopStateEvent.re │ ├── Webapi__Dom__ProcessingInstruction.re │ ├── Webapi__Dom__ProgressEvent.re │ ├── Webapi__Dom__Range.re │ ├── Webapi__Dom__RelatedEvent.re │ ├── Webapi__Dom__Selection.re │ ├── Webapi__Dom__ShadowRoot.re │ ├── Webapi__Dom__Slotable.re │ ├── Webapi__Dom__StorageEvent.re │ ├── Webapi__Dom__SvgZoomEvent.re │ ├── Webapi__Dom__Text.re │ ├── Webapi__Dom__TimeEvent.re │ ├── Webapi__Dom__TouchEvent.re │ ├── Webapi__Dom__TrackEvent.re │ ├── Webapi__Dom__TransitionEvent.re │ ├── Webapi__Dom__TreeWalker.re │ ├── Webapi__Dom__Types.re │ ├── Webapi__Dom__UiEvent.re │ ├── Webapi__Dom__ValidityState.re │ ├── Webapi__Dom__WebGlContextEvent.re │ ├── Webapi__Dom__WheelEvent.re │ └── Webapi__Dom__Window.re │ ├── ResizeObserver │ └── Webapi__ResizeObserver__ResizeObserverEntry.re │ ├── Webapi__Base64.re │ ├── Webapi__Blob.re │ ├── Webapi__Canvas.re │ ├── Webapi__Dom.re │ ├── Webapi__File.re │ ├── Webapi__Performance.re │ ├── Webapi__ReadableStream.re │ ├── Webapi__ResizeObserver.re │ └── Webapi__Url.re └── tests ├── Webapi ├── Canvas │ └── Webapi__Canvas__Canvas2d__test.re ├── Dom │ ├── Webapi__Dom__AnimationEvent__test.re │ ├── Webapi__Dom__BeforeUnloadEvent__test.re │ ├── Webapi__Dom__ClipboardEvent__test.re │ ├── Webapi__Dom__CloseEvent__test.re │ ├── Webapi__Dom__CompositionEvent__test.re │ ├── Webapi__Dom__CustomEvent__test.re │ ├── Webapi__Dom__Document__test.re │ ├── Webapi__Dom__DomStringMap__test.re │ ├── Webapi__Dom__DomTokenList__test.re │ ├── Webapi__Dom__DragEvent__test.re │ ├── Webapi__Dom__Element__test.re │ ├── Webapi__Dom__ErrorEvent__test.re │ ├── Webapi__Dom__EventTarget__test.re │ ├── Webapi__Dom__Event__test.re │ ├── Webapi__Dom__FocusEvent__test.re │ ├── Webapi__Dom__GlobalEventHandlers__test.re │ ├── Webapi__Dom__History__test.re │ ├── Webapi__Dom__HtmlDocument__test.re │ ├── Webapi__Dom__HtmlElement__test.re │ ├── Webapi__Dom__HtmlFormElement__test.re │ ├── Webapi__Dom__IdbVersionChangeEvent__test.re │ ├── Webapi__Dom__Image__test.re │ ├── Webapi__Dom__InputEvent__test.re │ ├── Webapi__Dom__KeyboardEvent__test.re │ ├── Webapi__Dom__Location__test.re │ ├── Webapi__Dom__MouseEvent__test.re │ ├── Webapi__Dom__NodeList__test.re │ ├── Webapi__Dom__Node__test.re │ ├── Webapi__Dom__PageTransitionEvent__test.re │ ├── Webapi__Dom__PointerEvent__test.re │ ├── Webapi__Dom__PopStateEvent__test.re │ ├── Webapi__Dom__ProgressEvent__test.re │ ├── Webapi__Dom__Range__test.re │ ├── Webapi__Dom__RelatedEvent__test.re │ ├── Webapi__Dom__Selection__test.re │ ├── Webapi__Dom__StorageEvent__test.re │ ├── Webapi__Dom__SvgZoomEvent__test.re │ ├── Webapi__Dom__Text__test.re │ ├── Webapi__Dom__TimeEvent__test.re │ ├── Webapi__Dom__TouchEvent__test.re │ ├── Webapi__Dom__TrackEvent__test.re │ ├── Webapi__Dom__TransitionEvent__test.re │ ├── Webapi__Dom__UiEvent__test.re │ ├── Webapi__Dom__WebGlContextEvent__test.re │ ├── Webapi__Dom__WheelEvent__test.re │ └── Webapi__Dom__Window__test.re ├── Webapi__Base64__test.re ├── Webapi__Blob__test.re ├── Webapi__File__test.re ├── Webapi__Performace__test.re ├── Webapi__ReadableStream__test.re ├── Webapi__ResizeObserver__test.re └── Webapi__Url__test.re └── testHelpers.re /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .merlin 3 | .bsb.lock 4 | docs/ 5 | node_modules/ 6 | lib/* 7 | !lib/js/tests 8 | lib/js/tests/testHelpers.js 9 | npm-debug.log 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 6 4 | on: 5 | branch: master 6 | os: osx 7 | osx_image: xcode12 8 | before_install: 9 | - npm install bsdoc@6.0.4-alpha 10 | 11 | deploy: 12 | - provider: npm 13 | email: 14 | secure: DQfM48Gb4YriNtqe4CaPUIjWOx+Rz06k1/iHqPOy0mFrg9RbrkTxdbrRpSB2+3CU/yXQIBcuH+kFZd5O2TktuH8E+LuAeiyg6eFve3Xucz60uD8CBNY0OuigtfHfk8+M9blWaSwQi68JQIbsgQIQc9XoE7Jvv1Ch5ijrFGucQN/mXRF3ubVnO+cypafy4aPQlE8ee/vFTXHWCrxulWH5kgm3XOereLGShMp5SryVj6lieSoJK1lOji2i13wVYH8ntnKC8/rw7IXkJuWz5A4KOX56dFn7hEFgnLTCeHNpjBupG7Xp0e0IEQeS7fJTJJn4H6W726Xojp4aDcuSfbsn1M1VadU7AkypygOYn56OVxwTxuQswH/d0CMTgpQQGudI+7rs2AoYJwceWZ+zblFzWs1Cy1dIPfaBL5fkfWoMhNt1rsb9b0g8OJaYPV1dhHNvX/NPUs2I3bQ1pcMVVgKyUoACZpextE9sQ3658Xwr+j0FtKTytdENhEPuNSC/Qg38qvMgy3VBToG1+P3RQQBZuxtQ1AY04b4wqzEh3TWpMP+YSoYq1DM5vGH5JkZ0s4wmt675lyruiYP5yCRvpTwvc5mwERR2ys8tFYavncKUEI3HeQzvxRsoX1xb1ayCrQS4u2HHb3/W+qFtWC7hzGBoKCe9ApaD9Tg8+UN1pARVxrI= 15 | api_key: 16 | secure: WDWra40VGlkI5boWIO0kJLHVSBomLPzmF9ZNq7/9I+Gygg0Liw6N/ickp6Z+0wKm36qbaTIYO1/GC3EYYS/98gNxmW6EqhSMaDPevw1Pbl223r8L/uR2iz5AQ6wsIIHlsqlgRe+BhqQAg4LWsLRgMwRcpp22NgrjdJNWmqcawlB2xRD83opfNQpupKLUEEIvLZpyNpTZ+NIqme46wkJ9/srmeyjkooYNj5jIjJFrTbkG8PTzo0MYiDLHxx9FNwzVZbkOzcbjjLnJ/mTtzaGLvo4cn4vqyd8pvW+bcuFMrqYNx1oSKfMqGAAH7dpaa6lThxrhyEEHPB4QHuqOd03fZPZrtIyu59mxWMEElwp/amD82fsqqGjzxs7jsOmByAHcuQtPD+4KEGQDTSTIA2PMKEb5OB/s3tomNiSBVeUbBVsmdPwHUKCAXvPsc4cZZWRUHenz6Ru4Z+r19c5AmjJTAPzG+IQcgICxxTebfu3lMIGB5c/R8PW3ZCAiGlEmR4pHsuDFn8cHWKks2b76RPJ3MM3a1s98FDLZql779GwFc3GK38utsq3x8Da1qcwr0IxgvuGBnIj5zktlJMMu7M7DHULjYZ89me+3lA4cT855HRL69yz4Nskv9mHny6VcFo4t6jI6sfnl4IXIzA8RAXbrkpewFiI2eNgF+uCNWLNVtKM= 17 | on: 18 | tags: true 19 | - provider: pages 20 | skip_cleanup: true 21 | github_token: 22 | secure: h5KWhYdnwBcIFLuHbsRnwfbCVbnVgF+EcdLX48xDxfdS83hcfRpit7WDdM0Oyy5Ue3Bjwk3ea2+7RrHYlNbgLB/Ot2KZ5VaxhYoB+1hPhPDeXZnCt7GnDCfge3jb+oNBLzdYa/sC6xiuyIm6xlJ6WzW4b306OYChLIkPuwwhHQokbMLaGkFXH12Zug1/y3YfQ+tZSOZWlpBfgAjjvGCZukB8IKGhydUuB5rza74/KJb2eimqtfRAQY5KssBDK23RBTgVxXieJnAt+Lsi+9mkXQ4y1wGbVpiWlNC29EvHSc+E6/YKuWeaM1ZaVmCzlmVCWX1FJDpYnkpSj4iOwJdTvfKDTgNC98dcoKKgWxPKYuWFpaq01mXOoCveQgbxDEsdu9xEUhHlJYxmFTYoQOHmJAFVezYqP1tAEwN1sKRLRZYEy36kggJu1iL4YOEp2IfVcVHcAtN+/nYOA1hLscvwzpPlKFY1Oo7+4dqpdL60xU3n70H3wHatz/yC1RO5Iu30t6tRDqE8c2PbWBk8EZfpNhDKQUDUXaBKV7W2A+htyy1YG3xEGUJxiWuaMLEDdtFKh6yI7ivfBrRskJxqcz87mtpHbLgL7yBqVnf3H48jKYD5oje+Dq7O6zCPyK7aZpy+3bOkelkmwgOLmvHLhU7+OAmSX6hrOdrIhdVRpz4wqQ0= 23 | on: 24 | branch: master 25 | local_dir: docs 26 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": false 3 | } 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 0.19.2 2 | 3 | * Removed peer dependency on `bsdoc` 4 | 5 | ### 0.19.1 6 | 7 | * Removed dev dependency on `bsdoc` to allow smooth installs on non-Mac 8 | OS 9 | 10 | ### 0.19.0 11 | 12 | * Added bindings to `ReadableStream` 13 | * Added `Webapi.Url.makeWith` 14 | * Deprecated `Webapi.Url.makeWithBase` in favor of `Webapi.Url.makeWith` 15 | * (Breaking) Fixed the binding for `Webapi.Url.URLSearchParams.entries` 16 | to return `(string, string)` 17 | * Added `Webapi.Dom.Node.replaceChild` 18 | 19 | ### 0.18.0 20 | 21 | * Upgraded to bs-platform@7.1.0 and added API doc generation 22 | * Added `bs-fetch` dependency for `FormData` bindings 23 | * Added bindings for `Blob` and `File` 24 | * Deprecated `File._type` for `File.type_` 25 | 26 | ### 0.17.1 (2020-07-01) 27 | * Deprecated `Webapi.Dom.eventPhase` in favour of 28 | `Webapi.Dom.EventPhase.t` 29 | 30 | ### 0.17.0 (2020-06-29) 31 | * (Breaking) fixed `Canvas2d.putImageData`, unfortunately this needs to 32 | be a breaking change because the JavaScript method itself doesn't 33 | accept optional arguments 34 | 35 | ### 0.16.2 (2020-06-29) 36 | * Fixed `document instanceof HTMLDocument` check to ensure it works 37 | across windows 38 | 39 | ### 0.16.1 (2020-06-24) 40 | * Fixed `element instanceof HTMLElement` check to ensure it works for 41 | elements from different windows 42 | * Un-deprecated the unsafe downcast functions 43 | 44 | ### 0.16.0 (2020-06-16) 45 | * Fixed `DomStringMap.unsafeDeleteKey` for BuckleScript 8 46 | * Removed `main` file from `package.json` 47 | * Removed JS outputs except for tests 48 | * Enabled more warnings and errors 49 | * Used `instanceof` to implement downcasts and deprecated the unsafe 50 | downcasts 51 | 52 | ### 0.15.9 (2020-03-14) 53 | * Added `ResizeObserver` 54 | 55 | ### 0.15.8 (2020-02-22) 56 | * Added `Window.performance` and `Performance.now` 57 | 58 | ### 0.15.6 (2020-02-08) 59 | * `WheelEvent` now inherits the implementation of `MouseEvent` 60 | 61 | ### 0.15.6 (2019-11-20) 62 | * Added `DomStringMap` 63 | * Changed `Window.open_` to have optional `features` argument 64 | 65 | ### 0.15.5 - (2019-10-09) 66 | * Added `keypress` event handler API 67 | * Added `selectionchange` event handler API 68 | * Added `Text.ofNode` 69 | 70 | ### 0.15.4 - (2019-09-02) 71 | * Added `Selection.setBaseAndExtent` 72 | 73 | ### 0.15.3 - (2019-08-22) 74 | * Added `NodeList.forEach` 75 | * Added `Node.asNode` 76 | 77 | ### 0.15.2 - (2019-05-25) 78 | * Added `File.size` 79 | 80 | ### 0.15.1 - (2019-05-17) 81 | * Added `URLSearchParams.forEach` 82 | * Added `Element.scrollBy` and `Element.srollByWithOptions` 83 | 84 | ### 0.15.0 - (2019-05-11) 85 | * (Breaking) Changed `DomRect` coordinates to use `float` instead of `int` 86 | 87 | ### 0.14.4 - (2019-05-04) 88 | * Added `File.name` 89 | 90 | ### 0.14.3 - (2019-04-28) 91 | * Added `width`, `height`, `setWidth` and `setHeight` to `CanvasElement` 92 | 93 | ### 0.14.0 - (2019-04-15) 94 | * Removed deprecated `Webapi.Dom.onload` function 95 | * Removed deprecated `Webapi.File.Url` module alias 96 | * Restructured internal module layout (non-breaking for modules accessed through the `Webapi` top-level module, but breaking if internal `*Re` modules have been accessed directly) 97 | * Enforce private modules (effectively a formality and non-breaking) 98 | 99 | ### 0.13.6 - (2019-03-22) 100 | * Added `HtmlElement.focusPreventScroll` 101 | * Refined return type of `Node.cloneNode` and `Node.cloneDeepNode` so it now returns the specific type of the cloned node. 102 | 103 | ### 0.13.5 - (2019-03-15) 104 | * Added `Element.scrollTo`, `Element.scrollToWithOptions` 105 | 106 | ### 0.13.4 - (2019-02-24) 107 | * Added `URLSearchParams.makeWithDict` and `URLSearchParams.makeWithArray` 108 | 109 | ### 0.13.3 - (2019-02-19) 110 | * Added `bs.return nullable` to `URLSearchParams.get` since it returns `null`, not `undefined` and therefore does not autmatically conform to the runtime representation of `option` as previosuly assumed. 111 | 112 | ### 0.13.2 - (2019-01-16) 113 | * Fixed signature of `NamedNodeMap.toArray`, which returned `element` but should return `attr` (considere non-breaking since it was just plain wrong) 114 | * Added `add...` and `removePopStateEventListener` to `Window` 115 | * Added `add...` and `remove...` functions for touch and animation event listeners to `EventTarget` 116 | 117 | ### 0.13.1 - (2018-11-11) 118 | * Added `add...` and `remove...` functions for drag event listeners to `EventTarget` 119 | 120 | ### 0.13.0 - (2018-10-09) 121 | * (Breaking) Requires bs-platform > 4.0.0 122 | * (Breaking) Changed `FocusEvent.relatedTarget` to return `option` 123 | * Added `HtmlFormElement` and `HtmlInputElement` 124 | 125 | ### 0.12.0 - (2018-09-16) 126 | * (Breaking) Fixed return type if `StorageEvent.oldValue` and `StorageEvent.newValue`. They should be `nullable`, but were not. 127 | * Added `Url` and `UrlSearchParams` 128 | * Deprecated `Webapi.File.Url` in favor of `Webapi.Url` 129 | 130 | ### 0.11.0 - (2018-08-02) 131 | * `EventTarget.dispatchEvent` now take a `Dom.event_like(_)` instead of just `Dom.event`, so it will accept any event subtype. 132 | * `Window.pageXOffset`, `pageYOffset`, `scrollX`, `scrollY`, `scrollLeft` and `scrollTop` now return `float`s instead of `int`s, and `Window.scroll`, `scrollBy`, `scrollTo`, `setScrollLeft` and `setScrollTop` take `float`s instead of `int`s 133 | * `HtmlElement.offsetParent` now returns an `option` 134 | * `Selection.anchorNode` and `Selection.focusNode` now return `option`s 135 | * `Element.closest` now returns an `option` 136 | 137 | ### 0.10.0 - (2018-06-14) 138 | * Added inheritance of `HtmlElement` and its ancestors to `HtmlImageElement` 139 | * Deprecated `HtmlImageElement.onload` 140 | * Fixed inconsistencies with `HtmlImageElement.src` and `HtmlImageElement.getSrc`, breaking the API 141 | * Fleshed out `HtmlImageElement` 142 | 143 | ### 0.9.1 - (2018-04-19) 144 | * Renamed `Document.docType` to `Document.doctype` to fix #95 145 | 146 | ### 0.9.0 - (2018-04-17) 147 | * Support `bs-platform@3.0.0`. If your app isn't using that version, then don't upgrade to `0.9.0`; otherwise, please do! 148 | 149 | ### 0.8.0 - (2018-01-03) 150 | * Added `EventTarget.unsafeAsDocument`, `EventTarget.unsafeAsElement` and `EventTarget.unsafeAsWindow` functions 151 | * Removed deprecated `Bs_webapi` module` 152 | * Added event-specific listener APIs to `EventTarget`, e.g. `EventTarget.addMouseMoveListener(mouseEvent => ...)` 153 | * Added `requestCancellableAnimationFrame` and `cancelAnimationFrame` 154 | * Fixed msising `@bs.return` annotations causing type unsoundness 155 | * Fixed typo in encoding of `insertPosition` type 156 | * Added `Dom.HtmlImageElement`, `File` and `File.Url` 157 | * Fixed `HtmlElement.offsetParent` returning `int` instead of `Dom.Element` 158 | 159 | ### 0.7.0 - (2017-09-22) 160 | * Added `Webapi` module, Deprecated `Bs_webapi` 161 | * Removed deprecated Storage API 162 | * Add `Document.unsafeAshtmlDocument`, `Element.unsafeAsHtmlElement`. Deprecated `Document.asHtmlDocument`, `Element.asHtmlElement`, `HtmlEleement.ofElement`. 163 | * Changed `Dom.history` and `Dom.location` to use `window` instead of `document` 164 | 165 | ### 0.6.1 - (2017-09-10) 166 | * Fix incorrect heuristic in `HtmlElement.ofElement` 167 | 168 | ### 0.6.0 - (2017-09-10) 169 | * Renamed createText to CreateTextNode, according to spec 170 | * Deprecated Storage API, it's been upstreamed to `bs-platform` as `Dom.Storage` 171 | * Removed `ReasonJs` namespace. Use ` Bs_webapi` instead 172 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Thank you for contributing to `bs-webapi`. Please follow the steps here 2 | to help keep things smooth. 3 | 4 | ## Before starting 5 | 6 | Please ensure you are working on an open issue. If necessary, you can 7 | open the issue and then start working. This will give people a chance to 8 | verify the issue and potentially save work. 9 | 10 | Please ensure you turn off auto-formatting while working on this project. 11 | For historical reasons, it does not use auto-formatting. If you auto- 12 | format files in this project, it will lead to noisy diffs that will be 13 | hard to review. I have included a project-specific setting that instructs 14 | VSCode to turn off auto-formatting. 15 | 16 | ## When creating a PR 17 | 18 | Please ensure the PR has the following: 19 | 20 | - A minimal description of the PR's purpose 21 | - A link to the issue at the end of the description, e.g. `Fix #19` 22 | - `@since ` directive in a doc comment if adding a new item in 23 | the code 24 | - Deprecates instead of removing items in minor versions 25 | - Adds new item to replace deprecated item 26 | - Adds doc comment on deprecated item 27 | - Adds changelog entry for the PR 28 | - Updates version number in `package.json`–if necessary–following SemVer 29 | 30 | I will also expect other best practices in the PR, e.g. proper git commit 31 | messages. 32 | 33 | ## During review 34 | 35 | If you make any changes, please try to push new commits instead of force- 36 | pushing and wiping out the old ones. It helps when reviewing changes, and 37 | I will squash the branch when merging anyway. 38 | 39 | ## After PR merged or closed 40 | 41 | Thank you for your contribution. I usually publish a new version on 42 | Sunday night (Eastern Time). 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 reasonml-community 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bs-webapi 2 | 3 | **IMPORTANT: this repository is deprecated in favour of** https://github.com/tinymce/rescript-webapi/ 4 | 5 | Please use ReScript-WebAPI going forward. 6 | 7 | Experimental bindings to the DOM and other Web APIs. 8 | 9 | [![npm](https://img.shields.io/npm/v/bs-webapi.svg)](https://npmjs.org/bs-webapi) 10 | [![Travis](https://img.shields.io/travis/reasonml-community/bs-webapi-incubator/master.svg)](https://travis-ci.org/reasonml-community/bs-webapi-incubator) 11 | 12 | API docs are available at 13 | https://reasonml-community.github.io/bs-webapi-incubator/api/Webapi/ , but 14 | documentation comments are sparse as the code mostly just consists of 15 | external declarations with type signatures. The bindings generally also 16 | correspond very well to the Web APIs they bind to, so using MDN along 17 | with GitHub should go a long way. 18 | 19 | ## Installation 20 | 21 | ``` 22 | npm install bs-webapi 23 | ``` 24 | Then add `bs-webapi` to `bs-dependencies` in your `bsconfig.json`. A minimal example: 25 | ``` 26 | { 27 | "name": "my-thing", 28 | "sources": "src", 29 | "bs-dependencies": ["bs-webapi"] 30 | } 31 | ``` 32 | 33 | ## Usage 34 | 35 | See the [examples folder](https://github.com/reasonml-community/bs-webapi-incubator/blob/master/examples/) 36 | 37 | Please only use the modules exposed through the toplevel module `Webapi`, for example `Webapi.Dom.Element`. In particular, don't use the 'flat' modules like `Webapi__Dom__Element` as these are considered private and are not guaranteed to be backwards-compatible. 38 | 39 | ## Some notes on the DOM API 40 | 41 | The DOM API is mostly organized into interfaces and relies heavily on inheritance. The ergonomics of the API is also heavily dependent on dynamic typing, which makes it somewhat challenging to implement a thin binding layer that is both safe and ergonomic. To achieve this we employ subtyping and implementation inheritance, concepts which aren't very idiomatic to OCaml (or Reason), but all the more beneficial to understand in order to be able to use these bindings effectively. 42 | 43 | ### Subtyping 44 | 45 | The Dom types, and the relationships between them, are actually defined in the `Dom` module that ships with `bs-platform` ([Source code](https://github.com/glennsl/bucklescript/blob/master/jscomp/others/dom.mli)), where you'll find a bunch of types that look like this: 46 | 47 | ```reason 48 | type _element('a); 49 | type element_like('a) = node_like(_element('a)); 50 | type element = element_like(_baseClass); 51 | ``` 52 | 53 | This is subtyping implemented with abstract types and phantom arguments. The details of how this works isn't very important (but see [#23](https://github.com/reasonml-community/bs-webapi-incubator/pull/23) for a detailed explanation of how exactly this trickery works) in order to just use them, but there are a few things you should know: 54 | 55 | * If you expand the alias of a concrete DOM type, you'll discover it's actually a list of abstract types. e.g. `element` expands to `_baseClass _element _node _eventTarget_like` This means `element` is a subtype of `_element`, `_node` and `_eventTarget_like`. 56 | * The `_like` type are "open" (because they have a type variable). This means that a function accepting an `'a element_like` will accept any "supertype" of `element_like`. A function accepting just an `element` will only accept an `element` (Technically `element` is actually a "supertype" of `element_like` too). 57 | 58 | This system works exceptionally well, but has one significant flaw: It makes type errors even more complicated than they normally are. If you know what to look for it's not that bad, but unfortunately the formatting of these errors don't make looking for it any easier. We hope to improve that in other ways (see [BetterErrors](https://github.com/reasonml/BetterErrors)) 59 | 60 | ### Implementation inheritance 61 | 62 | If you've looked through the source code a bit, you've likely come across code like this: 63 | 64 | ```reason 65 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t }); 66 | include Webapi__Dom__Node.Impl({ type nonrec t = t }); 67 | include Webapi__Dom__ParentNode.Impl({ type nonrec t = t }); 68 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t }); 69 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t }); 70 | include Webapi__Dom__Slotable.Impl({ type nonrec t = t }); 71 | include Impl({ type nonrec t = t }); 72 | ``` 73 | 74 | This is the implementation inheritance. Each "inheritable" module defines an "Impl" module where all its exported functions are defined. `include Webapi__Dom__Node.Impl { type nonrec t = t };` means that all the functions in `Webapi__Dom__Node.Impl` should be included in this module, but with the `t` type of that module replaced by the `t` type of this one. And that's it, it now has all the functions. 75 | 76 | Implementation inheritance is used instead of subtyping to make it easier to understand which functions operate on any given "subject". If you have an `element` and you need to use a function defined in `Node`, let's say `removeChild` you cannot just use `Node.removeChild`. Instead you need to use `Element.removeChild`, which you can since `Element` inherits from `Node`. As a general rule, always use the function in the module corresponding to the type you have. You'll find this makes it very easy to see what types you're dealing with just by reading the code. 77 | 78 | ## Changes 79 | 80 | See [CHANGELOG.md](CHANGELOG.md). 81 | -------------------------------------------------------------------------------- /bsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bs-webapi", 3 | "bsc-flags": ["-bs-no-version-header", "-bs-super-errors"], 4 | "sources": [ 5 | { 6 | "dir": "src", 7 | "subdirs": true, 8 | "public": ["Webapi"] 9 | }, 10 | { 11 | "dir": "tests", 12 | "type": "dev", 13 | "subdirs": true 14 | }, 15 | { 16 | "dir": "examples", 17 | "type": "dev" 18 | }, 19 | { 20 | "dir": "scripts", 21 | "type": "dev" 22 | } 23 | ], 24 | "refmt": 3, 25 | "warnings": { 26 | "number": "+A-42-48-105", 27 | "error": "+A-3-44-102" 28 | }, 29 | "bs-dependencies": [ 30 | "bs-fetch" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /examples/dom_example.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | 3 | /* Adapted from https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Examples#Example_7:_Displaying_Event_Object_Properties */ 4 | /* Option.map */ 5 | let map = (f) => 6 | fun 7 | | Some(v) => Some(f(v)) 8 | | None => None; 9 | 10 | let andThen = (f: 'a => option('b)) => 11 | fun 12 | | Some(v) => f(v) 13 | | None => None; 14 | 15 | let unwrapUnsafely = 16 | fun 17 | | Some(v) => v 18 | | None => raise(Invalid_argument("Passed `None` to unwrapUnsafely")); 19 | 20 | /* 21 | * These SHOULD type check 22 | */ 23 | document |> Document.createElement("div") 24 | |> Element.className; 25 | 26 | document |> Document.createElement("div") 27 | |> Element.nextElementSibling 28 | |> map(Element.innerText); /* innerText is a function that accepts a Node */ 29 | 30 | /* Before subtyping: 31 | document |> Document.createElement("div") 32 | |> Element.asNode 33 | |> Node.parentElement /* inherited from Node, returns DomRe.element */ 34 | |> map(Element.innerText); /* inherited from Node */ 35 | */ 36 | 37 | /* After subtyping: */ 38 | document |> Document.createElement("div") 39 | |> Element.parentElement /* inherited from Node, returns DomRe.element */ 40 | |> map(Element.innerText); /* inherited from Node */ 41 | 42 | let el = 43 | document |> Document.createElement("div") 44 | |> Element.asHtmlElement 45 | |> unwrapUnsafely; 46 | 47 | /* 48 | document |> Document.asHtmlDocument 49 | |> andThen(HtmlDocument.body) 50 | |> map(Element.appendChild(el)); 51 | */ 52 | 53 | /* Before subtyping: 54 | document |> Document.asHtmlDocument 55 | |> andThen(HtmlDocument.body) 56 | |> map(Element.appendChild (el |> HtmlElement.asNode)); 57 | */ 58 | 59 | /* After subtyping: */ 60 | document |> Document.asHtmlDocument 61 | |> andThen(HtmlDocument.body) 62 | |> map(Element.appendChild(el)); 63 | 64 | /* 65 | /* 66 | * These MAY fail type check 67 | */ 68 | document |> Document.createElement("div") 69 | |> Element.nextElementSibling 70 | |> map(Node.innerText); 71 | 72 | /* 73 | * These SHOULD NOT type check 74 | */ 75 | document |> Document.createElement("div") 76 | |> Element.asNode 77 | |> Element.parentElement; /* inherited from Node, returns DomRe.element */ 78 | */ 79 | 80 | 81 | /* 82 | /* ideal, but requires piped setters */ 83 | switch (document |> body) { 84 | | Some body => 85 | document |> createElement("div") 86 | |> setInnerText("") 87 | |> setClassName("reason_tools_button") 88 | |> setOnClick(swap) 89 | |> (body |> appendChild); 90 | | None => 91 | ... 92 | } 93 | */ 94 | 95 | 96 | /* non-standard event-specific listener API - log screen coordinates of mouse cursor when moved */ 97 | document |> Document.createElement("div") 98 | |> Element.addMouseMoveEventListener(e => (MouseEvent.screenX(e), MouseEvent.screenY(e)) |> Js.log); -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Dom/Webapi__Dom__HtmlFormElement__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | function test_data(formElement) { 5 | return new FormData(formElement).get("foo"); 6 | } 7 | 8 | exports.test_data = test_data; 9 | /* No side effect */ 10 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__Base64__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | atob("foo"); 5 | 6 | btoa("gibberish"); 7 | 8 | /* Not a pure module */ 9 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__Blob__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | function test_arrayBuffer(blob) { 5 | return blob.arrayBuffer().then((function (buffer) { 6 | return Promise.resolve((console.log(buffer.byteLength), undefined)); 7 | })); 8 | } 9 | 10 | function test_size(blob) { 11 | console.log(blob.size); 12 | 13 | } 14 | 15 | function test_slice(blob) { 16 | var blob$1 = blob.slice(0, undefined, undefined); 17 | console.log(blob$1.size); 18 | 19 | } 20 | 21 | function test_stream(blob) { 22 | return blob.stream(); 23 | } 24 | 25 | function test_text(blob) { 26 | return blob.text().then((function (string) { 27 | return Promise.resolve((console.log(string), undefined)); 28 | })); 29 | } 30 | 31 | function test_type(blob) { 32 | console.log(blob.type); 33 | 34 | } 35 | 36 | exports.test_arrayBuffer = test_arrayBuffer; 37 | exports.test_size = test_size; 38 | exports.test_slice = test_slice; 39 | exports.test_stream = test_stream; 40 | exports.test_text = test_text; 41 | exports.test_type = test_type; 42 | /* No side effect */ 43 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__File__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | function test_lastModified(file) { 5 | console.log(file.lastModified); 6 | 7 | } 8 | 9 | function test_name(file) { 10 | console.log(file.name); 11 | 12 | } 13 | 14 | function test_preview(file) { 15 | console.log(file.preview); 16 | 17 | } 18 | 19 | exports.test_lastModified = test_lastModified; 20 | exports.test_name = test_name; 21 | exports.test_preview = test_preview; 22 | /* No side effect */ 23 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__Performace__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | window.performance.now(); 5 | 6 | /* Not a pure module */ 7 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__ReadableStream__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); 4 | var Caml_option = require("bs-platform/lib/js/caml_option.js"); 5 | 6 | function test_closed(reader) { 7 | return reader.closed(); 8 | } 9 | 10 | function test_cancel(reader) { 11 | return reader.cancel().then((function (param) { 12 | return Promise.resolve((console.log("cancelled"), undefined)); 13 | })); 14 | } 15 | 16 | function test_cancelWith(reader) { 17 | return reader.cancel("reason").then((function (reason) { 18 | return Promise.resolve((console.log(reason), undefined)); 19 | })); 20 | } 21 | 22 | function test_releaseLock(reader) { 23 | reader.releaseLock(); 24 | 25 | } 26 | 27 | function test_read(reader) { 28 | return reader.read().then((function (next) { 29 | var __x = next.value; 30 | return Promise.resolve(Belt_Option.forEach((__x == null) ? undefined : Caml_option.some(__x), (function (prim) { 31 | console.log(prim); 32 | 33 | }))); 34 | })); 35 | } 36 | 37 | var DefaultReader__test = { 38 | test_closed: test_closed, 39 | test_cancel: test_cancel, 40 | test_cancelWith: test_cancelWith, 41 | test_releaseLock: test_releaseLock, 42 | test_read: test_read 43 | }; 44 | 45 | function test_locked(stream) { 46 | return stream.locked; 47 | } 48 | 49 | function test_cancel$1(stream) { 50 | return stream.cancel(); 51 | } 52 | 53 | function test_cancelWith$1(stream) { 54 | return stream.cancel("reason"); 55 | } 56 | 57 | function test_getReader(stream) { 58 | return stream.getReader(); 59 | } 60 | 61 | function test_getReaderBYOB(stream) { 62 | return stream.getReader(({"mode": "byob"})); 63 | } 64 | 65 | function test_tee(stream) { 66 | var match = stream.tee(); 67 | match[0].cancel(); 68 | match[1].cancel(); 69 | 70 | } 71 | 72 | exports.DefaultReader__test = DefaultReader__test; 73 | exports.test_locked = test_locked; 74 | exports.test_cancel = test_cancel$1; 75 | exports.test_cancelWith = test_cancelWith$1; 76 | exports.test_getReader = test_getReader; 77 | exports.test_getReaderBYOB = test_getReaderBYOB; 78 | exports.test_tee = test_tee; 79 | /* No side effect */ 80 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__ResizeObserver__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Caml_array = require("bs-platform/lib/js/caml_array.js"); 4 | 5 | var el = document.createElement("strong"); 6 | 7 | function handler(entries) { 8 | var entry = Caml_array.caml_array_get(entries, 0); 9 | entry.contentRect; 10 | entry.target; 11 | 12 | } 13 | 14 | var observer = new ResizeObserver(handler); 15 | 16 | observer.observe(el); 17 | 18 | observer.unobserve(el); 19 | 20 | observer.disconnect(); 21 | 22 | exports.el = el; 23 | exports.handler = handler; 24 | exports.observer = observer; 25 | /* el Not a pure module */ 26 | -------------------------------------------------------------------------------- /lib/js/tests/Webapi/Webapi__Url__test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | var params = new URLSearchParams("key1=value1&key2=value2"); 5 | 6 | params.forEach((function (prim, prim$1) { 7 | console.log(prim, prim$1); 8 | 9 | })); 10 | 11 | function test_entries(params) { 12 | return Array.from(params.entries()); 13 | } 14 | 15 | console.log(Array.from(params.entries())); 16 | 17 | exports.params = params; 18 | exports.test_entries = test_entries; 19 | /* params Not a pure module */ 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bs-webapi", 3 | "version": "0.19.2", 4 | "description": "Reason + BuckleScript bindings to DOM", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/reasonml-community/bs-webapi-incubator.git" 8 | }, 9 | "homepage": "https://github.com/reasonml-community/bs-webapi-incubator#readme", 10 | "keywords": [ 11 | "reason", 12 | "bucklescript", 13 | "web", 14 | "dom" 15 | ], 16 | "scripts": { 17 | "build": "bsb -make-world", 18 | "start": "bsb -w", 19 | "clean": "bsb -clean-world", 20 | "doc-install": "npm install --no-save bsdoc", 21 | "test": "bsb -make-world && bsdoc build api && bsdoc support-files" 22 | }, 23 | "files": [ 24 | "src/", 25 | "bsconfig.json" 26 | ], 27 | "author": "chenglou", 28 | "license": "MIT", 29 | "devDependencies": { 30 | "bs-platform": "^7.1.0" 31 | }, 32 | "dependencies": { 33 | "bs-fetch": "^0.6.2" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /scripts/eventTemplate.re: -------------------------------------------------------------------------------- 1 | 2 | let typ = Node.Process.argv[2]; 3 | let name = Node.Process.argv[3]; 4 | let lname = name |> Js.String.toLowerCase; 5 | 6 | {j| 7 | [@bs.send.pipe : T.t] external add$(name)EventListener : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit) => unit = "addEventListener"; 8 | [@bs.send.pipe : T.t] external add$(name)EventListenerWithOptions : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit, {. "capture": bool, "once": bool, "passive": bool}) => unit = "addEventListener"; /* not widely supported */ 9 | [@bs.send.pipe : T.t] external add$(name)EventListenerUseCapture : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit, [@bs.as {json|true|json}] _) => unit = "addEventListener"; 10 | [@bs.send.pipe : T.t] external remove$(name)EventListener : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit) => unit = "removeEventListener"; 11 | [@bs.send.pipe : T.t] external remove$(name)EventListenerWithOptions : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit, {. "capture": bool, "passive": bool}) => unit = "removeEventListener"; /* not widely supported */ 12 | [@bs.send.pipe : T.t] external remove$(name)EventListenerUseCapture : ([@bs.as "$(lname)"] _, Dom.$(typ) => unit, [@bs.as {json|true|json}] _) => unit = "removeEventListener"; 13 | |j} |> Js.log; 14 | -------------------------------------------------------------------------------- /sed.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var files = process.argv.slice(2); 3 | 4 | files.forEach(function(file) { 5 | var content = fs.readFileSync(file, {encoding: 'utf-8'}); 6 | content = content.replace(/t\[@@nonrec \]/g, 't'); 7 | if (file === 'src/fetch/fetchRe.ml') { 8 | content = content.replace('method =', '_method ='); 9 | } 10 | fs.writeFileSync(file, content, {encoding: 'utf-8'}); 11 | }); 12 | -------------------------------------------------------------------------------- /src/Webapi.re: -------------------------------------------------------------------------------- 1 | module Base64 = Webapi__Base64; 2 | 3 | /** @since 0.18.0 */ 4 | module Blob = Webapi__Blob; 5 | module Canvas = Webapi__Canvas; 6 | module Dom = Webapi__Dom; 7 | module File = Webapi__File; 8 | 9 | /** Re-export from [bs-fetch] for convenience. To use, you will also 10 | need to add the [bs-fetch] package as a dependency. 11 | 12 | To get the [FormData] of an HTML form, use 13 | [Webapi.Dom.HtmlFormElement.data]. 14 | 15 | @since 0.18.0 */ 16 | module FormData = Fetch.FormData; 17 | 18 | /** Re-export from [bs-fetch] for convenience. See also 19 | {!module:FormData}. 20 | 21 | @since 0.18.0 */ 22 | module Iterator = FormData.Iterator; 23 | 24 | module Performance = Webapi__Performance; 25 | 26 | /** @since 0.19.0 */ 27 | module ReadableStream = Webapi__ReadableStream; 28 | 29 | module ResizeObserver = Webapi__ResizeObserver; 30 | module Url = Webapi__Url; 31 | 32 | type rafId; 33 | 34 | [@bs.val] external requestAnimationFrame : (float => unit) => unit = ""; 35 | [@bs.val] external requestCancellableAnimationFrame : (float => unit) => rafId = "requestAnimationFrame"; 36 | [@bs.val] external cancelAnimationFrame : rafId => unit = ""; 37 | -------------------------------------------------------------------------------- /src/Webapi/Canvas/Webapi__Canvas__Canvas2d.re: -------------------------------------------------------------------------------- 1 | type t; /* Main type, representing the 2d canvas rendering context object */ 2 | type gradient; 3 | type pattern; 4 | type measureText; 5 | 6 | /* Sub-modules (and their interfaces) for string enum arguments: */ 7 | module type CompositeType = { 8 | type t = pri string; 9 | 10 | let sourceOver: t; 11 | let sourceIn: t; 12 | let sourceOut: t; 13 | let sourceAtop: t; 14 | let destinationOver: t; 15 | let destinationIn: t; 16 | let destinationOut: t; 17 | let destinationAtop: t; 18 | let lighter: t; 19 | let copy: t; 20 | let xor: t; 21 | }; 22 | 23 | module Composite: CompositeType = { 24 | type t = string; 25 | 26 | let sourceOver: t = "source-over"; 27 | let sourceIn: t = "source-in"; 28 | let sourceOut: t = "source-out"; 29 | let sourceAtop: t = "source-atop"; 30 | let destinationOver: t = "destination-over"; 31 | let destinationIn: t = "destination-in"; 32 | let destinationOut: t = "destination-out"; 33 | let destinationAtop: t = "destination-atop"; 34 | let lighter: t = "lighter"; 35 | let copy: t = "copy"; 36 | let xor: t = "xor"; 37 | }; 38 | 39 | module type LineCapType = { 40 | type t = pri string; 41 | 42 | let butt: t; 43 | let round: t; 44 | let square: t; 45 | }; 46 | 47 | module LineCap: LineCapType = { 48 | type t = string; 49 | 50 | let butt: t = "butt"; 51 | let round: t = "round"; 52 | let square: t = "square"; 53 | }; 54 | 55 | module type LineJoinType = { 56 | type t = pri string; 57 | 58 | let round: t; 59 | let bevel: t; 60 | let miter: t; 61 | }; 62 | 63 | module LineJoin: LineJoinType = { 64 | type t = string; 65 | 66 | let round: t = "round"; 67 | let bevel: t = "bevel"; 68 | let miter: t = "miter"; 69 | }; 70 | 71 | type image('a) = 72 | | Number: image(float) 73 | | ImageData: image(Webapi__Dom__Image.t); 74 | 75 | type style(_) = 76 | | String: style(string) 77 | | Gradient: style(gradient) 78 | | Pattern: style(pattern); 79 | 80 | /* 2d Canvas API, following https://simon.html5.org/dump/html5-canvas-cheat-sheet.html */ 81 | [@bs.send.pipe : t] external save : unit = ""; 82 | [@bs.send.pipe : t] external restore : unit = ""; 83 | 84 | /* Transformation */ 85 | [@bs.send.pipe : t] external scale : (~x: float, ~y: float) => unit = ""; 86 | [@bs.send.pipe : t] external rotate : float => unit = ""; 87 | [@bs.send.pipe : t] external translate : (~x: float, ~y: float) => unit = ""; 88 | [@bs.send.pipe : t] external transform : (~m11: float, ~m12: float, ~m21: float, ~m22: float, ~dx: float, ~dy: float) => unit = ""; 89 | [@bs.send.pipe : t] external setTransform : (~m11: float, ~m12: float, ~m21: float, ~m22: float, ~dx: float, ~dy: float) => unit = ""; 90 | 91 | /* Compositing */ 92 | [@bs.set] external globalAlpha : (t, float) => unit = ""; 93 | [@bs.set] external globalCompositeOperation : (t, Composite.t) => unit = ""; 94 | 95 | /* Line Styles */ 96 | [@bs.set] external lineWidth : (t, float) => unit = ""; 97 | [@bs.set] external lineCap : (t, LineCap.t) => unit = ""; 98 | [@bs.set] external lineJoin : (t, LineJoin.t) => unit = ""; 99 | [@bs.set] external miterLimit : (t, float) => unit = ""; 100 | 101 | /* Colors, Styles, and Shadows */ 102 | [@bs.set] external setFillStyle : (t, 'a) => unit = "fillStyle"; 103 | [@bs.set] external setStrokeStyle : (t, 'a) => unit = "strokeStyle"; 104 | 105 | /* in re unused warnings 106 | awaiting release of https://github.com/bloomberg/bucklescript/issues/1656 107 | to just use [@@bs.set] directly with an ignored (style a) */ 108 | let setStrokeStyle = (type a, ctx: t, _: style(a), v: a) => 109 | setStrokeStyle(ctx, v); 110 | 111 | let setFillStyle = (type a, ctx: t, _: style(a), v: a) => 112 | setFillStyle(ctx, v); 113 | 114 | let reifyStyle = (type a, x: 'a) : (style(a), a) => { 115 | let isCanvasGradient: 'a => bool = [%raw {| 116 | function(x) { return x instanceof CanvasGradient; } 117 | |}]; 118 | 119 | let isCanvasPattern: 'a => bool = [%raw {| 120 | function(x) { return x instanceof CanvasPattern; } 121 | |}]; 122 | 123 | ( 124 | if (Js.typeof(x) == "string") Obj.magic(String) 125 | else if (isCanvasGradient(x)) Obj.magic(Gradient) 126 | else if (isCanvasPattern(x)) Obj.magic(Pattern) 127 | else invalid_arg( 128 | "Unknown canvas style kind. Known values are: String, CanvasGradient, CanvasPattern"), 129 | Obj.magic(x) 130 | ); 131 | }; 132 | 133 | [@bs.get] external fillStyle : t => 'a = ""; 134 | [@bs.get] external strokeStyle : t => 'a = ""; 135 | 136 | let fillStyle = (ctx: t) => 137 | ctx |> fillStyle |> reifyStyle; 138 | 139 | let strokeStyle = (ctx: t) => 140 | ctx |> strokeStyle |> reifyStyle; 141 | 142 | [@bs.set] external shadowOffsetX : (t, float) => unit = ""; 143 | [@bs.set] external shadowOffsetY : (t, float) => unit = ""; 144 | [@bs.set] external shadowBlur : (t, float) => unit = ""; 145 | [@bs.set] external shadowColor : (t, string) => unit = ""; 146 | 147 | /* Gradients */ 148 | [@bs.send.pipe : t] external createLinearGradient : (~x0: float, ~y0: float, ~x1: float, ~y1: float) => gradient = ""; 149 | [@bs.send.pipe : t] external createRadialGradient : (~x0: float, ~y0: float, ~x1: float, ~y1: float, ~r0: float, ~r1: float) => gradient = ""; 150 | [@bs.send.pipe : gradient] external addColorStop : (float, string) => unit = ""; 151 | [@bs.val] external createPattern : ( 152 | t, 153 | Dom.element, 154 | [@bs.string] [ 155 | | `repeat 156 | [@bs.as "repeat-x"] | `repeatX 157 | [@bs.as "repeat-y"] | `repeatY 158 | [@bs.as "no-repeat"] | `noRepeat 159 | ] 160 | ) 161 | => pattern = ""; 162 | 163 | /* Paths */ 164 | [@bs.send.pipe : t] external beginPath : unit = ""; 165 | [@bs.send.pipe : t] external closePath : unit = ""; 166 | [@bs.send.pipe : t] external fill : unit = ""; 167 | [@bs.send.pipe : t] external stroke : unit = ""; 168 | [@bs.send.pipe : t] external clip : unit = ""; 169 | [@bs.send.pipe : t] external moveTo : (~x: float, ~y: float) => unit = ""; 170 | [@bs.send.pipe : t] external lineTo : (~x: float, ~y: float) => unit = ""; 171 | [@bs.send.pipe : t] external quadraticCurveTo : (~cp1x: float, ~cp1y: float, ~x: float, ~y: float) => unit = ""; 172 | [@bs.send.pipe : t] external bezierCurveTo : (~cp1x: float, ~cp1y: float, ~cp2x: float, ~cp2y: float, ~x: float, ~y: float) => unit = ""; 173 | [@bs.send.pipe : t] external arcTo : (~x1: float, ~y1: float, ~x2: float, ~y2: float, ~r: float) => unit = ""; 174 | [@bs.send.pipe : t] external arc : (~x: float, ~y: float, ~r: float, ~startAngle: float, ~endAngle: float, ~anticw: bool) => unit = ""; 175 | [@bs.send.pipe : t] external rect : (~x: float, ~y: float, ~w: float, ~h: float) => unit = ""; 176 | [@bs.send.pipe : t] external isPointInPath : (~x: float, ~y: float) => bool = ""; 177 | 178 | /* Text */ 179 | [@bs.set] external font : (t, string) => unit = ""; 180 | [@bs.set] external textAlign : (t, string) => unit = ""; 181 | [@bs.set] external textBaseline : (t, string) => unit = ""; 182 | [@bs.send.pipe : t] external fillText : (string, ~x: float, ~y: float, ~maxWidth: float=?) => unit = ""; 183 | [@bs.send.pipe : t] external strokeText : (string, ~x: float, ~y: float, ~maxWidth: float=?) => unit = ""; 184 | [@bs.send.pipe : t] external measureText : string => measureText = ""; 185 | [@bs.get] external width : measureText => float = ""; 186 | 187 | /* Rectangles */ 188 | [@bs.send.pipe : t] external fillRect : (~x: float, ~y: float, ~w: float, ~h: float) => unit = ""; 189 | [@bs.send.pipe : t] external strokeRect : (~x: float, ~y: float, ~w: float, ~h: float) => unit = ""; 190 | [@bs.send.pipe : t] external clearRect : (~x: float, ~y: float, ~w: float, ~h: float) => unit = ""; 191 | 192 | [@bs.send] external createImageDataCoords : (t, ~width: float, ~height: float) => Webapi__Dom__Image.t = "createImageData"; 193 | [@bs.send] external createImageDataFromImage : (t, Webapi__Dom__Image.t) => Webapi__Dom__Image.t = "createImageData"; 194 | 195 | [@bs.send] external getImageData : (t, ~sx: float, ~sy: float, ~sw: float, ~sh: float) => Webapi__Dom__Image.t = ""; 196 | 197 | [@bs.send] external putImageData : ( 198 | t, 199 | ~imageData: Webapi__Dom__Image.t, 200 | ~dx: float, 201 | ~dy: float 202 | ) 203 | => unit = ""; 204 | 205 | [@bs.send] external putImageDataWithDirtyRect : ( 206 | t, 207 | ~imageData: Webapi__Dom__Image.t, 208 | ~dx: float, 209 | ~dy: float, 210 | ~dirtyX: float, 211 | ~dirtyY: float, 212 | ~dirtyWidth: float, 213 | ~dirtyHeight: float 214 | ) 215 | => unit = "putImageData"; 216 | -------------------------------------------------------------------------------- /src/Webapi/Canvas/Webapi__Canvas__WebGl.re: -------------------------------------------------------------------------------- 1 | type glT; 2 | type programT; 3 | type shaderT; 4 | type bufferT; 5 | 6 | /* ClearBufferMask */ 7 | let _DEPTH_BUFFER_BIT: int = 256; 8 | let _STENCIL_BUFFER_BIT: int = 1024; 9 | let _COLOR_BUFFER_BIT: int = 16384; 10 | 11 | /* BeginMode */ 12 | let _POINTS: int = 0; 13 | let _LINES: int = 1; 14 | let _LINE_LOOP: int = 2; 15 | let _LINE_STRIP: int = 3; 16 | let _TRIANGLES: int = 4; 17 | let _TRIANGLE_STRIP: int = 5; 18 | let _TRIANGLE_FAN: int = 6; 19 | 20 | /* TEXTURE_2D */ 21 | let _CULL_FACE: int = 2884; 22 | let _BLEND: int = 3042; 23 | let _DITHER: int = 3024; 24 | let _STENCIL_TEST: int = 2960; 25 | let _DEPTH_TEST: int = 2929; 26 | let _SCISSOR_TEST: int = 3089; 27 | let _POLYGON_OFFSET_FILL: int = 32823; 28 | let _SAMPLE_ALPHA_TO_COVERAGE: int = 32926; 29 | let _SAMPLE_COVERAGE: int = 32928; 30 | 31 | /* BlendingFactorDest */ 32 | let _ZERO: int = 0; 33 | let _ONE: int = 1; 34 | let _SRC_COLOR: int = 768; 35 | let _ONE_MINUS_SRC_COLOR: int = 769; 36 | let _SRC_ALPHA: int = 770; 37 | let _ONE_MINUS_SRC_ALPHA: int = 771; 38 | let _DST_ALPHA: int = 772; 39 | let _ONE_MINUS_DST_ALPHA: int = 773; 40 | 41 | /* DataType */ 42 | let _BYTE: int = 5120; 43 | let _UNSIGNED_BYTE: int = 5121; 44 | let _SHORT: int = 5122; 45 | let _UNSIGNED_SHORT: int = 5123; 46 | let _INT: int = 5124; 47 | let _UNSIGNED_INT: int = 5125; 48 | let _FLOAT: int = 5126; 49 | 50 | /* CullFaceMode */ 51 | let _FRONT: int = 1028; 52 | let _BACK: int = 1029; 53 | let _FRONT_AND_BACK: int = 1032; 54 | 55 | /* Shaders */ 56 | let _FRAGMENT_SHADER: int = 35632; 57 | let _VERTEX_SHADER: int = 35633; 58 | 59 | /* Buffer Objects */ 60 | let _ARRAY_BUFFER: int = 34962; 61 | let _ELEMENT_ARRAY_BUFFER: int = 34963; 62 | let _ARRAY_BUFFER_BINDING: int = 34964; 63 | let _ELEMENT_ARRAY_BUFFER_BINDING: int = 34965; 64 | let _STREAM_DRAW: int = 35040; 65 | let _STATIC_DRAW: int = 35044; 66 | let _DYNAMIC_DRAW: int = 35048; 67 | 68 | /* void clear(GLbitfield mask); */ 69 | [@bs.send] external clear : (glT, int) => unit = "clear"; 70 | /* void clearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); */ 71 | [@bs.send] external clearColor : (glT, float, float, float, float) => unit = "clearColor"; 72 | /* void enable(GLenum cap); */ 73 | [@bs.send] external enable : (glT, int) => unit = "enable"; 74 | /* void disable(GLenum cap); */ 75 | [@bs.send] external disable : (glT, int) => unit = "disable"; 76 | /* void blendFunc(GLenum sfactor, GLenum dfactor); */ 77 | [@bs.send] external blendFunc : (glT, int, int) => unit = "blendFunc"; 78 | /* void cullFace(GLenum mode); */ 79 | [@bs.send] external cullFace : (glT, int) => unit = "cullFace"; 80 | [@bs.send] external createBuffer : glT => bufferT = "createBuffer"; 81 | [@bs.send] external deleteBuffer : (glT, bufferT) => unit = "deleteBuffer"; 82 | [@bs.send] external bindBuffer : (glT, int, bufferT) => unit = "bindBuffer"; 83 | [@bs.send] external bufferData : (glT, int, Js.Typed_array.Uint16Array.t, int) => unit = "bufferData"; 84 | [@bs.send] external bufferFloatData : (glT, int, Js.Typed_array.Float32Array.t, int) => unit = "bufferData"; 85 | [@bs.send] external createProgram : glT => programT = "createProgram"; 86 | [@bs.send] external linkProgram : (glT, programT) => unit = "linkProgram"; 87 | [@bs.send] external useProgram : (glT, programT) => unit = "useProgram"; 88 | [@bs.send] external getProgramInfoLog : (glT, programT) => string = "getProgramInfoLog"; 89 | [@bs.send] external bindAttribLocation : (glT, programT, int, string) => unit = "bindAttribLocation"; 90 | [@bs.send] external createShader : (glT, int) => shaderT = "createShader"; 91 | [@bs.send] external shaderSource : (glT, shaderT, string) => unit = "shaderSource"; 92 | [@bs.send] external compileShader : (glT, shaderT) => unit = "compileShader"; 93 | [@bs.send] external attachShader : (glT, programT, shaderT) => unit = "attachShader"; 94 | [@bs.send] external getShaderInfoLog : (glT, shaderT) => string = "getShaderInfoLog"; 95 | /* void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset); */ 96 | [@bs.send] external drawElements : (glT, int, int, int, int) => unit = "drawElements"; 97 | /* void enableVertexAttribArray(GLuint index); */ 98 | [@bs.send] external enableVertexAttribArray : (glT, int) => unit = "enableVertexAttribArray"; 99 | /* void vertexAttribPointer(GLuint indx, GLint size, GLenum type, 100 | GLboolean normalized, GLsizei stride, GLintptr offset); */ 101 | [@bs.send] external vertexAttribPointer : (glT, int, int, int, bool, int, int) => unit = "vertexAttribPointer"; 102 | /* GLint gl.getAttribLocation(program, name); */ 103 | [@bs.send] external getAttribLocation : (glT, programT, string) => int = "getAttribLocation"; 104 | /* void gl.drawArrays(mode, first, count); */ 105 | [@bs.send] external drawArrays : (glT, int, int, int) => unit = "drawArrays"; 106 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__AnimationEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.animationEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "AnimationEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "AnimationEvent"; 7 | 8 | [@bs.get] external animationName : t => string = ""; 9 | [@bs.get] external elapsedTime : t => float = ""; 10 | [@bs.get] external pseudoElement : t => string /* enum-ish */ = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Attr.re: -------------------------------------------------------------------------------- 1 | type t = Dom.attr; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.get] external namespaceURI : t => string = ""; 7 | [@bs.get] external prefix : t => string = ""; 8 | [@bs.get] external localName : t => string = ""; 9 | [@bs.get] external name : t => string = ""; 10 | [@bs.get] external value : t => string = ""; 11 | [@bs.get] [@bs.return nullable] external ownerElement : t => option(Dom.element) = ""; 12 | [@bs.get] external specified : t => bool = ""; /* useless; always returns true (exact wording from spec) */ 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.beforeUnloadEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "BeforeUnloadEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "BeforeUnloadEvent"; 7 | 8 | [@bs.get] external returnValue : t => string = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CdataSection.re: -------------------------------------------------------------------------------- 1 | type t = Dom.cdataSection; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__CharacterData.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 7 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 8 | include Webapi__Dom__Slotable.Impl({ type nonrec t = t; }); 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CharacterData.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | [@bs.get] external data : T.t => string = ""; 3 | [@bs.get] external length : T.t => int = ""; 4 | 5 | [@bs.send.pipe : T.t] external substringData : (~offset: int, ~count: int) => string = ""; 6 | [@bs.send.pipe : T.t] external appendData : string => unit = ""; 7 | [@bs.send.pipe : T.t] external insertData : (~offset: int, string) => unit = ""; 8 | [@bs.send.pipe : T.t] external deleteData : (~offset: int, ~count: int) => unit = ""; 9 | [@bs.send.pipe : T.t] external replaceData : (~offset: int, ~count: int, string) => unit = ""; 10 | }; 11 | 12 | type t = Dom.characterData; 13 | 14 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 15 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 16 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 17 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 18 | include Impl({ type nonrec t = t; }); -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ChildNode.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.send.pipe : T.t] external remove : unit = ""; 4 | }; 5 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ClipboardEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.clipboardEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "ClipboardEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "ClipboardEvent"; 7 | 8 | [@bs.get] external clipboardData : t => Dom.dataTransfer = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CloseEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.closeEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "CloseEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "CloseEvent"; 7 | 8 | [@bs.get] external wasClean : t => bool = ""; 9 | [@bs.get] external code : t => int = ""; 10 | [@bs.get] external reason : t => string = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Comment.re: -------------------------------------------------------------------------------- 1 | type t = Dom.comment; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__CharacterData.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 7 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 8 | include Webapi__Dom__Slotable.Impl({ type nonrec t = t; }); 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CompositionEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.compositionEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "CompositionEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "CompositionEvent"; 8 | 9 | [@bs.get] external data : t => string = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CssStyleDeclaration.re: -------------------------------------------------------------------------------- 1 | type t = Dom.cssStyleDeclaration; 2 | type cssRule; /* TODO: Move to Webapi__Dom */ 3 | 4 | [@bs.get] external cssText : t => string = ""; 5 | [@bs.set] external setCssText : (t, string) => unit = "cssText"; 6 | [@bs.get] external length : t => int = ""; 7 | [@bs.get] external parentRule : t => cssRule = ""; 8 | 9 | [@bs.send.pipe : t] external getPropertyPriority : string => string = ""; 10 | [@bs.send.pipe : t] external getPropertyValue : string => string = ""; 11 | [@bs.send.pipe : t] external item : int => string = ""; 12 | [@bs.send.pipe : t] external removeProperty : string => string = ""; 13 | [@bs.send.pipe : t] external setProperty : (string, string, string) => unit = ""; 14 | /*[@@bs.send.pipe : t] external setPropertyValue : (string, string) => unit = "";*/ /* not mentioned by MDN and not implemented by chrome, but in the CSSOM spec: https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface */ 15 | 16 | /* CSS2Properties */ 17 | [@bs.get] external azimuth : t => string = ""; 18 | [@bs.get] external background : t => string = ""; 19 | [@bs.get] external backgroundAttachment : t => string = ""; 20 | [@bs.get] external backgroundColor : t => string = ""; 21 | [@bs.get] external backgroundImage : t => string = ""; 22 | [@bs.get] external backgroundPosition : t => string = ""; 23 | [@bs.get] external backgroundRepeat : t => string = ""; 24 | [@bs.get] external border : t => string = ""; 25 | [@bs.get] external borderCollapse : t => string = ""; 26 | [@bs.get] external borderColor : t => string = ""; 27 | [@bs.get] external borderSpacing : t => string = ""; 28 | [@bs.get] external borderStyle : t => string = ""; 29 | [@bs.get] external borderTop : t => string = ""; 30 | [@bs.get] external borderRight : t => string = ""; 31 | [@bs.get] external borderBottom : t => string = ""; 32 | [@bs.get] external borderLeft : t => string = ""; 33 | [@bs.get] external borderTopColor : t => string = ""; 34 | [@bs.get] external borderRightColor : t => string = ""; 35 | [@bs.get] external borderBottomColor : t => string = ""; 36 | [@bs.get] external borderLeftColor : t => string = ""; 37 | [@bs.get] external borderTopStyle : t => string = ""; 38 | [@bs.get] external borderRightStyle : t => string = ""; 39 | [@bs.get] external borderBottomStyle : t => string = ""; 40 | [@bs.get] external borderLeftStyle : t => string = ""; 41 | [@bs.get] external borderTopWidth : t => string = ""; 42 | [@bs.get] external borderRightWidth : t => string = ""; 43 | [@bs.get] external borderBottomWidth : t => string = ""; 44 | [@bs.get] external borderLeftWidth : t => string = ""; 45 | [@bs.get] external borderWidth : t => string = ""; 46 | [@bs.get] external bottom : t => string = ""; 47 | [@bs.get] external captionSide : t => string = ""; 48 | [@bs.get] external clear : t => string = ""; 49 | [@bs.get] external clip : t => string = ""; 50 | [@bs.get] external color : t => string = ""; 51 | [@bs.get] external content : t => string = ""; 52 | [@bs.get] external counterIncrement : t => string = ""; 53 | [@bs.get] external counterReset : t => string = ""; 54 | [@bs.get] external cue : t => string = ""; 55 | [@bs.get] external cueAfter : t => string = ""; 56 | [@bs.get] external cueBefore : t => string = ""; 57 | [@bs.get] external cursor : t => string = ""; 58 | [@bs.get] external direction : t => string = ""; 59 | [@bs.get] external display : t => string = ""; 60 | [@bs.get] external elevation : t => string = ""; 61 | [@bs.get] external emptyCells : t => string = ""; 62 | [@bs.get] external cssFloat : t => string = ""; 63 | [@bs.get] external font : t => string = ""; 64 | [@bs.get] external fontFamily : t => string = ""; 65 | [@bs.get] external fontSize : t => string = ""; 66 | [@bs.get] external fontSizeAdjust : t => string = ""; 67 | [@bs.get] external fontStretch : t => string = ""; 68 | [@bs.get] external fontStyle : t => string = ""; 69 | [@bs.get] external fontVariant : t => string = ""; 70 | [@bs.get] external fontWeight : t => string = ""; 71 | [@bs.get] external height : t => string = ""; 72 | [@bs.get] external left : t => string = ""; 73 | [@bs.get] external letterSpacing : t => string = ""; 74 | [@bs.get] external lineHeight : t => string = ""; 75 | [@bs.get] external listStyle : t => string = ""; 76 | [@bs.get] external listStyleImage : t => string = ""; 77 | [@bs.get] external listStylePosition : t => string = ""; 78 | [@bs.get] external listStyleType : t => string = ""; 79 | [@bs.get] external margin : t => string = ""; 80 | [@bs.get] external marginTop : t => string = ""; 81 | [@bs.get] external marginRight : t => string = ""; 82 | [@bs.get] external marginBottom : t => string = ""; 83 | [@bs.get] external marginLeft : t => string = ""; 84 | [@bs.get] external markerOffset : t => string = ""; 85 | [@bs.get] external marks : t => string = ""; 86 | [@bs.get] external maxHeight : t => string = ""; 87 | [@bs.get] external maxWidth : t => string = ""; 88 | [@bs.get] external minHeight : t => string = ""; 89 | [@bs.get] external minWidth : t => string = ""; 90 | [@bs.get] external orphans : t => string = ""; 91 | [@bs.get] external outline : t => string = ""; 92 | [@bs.get] external outlineColor : t => string = ""; 93 | [@bs.get] external outlineStyle : t => string = ""; 94 | [@bs.get] external outlineWidth : t => string = ""; 95 | [@bs.get] external overflow : t => string = ""; 96 | [@bs.get] external padding : t => string = ""; 97 | [@bs.get] external paddingTop : t => string = ""; 98 | [@bs.get] external paddingRight : t => string = ""; 99 | [@bs.get] external paddingBottom : t => string = ""; 100 | [@bs.get] external paddingLeft : t => string = ""; 101 | [@bs.get] external page : t => string = ""; 102 | [@bs.get] external pageBreakAfter : t => string = ""; 103 | [@bs.get] external pageBreakBefore : t => string = ""; 104 | [@bs.get] external pageBreakInside : t => string = ""; 105 | [@bs.get] external pause : t => string = ""; 106 | [@bs.get] external pauseAfter : t => string = ""; 107 | [@bs.get] external pauseBefore : t => string = ""; 108 | [@bs.get] external pitch : t => string = ""; 109 | [@bs.get] external pitchRange : t => string = ""; 110 | [@bs.get] external playDuring : t => string = ""; 111 | [@bs.get] external position : t => string = ""; 112 | [@bs.get] external quotes : t => string = ""; 113 | [@bs.get] external richness : t => string = ""; 114 | [@bs.get] external right : t => string = ""; 115 | [@bs.get] external size : t => string = ""; 116 | [@bs.get] external speak : t => string = ""; 117 | [@bs.get] external speakHeader : t => string = ""; 118 | [@bs.get] external speakNumeral : t => string = ""; 119 | [@bs.get] external speakPunctuation : t => string = ""; 120 | [@bs.get] external speechRate : t => string = ""; 121 | [@bs.get] external stress : t => string = ""; 122 | [@bs.get] external tableLayout : t => string = ""; 123 | [@bs.get] external textAlign : t => string = ""; 124 | [@bs.get] external textDecoration : t => string = ""; 125 | [@bs.get] external textIndent : t => string = ""; 126 | [@bs.get] external textShadow : t => string = ""; 127 | [@bs.get] external textTransform : t => string = ""; 128 | [@bs.get] external top : t => string = ""; 129 | [@bs.get] external unicodeBidi : t => string = ""; 130 | [@bs.get] external verticalAlign : t => string = ""; 131 | [@bs.get] external visibility : t => string = ""; 132 | [@bs.get] external voiceFamily : t => string = ""; 133 | [@bs.get] external volume : t => string = ""; 134 | [@bs.get] external whiteSpace : t => string = ""; 135 | [@bs.get] external widows : t => string = ""; 136 | [@bs.get] external width : t => string = ""; 137 | [@bs.get] external wordSpacing : t => string = ""; 138 | [@bs.get] external zIndex : t => string = ""; -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__CustomEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.customEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "CustomEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "CustomEvent"; 7 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Document.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | external asDocument : T.t => Dom.document = "%identity"; 3 | 4 | let asHtmlDocument: T.t => option(Dom.htmlDocument) = [%raw {| 5 | function(document) { 6 | var defaultView = document.defaultView; 7 | 8 | if (defaultView != null) { 9 | var HTMLDocument = defaultView.HTMLDocument; 10 | 11 | if (HTMLDocument != null && document instanceof HTMLDocument) { 12 | return document; 13 | } 14 | } 15 | } 16 | |}]; 17 | 18 | /** Unsafe cast, use [ashtmlDocument] instead */ 19 | external unsafeAsHtmlDocument : T.t => Dom.htmlDocument = "%identity"; 20 | 21 | let ofNode = (node: Dom.node) : option(T.t) => 22 | Webapi__Dom__Node.nodeType(node) == Webapi__Dom__Types.Document ? 23 | Some(Obj.magic(node)) : 24 | None; 25 | 26 | [@bs.get] external characterSet : T.t => string = ""; 27 | [@bs.get] external compatMode : T.t => string /* compatMode enum */ = ""; /* experimental */ 28 | let compatMode: T.t => Webapi__Dom__Types.compatMode = 29 | (self) => Webapi__Dom__Types.decodeCompatMode(compatMode(self)); 30 | [@bs.get] external doctype : T.t => Dom.documentType = ""; 31 | [@bs.get] external documentElement : T.t => Dom.element = ""; 32 | [@bs.get] external documentURI : T.t => string = ""; 33 | [@bs.get] external hidden : T.t => bool = ""; 34 | [@bs.get] external implementation : T.t => Dom.domImplementation = ""; 35 | [@bs.get] external lastStyleSheetSet : T.t => string = ""; 36 | [@bs.get] [@bs.return nullable] external pointerLockElement : T.t => option(Dom.element) = ""; /* experimental */ 37 | 38 | [@bs.get] external preferredStyleSheetSet : T.t => string = ""; 39 | [@bs.get] [@bs.return nullable] external scrollingElement : T.t => option(Dom.element) = ""; 40 | [@bs.get] external selectedStyleSheetSet : T.t => string = ""; 41 | [@bs.set] external setSelectedStyleSheetSet : (T.t, string) => unit = "selectedStyleSheetSet"; 42 | [@bs.get] external styleSheets : T.t => array(Dom.cssStyleSheet) = ""; /* return StyleSheetList, not array */ 43 | [@bs.get] external styleSheetSets : T.t => array(string) = ""; 44 | [@bs.get] external visibilityState : T.t => string /* visibilityState enum */ = ""; 45 | let visibilityState: T.t => Webapi__Dom__Types.visibilityState = 46 | (self) => Webapi__Dom__Types.decodeVisibilityState(visibilityState(self)); 47 | 48 | [@bs.send.pipe : T.t] external adoptNode : Dom.element_like('a) => Dom.element_like('a) = ""; 49 | [@bs.send.pipe : T.t] external createAttribute : string => Dom.attr = ""; 50 | [@bs.send.pipe : T.t] external createAttributeNS : (string, string) => Dom.attr = ""; 51 | [@bs.send.pipe : T.t] external createComment : string => Dom.comment = ""; 52 | [@bs.send.pipe : T.t] external createDocumentFragment : Dom.documentFragment = ""; 53 | [@bs.send.pipe : T.t] external createElement : string => Dom.element = ""; 54 | [@bs.send.pipe : T.t] external createElementWithOptions : (string, Js.t({..})) => Dom.element = "createElement"; /* not widely supported */ 55 | [@bs.send.pipe : T.t] external createElementNS : (string, string) => Dom.element = ""; 56 | [@bs.send.pipe : T.t] external createElementNSWithOptions : (string, string, Js.t({..})) => Dom.element = "createElementNS"; /* not widely supported */ 57 | [@bs.send.pipe : T.t] external createEvent : string /* large enum */ => Dom.event = ""; /* discouraged (but not deprecated) in favor of Event constructors */ 58 | [@bs.send.pipe : T.t] external createNodeIterator : Dom.node_like('a) => Dom.nodeIterator = ""; 59 | [@bs.send.pipe : T.t] external createNodeIteratorWithWhatToShow : (Dom.node_like('a), Webapi__Dom__Types.WhatToShow.t) => Dom.nodeIterator = "createNodeIterator"; 60 | [@bs.send.pipe : T.t] external createNodeIteratorWithWhatToShowFilter : (Dom.node_like('a), Webapi__Dom__Types.WhatToShow.t, Dom.nodeFilter) => Dom.nodeIterator = "createNodeIterator"; /* createProcessingInstruction */ 61 | [@bs.send.pipe : T.t] external createRange : Dom.range = ""; 62 | [@bs.send.pipe : T.t] external createTextNode : string => Dom.text = ""; 63 | [@bs.send.pipe : T.t] external createTreeWalker : Dom.element_like('a) => Dom.treeWalker = ""; 64 | [@bs.send.pipe : T.t] external createTreeWalkerWithWhatToShow : (Dom.element_like('a), Webapi__Dom__Types.WhatToShow.t) => Dom.treeWalker = "createTreeWalker"; 65 | [@bs.send.pipe : T.t] external createTreeWalkerWithWhatToShowFilter : (Dom.element_like('a), Webapi__Dom__Types.WhatToShow.t, Dom.nodeFilter) => Dom.treeWalker = "createTreeWalker"; 66 | [@bs.send.pipe : T.t] external elementFromPoint : (int, int) => Dom.element = ""; /* experimental, but widely supported */ 67 | [@bs.send.pipe : T.t] external elementsFromPoint : (int, int) => array(Dom.element) = ""; /* experimental */ 68 | [@bs.send.pipe : T.t] external enableStyleSheetsForSet : string => unit = ""; 69 | [@bs.send.pipe : T.t] external exitPointerLock : unit = ""; /* experimental */ 70 | [@bs.send.pipe : T.t] external getAnimations : array(Dom.animation) = ""; /* experimental */ 71 | [@bs.send.pipe : T.t] external getElementsByClassName : string => Dom.htmlCollection = ""; 72 | [@bs.send.pipe : T.t] external getElementsByTagName : string => Dom.htmlCollection = ""; 73 | [@bs.send.pipe : T.t] external getElementsByTagNameNS : (string, string) => Dom.htmlCollection = ""; 74 | [@bs.send.pipe : T.t] external importNode : Dom.element_like('a) => Dom.element_like('a) = ""; 75 | [@bs.send.pipe : T.t] external importNodeDeep : (Dom.element_like('a), [@bs.as {json|true|json}] _) => Dom.element_like('a) = "importNode"; 76 | [@bs.send.pipe : T.t] external registerElement : (string, unit) => Dom.element = ""; /* experimental and deprecated in favor of customElements.define() */ 77 | [@bs.send.pipe : T.t] external registerElementWithOptions : (string, Js.t({..}), unit) => Dom.element = "registerElement"; /* experimental and deprecated in favor of customElements.define() */ 78 | 79 | /** XPath stuff */ 80 | /* createExpression */ 81 | /* createNSResolver */ 82 | /* evaluate */ 83 | 84 | /* GlobalEventHandlers interface */ 85 | }; 86 | 87 | type t = Dom.document; 88 | 89 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 90 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 91 | include Webapi__Dom__NonElementParentNode.Impl({ type nonrec t = t; }); 92 | include Webapi__Dom__DocumentOrShadowRoot.Impl({ type nonrec t = t; }); 93 | include Webapi__Dom__ParentNode.Impl({ type nonrec t = t; }); 94 | include Impl({ type nonrec t = t; }); 95 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DocumentFragment.re: -------------------------------------------------------------------------------- 1 | type t = Dom.documentFragment; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__NonElementParentNode.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__ParentNode.Impl({ type nonrec t = t; }); 7 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DocumentOrShadowRoot.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | /* TODO: Implemented in Shadow DOM spec */ 4 | }; 5 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DocumentType.re: -------------------------------------------------------------------------------- 1 | type t = Dom.documentType; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 6 | 7 | [@bs.get] external name : t => string = ""; 8 | [@bs.get] external publicId : t => string = ""; 9 | [@bs.get] external systemId : t => string = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DomImplementation.re: -------------------------------------------------------------------------------- 1 | type t = Dom.domImplementation; 2 | 3 | [@bs.send.pipe : t] external createDocumentType : (~qualifiedName: string, ~publicId: string, ~systemId: string) => Dom.documentType = ""; 4 | [@bs.send.pipe : t] external createDocument : (Js.null(string), string, Js.null(Dom.documentType)) => Dom.xmlDocument = ""; 5 | let createDocument = (~namespace: option(string)=?, ~qualifiedName: string, ~docType: option(Dom.documentType)=?) => 6 | createDocument(Js.Null.fromOption(namespace), qualifiedName, Js.Null.fromOption(docType)); 7 | [@bs.send.pipe : t] external createHTMLDocument : Dom.htmlDocument = ""; 8 | [@bs.send.pipe : t] external createHTMLDocumentWithTitle : string => Dom.htmlDocument = "createHTMLDocument"; 9 | [@bs.send.pipe : t] external hasFeature : bool = ""; /* useless; always returns true (this is exact wording from the actual spec) */ 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DomRect.re: -------------------------------------------------------------------------------- 1 | type t = Dom.domRect; 2 | 3 | [@bs.new] external make : (~x: float, ~y: float, ~width: float, ~height: float) => t = "DOMRect"; /* experimental */ 4 | 5 | [@bs.get] external top : t => float = ""; 6 | [@bs.get] external bottom : t => float = ""; 7 | [@bs.get] external left : t => float = ""; 8 | [@bs.get] external right : t => float = ""; 9 | [@bs.get] external height : t => float = ""; 10 | [@bs.get] external width : t => float = ""; 11 | [@bs.get] external x : t => float = ""; 12 | [@bs.get] external y : t => float = ""; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DomStringMap.re: -------------------------------------------------------------------------------- 1 | type t = Dom.domStringMap; 2 | 3 | type key = string; 4 | 5 | [@bs.get_index] [@bs.return nullable] 6 | external get: (t, key) => option(string) = ""; 7 | let get = (key, map) => get(map, key); 8 | [@bs.set_index] external set: (t, key, string) => unit = ""; 9 | let set = (key, value, map) => set(map, key, value); 10 | let unsafeDeleteKey: (key, t) => unit = [%raw 11 | "function(key, map) { delete map[key] }" 12 | ]; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DomTokenList.re: -------------------------------------------------------------------------------- 1 | type t = Dom.domTokenList; 2 | 3 | [@bs.get] external length : t => int = ""; 4 | 5 | [@bs.send.pipe : t] [@bs.return nullable] external item : int => option(string) = ""; 6 | [@bs.send.pipe : t] external add : string => unit = ""; 7 | [@bs.send.pipe : t] [@bs.splice] external addMany : array(string) => unit = "add"; 8 | [@bs.send.pipe : t] external contains : string => bool = "contains"; 9 | /* entries: iterator API, should have language support */ 10 | [@bs.send.pipe : t] external forEach : ((string, int) => unit) => unit = ""; 11 | /* keys: iterator API, should have language support */ 12 | [@bs.send.pipe : t] external remove : string => unit = ""; 13 | [@bs.send.pipe : t] [@bs.splice] external removeMany : array(string) => unit = "remove"; 14 | [@bs.send.pipe : t] external replace : (string, string) => unit = ""; /* experimental */ 15 | [@bs.send.pipe : t] external supports : string => bool = ""; /* experimental, Content Management Level 1 */ 16 | [@bs.send.pipe : t] external toggle : string => bool = ""; 17 | [@bs.send.pipe : t] external toggleForced : (string, [@bs.as {json|true|json}] _) => bool = "toggle"; 18 | [@bs.send.pipe : t] external toString : string = ""; 19 | /* values: iterator API, should have language support */ 20 | 21 | [@bs.get] external value : t => string = ""; /* experimental, from being merged with domSettableTokenList */ 22 | [@bs.set] external setValue : (t, string) => unit = "value"; /* experimental, from being merged with domSettableTokenList */ 23 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__DragEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.dragEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__MouseEvent.Impl({ type nonrec t = t; }); 6 | 7 | [@bs.new] external make : string => t = "DragEvent"; 8 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "DragEvent"; 9 | 10 | [@bs.get] external dataTransfer : t => Dom.dataTransfer = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Element.re: -------------------------------------------------------------------------------- 1 | /* internal, moved out of Impl to reduce unnecessary code duplication */ 2 | let ofNode = (node: Dom.node) : option('a) => 3 | Webapi__Dom__Node.nodeType(node) == Webapi__Dom__Types.Element ? 4 | Some(Obj.magic(node)) : 5 | None; 6 | 7 | module Impl = (T: {type t;}) => { 8 | let asHtmlElement: T.t => option(Dom.htmlElement) = [%raw {| 9 | function(element) { 10 | var ownerDocument = element.ownerDocument; 11 | 12 | if (ownerDocument != null) { 13 | var defaultView = ownerDocument.defaultView; 14 | 15 | if (defaultView != null) { 16 | var HTMLElement = defaultView.HTMLElement; 17 | 18 | if (HTMLElement != null && element instanceof HTMLElement) { 19 | return element; 20 | } 21 | } 22 | } 23 | } 24 | |}]; 25 | 26 | /** Unsafe cast, use [asHtmlElement] instead */ 27 | external unsafeAsHtmlElement : T.t => Dom.htmlElement = "%identity"; 28 | 29 | let ofNode: Dom.node => option(T.t) = ofNode; 30 | 31 | [@bs.get] external attributes : T.t => Dom.namedNodeMap = ""; 32 | [@bs.get] external classList : T.t => Dom.domTokenList = ""; 33 | [@bs.get] external className : T.t => string = ""; 34 | [@bs.set] external setClassName : (T.t, string) => unit = "className"; 35 | [@bs.get] external clientHeight : T.t => int = ""; /* experimental */ 36 | [@bs.get] external clientLeft : T.t => int = ""; /* experimental */ 37 | [@bs.get] external clientTop : T.t => int = ""; /* experimental */ 38 | [@bs.get] external clientWidth : T.t => int = ""; /* experimental */ 39 | [@bs.get] external id : T.t => string = ""; 40 | [@bs.set] external setId : (T.t, string) => unit = "id"; 41 | [@bs.get] external innerHTML : T.t => string = ""; 42 | [@bs.set] external setInnerHTML : (T.t, string) => unit = "innerHTML"; 43 | [@bs.get] external localName : T.t => string = ""; 44 | [@bs.get] [@bs.return nullable] external namespaceURI : T.t => option(string) = ""; 45 | [@bs.get] external outerHTML : T.t => string = ""; /* experimental, but widely supported */ 46 | [@bs.set] external setOuterHTML : (T.t, string) => unit = "outerHTML"; /* experimental, but widely supported */ 47 | [@bs.get] [@bs.return nullable] external prefix : T.t => option(string) = ""; 48 | [@bs.get] external scrollHeight : T.t => int = ""; /* experimental, but widely supported */ 49 | [@bs.get] external scrollLeft : T.t => float = ""; /* experimental */ 50 | [@bs.set] external setScrollLeft : (T.t, float) => unit = "scrollLeft"; /* experimental */ 51 | [@bs.get] external scrollTop : T.t => float = ""; /* experimental, but widely supported */ 52 | [@bs.set] external setScrollTop : (T.t, float) => unit = "scrollTop"; /* experimental, but widely supported */ 53 | [@bs.get] external scrollWidth : T.t => int = ""; /* experimental */ 54 | [@bs.get] external shadowRoot : T.t => Dom.element = ""; /* experimental */ 55 | [@bs.get] external slot : T.t => string = ""; /* experimental */ 56 | [@bs.set] external setSlot : (T.t, string) => unit = "slot"; /* experimental */ 57 | [@bs.get] external tagName : T.t => string = ""; 58 | 59 | [@bs.send.pipe : T.t] external attachShadow : {. "mode": string} => Dom.shadowRoot = ""; /* experimental */ 60 | [@bs.send.pipe : T.t] external attachShadowOpen : ([@bs.as {json|{ "mode": "open" }|json}] _) => Dom.shadowRoot = "attachShadow"; /* experimental */ 61 | [@bs.send.pipe : T.t] external attachShadowClosed : ([@bs.as {json|{ "mode": "closed" }|json}] _) => Dom.shadowRoot = "attachShadow"; /* experimental */ 62 | [@bs.send.pipe : T.t] external animate : (Js.t({..}), Js.t({..})) => Dom.animation = ""; /* experimental */ 63 | [@bs.send.pipe : T.t] [@bs.return nullable] external closest : string => option(Dom.element) = ""; /* experimental */ 64 | [@bs.send.pipe : T.t] external createShadowRoot : Dom.shadowRoot = ""; /* experimental AND deprecated (?!) */ 65 | [@bs.send.pipe : T.t] [@bs.return nullable] external getAttribute : string => option(string) = ""; 66 | [@bs.send.pipe : T.t] [@bs.return nullable] external getAttributeNS : (string, string) => option(string) = ""; 67 | [@bs.send.pipe : T.t] external getBoundingClientRect : Dom.domRect = ""; 68 | [@bs.send.pipe : T.t] external getClientRects : array(Dom.domRect) = ""; 69 | [@bs.send.pipe : T.t] external getElementsByClassName : string => Dom.htmlCollection = ""; 70 | [@bs.send.pipe : T.t] external getElementsByTagName : string => Dom.htmlCollection = ""; 71 | [@bs.send.pipe : T.t] external getElementsByTagNameNS : (string, string) => Dom.htmlCollection = ""; 72 | [@bs.send.pipe : T.t] external hasAttribute : string => bool = ""; 73 | [@bs.send.pipe : T.t] external hasAttributeNS : (string, string) => bool = ""; 74 | [@bs.send.pipe : T.t] external hasAttributes : bool = ""; 75 | [@bs.send.pipe : T.t] external insertAdjacentElement : (string /* insertPosition enum */, Dom.element_like('a)) => unit = ""; /* experimental, but widely supported */ 76 | let insertAdjacentElement: (Webapi__Dom__Types.insertPosition, Dom.element_like('a), T.t) => unit = 77 | (position, element, self) => 78 | insertAdjacentElement(Webapi__Dom__Types.encodeInsertPosition(position), element, self); 79 | [@bs.send.pipe : T.t] external insertAdjacentHTML : (string /* insertPosition enum */, string) => unit = ""; /* experimental, but widely supported */ 80 | let insertAdjacentHTML: (Webapi__Dom__Types.insertPosition, string, T.t) => unit = 81 | (position, text, self) => 82 | insertAdjacentHTML(Webapi__Dom__Types.encodeInsertPosition(position), text, self); 83 | [@bs.send.pipe : T.t] external insertAdjacentText : (string /* insertPosition enum */, string) => unit = ""; /* experimental, but widely supported */ 84 | let insertAdjacentText: (Webapi__Dom__Types.insertPosition, string, T.t) => unit = 85 | (position, text, self) => 86 | insertAdjacentText(Webapi__Dom__Types.encodeInsertPosition(position), text, self); 87 | [@bs.send.pipe : T.t] external matches : string => bool = ""; /* experimental, but widely supported */ 88 | [@bs.send.pipe : T.t] external releasePointerCapture : Dom.eventPointerId => unit = ""; 89 | [@bs.send.pipe : T.t] external removeAttribute : string => unit = ""; 90 | [@bs.send.pipe : T.t] external removeAttributeNS : (string, string) => unit = ""; 91 | [@bs.send.pipe : T.t] external requestFullscreen : unit = ""; /* experimental */ 92 | [@bs.send.pipe : T.t] external requestPointerLock : unit = ""; /* experimental */ 93 | [@bs.send.pipe : T.t] external scrollIntoView : unit = ""; /* experimental, but widely supported */ 94 | [@bs.send.pipe : T.t] external scrollIntoViewNoAlignToTop : ([@bs.as {json|true|json}] _) => unit = "scrollIntoView"; /* experimental, but widely supported */ 95 | [@bs.send.pipe : T.t] external scrollIntoViewWithOptions : {. "behavior": string, "block": string} => unit = "scrollIntoView"; /* experimental */ 96 | [@bs.send.pipe : T.t] external scrollBy : (float, float) => unit = ""; 97 | [@bs.send.pipe : T.t] external scrollByWithOptions : {. "top": float, "left": float, "behavior": string} => unit = "scrollBy"; 98 | [@bs.send.pipe : T.t] external scrollTo : (float, float) => unit = ""; 99 | [@bs.send.pipe : T.t] external scrollToWithOptions : {. "top": float, "left": float, "behavior": string} => unit = "scrollTo"; 100 | [@bs.send.pipe : T.t] external setAttribute : (string, string) => unit = ""; 101 | [@bs.send.pipe : T.t] external setAttributeNS : (string, string, string) => unit = ""; 102 | [@bs.send.pipe : T.t] external setPointerCapture : Dom.eventPointerId => unit = ""; 103 | 104 | /* GlobalEventHandlers interface */ 105 | /* Not sure this should be exposed, since EventTarget seems like a better API */ 106 | 107 | [@bs.set] external setOnClick : (T.t, Dom.mouseEvent => unit) => unit = "onclick"; 108 | }; 109 | 110 | /* TODO: This doesn't work. Why? 111 | module Tree (T: { type t; }) => { 112 | include NodeRe.Impl { type t = Type }; 113 | include EventTargetRe.Impl { type t = Type }; 114 | include Impl { type t = Type }; 115 | }; 116 | 117 | include Tree { type t = Dom.element }; 118 | */ 119 | 120 | type t = Dom.element; 121 | 122 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 123 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 124 | include Webapi__Dom__GlobalEventHandlers.Impl({ type nonrec t = t; }); 125 | include Webapi__Dom__ParentNode.Impl({ type nonrec t = t; }); 126 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 127 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 128 | include Webapi__Dom__Slotable.Impl({ type nonrec t = t; }); 129 | include Impl({ type nonrec t = t; }); 130 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ErrorEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.errorEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "ErrorEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "ErrorEvent"; 7 | 8 | [@bs.get] external message : t => string = ""; 9 | [@bs.get] external filename : t => string = ""; 10 | [@bs.get] external lineno : t => int = ""; 11 | [@bs.get] external colno : t => int = ""; 12 | [@bs.get] external error : t => Js.t({..}) = ""; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Event.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | [@bs.get] external bubbles : T.t => bool = ""; 3 | [@bs.get] external cancelable : T.t => bool = ""; 4 | [@bs.get] external composed : T.t => bool = ""; 5 | [@bs.get] external currentTarget : T.t => Dom.eventTarget = ""; 6 | [@bs.get] external defaultPrevented : T.t => bool = ""; 7 | [@bs.get] external eventPhase : T.t => int /* eventPhase enum */ = ""; 8 | 9 | let eventPhase: T.t => Webapi__Dom__Types.EventPhase.t = 10 | (self) => Webapi__Dom__Types.EventPhase.decode(eventPhase(self)); 11 | 12 | [@bs.get] external target : T.t => Dom.eventTarget = ""; 13 | [@bs.get] external timeStamp : T.t => float = ""; 14 | [@bs.get] external type_ : T.t => string = "type"; 15 | [@bs.get] external isTrusted : T.t => bool = ""; 16 | 17 | [@bs.send.pipe : T.t] external preventDefault : unit = ""; 18 | [@bs.send.pipe : T.t] external stopImmediatePropagation : unit = ""; 19 | [@bs.send.pipe : T.t] external stopPropagation : unit = ""; 20 | }; 21 | 22 | type t = Dom.event; 23 | 24 | include Impl({ type nonrec t = t; }); 25 | 26 | [@bs.new] external make : string => t = "Event"; 27 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "Event"; 28 | 29 | 30 | /* 31 | Unimplemented Event interfaces 32 | 33 | AudioProcessingEvent /* deprecated */ 34 | BeforeInputEvent /* experimental? Looks like it might just be an InputEvent */ 35 | BlobEvent /* experimental, MediaStream recording */ 36 | CSSFontFaceLoadEvent /* experimental - https://www.w3.org/TR/css-font-loading-3/#dom-cssfontfaceloadevent */ 37 | DeviceLightEvent /* experimenta, Ambient Light */ 38 | DeviceMotionEvent /* experimental, Device Orientation */ 39 | DeviceOrientationEvent /* experimental, Device Orientation */ 40 | DeviceProximityEvent /* experimental, Device Orientation */ 41 | DOMTransactionEvent /* very experimental - https://dvcs.w3.org/hg/undomanager/raw-file/tip/undomanager.html#the-domtransactionevent-interface */ 42 | EditingBeforeInputEvent /* deprecated? - https://dvcs.w3.org/hg/editing/raw-file/57abe6d3cb60/editing.html#editingbeforeinputevent */ 43 | FetchEvent /* experimental, Service Workers */ 44 | GamepadEvent /* experimental, Gamepad */ 45 | HashChangeEvent /* https://www.w3.org/TR/html51/browsers.html#the-hashchangeevent-interface */ 46 | MediaStreamEvent /* experimental, WebRTC */ 47 | MessageEvent /* experimental, Websocket/WebRTC */ 48 | MutationEvent /* deprecated */ 49 | OfflineAudioCompletionEvent /* experimental, Web Audio */ 50 | RTCDataChannelEvent /* experimental, WebRTC */ 51 | RTCIdentityErrorEventA /* experimental, WebRTC */ 52 | RTCIdentityEvent /* experimental, WebRTC */ 53 | RTCPeerConnectionIceEvent /* experimental, WebRTC */ 54 | SensorEvent /* deprecated? */ 55 | SVGEvent /* deprecated */ 56 | UserProximityEvent /* experimental, Proximity Events */ 57 | */ 58 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__FocusEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.focusEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "FocusEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "FocusEvent"; 8 | 9 | [@bs.get] [@bs.return nullable] external relatedTarget : t => option(Dom.eventTarget) = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__GlobalEventHandlers.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.send.pipe : T.t] external addSelectionChangeEventListener : ([@bs.as "selectionchange"] _, Dom.focusEvent => unit) => unit = "addEventListener"; 4 | [@bs.send.pipe : T.t] external addSelectionChangeEventListenerWithOptions : ([@bs.as "selectionchange"] _, Dom.focusEvent => unit, {. "capture": bool, "once": bool, "passive": bool}) => unit = "addEventListener"; /* not widely supported */ 5 | [@bs.send.pipe : T.t] external addSelectionChangeEventListenerUseCapture : ([@bs.as "selectionchange"] _, Dom.focusEvent => unit, [@bs.as {json|true|json}] _) => unit = "addEventListener"; 6 | [@bs.send.pipe : T.t] external removeSelectionChangeEventListener : ([@bs.as "selectionchange"] _, Dom.focusEvent => unit) => unit = "removeEventListener"; 7 | [@bs.send.pipe : T.t] external removeSelectionChangeEventListenerWithOptions : ([@bs.as "selectionchange"] _, Dom.focusEvent => unit, {. "capture": bool, "passive": bool}) => unit = "removeEventListener"; /* not widely supported */ 8 | [@bs.send.pipe : T.t] external removeSelectionChangeEventListenerUseCapture : ([@bs.as "selectionchange"] _, Dom.focusEvent =>unit, [@bs.as {json|true|json}] _) => unit = "removeEventListener"; 9 | }; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__History.re: -------------------------------------------------------------------------------- 1 | type t = Dom.history; 2 | type state; /* TODO: should be "anything that can be serializable" apparently */ 3 | 4 | [@bs.get] external length : t => int = ""; 5 | [@bs.get] external scrollRestoration : t => bool = ""; /* experimental */ 6 | [@bs.set] external setScrollRestoration : (t, bool) => unit = "scrollRestoration"; /* experimental */ 7 | [@bs.get] external state : t => state = ""; 8 | 9 | [@bs.send.pipe : t] external back : unit = ""; 10 | [@bs.send.pipe : t] external forward : unit = ""; 11 | [@bs.send.pipe : t] external go : int => unit = ""; 12 | [@bs.send.pipe : t] external pushState : (state, string, string) => unit = ""; 13 | [@bs.send.pipe : t] external replaceState : (state, string, string) => unit = ""; 14 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlCollection.re: -------------------------------------------------------------------------------- 1 | type t = Dom.htmlCollection; 2 | 3 | [@bs.val] [@bs.scope ("Array", "prototype", "slice")] external toArray : t => array(Dom.element) = "call"; 4 | 5 | [@bs.get] external length : t => int = ""; 6 | [@bs.send.pipe : t] [@bs.return nullable] external item : int => option(Dom.element) = ""; 7 | [@bs.send.pipe : t] [@bs.return nullable] external namedItem : string => option(Dom.element) = ""; 8 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlDocument.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | type t_htmlDocument = T.t; 3 | 4 | [@bs.get] [@bs.return nullable] external activeElement : t_htmlDocument => option(Dom.element) = ""; 5 | [@bs.get] [@bs.return nullable] external body : t_htmlDocument => option(Dom.element) = ""; /* returns option HTMLBodyElement */ 6 | [@bs.set] external setBody : (t_htmlDocument, Dom.element) => unit = "body"; /* accepth HTMLBodyElement */ 7 | [@bs.get] external cookie : t_htmlDocument => string = ""; 8 | [@bs.set] external setCookie : (t_htmlDocument, string) => unit = "cookie"; 9 | [@bs.get] [@bs.return nullable] external defaultView : t_htmlDocument => option(Dom.window) = ""; 10 | [@bs.get] external designMode : t_htmlDocument => string /* designMode enum */ = ""; 11 | let designMode: t_htmlDocument => Webapi__Dom__Types.designMode = 12 | (self) => Webapi__Dom__Types.decodeDesignMode(designMode(self)); 13 | [@bs.set] external setDesignMode : (t_htmlDocument, string /* designMode enum */) => unit = "designMode"; 14 | let setDesignMode: (t_htmlDocument, Webapi__Dom__Types.designMode) => unit = 15 | (self, value) => setDesignMode(self, Webapi__Dom__Types.encodeDesignMode(value)); 16 | [@bs.get] external dir : t_htmlDocument => string /* dir enum */ = ""; 17 | let dir: t_htmlDocument => Webapi__Dom__Types.dir = (self) => Webapi__Dom__Types.decodeDir(dir(self)); 18 | [@bs.set] external setDir : (t_htmlDocument, string /* dir enum */) => unit = "dir"; 19 | let setDir: (t_htmlDocument, Webapi__Dom__Types.dir) => unit = 20 | (self, value) => setDir(self, Webapi__Dom__Types.encodeDir(value)); 21 | [@bs.get] [@bs.return nullable] external domain : t_htmlDocument => option(string) = ""; 22 | [@bs.set] external setDomain : (t_htmlDocument, string) => unit = "domain"; 23 | [@bs.get] external embeds : t_htmlDocument => Dom.nodeList = ""; 24 | [@bs.get] external forms : t_htmlDocument => Dom.htmlCollection = ""; 25 | [@bs.get] external head : t_htmlDocument => Dom.element = ""; /* returns HTMLHeadElement */ 26 | [@bs.get] external images : t_htmlDocument => Dom.htmlCollection = ""; 27 | [@bs.get] external lastModified : t_htmlDocument => string = ""; 28 | [@bs.get] external links : t_htmlDocument => Dom.nodeList = ""; 29 | [@bs.get] external location : t_htmlDocument => Dom.location = ""; 30 | [@bs.set] external setLocation : (t_htmlDocument, string) => unit = "location"; 31 | [@bs.get] external plugins : t_htmlDocument => Dom.htmlCollection = ""; 32 | [@bs.get] external readyState : t_htmlDocument => string /* enum */ = ""; 33 | let readyState: t_htmlDocument => Webapi__Dom__Types.readyState = 34 | (self) => Webapi__Dom__Types.decodeReadyState(readyState(self)); 35 | [@bs.get] external referrer : t_htmlDocument => string = ""; 36 | [@bs.get] external scripts : t_htmlDocument => Dom.htmlCollection = ""; 37 | [@bs.get] external title : t_htmlDocument => string = ""; 38 | [@bs.set] external setTitle : (t_htmlDocument, string) => unit = "title"; 39 | [@bs.get] external url : t_htmlDocument => string = "URL"; 40 | 41 | [@bs.send.pipe : t_htmlDocument] external close : unit = ""; 42 | [@bs.send.pipe : t_htmlDocument] external execCommand : (string, bool, Js.null(string)) => bool = ""; 43 | let execCommand: (string, bool, option(string), t_htmlDocument) => bool = 44 | (command, show, value, self) => 45 | execCommand(command, show, Js.Null.fromOption(value), self); 46 | [@bs.send.pipe : t_htmlDocument] external getElementsByName : string => Dom.nodeList = ""; 47 | [@bs.send.pipe : t_htmlDocument] external getSelection : Dom.selection = ""; 48 | [@bs.send.pipe : t_htmlDocument] external hasFocus : bool = ""; 49 | [@bs.send.pipe : t_htmlDocument] external open_ : unit = "open"; 50 | [@bs.send.pipe : t_htmlDocument] external queryCommandEnabled : string => bool = ""; 51 | [@bs.send.pipe : t_htmlDocument] external queryCommandIndeterm : string => bool = ""; 52 | [@bs.send.pipe : t_htmlDocument] external queryCommandSupported : string => bool = ""; 53 | [@bs.send.pipe : t_htmlDocument] external queryCommandValue : string => string = ""; 54 | [@bs.send.pipe : t_htmlDocument] external write : string => unit = ""; 55 | [@bs.send.pipe : t_htmlDocument] external writeln : string => unit = ""; 56 | }; 57 | 58 | type t = Dom.htmlDocument; 59 | 60 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 61 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 62 | include Webapi__Dom__GlobalEventHandlers.Impl({ type nonrec t = t; }); 63 | include Webapi__Dom__Document.Impl({ type nonrec t = t; }); 64 | include Impl({ type nonrec t = t; }); 65 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlElement.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | type t_htmlElement = T.t; 3 | 4 | let ofElement = Webapi__Dom__Element.asHtmlElement; 5 | 6 | [@bs.get] external accessKey : t_htmlElement => string = ""; 7 | [@bs.set] external setAccessKey : (t_htmlElement, string) => unit = "accessKey"; 8 | [@bs.get] external accessKeyLabel : t_htmlElement => string = ""; 9 | [@bs.get] external contentEditable : t_htmlElement => string /* enum */ = ""; 10 | let contentEditable: t_htmlElement => Webapi__Dom__Types.contentEditable = 11 | (self) => Webapi__Dom__Types.decodeContentEditable(contentEditable(self)); 12 | [@bs.set] external setContentEditable : (t_htmlElement, string /* enum */) => unit = "contentEditable"; 13 | let setContentEditable: (t_htmlElement, Webapi__Dom__Types.contentEditable) => unit = 14 | (self, value) => setContentEditable(self, Webapi__Dom__Types.encodeContentEditable(value)); 15 | [@bs.get] external isContentEditable : t_htmlElement => bool = ""; 16 | [@bs.get] external contextMenu : t_htmlElement => Dom.htmlElement = ""; /* returns HTMLMenuElement */ 17 | [@bs.set] external setContextMenu : (t_htmlElement, Dom.htmlElement) => unit = "contextMenu"; /* accepts and returns HTMLMenuElement */ 18 | [@bs.get] external dataset : t_htmlElement => Dom.domStringMap = ""; 19 | [@bs.get] external dir : t_htmlElement => string /* enum */ = ""; 20 | let dir: t_htmlElement => Webapi__Dom__Types.dir = (self) => Webapi__Dom__Types.decodeDir(dir(self)); 21 | [@bs.set] external setDir : (t_htmlElement, string /* enum */) => unit = "dir"; 22 | let setDir: (t_htmlElement, Webapi__Dom__Types.dir) => unit = 23 | (self, value) => setDir(self, Webapi__Dom__Types.encodeDir(value)); 24 | [@bs.get] external draggable : t_htmlElement => bool = ""; 25 | [@bs.set] external setDraggable : (t_htmlElement, bool) => unit = "draggable"; 26 | /*let setDraggable : t_htmlElement => bool => unit = fun self value => setDraggable self (Js.Boolean.to_js_boolean value);*/ /* temproarily removed to reduce codegen size */ 27 | [@bs.get] external dropzone : t_htmlElement => Dom.domSettableTokenList = ""; 28 | [@bs.get] external hidden : t_htmlElement => bool = ""; 29 | [@bs.set] external setHidden : (t_htmlElement, bool) => unit = "hidden"; 30 | /*let setHidden : t_htmlElement => bool => unit = fun self value => setHidden self (Js.Boolean.to_js_boolean value);*/ /* temproarily removed to reduce codegen size */ 31 | [@bs.get] external itemScope : t_htmlElement => bool = ""; /* experimental */ 32 | [@bs.set] external setItemScope : (t_htmlElement, bool) => unit = "itemScope"; 33 | /*let setItemScope : t_htmlElement => bool => unit = fun self value => setItemScope self (Js.Boolean.to_js_boolean value);*//* experimental */ /* temproarily removed to reduce codegen size */ 34 | [@bs.get] external itemType : t_htmlElement => Dom.domSettableTokenList = ""; /* experimental */ 35 | [@bs.get] external itemId : t_htmlElement => string = ""; /* experimental */ 36 | [@bs.set] external setItemId : (t_htmlElement, string) => unit = "itemId"; /* experimental */ 37 | [@bs.get] external itemRef : t_htmlElement => Dom.domSettableTokenList = ""; /* experimental */ 38 | [@bs.get] external itemProp : t_htmlElement => Dom.domSettableTokenList = ""; /* experimental */ 39 | [@bs.get] external itemValue : t_htmlElement => Js.t({..}) = ""; /* experimental */ 40 | [@bs.set] external setItemValue : (t_htmlElement, Js.t({..})) => unit = "itemValue"; /* experimental */ 41 | [@bs.get] external lang : t_htmlElement => string = ""; 42 | [@bs.set] external setLang : (t_htmlElement, string) => unit = "lang"; 43 | [@bs.get] external offsetHeight : t_htmlElement => int = ""; /* experimental */ 44 | [@bs.get] external offsetLeft : t_htmlElement => int = ""; /* experimental */ 45 | [@bs.get] [@bs.return nullable] external offsetParent : t_htmlElement => option(Dom.element) = ""; /* experimental */ 46 | [@bs.get] external offsetTop : t_htmlElement => int = ""; /* experimental, but widely supported */ 47 | [@bs.get] external offsetWidth : t_htmlElement => int = ""; /* experimental */ 48 | /*external properties : r => HTMLPropertiesCollection.t = "properties" [@@bs.get]; /* experimental */*/ 49 | [@bs.get] external spellcheck : t_htmlElement => bool = ""; 50 | [@bs.set] external setSpellcheck : (t_htmlElement, bool) => unit = "spellcheck" ; 51 | /*let setSpellcheck : t_htmlElement => bool => unit = fun self value => setSpellcheck self (Js.Boolean.to_js_boolean value);*/ /* temproarily removed to reduce codegen size */ 52 | [@bs.get] external style : t_htmlElement => Dom.cssStyleDeclaration = ""; 53 | [@bs.set] external setStyle : (t_htmlElement, Dom.cssStyleDeclaration) => unit = "style"; 54 | [@bs.get] external tabIndex : t_htmlElement => int = ""; 55 | [@bs.set] external setTabIndex : (t_htmlElement, int) => unit = "tabIndex"; 56 | [@bs.get] external title : t_htmlElement => string = ""; 57 | [@bs.set] external setTitle : (t_htmlElement, string) => unit = "title"; 58 | [@bs.get] external translate : t_htmlElement => bool = ""; /* experimental */ 59 | [@bs.set] external setTranslate : (t_htmlElement, bool) => unit = "translate"; /* experimental */ 60 | /*let setTranslate : t_htmlElement => bool => unit = fun self value => setTranslate self (Js.Boolean.to_js_boolean value);*/ /* temproarily removed to reduce codegen size */ 61 | 62 | [@bs.send.pipe : t_htmlElement] external blur : unit = ""; 63 | [@bs.send.pipe : t_htmlElement] external click : unit = ""; 64 | [@bs.send.pipe : t_htmlElement] external focus : unit = ""; 65 | [@bs.send.pipe : t_htmlElement] external focusPreventScroll : ([@bs.as {json|{ "preventScroll": true }|json}] _) => unit = "focus"; 66 | [@bs.send.pipe : t_htmlElement] external forceSpellCheck : unit = ""; /* experimental */ 67 | 68 | 69 | /* TODO: element-spcific, should be pulled out */ 70 | [@bs.get] external value : t_htmlElement => string = ""; /* HTMLInputElement */ 71 | [@bs.get] external checked : t_htmlElement => bool = ""; /* HTMLInputElement */ 72 | [@bs.get] external type_ : t_htmlElement => string = "type"; /* HTMLStyleElement */ 73 | [@bs.set] external setType : (t_htmlElement, string) => unit = "type"; /* HTMLStyleElement */ 74 | [@bs.get] external rel : t_htmlElement => string = ""; /* HTMLLinkElement */ 75 | [@bs.set] external setRel : (t_htmlElement, string) => unit = "rel"; /* HTMLLinkElement */ 76 | [@bs.get] external href : t_htmlElement => string = ""; /* HTMLLinkElement, HTMLAnchorElement */ 77 | [@bs.set] external setHref : (t_htmlElement, string) => unit = "href"; /* HTMLLinkElement, HTMLAnchorElement */ 78 | }; 79 | 80 | /* TODO 81 | module Tree (T: { type t; }) => { 82 | include ElementRe.Tree { type t = Type }; 83 | include Impl { type t = Type }; 84 | }; 85 | 86 | include Tree { type t = Dom.htmlElement }; 87 | */ 88 | 89 | type t = Dom.htmlElement; 90 | 91 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 92 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 93 | include Webapi__Dom__GlobalEventHandlers.Impl({ type nonrec t = t; }); 94 | include Webapi__Dom__Element.Impl({ type nonrec t = t; }); 95 | include Impl({ type nonrec t = t; }); 96 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlFormElement.re: -------------------------------------------------------------------------------- 1 | /* 2 | * Spec: https://html.spec.whatwg.org/multipage/forms.html#the-form-element 3 | * MDN: https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement 4 | */ 5 | 6 | module Impl = (T: {type t;}) => { 7 | type t_htmlFormElement = T.t; 8 | 9 | /* TODO: elements: HTMLFormControlsCollection */ 10 | [@bs.get] external length : t_htmlFormElement => int = ""; 11 | [@bs.get] external name : t_htmlFormElement => string = ""; 12 | [@bs.set] external setName : (t_htmlFormElement, string) => unit = "name"; 13 | [@bs.get] external method : t_htmlFormElement => string = ""; 14 | [@bs.set] external setMethod : (t_htmlFormElement, string) => unit = "method"; 15 | [@bs.get] external target : t_htmlFormElement => string = ""; 16 | [@bs.set] external setTarget : (t_htmlFormElement, string) => unit = "target"; 17 | [@bs.get] external action : t_htmlFormElement => string = ""; 18 | [@bs.set] external setAction : (t_htmlFormElement, string) => unit = "action"; 19 | [@bs.get] external acceptCharset : t_htmlFormElement => string = ""; 20 | [@bs.set] external setAcceptCharset : (t_htmlFormElement, string) => unit = "acceptCharset"; 21 | [@bs.get] external autocomplete : t_htmlFormElement => string = ""; 22 | [@bs.set] external setAutocomplete : (t_htmlFormElement, string) => unit = "autocomplete"; 23 | [@bs.get] external noValidate : t_htmlFormElement => bool = ""; 24 | [@bs.set] external setNoValidate : (t_htmlFormElement, bool) => unit = "noValidate"; 25 | [@bs.get] external enctype : t_htmlFormElement => string = ""; 26 | [@bs.set] external setEnctype : (t_htmlFormElement, string) => unit = "enctype"; 27 | [@bs.get] external encoding : t_htmlFormElement => string = ""; 28 | [@bs.set] external setEncoding : (t_htmlFormElement, string) => unit = "encoding"; 29 | 30 | [@bs.send.pipe: t_htmlFormElement] external submit : unit = ""; 31 | [@bs.send.pipe: t_htmlFormElement] external reset : unit = ""; 32 | [@bs.send.pipe: t_htmlFormElement] external checkValidity : bool = ""; 33 | [@bs.send.pipe: t_htmlFormElement] external reportValidity : bool = ""; 34 | 35 | /** @since 0.18.0 */ 36 | [@bs.new] external data: T.t => Fetch.FormData.t = "FormData"; 37 | }; 38 | 39 | type t = Dom.htmlFormElement; 40 | 41 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 42 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 43 | include Webapi__Dom__Element.Impl({ type nonrec t = t; }); 44 | include Webapi__Dom__HtmlElement.Impl({ type nonrec t = t; }); 45 | include Impl({ type nonrec t = t; }); 46 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlImageElement.re: -------------------------------------------------------------------------------- 1 | type t; 2 | 3 | [@bs.new] external make : unit => t = "Image"; 4 | [@bs.new] external makeWithSize : (int, int) => t = "Image"; 5 | 6 | [@bs.get] external alt : t => string = ""; 7 | [@bs.set] external setAlt : (t, string) => unit = "alt"; 8 | [@bs.get] external src : t => string = ""; 9 | [@bs.set] external setSrc : (t, string) => unit = "src"; 10 | [@bs.get] external srcset : t => string = ""; 11 | [@bs.set] external setSrcset : (t, string) => unit = "srcset"; 12 | [@bs.get] external sizes : t => string = ""; 13 | [@bs.set] external setSizes : (t, string) => unit = "sizes"; 14 | [@bs.get] [@bs.return nullable] external crossOrigin : t => option(string) = ""; 15 | [@bs.set] external setCrossOrigin : (t, Js.null(string)) => unit = "crossOrigin"; 16 | let setCrossOrigin = (self, value) => 17 | setCrossOrigin(self, Js.Null.fromOption(value)); 18 | [@bs.get] external useMap : t => string = ""; 19 | [@bs.set] external setUseMap : (t, string) => unit = "useMap"; 20 | [@bs.get] external isMap : t => bool = ""; 21 | [@bs.set] external setIsMap : (t, bool) => unit = "isMap"; 22 | [@bs.get] external height : t => int = ""; 23 | [@bs.set] external setHeight : (t, int) => unit = "height"; 24 | [@bs.get] external width : t => int = ""; 25 | [@bs.set] external setWidth : (t, int) => unit = "width"; 26 | [@bs.get] external naturalHeight : t => int = ""; 27 | [@bs.get] external naturalWidth : t => int = ""; 28 | [@bs.get] external complete : t => bool = ""; 29 | [@bs.get] external currentSrc : t => string = ""; 30 | [@bs.get] external referrerPolicy : t => string = ""; 31 | [@bs.set] external setReferrerPolicy : (t, string) => unit = "referrerPolicy"; 32 | [@bs.get] external decoding : t => string = ""; 33 | [@bs.set] external setDecoding : (t, string) => unit = "decoding"; 34 | 35 | [@bs.send.pipe: t] external decode : Js.Promise.t(unit) = ""; 36 | 37 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 38 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 39 | include Webapi__Dom__Element.Impl({ type nonrec t = t; }); 40 | include Webapi__Dom__HtmlElement.Impl({ type nonrec t = t; }); -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__HtmlInputElement.re: -------------------------------------------------------------------------------- 1 | /* 2 | * Spec: https://html.spec.whatwg.org/multipage/input.html#the-input-element 3 | * MDN: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement 4 | */ 5 | 6 | module Impl = (T: {type t;}) => { 7 | type t_htmlInputElement = T.t; 8 | 9 | [@bs.get] [@bs.return nullable] external form : t_htmlInputElement => option(Dom.htmlFormElement) = ""; 10 | [@bs.get] external formAction : t_htmlInputElement => string = ""; 11 | [@bs.set] external setFormAction : (t_htmlInputElement, string) => unit = "formAction"; 12 | [@bs.get] external formEncType : t_htmlInputElement => string = ""; 13 | [@bs.set] external setFormEncType : (t_htmlInputElement, string) => unit = "formEncType"; 14 | [@bs.get] external formMethod : t_htmlInputElement => string = ""; 15 | [@bs.set] external setFormMethod : (t_htmlInputElement, string) => unit = "formMethod"; 16 | [@bs.get] external formNoValidate : t_htmlInputElement => bool = ""; 17 | [@bs.set] external setFormNoValidate : (t_htmlInputElement, bool) => unit = "formNoValidate"; 18 | [@bs.get] external formTarget : t_htmlInputElement => string = ""; 19 | [@bs.set] external setFormTarget : (t_htmlInputElement, string) => unit = "formTarget"; 20 | 21 | /* Properties that apply to any type of input element that is not hidden */ 22 | [@bs.get] external name : t_htmlInputElement => string = ""; 23 | [@bs.set] external setName : (t_htmlInputElement, string) => unit = "name"; 24 | [@bs.get] external type_ : t_htmlInputElement => string = "type"; 25 | [@bs.set] external setType : (t_htmlInputElement, string) => unit = "type"; 26 | [@bs.get] external disabled : t_htmlInputElement => bool = ""; 27 | [@bs.set] external setDisabled : (t_htmlInputElement, bool) => unit = "disabled"; 28 | [@bs.get] external autofocus : t_htmlInputElement => bool = ""; 29 | [@bs.set] external setAutofocus : (t_htmlInputElement, bool) => unit = "autofocus"; 30 | [@bs.get] external required : t_htmlInputElement => bool = ""; 31 | [@bs.set] external setRequired : (t_htmlInputElement, bool) => unit = "required"; 32 | [@bs.get] external value : t_htmlInputElement => string = ""; 33 | [@bs.set] external setValue : (t_htmlInputElement, string) => unit = "value"; 34 | [@bs.get] external validity : t_htmlInputElement => Webapi__Dom__ValidityState.t = ""; 35 | [@bs.get] external validationMessage : t_htmlInputElement => string = ""; 36 | [@bs.get] external willValidate : t_htmlInputElement => bool = ""; 37 | 38 | /* Properties that apply only to elements of type "checkbox" or "radio" */ 39 | [@bs.get] external checked : t_htmlInputElement => bool = ""; 40 | [@bs.set] external setChecked : (t_htmlInputElement, bool) => unit = "checked"; 41 | [@bs.get] external defaultChecked : t_htmlInputElement => bool = ""; 42 | [@bs.set] external setDefaultChecked : (t_htmlInputElement, bool) => unit = "defaultChecked"; 43 | [@bs.get] external indeterminate : t_htmlInputElement => bool = ""; 44 | [@bs.set] external setIndeterminate : (t_htmlInputElement, bool) => unit = "indeterminate"; 45 | 46 | /* Properties that apply only to elements of type "image" */ 47 | [@bs.get] external alt : t_htmlInputElement => string = ""; 48 | [@bs.set] external setAlt : (t_htmlInputElement, string) => unit = "alt"; 49 | [@bs.get] external height : t_htmlInputElement => string = ""; 50 | [@bs.set] external setHeight : (t_htmlInputElement, string) => unit = "height"; 51 | [@bs.get] external src : t_htmlInputElement => string = ""; 52 | [@bs.set] external setSrc : (t_htmlInputElement, string) => unit = "src"; 53 | [@bs.get] external width : t_htmlInputElement => string = ""; 54 | [@bs.set] external setWidth : (t_htmlInputElement, string) => unit = "width"; 55 | 56 | /* Properties that apply only to elements of type "file" */ 57 | [@bs.get] external accept : t_htmlInputElement => string = ""; 58 | [@bs.set] external setAccept : (t_htmlInputElement, string) => unit = "accept"; 59 | /* TODO: files: Returns/accepts a FileList object. */ 60 | 61 | /* Properties that apply only to text/number-containing or elements */ 62 | [@bs.get] external autocomplete : t_htmlInputElement => string = ""; 63 | [@bs.set] external setAutocomplete : (t_htmlInputElement, string) => unit = "autocomplete"; 64 | [@bs.get] external maxLength : t_htmlInputElement => int = ""; 65 | [@bs.set] external setMaxLength : (t_htmlInputElement, int) => unit = "maxLength"; 66 | [@bs.get] external minLength : t_htmlInputElement => int = ""; 67 | [@bs.set] external setMinLength : (t_htmlInputElement, int) => unit = "minLength"; 68 | [@bs.get] external size : t_htmlInputElement => int = ""; 69 | [@bs.set] external setSize : (t_htmlInputElement, int) => unit = "size"; 70 | [@bs.get] external pattern : t_htmlInputElement => string = ""; 71 | [@bs.set] external setPattern : (t_htmlInputElement, string) => unit = "pattern"; 72 | [@bs.get] external placeholder : t_htmlInputElement => string = ""; 73 | [@bs.set] external setPlaceholder : (t_htmlInputElement, string) => unit = "placeholder"; 74 | [@bs.get] external readOnly : t_htmlInputElement => bool = ""; 75 | [@bs.set] external setReadOnly : (t_htmlInputElement, bool) => unit = "readOnly"; 76 | [@bs.get] external min : t_htmlInputElement => string = ""; 77 | [@bs.set] external setMin : (t_htmlInputElement, string) => unit = "min"; 78 | [@bs.get] external max : t_htmlInputElement => string = ""; 79 | [@bs.set] external setMax : (t_htmlInputElement, string) => unit = "max"; 80 | [@bs.get] external selectionStart : t_htmlInputElement => int = ""; 81 | [@bs.set] external setSelectionStart : (t_htmlInputElement, int) => unit = "selectionStart"; 82 | [@bs.get] external selectionEnd : t_htmlInputElement => int = ""; 83 | [@bs.set] external setSelectionEnd : (t_htmlInputElement, int) => unit = "selectionEnd"; 84 | [@bs.get] external selectionDirection : t_htmlInputElement => string = ""; 85 | [@bs.set] external setSelectionDirection : (t_htmlInputElement, string) => unit = "selectionDirection"; 86 | 87 | /* Properties not yet categorized */ 88 | [@bs.get] external defaultValue : t_htmlInputElement => string = ""; 89 | [@bs.set] external setDefaultValue : (t_htmlInputElement, string) => unit = "defaultValue"; 90 | [@bs.get] external dirName : t_htmlInputElement => string = ""; 91 | [@bs.set] external setDirName : (t_htmlInputElement, string) => unit = "dirName"; 92 | [@bs.get] external accessKey : t_htmlInputElement => string = ""; 93 | [@bs.set] external setAccessKey : (t_htmlInputElement, string) => unit = "accessKey"; 94 | [@bs.get] [@bs.return nullable] external list : t_htmlInputElement => option(Dom.htmlElement) = ""; 95 | [@bs.get] external multiple : t_htmlInputElement => bool = ""; 96 | [@bs.set] external setMultiple : (t_htmlInputElement, bool) => unit = "multiple"; 97 | /* TODO: files: FileList array. Returns the list of selected files. */ 98 | [@bs.get] external labels : t_htmlInputElement => array(Dom.nodeList) = ""; 99 | [@bs.get] external step : t_htmlInputElement => string = ""; 100 | [@bs.set] external setStep : (t_htmlInputElement, string) => unit = "step"; 101 | [@bs.get] [@bs.return nullable] external valueAsDate : t_htmlInputElement => option(Js.Date.t) = ""; 102 | [@bs.set] external setValueAsDate : (t_htmlInputElement, Js.Date.t) => unit = "valueAsDate"; 103 | [@bs.get] external valueAsNumber : t_htmlInputElement => float = ""; 104 | 105 | [@bs.send.pipe: t_htmlInputElement] external select : unit = ""; 106 | 107 | module SelectionDirection = { 108 | type t = 109 | | Forward 110 | | Backward 111 | | None; 112 | 113 | let toString = 114 | fun 115 | | Forward => "forward" 116 | | Backward => "backward" 117 | | None => "none"; 118 | }; 119 | 120 | [@bs.send.pipe: t_htmlInputElement] external setSelectionRange : (int, int) => unit = ""; 121 | [@bs.send.pipe: t_htmlInputElement] external setSelectionRangeWithDirection_ : (int, int, string) => unit = "setSelectionRange"; 122 | let setSelectionRangeWithDirection = (selectionStart, selectionEnd, selectionDirection, element) => 123 | element |> setSelectionRangeWithDirection_(selectionStart, selectionEnd, selectionDirection |> SelectionDirection.toString); 124 | 125 | module SelectionMode = { 126 | type t = 127 | | Select 128 | | Start 129 | | End 130 | | Preserve; 131 | 132 | let toString = 133 | fun 134 | | Select => "select" 135 | | Start => "start" 136 | | End => "end" 137 | | Preserve => "preserve"; 138 | }; 139 | 140 | [@bs.send.pipe: t_htmlInputElement] external setRangeTextWithinSelection : string => unit = "setRangeText"; 141 | [@bs.send.pipe: t_htmlInputElement] external setRangeTextWithinInterval : (string, int, int) => unit = "setRangeText"; 142 | [@bs.send.pipe: t_htmlInputElement] external setRangeTextWithinIntervalWithSelectionMode_ : (string, int, int, string) => unit = "setRangeText"; 143 | let setRangeTextWithinIntervalWithSelectionMode = (text, selectionStart, selectionEnd, selectionMode, element) => 144 | element |> setRangeTextWithinIntervalWithSelectionMode_(text, selectionStart, selectionEnd, selectionMode |> SelectionMode.toString); 145 | 146 | [@bs.send.pipe: t_htmlInputElement] external setCustomValidity : string => unit = ""; 147 | [@bs.send.pipe: t_htmlInputElement] external checkValidity : bool = ""; 148 | [@bs.send.pipe: t_htmlInputElement] external reportValidity : bool = ""; 149 | [@bs.send.pipe: t_htmlInputElement] external stepDownBy : int => unit = "stepDown"; 150 | [@bs.send.pipe: t_htmlInputElement] external stepDownByOne : unit = "stepDown"; 151 | [@bs.send.pipe: t_htmlInputElement] external stepUpBy : int => unit = "stepUp"; 152 | [@bs.send.pipe: t_htmlInputElement] external stepUpByOne : unit = "stepUp"; 153 | }; 154 | 155 | type t = Dom.htmlInputElement; 156 | 157 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 158 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 159 | include Webapi__Dom__Element.Impl({ type nonrec t = t; }); 160 | include Webapi__Dom__HtmlElement.Impl({ type nonrec t = t; }); 161 | include Impl({ type nonrec t = t; }); 162 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__IdbVersionChangeEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.idbVersionChangeEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "IDBVersionChangeEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "IDBVersionChangeEvent"; 7 | 8 | [@bs.get] external oldVersion : t => int = ""; 9 | [@bs.get] external newVersion : t => int = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Image.re: -------------------------------------------------------------------------------- 1 | type t; 2 | 3 | [@bs.new] external makeWithData : (~array: Js.Typed_array.Uint8ClampedArray.t, ~width: float, ~height: float) => t = "ImageData"; 4 | 5 | [@bs.new] external make : (~width: float, ~height: float) => t = "ImageData"; 6 | 7 | [@bs.get] external data : t => Js.Typed_array.Uint8ClampedArray.t = ""; 8 | [@bs.get] external height : t => float = ""; 9 | [@bs.get] external width : t => float = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__InputEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.inputEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "InputEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "InputEvent"; 8 | 9 | [@bs.get] external data : t => string = ""; 10 | [@bs.get] external isComposing : t => bool = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__KeyboardEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.keyboardEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "KeyboardEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "KeyboardEvent"; 8 | 9 | [@bs.get] external altKey : t => bool = ""; 10 | [@bs.get] external code : t => string = ""; 11 | [@bs.get] external ctrlKey : t => bool = ""; 12 | [@bs.get] external isComposing : t => bool = ""; 13 | [@bs.get] external key : t => string = ""; 14 | [@bs.get] external locale : t => string = ""; 15 | [@bs.get] external location : t => int = ""; 16 | [@bs.get] external metaKey : t => bool = ""; 17 | [@bs.get] external repeat : t => bool = ""; 18 | [@bs.get] external shiftKey : t => bool = ""; 19 | 20 | [@bs.send.pipe : t] external getModifierState : string /* modifierKey enum */ => bool = ""; 21 | let getModifierState: (Webapi__Dom__Types.modifierKey, t) => bool = 22 | (key, self) => getModifierState(Webapi__Dom__Types.encodeModifierKey(key), self); 23 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Location.re: -------------------------------------------------------------------------------- 1 | type t = Dom.location; 2 | 3 | /* a more ergonomic API would perhaps accept a Window.t directly instead of Location.t */ 4 | [@bs.get] external href : t => string = ""; 5 | [@bs.set] external setHref : (t, string) => unit = "href"; 6 | [@bs.get] external protocol : t => string = ""; 7 | [@bs.set] external setProtocol : (t, string) => unit = "protocol"; 8 | [@bs.get] external host : t => string = ""; 9 | [@bs.set] external setHost : (t, string) => unit = "host"; 10 | [@bs.get] external hostname : t => string = ""; 11 | [@bs.set] external setHostname : (t, string) => unit = "hostname"; 12 | [@bs.get] external port : t => string = ""; 13 | [@bs.set] external setPort : (t, string) => unit = "port"; 14 | [@bs.get] external pathname : t => string = ""; 15 | [@bs.set] external setPathname : (t, string) => unit = "pathname"; 16 | [@bs.get] external search : t => string = ""; 17 | [@bs.set] external setSearch : (t, string) => unit = "search"; 18 | [@bs.get] external hash : t => string = ""; 19 | [@bs.set] external setHash : (t, string) => unit = "hash"; 20 | [@bs.get] external username : t => string = ""; 21 | [@bs.set] external setUsername : (t, string) => unit = "username"; 22 | [@bs.get] external password : t => string = ""; 23 | [@bs.set] external setPassword : (t, string) => unit = "password"; 24 | [@bs.get] external origin : t => string = ""; 25 | 26 | [@bs.send.pipe : t] external assign : string => unit = ""; 27 | [@bs.send.pipe : t] external reload : unit = ""; 28 | [@bs.send.pipe : t] external reloadWithForce : ([@bs.as {json|true|json}] _) => unit = "reload"; 29 | [@bs.send.pipe : t] external replace : string => unit = ""; 30 | [@bs.send.pipe : t] external toString : string = ""; 31 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__MouseEvent.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | [@bs.get] external altKey : T.t => bool = ""; 3 | [@bs.get] external button : T.t => int = ""; 4 | [@bs.get] external buttons : T.t => int /* bitmask */ = ""; 5 | [@bs.get] external clientX : T.t => int = ""; 6 | [@bs.get] external clientY : T.t => int = ""; 7 | [@bs.get] external ctrlKey : T.t => bool = ""; 8 | [@bs.get] external metaKey : T.t => bool = ""; 9 | [@bs.get] external movementX : T.t => int = ""; 10 | [@bs.get] external movementY : T.t => int = ""; 11 | [@bs.get] external offsetX : T.t => int = ""; /* experimental, but widely supported */ 12 | [@bs.get] external offsetY : T.t => int = ""; /* experimental, but widely supported */ 13 | [@bs.get] external pageX : T.t => int = ""; /* experimental, but widely supported */ 14 | [@bs.get] external pageY : T.t => int = ""; /* experimental, but widely supported */ 15 | [@bs.get] [@bs.return nullable] external region : T.t => option(string) = ""; 16 | [@bs.get] [@bs.return nullable] external relatedTarget : T.t => option(Dom.eventTarget) = ""; 17 | [@bs.get] external screenX : T.t => int = ""; 18 | [@bs.get] external screenY : T.t => int = ""; 19 | [@bs.get] external shiftKey : T.t => bool = ""; 20 | [@bs.get] external x : T.t => int = ""; /* experimental */ 21 | [@bs.get] external y : T.t => int = ""; /* experimental */ 22 | [@bs.send.pipe : T.t] external getModifierState : string /* modifierKey enum */ => bool = ""; 23 | let getModifierState: (Webapi__Dom__Types.modifierKey, T.t) => bool = 24 | (key, self) => getModifierState(Webapi__Dom__Types.encodeModifierKey(key), self); 25 | }; 26 | 27 | type t = Dom.mouseEvent; 28 | 29 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 30 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 31 | include Impl({ type nonrec t = t; }); 32 | 33 | [@bs.new] external make : string => t = "MouseEvent"; 34 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "MouseEvent"; 35 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__MutationObserver.re: -------------------------------------------------------------------------------- 1 | type t = Dom.mutationObserver; 2 | 3 | [@bs.new] external make : ((array(Dom.mutationRecord), t) => unit) => t = "MutationObserver"; 4 | 5 | [@bs.send.pipe : t] external observe : (Dom.node_like('a), Js.t({..})) => unit = ""; 6 | [@bs.send.pipe : t] external disconnect : unit = ""; 7 | [@bs.send.pipe : t] external takeRecords : array(Dom.mutationRecord) = ""; 8 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__MutationRecord.re: -------------------------------------------------------------------------------- 1 | type t = Dom.mutationRecord; 2 | 3 | [@bs.get] external type_ : t => string = "type"; 4 | [@bs.get] external target : t => Dom.node = ""; 5 | [@bs.get] external addedNodes : t => Dom.nodeList = ""; 6 | [@bs.get] external removedNodes : t => Dom.nodeList = ""; 7 | [@bs.get] [@bs.return nullable] external previousSibling : t => option(Dom.node) = ""; 8 | [@bs.get] [@bs.return nullable] external pnextSibling : t => option(Dom.node) = ""; 9 | [@bs.get] external attributeName : t => string = ""; 10 | [@bs.get] external attributeNamespace : t => string = ""; 11 | [@bs.get] external oldValue : t => string = ""; 12 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NamedNodeMap.re: -------------------------------------------------------------------------------- 1 | type t = Dom.namedNodeMap; 2 | 3 | [@bs.get] external length : t => int = ""; 4 | 5 | [@bs.send.pipe : t] [@bs.return nullable] external item : int => option(Dom.attr) = ""; 6 | [@bs.send.pipe : t] [@bs.return nullable] external getNamedItem : string => option(Dom.attr) = ""; 7 | [@bs.send.pipe : t] [@bs.return nullable] external getNamedItemNS : (string, string) => option(Dom.attr) = ""; 8 | [@bs.send.pipe : t] external setNamedItem : Dom.attr => unit = ""; 9 | [@bs.send.pipe : t] external setNamedItemNS : Dom.attr => unit = ""; 10 | [@bs.send.pipe : t] external removeNamedItem : string => Dom.attr = ""; 11 | [@bs.send.pipe : t] external removeNamedItemNS : (string, string) => Dom.attr = ""; 12 | 13 | [@bs.val] [@bs.scope ("Array", "prototype", "slice")] external toArray : t => array(Dom.attr) = "call"; 14 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Node.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | external asNode : T.t => Dom.node = "%identity"; 3 | 4 | /* baseURI */ 5 | [@bs.get] external childNodes : T.t => Dom.nodeList = ""; 6 | [@bs.get] [@bs.return nullable] external firstChild : T.t => option(Dom.node) = ""; 7 | [@bs.get] external innerText : T.t => string = ""; 8 | [@bs.set] external setInnerText : (T.t, string) => unit = "innerText"; 9 | [@bs.get] [@bs.return nullable] external lastChild : T.t => option(Dom.node) = ""; 10 | [@bs.get] [@bs.return nullable] external nextSibling : T.t => option(Dom.node) = ""; 11 | [@bs.get] external nodeName : T.t => string = ""; /* nodePrincipal */ 12 | [@bs.get] external nodeType : T.t => int /* nodeType enum */ = ""; 13 | let nodeType: T.t => Webapi__Dom__Types.nodeType = (self) => Webapi__Dom__Types.decodeNodeType(nodeType(self)); 14 | [@bs.get] [@bs.return nullable] external nodeValue : T.t => option(string) = ""; 15 | [@bs.set] external setNodeValue : (T.t, Js.null(string)) => unit = "nodeValue"; 16 | /* let setNodeValue : T.t => option string => unit = fun self value => setNodeValue self (Js.Null.fromOption value); */ /* temporarily removed to reduce codegen size */ 17 | /* Not supported yet 18 | external setNodeValue : T.t => string => unit = "nodeValue" [@@bs.set]; 19 | external clearNodeValue : T.t => _ [@bs.as {json|null|json}] => unit = "nodeValue" [@@bs.set]; 20 | */ 21 | /* outerText */ 22 | [@bs.get] external ownerDocument : T.t => Dom.document = ""; 23 | [@bs.get] [@bs.return nullable] external parentElement : T.t => option(Dom.element) = ""; 24 | [@bs.get] [@bs.return nullable] external parentNode : T.t => option(Dom.node) = ""; 25 | [@bs.get] [@bs.return nullable] external previousSibling : T.t => option(Dom.node) = ""; 26 | [@bs.get] external rootNode : T.t => Dom.node = ""; 27 | [@bs.get] external textContent : T.t => string = ""; 28 | [@bs.set] external setTextContent : (T.t, string) => unit = "textContent"; 29 | 30 | [@bs.send.pipe : T.t] external appendChild : Dom.node_like('a) => unit = ""; 31 | [@bs.send.pipe : T.t] external cloneNode : T.t = ""; 32 | [@bs.send.pipe : T.t] external cloneNodeDeep : ([@bs.as {json|true|json}] _) => T.t = "cloneNode"; 33 | [@bs.send.pipe : T.t] external compareDocumentPosition : Dom.node_like('a) => int = ""; /* returns a bitmask which could also be represeneted as an enum, see https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition */ 34 | [@bs.send.pipe : T.t] external contains : Dom.node_like('a) => bool = ""; 35 | [@bs.send.pipe : T.t] external getRootNode : Dom.node = ""; 36 | [@bs.send.pipe : T.t] external getRootNodeComposed : ([@bs.as {json|{ "composed": true }|json}] _) => Dom.node = "getRootNode"; 37 | [@bs.send.pipe : T.t] external hasChildNodes : bool = ""; 38 | [@bs.send.pipe : T.t] external insertBefore : (Dom.node_like('a), Dom.node_like('b)) => Dom.node_like('a) = ""; 39 | /* (temporarily?) removed to reduce codegen size. This variant is just for convenience, `appendChild` can be used in place of passing `null` to `insertBefore` 40 | external insertBefore : Dom.node_like 'a => Js.null (Dom.node_like 'b) => Dom.node_like 'a = "" [@@bs.send.pipe: T.t]; 41 | let insertBefore : Dom.node_like 'a => option (Dom.node_like 'b) => T.t => Dom.node_like 'a = fun node reference self => insertBefore node (Js.Null.fromOption reference) self; 42 | */ 43 | [@bs.send.pipe : T.t] external isDefaultNamespace : string => bool = ""; 44 | [@bs.send.pipe : T.t] external isEqualNode : Dom.node_like('a) => bool = ""; 45 | [@bs.send.pipe : T.t] external isSameNode : Dom.node_like('a) => bool = ""; 46 | [@bs.send.pipe : T.t] [@bs.return nullable] external lookupNamespaceURI : string => option(string) = ""; 47 | [@bs.send.pipe : T.t] [@bs.return nullable] external lookupDefaultNamespaceURI : ([@bs.as {json|null|json}] _) => option(string) = "lookupNamespaceURI"; 48 | [@bs.send.pipe : T.t] external lookupPrefix : string = "lookupPrefix"; 49 | [@bs.send.pipe : T.t] external normalize : unit = ""; 50 | [@bs.send.pipe : T.t] external removeChild : Dom.node_like('a) => Dom.node_like('a) = ""; 51 | 52 | /** @since 0.19.0 */ 53 | [@bs.send.pipe : T.t] external replaceChild : (Dom.node_like('a), Dom.node_like('b)) => Dom.node_like('b) = ""; 54 | }; 55 | 56 | type t = Dom.node; 57 | 58 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 59 | include Impl({ type nonrec t = t; }); 60 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NodeFilter.re: -------------------------------------------------------------------------------- 1 | type t = Dom.nodeFilter; 2 | 3 | let make = f => {Dom.acceptNode: f}; 4 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NodeIterator.re: -------------------------------------------------------------------------------- 1 | type t = Dom.nodeIterator; 2 | 3 | [@bs.get] external root : t => Dom.node = ""; 4 | [@bs.get] external referenceNode : t => Dom.node = ""; 5 | [@bs.get] external pointerBeforeReferenceNode : t => bool = ""; 6 | [@bs.get] external whatToShow : t => Webapi__Dom__Types.WhatToShow.t = ""; 7 | [@bs.get] [@bs.return nullable] external filter : t => option(Dom.nodeFilter) = ""; 8 | 9 | [@bs.send.pipe : t] [@bs.return nullable] external nextNode : option(Dom.node) = ""; 10 | [@bs.send.pipe : t] [@bs.return nullable] external previousNode : option(Dom.node) = ""; 11 | [@bs.send.pipe : t] external detach : unit = ""; 12 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NodeList.re: -------------------------------------------------------------------------------- 1 | type t = Dom.nodeList; 2 | 3 | [@bs.val] external toArray : t => array(Dom.node) = "Array.prototype.slice.call"; 4 | 5 | [@bs.send.pipe : t] external forEach : ((Dom.node, int) => unit) => unit = ""; 6 | 7 | [@bs.get] external length : t => int = ""; 8 | 9 | [@bs.send.pipe : t] [@bs.return nullable] external item : int => option(Dom.node) = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NonDocumentTypeChildNode.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.get] [@bs.return nullable] external previousElementSibling : T.t => option(Dom.element) = ""; 4 | [@bs.get] [@bs.return nullable] external nextElementSibling : T.t => option(Dom.element) = ""; 5 | }; 6 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__NonElementParentNode.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.send.pipe : T.t] [@bs.return nullable] external getElementById : string => option(Dom.element) = ""; 4 | }; 5 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__PageTransitionEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.pageTransitionEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "PageTransitionEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "PageTransitionEvent"; 7 | 8 | [@bs.get] external persisted : t => bool = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ParentNode.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.get] external children : T.t => Dom.htmlCollection = ""; 4 | [@bs.get] [@bs.return nullable] external firstElementChild : T.t => option(Dom.element) = ""; 5 | [@bs.get] [@bs.return nullable] external lastElementChild : T.t => option(Dom.element) = ""; 6 | [@bs.get] external childElementCount : T.t => int = ""; 7 | [@bs.send.pipe : T.t] [@bs.return nullable] external querySelector : string => option(Dom.element) = ""; 8 | [@bs.send.pipe : T.t] external querySelectorAll : string => Dom.nodeList = ""; 9 | }; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__PointerEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.pointerEvent; 2 | type pointerId = Dom.eventPointerId; 3 | 4 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__MouseEvent.Impl({ type nonrec t = t; }); 7 | 8 | [@bs.new] external make : string => t = "PointerEvent"; 9 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "PointerEvent"; 10 | 11 | [@bs.get] external pointerId : t => pointerId = ""; 12 | [@bs.get] external width : t => int = ""; 13 | [@bs.get] external height : t => int = ""; 14 | [@bs.get] external pressure : t => float = ""; 15 | [@bs.get] external tiltX : t => int = ""; 16 | [@bs.get] external tiltY : t => int = ""; 17 | [@bs.get] external pointerType : t => string /* pointerType enum */ = ""; 18 | let pointerType: t => Webapi__Dom__Types.pointerType = 19 | (self) => Webapi__Dom__Types.decodePointerType(pointerType(self)); 20 | [@bs.get] external isPrimary : t => bool = ""; 21 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__PopStateEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.popStateEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "PopStateEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "PopStateEvent"; 7 | 8 | [@bs.get] external state : t => Js.t({..}) = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ProcessingInstruction.re: -------------------------------------------------------------------------------- 1 | type t = Dom.processingInstruction; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 7 | 8 | [@bs.get] external target : t => string = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ProgressEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.progressEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "ProgressEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "ProgressEvent"; 7 | 8 | [@bs.get] external lengthComputable : t => bool = ""; 9 | [@bs.get] external loaded : t => int = ""; 10 | [@bs.get] external total : t => int = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Range.re: -------------------------------------------------------------------------------- 1 | type t = Dom.range; 2 | 3 | [@bs.new] external make : unit => t = "Range"; /* experimental */ 4 | 5 | [@bs.get] external collapsed : t => bool = ""; 6 | [@bs.get] external commonAncestorContainer : t => Dom.node = ""; 7 | [@bs.get] external endContainer : t => Dom.node = ""; 8 | [@bs.get] external endOffset : t => int = ""; 9 | [@bs.get] external startContainer : t => Dom.node = ""; 10 | [@bs.get] external startOffset : t => int = ""; 11 | 12 | [@bs.send.pipe : t] external setStart : (Dom.node_like('a), int) => unit = ""; 13 | [@bs.send.pipe : t] external setEnd : (Dom.node_like('a), int) => unit = ""; 14 | [@bs.send.pipe : t] external setStartBefore : Dom.node_like('a) => unit = ""; 15 | [@bs.send.pipe : t] external setStartAfter : Dom.node_like('a) => unit = ""; 16 | [@bs.send.pipe : t] external setEndBefore : Dom.node_like('a) => unit = ""; 17 | [@bs.send.pipe : t] external setEndAfter : Dom.node_like('a) => unit = ""; 18 | [@bs.send.pipe : t] external selectNode : Dom.node_like('a) => unit = ""; 19 | [@bs.send.pipe : t] external selectNodeContents : Dom.node_like('a) => unit = ""; 20 | [@bs.send.pipe : t] external collapse : unit = ""; 21 | [@bs.send.pipe : t] external collapseToStart : ([@bs.as {json|true|json}] _) => unit = "collapse"; 22 | [@bs.send.pipe : t] external cloneContents : Dom.documentFragment = ""; 23 | [@bs.send.pipe : t] external deleteContents : unit = ""; 24 | [@bs.send.pipe : t] external extractContents : Dom.documentFragment = ""; 25 | [@bs.send.pipe : t] external insertNode : Dom.node_like('a) => unit = ""; 26 | [@bs.send.pipe : t] external surroundContents : Dom.node_like('a) => unit = ""; 27 | [@bs.send.pipe : t] external compareBoundaryPoints : (int /* compareHow enum */, t) => int /* compareResult enum */ = ""; 28 | let compareBoundaryPoint: (Webapi__Dom__Types.compareHow, t, t) => Webapi__Dom__Types.compareResult = 29 | (how, range, self) => 30 | Webapi__Dom__Types.decodeCompareResult( 31 | compareBoundaryPoints(Webapi__Dom__Types.encodeCompareHow(how), range, self) 32 | ); 33 | [@bs.send.pipe : t] external cloneRange : t = ""; 34 | [@bs.send.pipe : t] external detach : unit = ""; 35 | [@bs.send.pipe : t] external toString : string = ""; 36 | [@bs.send.pipe : t] external comparePoint : (Dom.node_like('a), int) => int /* compareRsult enum */ = ""; 37 | let comparePoint: (Dom.node_like('a), int, t) => Webapi__Dom__Types.compareResult = 38 | (node, offset, self) => Webapi__Dom__Types.decodeCompareResult(comparePoint(node, offset, self)); 39 | [@bs.send.pipe : t] external createContextualFragment : string => Dom.documentFragment = ""; /* experimental, but widely supported */ 40 | [@bs.send.pipe : t] external getBoundingClientRect : Dom.domRect = ""; /* experimental, but widely supported */ 41 | [@bs.send.pipe : t] external getClientRects : array(Dom.domRect) = ""; /* experimental, but widely supported */ 42 | [@bs.send.pipe : t] external intersectsNode : Dom.node_like('a) => bool = ""; 43 | [@bs.send.pipe : t] external isPointInRange : (Dom.node_like('a), int) => bool = ""; 44 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__RelatedEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.relatedEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "RelatedEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "RelatedEvent"; 7 | 8 | [@bs.get] [@bs.return nullable] external relatedTarget : t => option(Dom.eventTarget) = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Selection.re: -------------------------------------------------------------------------------- 1 | type t = Dom.selection; 2 | 3 | [@bs.get] [@bs.return nullable] external anchorNode : t => option(Dom.node) = ""; 4 | [@bs.get] external anchorOffset : t => int = ""; 5 | [@bs.get] [@bs.return nullable] external focusNode : t => option(Dom.node) = ""; 6 | [@bs.get] external focusOffset : t => int = ""; 7 | [@bs.get] external isCollapsed : t => bool = ""; 8 | [@bs.get] external rangeCount : t => int = ""; 9 | 10 | [@bs.send.pipe : t] external getRangeAt : int => Dom.range = ""; 11 | [@bs.send.pipe : t] external collapse : (Dom.node_like(_), int) => unit = ""; 12 | [@bs.send.pipe : t] external extend : (Dom.node_like(_), int) => unit = ""; 13 | [@bs.send.pipe : t] external collapseToStart : unit = ""; 14 | [@bs.send.pipe : t] external collapseToEnd : unit = ""; 15 | [@bs.send.pipe : t] external selectAllChildren : Dom.node_like(_) => unit = ""; 16 | [@bs.send.pipe : t] external setBaseAndExtent : (Dom.node_like(_), int, Dom.node_like(_), int) => unit = ""; 17 | [@bs.send.pipe : t] external addRange : Dom.range => unit = ""; 18 | [@bs.send.pipe : t] external removeRange : Dom.range => unit = ""; 19 | [@bs.send.pipe : t] external removeAllRanges : unit = ""; 20 | [@bs.send.pipe : t] external deleteFromDocument : unit = ""; 21 | [@bs.send.pipe : t] external toString : string = ""; 22 | [@bs.send.pipe : t] external containsNode : (Dom.node_like(_), [@bs.as {json|false|json}] _) => bool = ""; 23 | [@bs.send.pipe : t] external containsNodePartly : (Dom.node_like(_), [@bs.as {json|true|json}] _) => bool = "containsNode"; 24 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ShadowRoot.re: -------------------------------------------------------------------------------- 1 | type t = Dom.shadowRoot; 2 | 3 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__NonElementParentNode.Impl({ type nonrec t = t; }); 6 | include Webapi__Dom__DocumentOrShadowRoot.Impl({ type nonrec t = t; }); 7 | include Webapi__Dom__ParentNode.Impl({ type nonrec t = t; }); 8 | 9 | [@bs.get] external shadowRootMode : t => string = ""; 10 | let shadowRootMode: t => Webapi__Dom__Types.shadowRootMode = 11 | (self) => Webapi__Dom__Types.decodeShadowRootMode(shadowRootMode(self)); 12 | [@bs.get] external host : t => Dom.element = ""; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Slotable.re: -------------------------------------------------------------------------------- 1 | /* Mixin */ 2 | module Impl = (T: {type t;}) => { 3 | [@bs.get] [@bs.return nullable] external assignedSlot : T.t => option(Dom.htmlSlotElement) = ""; 4 | }; 5 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__StorageEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.storageEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "StorageEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "StorageEvent"; 7 | 8 | [@bs.get] external key : t => string = ""; 9 | [@bs.get] external newValue : t => Js.Nullable.t(string) = ""; 10 | [@bs.get] external oldValue : t => Js.Nullable.t(string) = ""; 11 | [@bs.get] external storageArea : t => Dom.Storage.t = ""; 12 | [@bs.get] external url : t => string = ""; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__SvgZoomEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.svgZoomEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "SVGZoomEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "SVGZoomEvent"; 8 | 9 | [@bs.get] external zoomRectScreen : t => Dom.svgRect = ""; 10 | [@bs.get] external previousScale : t => float = ""; 11 | [@bs.get] external previousTranslate : t => Dom.svgPoint = ""; 12 | [@bs.get] external newScale : t => float = ""; 13 | [@bs.get] external newTranslate : t => Dom.svgPoint = ""; 14 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Text.re: -------------------------------------------------------------------------------- 1 | let ofNode = (node: Dom.node) : option('a) => 2 | Webapi__Dom__Node.nodeType(node) == Webapi__Dom__Types.Text ? 3 | Some(Obj.magic(node)) : 4 | None; 5 | 6 | module Impl = (T: {type t;}) => { 7 | let ofNode: Dom.node => option(T.t) = ofNode; 8 | 9 | [@bs.send.pipe : T.t] external splitText : (~offset: int, unit) => Dom.text = ""; 10 | [@bs.get] external wholeText : T.t => string = ""; 11 | }; 12 | 13 | type t = Dom.text; 14 | 15 | include Webapi__Dom__Node.Impl({ type nonrec t = t; }); 16 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 17 | include Webapi__Dom__CharacterData.Impl({ type nonrec t = t; }); 18 | include Webapi__Dom__NonDocumentTypeChildNode.Impl({ type nonrec t = t; }); 19 | include Webapi__Dom__ChildNode.Impl({ type nonrec t = t; }); 20 | include Webapi__Dom__Slotable.Impl({ type nonrec t = t; }); 21 | include Impl({ type nonrec t = t; }); 22 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__TimeEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.timeEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "TimeEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "TimeEvent"; 7 | 8 | [@bs.get] external detail : t => int = ""; 9 | [@bs.get] external view : t => Dom.window = ""; /* technically returns a `WindowProxy` */ 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__TouchEvent.re: -------------------------------------------------------------------------------- 1 | type touchList; /* TODO, Touch Events */ 2 | 3 | module Impl = (T: {type t;}) => { 4 | [@bs.get] external altKey : T.t => bool = ""; 5 | [@bs.get] external changedTouches : T.t => touchList = ""; 6 | [@bs.get] external ctrlKey : T.t => bool = ""; 7 | [@bs.get] external metaKey : T.t => bool = ""; 8 | [@bs.get] external shiftKey : T.t => bool = ""; 9 | [@bs.get] external targetTouches : T.t => touchList = ""; 10 | [@bs.get] external touches : T.t => touchList = ""; 11 | }; 12 | 13 | type t = Dom.touchEvent; 14 | 15 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 16 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 17 | include Impl({ type nonrec t = t; }); 18 | 19 | [@bs.new] external make : string => t = "TouchEvent"; 20 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "TouchEvent"; 21 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__TrackEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.trackEvent; 2 | type track; /* TODO: VideoTrack or AudioTrack or TextTrack */ 3 | 4 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 5 | 6 | [@bs.new] external make : string => t = "TrackEvent"; 7 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "TrackEvent"; 8 | 9 | [@bs.get] external track : t => track = ""; 10 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__TransitionEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.transitionEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "TransitionEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "TransitionEvent"; 7 | 8 | [@bs.get] external propertyName : t => string = ""; 9 | [@bs.get] external elapsedTime : t => float = ""; 10 | [@bs.get] external pseudoElement : t => string /* enum-ish */ = ""; 11 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__TreeWalker.re: -------------------------------------------------------------------------------- 1 | type t = Dom.treeWalker; 2 | 3 | [@bs.get] external root : t => Dom.node = ""; 4 | [@bs.get] external whatToShow : t => Webapi__Dom__Types.WhatToShow.t = ""; 5 | [@bs.get] [@bs.return nullable] external filter : t => option(Dom.nodeFilter) = ""; 6 | [@bs.get] external currentNode : t => Dom.node = ""; 7 | [@bs.set] external setCurrentNode : (t, Dom.node) => unit = ""; 8 | 9 | [@bs.send.pipe : t] [@bs.return nullable] external parentNode : option(Dom.node) = ""; 10 | [@bs.send.pipe : t] [@bs.return nullable] external firstChild : option(Dom.node) = ""; 11 | [@bs.send.pipe : t] [@bs.return nullable] external lastChild : option(Dom.node) = ""; 12 | [@bs.send.pipe : t] [@bs.return nullable] external previousSibling : option(Dom.node) = ""; 13 | [@bs.send.pipe : t] [@bs.return nullable] external nextSibling : option(Dom.node) = ""; 14 | [@bs.send.pipe : t] [@bs.return nullable] external previousNode : option(Dom.node) = ""; 15 | [@bs.send.pipe : t] [@bs.return nullable] external nextNode : option(Dom.node) = ""; 16 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Types.re: -------------------------------------------------------------------------------- 1 | /*** enums, bitmaks and constants ***/ 2 | type compareHow = 3 | | StartToStart 4 | | StartToEnd 5 | | EndToEnd 6 | | EndToStart; 7 | 8 | let encodeCompareHow = 9 | fun /* internal */ 10 | | StartToStart => 0 11 | | StartToEnd => 1 12 | | EndToEnd => 2 13 | | EndToStart => 3; 14 | 15 | type compareResult = 16 | | Before 17 | | Equal 18 | | After 19 | | Unknown; 20 | 21 | let decodeCompareResult = 22 | fun /* internal */ 23 | | (-1) => Before 24 | | 0 => Equal 25 | | 1 => After 26 | | _ => Unknown; 27 | 28 | type compatMode = 29 | | BackCompat 30 | | CSS1Compat 31 | | Unknown; 32 | 33 | let decodeCompatMode = 34 | fun /* internal */ 35 | | "BackCompat" => BackCompat 36 | | "CSS1Compat" => CSS1Compat 37 | | _ => Unknown; 38 | 39 | type contentEditable = 40 | | True 41 | | False 42 | | Inherit 43 | | Unknown; 44 | 45 | let encodeContentEditable = 46 | fun /* internal */ 47 | | True => "true" 48 | | False => "false" 49 | | Inherit => "inherit" 50 | | Unknown => ""; 51 | 52 | let decodeContentEditable = 53 | fun /* internal */ 54 | | "true" => True 55 | | "false" => False 56 | | "inherit" => Inherit 57 | | _ => Unknown; 58 | 59 | type deltaMode = 60 | | Pixel 61 | | Line 62 | | Page; 63 | 64 | let decodeDeltaMode = 65 | fun /* internal */ 66 | | 0 => Pixel 67 | | 1 => Line 68 | | 2 => Page 69 | | _ => raise(Invalid_argument("invalid deltaMode")); 70 | 71 | type designMode = 72 | | On 73 | | Off 74 | | Unknown; 75 | 76 | let encodeDesignMode = 77 | fun /* internal */ 78 | | On => "on" 79 | | Off => "off" 80 | | Unknown => ""; 81 | 82 | let decodeDesignMode = 83 | fun /* internal */ 84 | | "on" => On 85 | | "off" => Off 86 | | _ => Unknown; 87 | 88 | type dir = 89 | | Ltr 90 | | Rtl 91 | | Unknown; 92 | 93 | let encodeDir = 94 | fun /* internal */ 95 | | Ltr => "ltr" 96 | | Rtl => "rtl" 97 | | Unknown => ""; 98 | 99 | let decodeDir = 100 | fun /* internal */ 101 | | "ltr" => Ltr 102 | | "rtl" => Rtl 103 | | _ => Unknown; 104 | 105 | /** @since 0.17.1 */ 106 | module EventPhase = { 107 | type t = 108 | | None 109 | | CapturingPhase 110 | | AtTarget 111 | | BubblingPhase 112 | | Unknown; 113 | 114 | let decode = 115 | fun /* internal */ 116 | | 1 => CapturingPhase 117 | | 2 => AtTarget 118 | | 3 => BubblingPhase 119 | | 0 => None 120 | | _ => Unknown; 121 | }; 122 | 123 | [@deprecated "Use EventPhase.t"] 124 | type eventPhase = EventPhase.t = 125 | | None 126 | | CapturingPhase 127 | | AtTarget 128 | | BubblingPhase 129 | | Unknown; 130 | 131 | type filterAction = 132 | | Accept 133 | | Reject 134 | | Skip; 135 | 136 | let encodeFilterAction = 137 | fun 138 | | Accept => 1 139 | | Reject => 2 140 | | Skip => 3; 141 | 142 | type insertPosition = 143 | | BeforeBegin 144 | | AfterBegin 145 | | BeforeEnd 146 | | AfterEnd; 147 | 148 | let encodeInsertPosition = 149 | fun /* internal */ 150 | | BeforeBegin => "beforebegin" 151 | | AfterBegin => "afterbegin" 152 | | BeforeEnd => "beforeend" 153 | | AfterEnd => "afterend"; 154 | 155 | type modifierKey = 156 | | Alt 157 | | AltGraph 158 | | CapsLock 159 | | Control 160 | | Fn 161 | | FnLock 162 | | Hyper 163 | | Meta 164 | | NumLock 165 | | ScrollLock 166 | | Shift 167 | | Super 168 | | Symbol 169 | | SymbolLock; 170 | 171 | let encodeModifierKey = 172 | fun /* internal */ 173 | | Alt => "Alt" 174 | | AltGraph => "AltGraph" 175 | | CapsLock => "CapsLock" 176 | | Control => "Control" 177 | | Fn => "Fn" 178 | | FnLock => "FnLock" 179 | | Hyper => "Hyper" 180 | | Meta => "Meta" 181 | | NumLock => "NumLock" 182 | | ScrollLock => "ScrollLock" 183 | | Shift => "Shift" 184 | | Super => "Super" 185 | | Symbol => "Symbol" 186 | | SymbolLock => "SymbolLock"; 187 | 188 | type nodeType = 189 | | Element 190 | | Attribute /* deprecated */ 191 | | Text 192 | | CDATASection /* deprecated */ 193 | | EntityReference /* deprecated */ 194 | | Entity /* deprecated */ 195 | | ProcessingInstruction 196 | | Comment 197 | | Document 198 | | DocumentType 199 | | DocumentFragment 200 | | Notation /* deprecated */ 201 | | Unknown; 202 | 203 | let decodeNodeType = 204 | fun /* internal */ 205 | | 1 => Element 206 | | 2 => Attribute 207 | | 3 => Text 208 | | 4 => CDATASection 209 | | 5 => EntityReference 210 | | 6 => Entity 211 | | 7 => ProcessingInstruction 212 | | 8 => Comment 213 | | 9 => Document 214 | | 10 => DocumentType 215 | | 11 => DocumentFragment 216 | | 12 => Notation 217 | | _ => Unknown; 218 | 219 | type pointerType = 220 | | Mouse 221 | | Pen 222 | | Touch 223 | | Unknown; 224 | 225 | let decodePointerType = 226 | fun /* itnernal */ 227 | | "mouse" => Mouse 228 | | "pen" => Pen 229 | | "touch|" => Touch 230 | | _ => Unknown; 231 | 232 | type readyState = 233 | | Loading 234 | | Interactive 235 | | Complete 236 | | Unknown; 237 | 238 | let decodeReadyState = 239 | fun /* internal */ 240 | | "loading" => Loading 241 | | "interactive" => Interactive 242 | | "complete" => Complete 243 | | _ => Unknown; 244 | 245 | type shadowRootMode = 246 | | Open 247 | | Closed; 248 | 249 | let decodeShadowRootMode = 250 | fun /* internal */ 251 | | "open" => Open 252 | | "closed" => Closed 253 | | _ => raise(Invalid_argument("Unknown shadowRootMode")); 254 | 255 | type visibilityState = 256 | | Visible 257 | | Hidden 258 | | Prerender 259 | | Unloaded 260 | | Unknown; 261 | 262 | let decodeVisibilityState = 263 | fun /* internal */ 264 | | "visible" => Visible 265 | | "hidden" => Hidden 266 | | "prerender" => Prerender 267 | | "unloaded" => Unloaded 268 | | _ => Unknown; 269 | 270 | type image; 271 | 272 | module type WhatToShowT = { 273 | type t; 274 | 275 | let _All: t; 276 | let _Element: t; 277 | let _Attribute: t; 278 | let _Text: t; 279 | let _CDATASection: t; 280 | let _EntityReference: t; 281 | let _Entity: t; 282 | let _ProcessingInstruction: t; 283 | let _Comment: t; 284 | let _Document: t; 285 | let _DocumentType: t; 286 | let _DocumentFragment: t; 287 | let _Notation: t; 288 | 289 | let many: list(t) => t; 290 | }; 291 | 292 | module WhatToShow: WhatToShowT = { 293 | type t = int; 294 | 295 | let _All = (-1); 296 | let _Element = 1; 297 | let _Attribute = 2; 298 | let _Text = 4; 299 | let _CDATASection = 8; 300 | let _EntityReference = 16; 301 | let _Entity = 32; 302 | let _ProcessingInstruction = 64; 303 | let _Comment = 128; 304 | let _Document = 256; 305 | let _DocumentType = 512; 306 | let _DocumentFragment = 1024; 307 | let _Notation = 2048; 308 | 309 | let rec many = 310 | fun 311 | | [] => 0 312 | | [hd, ...rest] => hd lor many(rest); 313 | }; 314 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__UiEvent.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t;}) => { 2 | [@bs.get] external detail : T.t => int = ""; 3 | [@bs.get] external view : T.t => Dom.window = ""; /* technically returns a `WindowProxy` */ 4 | }; 5 | 6 | type t = Dom.uiEvent; 7 | 8 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 9 | include Impl({ type nonrec t = t; }); 10 | 11 | [@bs.new] external make : string => t = "UIEvent"; 12 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "UIEvent"; 13 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__ValidityState.re: -------------------------------------------------------------------------------- 1 | type t; 2 | 3 | [@bs.get] external valueMissing : t => bool = ""; 4 | [@bs.get] external typeMismatch : t => bool = ""; 5 | [@bs.get] external patternMismatch : t => bool = ""; 6 | [@bs.get] external tooLong : t => bool = ""; 7 | [@bs.get] external tooShort : t => bool = ""; 8 | [@bs.get] external rangeUnderflow : t => bool = ""; 9 | [@bs.get] external rangeOverflow : t => bool = ""; 10 | [@bs.get] external stepMismatch : t => bool = ""; 11 | [@bs.get] external badInput : t => bool = ""; 12 | [@bs.get] external customError : t => bool = ""; 13 | [@bs.get] external valid : t => bool = ""; 14 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__WebGlContextEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.webGlContextEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | 5 | [@bs.new] external make : string => t = "WebGLContextEvent"; 6 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "WebGLContextEvent"; 7 | 8 | [@bs.get] external statusMessage : t => string = ""; 9 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__WheelEvent.re: -------------------------------------------------------------------------------- 1 | type t = Dom.wheelEvent; 2 | 3 | include Webapi__Dom__Event.Impl({ type nonrec t = t; }); 4 | include Webapi__Dom__UiEvent.Impl({ type nonrec t = t; }); 5 | include Webapi__Dom__MouseEvent.Impl({ type nonrec t = t; }); 6 | 7 | [@bs.new] external make : string => t = "WheelEvent"; 8 | [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "WheelEvent"; 9 | 10 | [@bs.get] external deltaX : t => float = ""; 11 | [@bs.get] external deltaY : t => float = ""; 12 | [@bs.get] external deltaZ : t => float = ""; 13 | [@bs.get] external deltaMode : t => int = ""; 14 | let deltaMode: t => Webapi__Dom__Types.deltaMode = (self) => 15 | Webapi__Dom__Types.decodeDeltaMode(deltaMode(self)); 16 | -------------------------------------------------------------------------------- /src/Webapi/Dom/Webapi__Dom__Window.re: -------------------------------------------------------------------------------- 1 | type console; /* Console API, should maybe be defined in Js stdlib */ 2 | type crypto; /* Web Cryptography API */ 3 | type frameList; /* array-like, WindowProxy? */ 4 | type idleDeadline; /* Cooperative Scheduling of Background Tasks */ 5 | type locationbar; /* "bar object" */ 6 | type menubar; /* "bar object" */ 7 | type navigator; 8 | type personalbar; /* "bar object" */ 9 | type screen; 10 | type scrollbars; /* "bar object" */ 11 | type speechSynthesis; 12 | type statusbar; /* "bar object" */ 13 | type toolbar; /* "bar object" */ 14 | type mediaQueryList; /* CSSOM View module */ 15 | type transferable; 16 | 17 | type idleCallbackId; /* used by requestIdleCallback and cancelIdleCallback */ 18 | 19 | module Impl = (T: {type t;}) => { 20 | type t_window = T.t; 21 | 22 | /* A lot of this isn't really "dom", but rather global exports */ 23 | 24 | [@bs.get] external console : t_window => console = ""; 25 | [@bs.get] external crypto : t_window => crypto = ""; 26 | [@bs.get] external document : t_window => Dom.document = ""; 27 | [@bs.get] [@bs.return nullable] external frameElement : t_window => option(Dom.element) = ""; /* experimental? */ 28 | [@bs.get] external frames : t_window => frameList = ""; 29 | [@bs.get] external fullScreen : t_window => bool = ""; 30 | [@bs.get] external history : t_window => Dom.history = ""; 31 | [@bs.get] external innerWidth : t_window => int = ""; 32 | [@bs.get] external innerHeight : t_window => int = ""; 33 | [@bs.get] external isSecureContext : t_window => bool = ""; 34 | [@bs.get] external length : t_window => int = ""; 35 | [@bs.get] external location : t_window => Dom.location = ""; 36 | [@bs.set] external setLocation : (t_window, string) => unit = "location"; 37 | [@bs.get] external locationbar : t_window => locationbar = ""; 38 | /* localStorage: accessed directly via Dom.Storage.localStorage */ 39 | [@bs.get] external menubar : t_window => menubar = ""; 40 | [@bs.get] external name : t_window => string = ""; 41 | [@bs.set] external setName : (t_window, string) => unit = "name"; 42 | [@bs.get] external navigator : t_window => navigator = ""; 43 | [@bs.get] [@bs.return nullable] external opener : t_window => option(Dom.window) = ""; 44 | [@bs.get] external outerWidth : t_window => int = ""; 45 | [@bs.get] external outerHeight : t_window => int = ""; 46 | [@bs.get] external pageXOffset : t_window => float = ""; /* alias for scrollX */ 47 | [@bs.get] external pageYOffset : t_window => float = ""; /* alias for scrollY */ 48 | [@bs.get] external parent : t_window => Dom.window = ""; 49 | [@bs.get] external performance : t_window => Webapi__Performance.t = ""; 50 | [@bs.get] external personalbar : t_window => personalbar = ""; 51 | [@bs.get] external screen : t_window => screen = ""; 52 | [@bs.get] external screenX : t_window => int = ""; 53 | [@bs.get] external screenY : t_window => int = ""; 54 | [@bs.get] external scrollbars : t_window => scrollbars = ""; 55 | [@bs.get] external scrollX : t_window => float = ""; 56 | [@bs.get] external scrollY : t_window => float = ""; 57 | [@bs.get] external self : t_window => Dom.window = ""; /* alias for window, but apparently convenient because self (stand-alone) resolves to WorkerGlobalScope in a web worker. Probably poitnless here though */ 58 | /* sessionStorage: accessed directly via Dom.Storage.sessionStorage */ 59 | [@bs.get] external speechSynthesis : t_window => speechSynthesis = ""; /* experimental */ 60 | [@bs.get] external status : t_window => string = ""; 61 | [@bs.set] external setStatus : (t_window, string) => unit = "status"; 62 | [@bs.get] external statusbar : t_window => statusbar = ""; 63 | [@bs.get] external toolbar : t_window => toolbar = ""; 64 | [@bs.get] external top : t_window => Dom.window = ""; 65 | [@bs.get] external window : t_window => t_window = ""; /* This is pointless I think, it's just here because window is the implicit global scope, and it's needed to be able to get a reference to it */ 66 | 67 | [@bs.send.pipe : t_window] external alert : string => unit = ""; 68 | [@bs.send.pipe : t_window] external blur : unit = ""; 69 | [@bs.send.pipe : t_window] external cancelIdleCallback : idleCallbackId => unit = ""; /* experimental, Cooperative Scheduling of Background Tasks */ 70 | [@bs.send.pipe : t_window] external close : unit = ""; 71 | [@bs.send.pipe : t_window] external confirm : string => bool = ""; 72 | [@bs.send.pipe : t_window] external focus : unit = ""; 73 | [@bs.send.pipe : t_window] external getComputedStyle : Dom.element => Dom.cssStyleDeclaration = ""; 74 | [@bs.send.pipe : t_window] external getComputedStyleWithPseudoElement : (Dom.element, string) => Dom.cssStyleDeclaration = "getComputedStyle"; 75 | [@bs.send.pipe : t_window] external getSelection : Dom.selection = ""; 76 | [@bs.send.pipe : t_window] external matchMedia : string => mediaQueryList = ""; /* experimental, CSSOM View module */ 77 | [@bs.send.pipe : t_window] external moveBy : (int, int) => unit = ""; /* experimental, CSSOM View module */ 78 | [@bs.send.pipe : t_window] external moveTo : (int, int) => unit = ""; /* experimental, CSSOM View module */ 79 | [@bs.send.pipe : t_window] [@bs.return nullable] external open_ : (~url: string, ~name: string, ~features: string=?) => option(Dom.window) = "open"; /* yes, features is a stringly typed list of key value pairs, sigh */ 80 | [@bs.send.pipe : t_window] external postMessage : ('a, string) => unit = ""; /* experimental-ish?, Web Messaging */ 81 | [@bs.send.pipe : t_window] external postMessageWithTransfers : ('a, string, array(transferable)) => unit = "postMessage"; /* experimental-ish?, Web Messaging */ 82 | [@bs.send.pipe : t_window] external print : unit = ""; 83 | [@bs.send.pipe : t_window] external prompt : string => string = ""; 84 | [@bs.send.pipe : t_window] external promptWithDefault : (string, string) => string = "prompt"; 85 | /* requestAnimationFrame: accessed directly via Webapi */ 86 | [@bs.send.pipe : t_window] external requestIdleCallback : (idleDeadline => unit) => idleCallbackId = ""; /* experimental, Cooperative Scheduling of Background Tasks */ 87 | [@bs.send.pipe : t_window] external requestIdleCallbackWithOptions : (idleDeadline => unit, {. "timeout": int}) => idleCallbackId = "requestIdleCallback"; /* experimental, Cooperative Scheduling of Background Tasks */ 88 | [@bs.send.pipe : t_window] external resizeBy : (int, int) => unit = ""; /* experimental, CSSOM View module */ 89 | [@bs.send.pipe : t_window] external resizeTo : (int, int) => unit = ""; /* experimental, CSSOM View module */ 90 | [@bs.send.pipe : t_window] external scroll : (float, float) => unit = ""; /* experimental, CSSOM View module */ 91 | [@bs.send.pipe : t_window] external scrollBy : (float, float) => unit = ""; /* experimental, CSSOM View module */ 92 | [@bs.send.pipe : t_window] external scrollTo : (float, float) => unit = ""; /* experimental, CSSOM View module */ 93 | [@bs.send.pipe : t_window] external stop : unit = ""; 94 | 95 | [@bs.send.pipe : t_window] external addPopStateEventListener : ([@bs.as "popstate"] _, Dom.popStateEvent => unit) => unit = "addEventListener"; 96 | [@bs.send.pipe : t_window] external removePopStateEventListener : ([@bs.as "popstate"] _, Dom.popStateEvent => unit) => unit= "removeEventListener"; 97 | 98 | [@bs.set] external setOnLoad : (t_window, unit => unit) => unit = "onload"; /* use addEventListener instead? */ 99 | }; 100 | 101 | type t = Dom.window; 102 | 103 | /* include WindowOrWorkerGlobalScope? not really "dom" though */ 104 | include Webapi__Dom__EventTarget.Impl({ type nonrec t = t; }); 105 | include Webapi__Dom__GlobalEventHandlers.Impl({ type nonrec t = t; }); 106 | include Impl({ type nonrec t = t; }); 107 | -------------------------------------------------------------------------------- /src/Webapi/ResizeObserver/Webapi__ResizeObserver__ResizeObserverEntry.re: -------------------------------------------------------------------------------- 1 | type t; 2 | 3 | [@bs.get] external contentRect: t => Dom.domRect = ""; 4 | [@bs.get] external target: t => Dom.element = ""; 5 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__Base64.re: -------------------------------------------------------------------------------- 1 | [@bs.val] external btoa : string => string = ""; 2 | [@bs.val] external atob : string => string = ""; 3 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__Blob.re: -------------------------------------------------------------------------------- 1 | module Impl = (T: {type t}) => { 2 | [@bs.send] external arrayBuffer: T.t => Js.Promise.t(Js.Typed_array.ArrayBuffer.t) = 3 | ""; 4 | 5 | [@bs.get] external size: T.t => float = ""; 6 | 7 | [@bs.send.pipe: T.t] external slice: (~start: int=?, ~end_: int=?, ~contentType: string=?) => T.t = 8 | ""; 9 | 10 | /** @since 0.19.0 */ 11 | [@bs.send] external stream: T.t => Webapi__ReadableStream.t = ""; 12 | 13 | [@bs.send] external text: T.t => Js.Promise.t(string) = ""; 14 | 15 | [@bs.get] external type_: T.t => string = "type"; 16 | 17 | /** Deprecated, use [type_] instead. */ 18 | [@deprecated "Use [type_] instead"] 19 | [@bs.get] external _type: T.t => string = "type"; 20 | }; 21 | 22 | type t = Fetch.blob; 23 | 24 | include Impl({type nonrec t = t}); 25 | 26 | // [@bs.new] external make: ... = "Blob"; 27 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__Canvas.re: -------------------------------------------------------------------------------- 1 | module Canvas2d = Webapi__Canvas__Canvas2d; 2 | module WebGl = Webapi__Canvas__WebGl; 3 | 4 | module CanvasElement = { 5 | [@bs.send] external getContext2d : (Dom.element, [@bs.as "2d"] _) => Canvas2d.t = "getContext"; 6 | [@bs.send] external getContextWebGl : (Dom.element, [@bs.as "webgl"] _) => WebGl.glT = "getContext"; 7 | [@bs.get] external height : Dom.element => int = "height"; 8 | [@bs.set] external setHeight : (Dom.element, int) => unit = "height"; 9 | [@bs.get] external width : Dom.element => int = "width"; 10 | [@bs.set] external setWidth : (Dom.element, int) => unit = "width"; 11 | }; 12 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__File.re: -------------------------------------------------------------------------------- 1 | type t = Fetch.file; 2 | 3 | [@text "{1 Blob superclass}"]; 4 | 5 | include Webapi__Blob.Impl({type nonrec t = t}); 6 | 7 | [@text "{1 File class}"]; 8 | 9 | /** @since 0.18.0 */ 10 | [@bs.get] external lastModified: t => float = ""; 11 | 12 | // [@bs.new] external make: ... = "File"; 13 | 14 | [@bs.get] external name: t => string = ""; 15 | 16 | [@bs.get] external preview: t => string = ""; 17 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__Performance.re: -------------------------------------------------------------------------------- 1 | type t; 2 | 3 | [@bs.send] external now : t => float = ""; 4 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__ReadableStream.re: -------------------------------------------------------------------------------- 1 | module type Reader = { 2 | type t; 3 | type closed; 4 | 5 | [@bs.send] external closed: t => Js.Promise.t(closed) = ""; 6 | [@bs.send] external cancel: t => Js.Promise.t(unit) = ""; 7 | [@bs.send.pipe: t] external cancelWith: string => Js.Promise.t(string) = "cancel"; 8 | [@bs.send] external releaseLock: t => unit = ""; 9 | }; 10 | 11 | module rec DefaultReader: { 12 | include Reader; 13 | [@bs.send] external read: t => Js.Promise.t(Fetch__Iterator.Next.t(string)) = ""; 14 | } = DefaultReader; 15 | 16 | module rec BYOBReader: { 17 | include Reader; 18 | // [@bs.send.pipe: t] external read: view => Js.Promise.t(Fetch__Iterator.Next.t(string)) = "read"; 19 | } = BYOBReader; 20 | 21 | type t = Fetch.readableStream; 22 | 23 | [@bs.get] external locked: t => bool = ""; 24 | [@bs.send] external cancel: t => Js.Promise.t(unit) = ""; 25 | [@bs.send.pipe: t] external cancelWith: string => Js.Promise.t(string) = "cancel"; 26 | [@bs.send] external getReader: t => DefaultReader.t = ""; 27 | [@bs.send] external getReaderBYOB: (t, [@bs.as {json|{"mode": "byob"}|json}] _) => BYOBReader.t = "getReader"; 28 | [@bs.send] external tee: t => (t, t) = ""; 29 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__ResizeObserver.re: -------------------------------------------------------------------------------- 1 | module ResizeObserverEntry = Webapi__ResizeObserver__ResizeObserverEntry; 2 | 3 | type t; 4 | 5 | [@bs.new] 6 | external make: (array(ResizeObserverEntry.t) => unit) => t = "ResizeObserver"; 7 | [@bs.new] 8 | external makeWithObserver: ((array(ResizeObserverEntry.t), t) => unit) => t = 9 | "ResizeObserver"; 10 | 11 | [@bs.send] external disconnect: t => unit = ""; 12 | [@bs.send] external observe: (t, Dom.element) => unit = ""; 13 | [@bs.send] external unobserve: (t, Dom.element) => unit = ""; 14 | -------------------------------------------------------------------------------- /src/Webapi/Webapi__Url.re: -------------------------------------------------------------------------------- 1 | module URLSearchParams = { 2 | type t; 3 | 4 | [@bs.new] external make: string => t = "URLSearchParams"; 5 | [@bs.new] external makeWithDict: Js.Dict.t(string) => t = "URLSearchParams"; 6 | [@bs.new] external makeWithArray: array((string, string)) => t = "URLSearchParams"; 7 | [@bs.send.pipe : t] external append: (string, string) => unit = ""; 8 | [@bs.send.pipe : t] external delete: string => unit = ""; 9 | [@bs.send.pipe : t] external entries: Js.Array.array_like((string, string)) = ""; 10 | [@bs.send.pipe : t] external forEach: ([@bs.uncurry] (string, string) => unit) => unit = ""; 11 | [@bs.return nullable][@bs.send.pipe : t] external get: string => option(string) = ""; 12 | [@bs.send.pipe : t] external getAll: string => array(string) = ""; 13 | [@bs.send.pipe : t] external has: string => bool = ""; 14 | [@bs.send.pipe : t] external keys: Js.Array.array_like(string) = ""; 15 | [@bs.send.pipe : t] external set: (string, string) => unit = ""; 16 | [@bs.send.pipe : t] external sort: unit = ""; 17 | [@bs.send.pipe : t] external toString: string = ""; 18 | [@bs.send.pipe : t] external values: Js.Array.array_like(string) = ""; 19 | }; 20 | 21 | type t; 22 | 23 | [@bs.new] external make: string => t = "URL"; 24 | 25 | /** Deprecated, use [makeWith] instead. */ 26 | [@deprecated "Use [makeWith] instead."] 27 | [@bs.new] external makeWithBase: (string, string) => t = "URL"; 28 | 29 | /** @since 0.19.0 */ 30 | [@bs.new] external makeWith: (string, ~base: string) => t = "URL"; 31 | 32 | [@bs.get] external hash: t => string = ""; 33 | [@bs.set] external setHash: (t, string) => unit = "hash"; 34 | [@bs.get] external host: t => string = ""; 35 | [@bs.set] external setHost: (t, string) => unit = "host"; 36 | [@bs.get] external hostname: t => string = ""; 37 | [@bs.set] external setHostname: (t, string) => unit = "hostname"; 38 | [@bs.get] external href: t => string = ""; 39 | [@bs.set] external setHref: (t, string) => unit = "href"; 40 | [@bs.get] external origin: t => string = ""; 41 | [@bs.get] external password: t => string = ""; 42 | [@bs.set] external setPassword: (t, string) => unit = "password"; 43 | [@bs.get] external pathname: t => string = ""; 44 | [@bs.set] external setPathname: (t, string) => unit = "pathname"; 45 | [@bs.get] external port: t => string = ""; 46 | [@bs.set] external setPort: (t, string) => unit = "port"; 47 | [@bs.get] external protocol: t => string = ""; 48 | [@bs.set] external setProtocol: (t, string) => unit = "protocol"; 49 | [@bs.get] external search: t => string = ""; 50 | [@bs.set] external setSearch: (t, string) => unit = "search"; 51 | [@bs.get] external searchParams: t => URLSearchParams.t = ""; 52 | [@bs.get] external username: t => string = ""; 53 | [@bs.set] external setUsername: (t, string) => unit = "username"; 54 | [@bs.get] external toJson: t => string = ""; 55 | 56 | [@bs.val] [@bs.scope "URL"] external createObjectURL : Webapi__File.t => string = ""; 57 | [@bs.val] [@bs.scope "URL"] external revokeObjectURL : string => unit = ""; 58 | -------------------------------------------------------------------------------- /tests/Webapi/Canvas/Webapi__Canvas__Canvas2d__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Canvas; 2 | open Webapi.Canvas.Canvas2d; 3 | open Webapi.Dom; 4 | 5 | let canvasEl = Document.createElement("canvas", document); 6 | let ctx = CanvasElement.getContext2d(canvasEl); 7 | 8 | ctx |> save; 9 | ctx |> restore; 10 | 11 | ctx |> scale(~x=1., ~y=2.); 12 | ctx |> rotate(2.); 13 | ctx |> translate(~x=2., ~y=3.); 14 | ctx |> transform(~m11=1., ~m12=2., ~m21=1., ~m22=1., ~dx=1., ~dy=1.); 15 | 16 | globalAlpha(ctx, 0.9); 17 | globalCompositeOperation(ctx, Composite.sourceOver); 18 | 19 | lineWidth(ctx, 1.); 20 | lineCap(ctx, LineCap.butt); 21 | lineJoin(ctx, LineJoin.round); 22 | miterLimit(ctx, 10.); 23 | 24 | setStrokeStyle(ctx, String, "red"); 25 | setFillStyle(ctx, String, "red"); 26 | 27 | switch (fillStyle(ctx)) { 28 | | (Gradient, g) => g |> addColorStop(0.0, "red") 29 | | (String, s) => Js.log(s) 30 | | (Pattern, _) => () 31 | }; 32 | 33 | switch (strokeStyle(ctx)) { 34 | | (Gradient, g) => g |> addColorStop(1.2, "blue") 35 | | (String, s) => Js.log(s) 36 | | (Pattern, _) => () 37 | }; 38 | 39 | shadowOffsetX(ctx, 1.); 40 | shadowOffsetY(ctx, 1.); 41 | shadowBlur(ctx, 1.); 42 | shadowColor(ctx, "red"); 43 | 44 | ctx |> beginPath; 45 | ctx |> closePath; 46 | ctx |> fill; 47 | ctx |> stroke; 48 | ctx |> clip; 49 | ctx |> moveTo(~x=1., ~y=1.); 50 | ctx |> lineTo(~x=1., ~y=2.); 51 | ctx |> quadraticCurveTo(~cp1x=1., ~cp1y=1., ~x=1., ~y=1.); 52 | ctx |> bezierCurveTo(~cp1x=1., ~cp1y=1., ~cp2x=2., ~cp2y=2., ~x=4., ~y=4.); 53 | ctx |> arcTo(~x1=1., ~y1=1., ~x2=2., ~y2=2., ~r=4.); 54 | ctx |> arc(~x=1., ~y=1., ~r=4., ~startAngle=1., ~endAngle=3., ~anticw=true); 55 | ctx |> rect(~x=0., ~y=0., ~w=10., ~h=10.); 56 | let _ = ctx |> isPointInPath(~x=0., ~y=0.); 57 | 58 | let linearGradient = ctx |> createLinearGradient(~x0=0.0, ~y0=0.0, ~x1=0.0, ~y1=0.0); 59 | setStrokeStyle(ctx, Gradient, linearGradient); 60 | let _ = ctx |> createRadialGradient(~x0=0.0, ~y0=0.0, ~x1=0.0, ~y1=0.0, ~r0=0.0, ~r1=0.0); 61 | linearGradient |> addColorStop(0.0, "red"); 62 | let _ = 63 | List.map( 64 | createPattern(ctx, Document.createElement("img", document)), 65 | [`noRepeat, `repeat, `repeatX, `repeatY] 66 | ); 67 | 68 | let measureText = ctx |> measureText("foo"); 69 | let width = width(measureText); 70 | ctx |> fillText("foo!", ~x=0.0, ~y=0.0, ~maxWidth=width); 71 | ctx |> strokeText("foo!", ~x=0.0, ~y=0.0, ~maxWidth=width); 72 | let imageData = createImageDataCoords(ctx, ~width=0.0, ~height=0.0); 73 | createImageDataFromImage(ctx, imageData); 74 | Image.width(imageData); 75 | Image.height(imageData); 76 | 77 | getImageData(ctx, ~sx=0.0, ~sy=0.0, ~sw=0.0, ~sh=0.0); 78 | let _: unit = putImageData(ctx, ~imageData, ~dx=0.0, ~dy=0.0); 79 | let _: unit = putImageDataWithDirtyRect(ctx, ~imageData, ~dx=0.0, ~dy=0.0, ~dirtyX=0.0, ~dirtyY=0.0, ~dirtyWidth=0.0, ~dirtyHeight=0.0); 80 | 81 | font(ctx, "10px Courier"); 82 | textAlign(ctx, "left"); 83 | textBaseline(ctx, "top"); 84 | ctx |> fillText("hi", ~x=1., ~y=0.); 85 | ctx |> strokeText("hi", ~x=1., ~y=0.); 86 | 87 | ctx |> fillRect(~x=1., ~y=0., ~w=10., ~h=10.); 88 | ctx |> strokeRect(~x=1., ~y=0., ~w=10., ~h=10.); 89 | ctx |> clearRect(~x=1., ~y=0., ~w=10., ~h=10.); 90 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__AnimationEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open AnimationEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* AnimationEvent */ 23 | let _ = animationName(event); 24 | let _ = elapsedTime(event); 25 | let _ = pseudoElement(event); 26 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open BeforeUnloadEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* BeforeUnloadEvent */ 23 | let _ = returnValue(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__ClipboardEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open ClipboardEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* ClipboardEvent */ 23 | let _ = clipboardData(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__CloseEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open CloseEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* CloseEvent */ 23 | let _ = wasClean(event); 24 | let _ = code(event); 25 | let _ = reason(event); 26 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__CompositionEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open CompositionEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* CompositionEvent */ 27 | let _ = data(event); 28 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__CustomEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open CustomEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Document__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Document; 3 | 4 | let el = document |> createElement("strong"); 5 | 6 | let _ = characterSet(document); 7 | let _ = compatMode(document); 8 | let _ = doctype(document); 9 | let _ = documentElement(document); 10 | let _ = documentURI(document); 11 | let _ = hidden(document); 12 | let _ = implementation(document); 13 | let _ = lastStyleSheetSet(document); 14 | let _ = pointerLockElement(document); 15 | let _ = preferredStyleSheetSet(document); 16 | let _ = scrollingElement(document); 17 | let _ = selectedStyleSheetSet(document); 18 | let _ = setSelectedStyleSheetSet(document, "muh-stylesheet"); 19 | let _ = styleSheets(document); 20 | let _ = styleSheetSets(document); 21 | let _ = visibilityState(document); 22 | 23 | let _ = adoptNode(el, document); 24 | let _ = createAttribute("data-foo", document); 25 | let _ = createAttributeNS("http://...", "foo", document); 26 | let _ = createComment("witty comment", document); 27 | let _ = createDocumentFragment(document); 28 | let _ = createElement("div", document); 29 | let _ = createElementWithOptions("div", [%bs.raw "{}"], document); /* I've no idea what this options object is supposed to be, even the spec doesn't seem to bother explaining it */ 30 | let _ = createElementNS("http://...", "foo", document); 31 | let _ = createElementNSWithOptions("http://...", "div", [%bs.raw "{}"], document); /* I've no idea what this options object is supposed to be, even the spec doesn't seem to bother explaining it */ 32 | let _ = createEvent("MyCustomEvent", document); 33 | let _ = createNodeIterator(el, document); 34 | let _ = createNodeIteratorWithWhatToShow(el, WhatToShow._All, document); 35 | let _ = createNodeIteratorWithWhatToShowFilter(el, WhatToShow.(many([_Element, _Attribute])), NodeFilter.make((_) => 0), document); 36 | let _ = createRange(document); 37 | let _ = createTextNode("Very reasonable!", document); 38 | let _ = createTreeWalker(el, document); 39 | let _ = createTreeWalkerWithWhatToShow(el, WhatToShow._All, document); 40 | let _ = createTreeWalkerWithWhatToShowFilter(el, WhatToShow.(many([_Element, _Attribute])), NodeFilter.make((_) => 0), document); 41 | let _ = elementFromPoint(0, 0, document); 42 | let _ = elementsFromPoint(0, 0, document); 43 | let _ = enableStyleSheetsForSet("my-stylesheet-set", document); 44 | let _ = exitPointerLock(document); 45 | let _ = getAnimations(document); 46 | let _ = getElementsByClassName("lstlisting", document); 47 | let _ = getElementsByTagName("code", document); 48 | let _ = getElementsByTagNameNS("http://...", "foo", document); 49 | let _ = importNode(el, document); 50 | let _ = importNodeDeep(el, document); 51 | /* TODO: These get dead code eliminated 52 | let _ = registerElement(document, "my-component"); 53 | let _ = registerElementWithOptions(document, "my-component", [%bs.raw "{}"]); 54 | */ 55 | let _ = getElementById("root", document); 56 | let _ = querySelector(".lstlisting", document); 57 | let _ = querySelectorAll(".lstlisting", document); 58 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__DomStringMap__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Webapi.Dom.DomStringMap; 3 | 4 | let dataset = 5 | document 6 | |> Document.createElement("div") 7 | |> Element.asHtmlElement 8 | |> Belt.Option.map(_, HtmlElement.dataset); 9 | 10 | let () = switch (dataset) { 11 | | Some(dataset) => 12 | set("fooKey", "barValue", dataset); 13 | dataset |> get("fooKey") |> ignore; 14 | unsafeDeleteKey("fooKey", dataset); 15 | | None => () 16 | }; 17 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__DomTokenList__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open DomTokenList; 3 | 4 | let tlist = 5 | document |> Document.createElement("div") 6 | |> Element.classList; 7 | 8 | let _ = length(tlist); 9 | let _ = item(3, tlist); 10 | 11 | add("my-class", tlist); 12 | addMany([|"my-class", "my-other-class"|], tlist); 13 | let _ = contains("my-class", tlist); 14 | forEach((item, _) => print_endline(item), tlist); 15 | remove("my-class", tlist); 16 | removeMany([|"my-class", "my-other-class"|], tlist); 17 | replace("my-class", "my-other-class", tlist); 18 | let _ = supports("my-class", tlist); 19 | let _ = toggle("my-class", tlist); 20 | let _ = toggleForced("my-class", tlist); 21 | let _ = toString(tlist); 22 | let _ = value(tlist); 23 | let _ = setValue(tlist, "foo"); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__DragEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open DragEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* MouseEvent */ 27 | let _ = altKey(event); 28 | let _ = button(event); 29 | let _ = buttons(event); 30 | let _ = clientX(event); 31 | let _ = clientY(event); 32 | let _ = ctrlKey(event); 33 | let _ = metaKey(event); 34 | let _ = movementX(event); 35 | let _ = movementY(event); 36 | let _ = offsetX(event); 37 | let _ = offsetY(event); 38 | let _ = pageX(event); 39 | let _ = pageY(event); 40 | let _ = region(event); 41 | let _ = relatedTarget(event); 42 | let _ = screenX(event); 43 | let _ = screenY(event); 44 | let _ = shiftKey(event); 45 | let _ = x(event); 46 | let _ = y(event); 47 | let _ = getModifierState(Alt, event); 48 | 49 | /* DragEvent */ 50 | let _ = dataTransfer(event); 51 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Element__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Element; 3 | 4 | let el = document |> Document.createElement("strong"); 5 | let el2 = document |> Document.createElement("small"); 6 | let event = PointerEvent.make("my-event"); 7 | 8 | let _ = assignedSlot(el); 9 | let _ = attributes(el); 10 | let _ = classList(el); 11 | let _ = className(el); 12 | let _ = setClassName(el, "my-class-name"); 13 | let _ = clientHeight(el); 14 | let _ = clientLeft(el); 15 | let _ = clientTop(el); 16 | let _ = clientWidth(el); 17 | let _ = id(el); 18 | let _ = setId(el, "my-id"); 19 | let _ = innerHTML(el); 20 | let _ = setInnerHTML(el, "stuff"); 21 | let _ = localName(el); 22 | let _ = namespaceURI(el); 23 | let _ = nextElementSibling(el); 24 | let _ = outerHTML(el); 25 | let _ = setOuterHTML(el, "stuff"); 26 | let _ = prefix(el); 27 | let _ = previousElementSibling(el); 28 | let _ = scrollHeight(el); 29 | let _ = scrollLeft(el); 30 | let _ = setScrollLeft(el, 0.0); 31 | let _ = scrollTop(el); 32 | let _ = setScrollTop(el, 0.0); 33 | let _ = scrollWidth(el); 34 | let _ = shadowRoot(el); 35 | let _ = slot(el); 36 | let _ = setSlot(el, "stuff"); 37 | let _ = tagName(el); 38 | 39 | let _ = attachShadow({"mode": "open"}, el); 40 | let _ = attachShadowOpen(el); 41 | let _ = attachShadowClosed(el); 42 | let _ = animate({"transform": "translateT(0px)"}, {"duration": 1000}, el); 43 | let _ = closest("input", el); 44 | let _ = createShadowRoot(el); 45 | let _ = getAttribute("href", el); 46 | let _ = getAttributeNS("http://...", "foo", el); 47 | let _ = getBoundingClientRect(el); 48 | let _ = getClientRects(el); 49 | let _ = getElementsByClassName("some-class-name", el); 50 | let _ = getElementsByTagName("pre", el); 51 | let _ = getElementsByTagNameNS("http://...", "td", el); 52 | let _ = hasAttribute("data-my-value", el); 53 | let _ = hasAttributeNS("http://...", "foo", el); 54 | let _ = hasAttributes(el); 55 | let _ = insertAdjacentElement(BeforeBegin, el2, el); 56 | let _ = insertAdjacentHTML(AfterBegin, "text", el); 57 | let _ = insertAdjacentText(AfterEnd, "text", el); 58 | let _ = matches("input", el); 59 | let _ = querySelector("input", el); 60 | let _ = querySelectorAll("input", el); 61 | let _ = releasePointerCapture(PointerEvent.pointerId(event), el); 62 | let _ = remove(el); 63 | let _ = removeAttribute("href", el); 64 | let _ = removeAttributeNS("http://...", "foo", el); 65 | let _ = requestFullscreen(el); 66 | let _ = requestPointerLock(el); 67 | let _ = scrollIntoView(el); 68 | /*let _ = scrollIntoViewNoAlignToTop(el);*/ 69 | let _ = scrollIntoViewNoAlignToTop(el); 70 | let _ = scrollIntoViewWithOptions({"block": "end", "behavior": "smooth"}, el); 71 | let _ = setAttribute("href", "http://...", el); 72 | let _ = setAttributeNS("http://...", "foo", "bar", el); 73 | let _ = setPointerCapture(PointerEvent.pointerId(event), el); 74 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__ErrorEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open ErrorEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* ErrorEvent */ 23 | let _ = message(event); 24 | let _ = filename(event); 25 | let _ = lineno(event); 26 | let _ = colno(event); 27 | let _ = error(event); 28 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__EventTarget__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open EventTarget; 3 | 4 | let target = 5 | document |> Document.createElement("strong") 6 | |> Element.asEventTarget; 7 | let event = Event.make("my-event"); 8 | let handleClick = (_) => print_endline("asd"); 9 | 10 | addEventListener("click", handleClick, target); 11 | addEventListenerWithOptions("click",handleClick, {"passive": true, "once": true, "capture": false}, target); 12 | addEventListenerUseCapture("click", handleClick, target); 13 | removeEventListener("click", handleClick, target); 14 | removeEventListenerWithOptions("click", handleClick, {"passive": true, "capture": false}, target); 15 | removeEventListenerUseCapture("click", handleClick, target); 16 | let _ = dispatchEvent(event, target); 17 | 18 | /* https://github.com/reasonml-community/bs-webapi-incubator/issues/103 */ 19 | let customEvent = CustomEvent.makeWithOptions("custom-event", {"detail": {"test": "test"}}); 20 | dispatchEvent(customEvent, target); 21 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Event__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Event; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__FocusEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open FocusEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* FocusEvent */ 27 | let _ = relatedTarget(event); 28 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__GlobalEventHandlers__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | 3 | let handleSelection = (_) => print_endline("change"); 4 | 5 | let elm = document |> Document.createElement("strong"); 6 | 7 | Element.addSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "once": true, "capture": false}, elm); 8 | Element.addSelectionChangeEventListenerUseCapture(handleSelection, elm); 9 | Element.removeSelectionChangeEventListener(handleSelection, elm); 10 | Element.removeSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "capture": false}, elm); 11 | Element.removeSelectionChangeEventListenerUseCapture(handleSelection, elm); 12 | 13 | let htmlElm = document |> Document.createElement("strong") |> HtmlElement.ofElement |> TestHelpers.unsafelyUnwrapOption; 14 | 15 | HtmlElement.addSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "once": true, "capture": false}, htmlElm); 16 | HtmlElement.addSelectionChangeEventListenerUseCapture(handleSelection, htmlElm); 17 | HtmlElement.removeSelectionChangeEventListener(handleSelection, htmlElm); 18 | HtmlElement.removeSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "capture": false}, htmlElm); 19 | HtmlElement.removeSelectionChangeEventListenerUseCapture(handleSelection, htmlElm); 20 | 21 | let htmlDoc = document |> Document.asHtmlDocument |> TestHelpers.unsafelyUnwrapOption; 22 | 23 | HtmlDocument.addSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "once": true, "capture": false}, htmlDoc); 24 | HtmlDocument.addSelectionChangeEventListenerUseCapture(handleSelection, htmlDoc); 25 | HtmlDocument.removeSelectionChangeEventListener(handleSelection, htmlDoc); 26 | HtmlDocument.removeSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "capture": false}, htmlDoc); 27 | HtmlDocument.removeSelectionChangeEventListenerUseCapture(handleSelection, htmlDoc); 28 | 29 | Window.addSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "once": true, "capture": false}, window); 30 | Window.addSelectionChangeEventListenerUseCapture(handleSelection, window); 31 | Window.removeSelectionChangeEventListener(handleSelection, window); 32 | Window.removeSelectionChangeEventListenerWithOptions(handleSelection, {"passive": true, "capture": false}, window); 33 | Window.removeSelectionChangeEventListenerUseCapture(handleSelection, window); 34 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__History__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open History; 3 | 4 | let _ = length(history); 5 | let _ = scrollRestoration(history); 6 | let _ = setScrollRestoration(history, true); 7 | let _ = state(history); 8 | 9 | back(history); 10 | forward(history); 11 | go((-2), history); 12 | pushState(state(history), "My title", "http://...", history); 13 | replaceState(state(history), "My title", "http://...", history); 14 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__HtmlDocument__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open! HtmlDocument; 3 | 4 | let el = document |> Document.createElement("strong"); 5 | let htmlDocument = 6 | document |> Document.asHtmlDocument 7 | |> TestHelpers.unsafelyUnwrapOption; 8 | 9 | let _ = activeElement(htmlDocument); 10 | let _ = body(htmlDocument); 11 | let _ = setBody(htmlDocument, el); 12 | let _ = cookie(htmlDocument); 13 | let _ = setCookie(htmlDocument, "foo=bar;reason=ml"); 14 | let _ = defaultView(htmlDocument); 15 | let _ = designMode(htmlDocument); 16 | let _ = setDesignMode(htmlDocument, On); 17 | let _ = dir(htmlDocument); 18 | let _ = setDir(htmlDocument, Ltr); 19 | let _ = domain(htmlDocument); 20 | let _ = setDomain(htmlDocument, "reason.ml"); 21 | let _ = embeds(htmlDocument); 22 | let _ = forms(htmlDocument); 23 | let _ = head(htmlDocument); 24 | let _ = images(htmlDocument); 25 | let _ = lastModified(htmlDocument); 26 | let _ = links(htmlDocument); 27 | let _ = location(htmlDocument); 28 | let _ = setLocation(htmlDocument, "http://reason.ml"); 29 | let _ = plugins(htmlDocument); 30 | let _ = readyState(htmlDocument); 31 | let _ = referrer(htmlDocument); 32 | let _ = scripts(htmlDocument); 33 | let _ = title(htmlDocument); 34 | let _ = setTitle(htmlDocument, "Reason: Rapid Expressive Systems Programming."); 35 | let _ = url(htmlDocument); 36 | 37 | close(htmlDocument); 38 | let _ = execCommand("copy", false, None, htmlDocument); 39 | let _ = getElementsByName("angry-joe", htmlDocument); 40 | let _ = getSelection(htmlDocument); 41 | let _ = hasFocus(htmlDocument); 42 | open_(htmlDocument); 43 | let _ = queryCommandEnabled("copy", htmlDocument); 44 | let _ = queryCommandIndeterm("cut", htmlDocument); 45 | let _ = queryCommandSupported("paste", htmlDocument); 46 | let _ = queryCommandValue("fontName", htmlDocument); 47 | write("Hello World!", htmlDocument); 48 | writeln("Hello Newline!", htmlDocument); 49 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__HtmlElement__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open HtmlElement; 3 | 4 | let el = 5 | document |> Document.createElement("strong") 6 | |> Element.asHtmlElement 7 | |> TestHelpers.unsafelyUnwrapOption; 8 | let el2 = 9 | document |> Document.createElement("small") 10 | |> Element.asHtmlElement 11 | |> TestHelpers.unsafelyUnwrapOption; 12 | let event = document |> Document.createEvent("my-event"); 13 | 14 | let _ = accessKey(el); 15 | let _ = setAccessKey(el, ""); 16 | let _ = accessKeyLabel(el); 17 | let _ = contentEditable(el); 18 | let _ = setContentEditable(el, Inherit); 19 | let _ = isContentEditable(el); 20 | let _ = contextMenu(el); 21 | let _ = setContextMenu(el, el2); 22 | let _ = dataset(el); 23 | let _ = dir(el); 24 | let _ = setDir(el, Rtl); 25 | let _ = draggable(el); 26 | let _ = setDraggable(el, true); 27 | let _ = dropzone(el); 28 | let _ = hidden(el); 29 | let _ = setHidden(el, true); 30 | let _ = itemScope(el); 31 | let _ = setItemScope(el, true); 32 | let _ = itemType(el); 33 | let _ = itemId(el); 34 | let _ = setItemId(el, "my-id"); 35 | let _ = itemRef(el); 36 | let _ = itemProp(el); 37 | let _ = itemValue(el); 38 | let _ = setItemValue(el, [%bs.raw "{}"]); 39 | let _ = lang(el); 40 | let _ = setLang(el, "en"); 41 | let _ = offsetHeight(el); 42 | let _ = offsetLeft(el); 43 | let _ = offsetParent(el); 44 | let _ = offsetTop(el); 45 | let _ = offsetWidth(el); 46 | let _ = spellcheck(el); 47 | let _ = setSpellcheck(el, true); 48 | let _ = style(el); 49 | /* let _ = setStyle el CSSStyleDeclaration.t; /* TODO: No way to make a CSSStyleDeclaration at the moment */*/ 50 | let _ = tabIndex(el); 51 | let _ = setTabIndex(el, 42); 52 | let _ = title(el); 53 | let _ = setTitle(el, "hovertext!"); 54 | let _ = translate(el); 55 | let _ = setTranslate(el, true); 56 | 57 | blur(el); 58 | click(el); 59 | focus(el); 60 | forceSpellCheck(el); 61 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__HtmlFormElement__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.FormData; 2 | open Webapi.Dom.HtmlFormElement; 3 | 4 | let test_data = formElement => formElement |> data |> get("foo"); 5 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__IdbVersionChangeEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open IdbVersionChangeEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* IdbVersionChangeEvent */ 23 | let _ = oldVersion(event); 24 | let _ = newVersion(event); 25 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Image__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom.Image; 2 | 3 | let imageData = make(~width=0.0, ~height=0.0); 4 | 5 | let arr = Js.Typed_array.Uint8ClampedArray.make([||]); 6 | let _ = makeWithData(~array=arr, ~width=0.0, ~height=0.0); 7 | 8 | let _ = height(imageData); 9 | let _ = width(imageData); 10 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__InputEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open InputEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* InputEvent */ 27 | let _ = data(event); 28 | let _ = isComposing(event); 29 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__KeyboardEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open! KeyboardEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* KeyboardEvent */ 27 | let _ = altKey(event); 28 | let _ = code(event); 29 | let _ = ctrlKey(event); 30 | let _ = isComposing(event); 31 | let _ = key(event); 32 | let _ = locale(event); 33 | let _ = location(event); 34 | let _ = metaKey(event); 35 | let _ = repeat(event); 36 | let _ = shiftKey(event); 37 | let _ = getModifierState(Alt, event); 38 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Location__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Location; 3 | 4 | let _ = href(location); 5 | let _ = setHref(location, "http://reason.ml"); 6 | let _ = protocol(location); 7 | let _ = setProtocol(location, "https"); 8 | let _ = host(location); 9 | let _ = setHost(location, "reason.ml"); 10 | let _ = hostname(location); 11 | let _ = setHostname(location, "reason.ml"); 12 | let _ = port(location); 13 | let _ = setPort(location, "443"); 14 | let _ = pathname(location); 15 | let _ = setPathname(location, "/reason/tools.html"); 16 | let _ = search(location); 17 | let _ = setSearch(location, "q=reasonml"); 18 | let _ = hash(location); 19 | let _ = setHash(location, "merlin-atom"); 20 | let _ = username(location); 21 | let _ = setUsername(location, "alonzo.church"); 22 | let _ = password(location); 23 | let _ = setPassword(location, "lambda-the-ultimate"); 24 | let _ = origin(location); 25 | 26 | assign("http://reason.ml", location); 27 | reload(location); 28 | reloadWithForce(location); 29 | replace("http://reason.ml", location); 30 | let _ = toString(location); 31 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__MouseEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open MouseEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* MouseEvent */ 27 | let _ = altKey(event); 28 | let _ = button(event); 29 | let _ = buttons(event); 30 | let _ = clientX(event); 31 | let _ = clientY(event); 32 | let _ = ctrlKey(event); 33 | let _ = metaKey(event); 34 | let _ = movementX(event); 35 | let _ = movementY(event); 36 | let _ = offsetX(event); 37 | let _ = offsetY(event); 38 | let _ = pageX(event); 39 | let _ = pageY(event); 40 | let _ = region(event); 41 | let _ = relatedTarget(event); 42 | let _ = screenX(event); 43 | let _ = screenY(event); 44 | let _ = shiftKey(event); 45 | let _ = x(event); 46 | let _ = y(event); 47 | let _ = getModifierState(Alt, event); 48 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__NodeList__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open NodeList; 3 | 4 | let items = document |> Document.querySelectorAll(".item"); 5 | 6 | forEach((item, _) => Js.log(item), items); 7 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Node__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Node; 3 | 4 | let node = document |> Document.createElement("strong") |> Element.rootNode; 5 | let node2 = document |> Document.createElement("small") |> Element.rootNode; 6 | let node3 = document |> Document.createElement("small") |> Element.rootNode; 7 | 8 | let _ = childNodes(node); 9 | let _ = firstChild(node); 10 | let _ = lastChild(node); 11 | let _ = nextSibling(node); 12 | let _ = nodeName(node); 13 | let _ = nodeType(node); 14 | let _ = nodeValue(node); 15 | let _ = setNodeValue(node, Js.Null.return("foo")); 16 | /* Not supported yet 17 | let _ = setNodeValue(node, "foo"); 18 | let _ = clearNodeValue(node); 19 | */ 20 | let _ = ownerDocument(node); 21 | let _ = parentNode(node); 22 | let _ = parentElement(node); 23 | let _ = previousSibling(node); 24 | let _ = rootNode(node); 25 | let _ = textContent(node); 26 | let _ = setTextContent(node, "foo"); 27 | 28 | let _ = appendChild(node2, node); 29 | let _ = cloneNode(node); 30 | let _ = cloneNodeDeep(node); 31 | let _ = compareDocumentPosition(node2, node); 32 | let _ = contains(node2, node); 33 | let _ = getRootNode(node); 34 | let _ = getRootNodeComposed(node); 35 | let _ = hasChildNodes(node); 36 | let _ = insertBefore(node2, node3, node); 37 | /***let _ = insertBefore(node2, None, node);*/ 38 | let _ = isDefaultNamespace("http://...", node); 39 | let _ = isEqualNode(node2, node); 40 | let _ = isSameNode(node2, node); 41 | let _ = lookupPrefix(node); 42 | let _ = lookupNamespaceURI("https://...", node); 43 | let _ = lookupDefaultNamespaceURI(node); 44 | let _ = normalize(node); 45 | let _ = removeChild(node2, node); 46 | let _ = replaceChild(node3, node2, node); 47 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__PageTransitionEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open PageTransitionEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* PageTransitionEvent */ 23 | let _ = persisted(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__PointerEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open PointerEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* MouseEvent */ 27 | let _ = altKey(event); 28 | let _ = button(event); 29 | let _ = buttons(event); 30 | let _ = clientX(event); 31 | let _ = clientY(event); 32 | let _ = ctrlKey(event); 33 | let _ = metaKey(event); 34 | let _ = movementX(event); 35 | let _ = movementY(event); 36 | let _ = offsetX(event); 37 | let _ = offsetY(event); 38 | let _ = pageX(event); 39 | let _ = pageY(event); 40 | let _ = region(event); 41 | let _ = relatedTarget(event); 42 | let _ = screenX(event); 43 | let _ = screenY(event); 44 | let _ = shiftKey(event); 45 | let _ = x(event); 46 | let _ = y(event); 47 | let _ = getModifierState(Alt, event); 48 | 49 | /* PointerEvent */ 50 | let _ = pointerId(event); 51 | let _ = width(event); 52 | let _ = height(event); 53 | let _ = pressure(event); 54 | let _ = tiltX(event); 55 | let _ = tiltY(event); 56 | let _ = pointerType(event); 57 | let _ = isPrimary(event); 58 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__PopStateEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open PopStateEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* PopStateEvent */ 23 | let _ = state(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__ProgressEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open ProgressEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* ProgressEvent */ 23 | let _ = lengthComputable(event); 24 | let _ = loaded(event); 25 | let _ = total(event); 26 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Range__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Range; 3 | 4 | let node = document |> Document.createElement("strong"); 5 | 6 | let range = make(); 7 | 8 | let _ = collapsed(range); 9 | let _ = commonAncestorContainer(range); 10 | let _ = endContainer(range); 11 | let _ = endOffset(range); 12 | let _ = startContainer(range); 13 | let _ = startOffset(range); 14 | 15 | setStart(node, 0, range); 16 | setEnd(node, 0, range); 17 | setStartBefore(node, range); 18 | setStartAfter(node, range); 19 | setEndBefore(node, range); 20 | setEndAfter(node, range); 21 | selectNode(node, range); 22 | selectNodeContents(node, range); 23 | collapse(range); 24 | collapseToStart(range); 25 | let _ = cloneContents(range); 26 | deleteContents(range); 27 | let _ = extractContents(range); 28 | insertNode(node, range); 29 | surroundContents(node, range); 30 | let _ = compareBoundaryPoints(0, range, range); 31 | let _ = cloneRange(range); 32 | detach(range); 33 | let _ = toString(range); 34 | let _ = comparePoint(node, 0, range); 35 | let _ = createContextualFragment("stuff", range); 36 | let _ = getBoundingClientRect(range); 37 | let _ = getClientRects(range); 38 | let _ = intersectsNode(node, range); 39 | let _ = isPointInRange(node, 0, range); 40 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__RelatedEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open RelatedEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* RelatedEvent */ 23 | let _ = relatedTarget(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Selection__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open Selection; 3 | 4 | let node = document |> Document.createElement("strong"); 5 | let sel = 6 | document |> Document.asHtmlDocument 7 | |> TestHelpers.unsafelyUnwrapOption 8 | |> HtmlDocument.getSelection; 9 | 10 | let range = Range.make(); 11 | 12 | let _ = anchorNode(sel); 13 | let _ = anchorOffset(sel); 14 | let _ = focusNode(sel); 15 | let _ = focusOffset(sel); 16 | let _ = isCollapsed(sel); 17 | let _ = rangeCount(sel); 18 | let _ = getRangeAt(0, sel); 19 | 20 | collapse(node, 0, sel); 21 | extend(node, 0, sel); 22 | collapseToStart(sel); 23 | collapseToEnd(sel); 24 | selectAllChildren(node, sel); 25 | addRange(range, sel); 26 | removeRange(range, sel); 27 | removeAllRanges(sel); 28 | deleteFromDocument(sel); 29 | setBaseAndExtent(node, 0, node, 0, sel); 30 | let _ = toString(sel); 31 | let _ = containsNode(node, sel); 32 | let _ = containsNodePartly(node, sel); 33 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__StorageEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open StorageEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* StorageEvent */ 23 | let _ = key(event); 24 | let _ = newValue(event); 25 | let _ = oldValue(event); 26 | let _ = storageArea(event); 27 | let _ = url(event); 28 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__SvgZoomEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open SvgZoomEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* SvgZoomEvent */ 27 | let _ = zoomRectScreen(event); 28 | let _ = previousScale(event); 29 | let _ = previousTranslate(event); 30 | let _ = newScale(event); 31 | let _ = newTranslate(event); 32 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Text__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | 3 | let node = 4 | document |> Document.createTextNode("text") 5 | |> Text.asNode; 6 | 7 | let text = Text.ofNode(node); 8 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__TimeEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open TimeEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* TimeEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__TouchEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open TouchEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* TouchEvent */ 27 | let _ = altKey(event); 28 | let _ = changedTouches(event); 29 | let _ = ctrlKey(event); 30 | let _ = metaKey(event); 31 | let _ = shiftKey(event); 32 | let _ = targetTouches(event); 33 | let _ = touches(event); 34 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__TrackEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open TrackEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* TrackEvent */ 23 | let _ = track(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__TransitionEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open TransitionEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* TransitionEvent */ 23 | let _ = propertyName(event); 24 | let _ = elapsedTime(event); 25 | let _ = pseudoElement(event); 26 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__UiEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open UiEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__WebGlContextEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open WebGlContextEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* WebGlContextEvent */ 23 | let _ = statusMessage(event); 24 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__WheelEvent__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | open WheelEvent; 3 | 4 | let event = make("my-event"); 5 | 6 | /* Event */ 7 | let _ = bubbles(event); 8 | let _ = cancelable(event); 9 | let _ = composed(event); 10 | let _ = currentTarget(event); 11 | let _ = defaultPrevented(event); 12 | let _ = eventPhase(event); 13 | let _ = target(event); 14 | let _ = timeStamp(event); 15 | let _ = type_(event); 16 | let _ = isTrusted(event); 17 | 18 | preventDefault(event); 19 | stopImmediatePropagation(event); 20 | stopPropagation(event); 21 | 22 | /* UIEvent */ 23 | let _ = detail(event); 24 | let _ = view(event); 25 | 26 | /* MouseEvent */ 27 | let _ = clientX(event); 28 | 29 | /* WheelEvent */ 30 | let _ = deltaX(event); 31 | let _ = deltaY(event); 32 | let _ = deltaZ(event); 33 | let _ = deltaMode(event); 34 | -------------------------------------------------------------------------------- /tests/Webapi/Dom/Webapi__Dom__Window__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Dom; 2 | 3 | let el = document |> Document.createElement("strong"); 4 | let event = document |> Document.createEvent("my-event"); 5 | let handleClick = (_) => print_endline("asd"); 6 | 7 | let _ = Window.console(window); 8 | let _ = Window.crypto(window); 9 | let _ = Window.document(window); 10 | let _ = Window.frameElement(window); 11 | let _ = Window.frames(window); 12 | let _ = Window.fullScreen(window); 13 | let _ = Window.history(window); 14 | let _ = Window.innerWidth(window); 15 | let _ = Window.innerHeight(window); 16 | let _ = Window.isSecureContext(window); 17 | let _ = Window.length(window); 18 | let _ = Window.location(window); 19 | let _ = Window.setLocation(window, "http://reason.ml"); 20 | let _ = Window.locationbar(window); 21 | let _ = Window.menubar(window); 22 | let _ = Window.name(window); 23 | let _ = Window.setName(window, "new name"); 24 | let _ = Window.navigator(window); 25 | let _ = Window.opener(window); 26 | let _ = Window.outerWidth(window); 27 | let _ = Window.outerHeight(window); 28 | let _ = Window.pageXOffset(window); 29 | let _ = Window.pageYOffset(window); 30 | let _ = Window.parent(window); 31 | let _ = Window.performance(window); 32 | let _ = Window.personalbar(window); 33 | let _ = Window.screen(window); 34 | let _ = Window.screenX(window); 35 | let _ = Window.screenY(window); 36 | let _ = Window.scrollbars(window); 37 | let _ = Window.scrollX(window); 38 | let _ = Window.scrollY(window); 39 | let _ = Window.self(window); 40 | let _ = Window.speechSynthesis(window); 41 | let _ = Window.status(window); 42 | let _ = Window.setStatus(window, "new status"); 43 | let _ = Window.statusbar(window); 44 | let _ = Window.toolbar(window); 45 | let _ = Window.top(window); 46 | let _ = Window.window(window); 47 | 48 | Window.alert("hello!", window); 49 | Window.blur(window); 50 | let idleId = Window.requestIdleCallback((_) => (), window); /* out of order */ 51 | Window.cancelIdleCallback(idleId, window); 52 | Window.close(window); 53 | let _ = Window.confirm("is ok?", window); 54 | Window.focus(window); 55 | let _ = Window.getComputedStyle(el, window); 56 | let _ = Window.getComputedStyleWithPseudoElement(el, "hover", window); 57 | let _ = Window.getSelection(window); 58 | let _ = Window.matchMedia("max-height: 400", window); 59 | let _ = Window.moveBy(10, (-10), window); 60 | let _ = Window.moveTo(120, 300, window); 61 | let _ = Window.open_(~url="http://...", ~name="my window", ~features="menubar=yes", window); 62 | let _ = Window.open_(~url="http://...", ~name="my window", window); 63 | Window.postMessage("my message", "*", window) /* Currently no way to make transferables */; /*Window.postMessageWithTransfers "my message" "*" transfers window;*/ 64 | Window.print(window); 65 | let _ = Window.prompt("type you password, please?", window); 66 | let _ = Window.promptWithDefault("type password or use this?", "password", window); 67 | let _ = Window.requestIdleCallbackWithOptions((_) => (), {"timeout": 1000}, window); 68 | let _ = Window.resizeBy(10, (-10), window); 69 | let _ = Window.resizeTo(120, 300, window); 70 | let _ = Window.scroll(0.0, 0.0, window); 71 | let _ = Window.scrollBy(10.0, (-10.0), window); 72 | let _ = Window.scrollTo(120.5, 300.3, window); 73 | Window.stop(window); 74 | Window.setOnLoad(window, () => print_endline("load")); 75 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__Base64__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Base64; 2 | 3 | let _ = atob("foo"); 4 | let _ = btoa("gibberish"); 5 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__Blob__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Blob; 2 | 3 | let test_arrayBuffer = blob => blob |> arrayBuffer |> Js.Promise.then_(buffer => 4 | buffer 5 | |> Js.Typed_array.ArrayBuffer.byteLength 6 | |> Js.log 7 | |> Js.Promise.resolve); 8 | 9 | let test_size = blob => blob |> size |> Js.log; 10 | 11 | let test_slice = blob => test_size(slice(~start=0, blob)); 12 | 13 | let test_stream = blob => blob |> stream; 14 | 15 | let test_text = blob => blob |> text |> Js.Promise.then_(string => 16 | string 17 | |> Js.log 18 | |> Js.Promise.resolve); 19 | 20 | let test_type = blob => blob |> type_ |> Js.log; 21 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__File__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.File; 2 | 3 | let test_lastModified = file => file |> lastModified |> Js.log; 4 | let test_name = file => file |> name |> Js.log; 5 | let test_preview = file => file |> preview |> Js.log; 6 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__Performace__test.re: -------------------------------------------------------------------------------- 1 | let _ = 2 | Webapi.Dom.window 3 | |> Webapi.Dom.Window.performance 4 | |> Webapi.Performance.now; 5 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__ReadableStream__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.ReadableStream; 2 | 3 | module DefaultReader__test = { 4 | open! DefaultReader; 5 | 6 | let test_closed = reader => closed(reader); 7 | 8 | let test_cancel = reader => 9 | reader 10 | |> cancel 11 | |> Js.Promise.then_(() => 12 | "cancelled" 13 | |> Js.log 14 | |> Js.Promise.resolve); 15 | 16 | let test_cancelWith = reader => 17 | reader 18 | |> cancelWith("reason") 19 | |> Js.Promise.then_(reason => 20 | reason 21 | |> Js.log 22 | |> Js.Promise.resolve); 23 | 24 | let test_releaseLock = reader => releaseLock(reader); 25 | 26 | let test_read = reader => 27 | reader 28 | |> read 29 | |> Js.Promise.then_(next => 30 | next 31 | |> Fetch__Iterator.Next.value 32 | |> Belt.Option.forEach(_, Js.log) 33 | |> Js.Promise.resolve); 34 | }; 35 | 36 | let test_locked = stream => locked(stream); 37 | 38 | let test_cancel = stream => cancel(stream); 39 | 40 | let test_cancelWith = stream => cancelWith("reason", stream); 41 | 42 | let test_getReader = stream => getReader(stream); 43 | 44 | let test_getReaderBYOB = stream => getReaderBYOB(stream); 45 | 46 | let test_tee = stream => { 47 | let (stream1, stream2) = tee(stream); 48 | 49 | stream1 |> cancel |> ignore; 50 | stream2 |> cancel |> ignore; 51 | }; 52 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__ResizeObserver__test.re: -------------------------------------------------------------------------------- 1 | let el = Webapi.Dom.document |> Webapi.Dom.Document.createElement("strong"); 2 | 3 | let handler = (entries) => { 4 | let entry = entries[0]; 5 | let _: Dom.domRect = Webapi.ResizeObserver.ResizeObserverEntry.contentRect(entry); 6 | let _: Dom.element = Webapi.ResizeObserver.ResizeObserverEntry.target(entry); 7 | } 8 | 9 | let observer = Webapi.ResizeObserver.make(handler); 10 | 11 | Webapi.ResizeObserver.observe(observer, el); 12 | Webapi.ResizeObserver.unobserve(observer, el); 13 | Webapi.ResizeObserver.disconnect(observer); 14 | -------------------------------------------------------------------------------- /tests/Webapi/Webapi__Url__test.re: -------------------------------------------------------------------------------- 1 | open Webapi.Url; 2 | 3 | let params = URLSearchParams.make("key1=value1&key2=value2"); 4 | URLSearchParams.forEach(Js.log2, params); 5 | let test_entries = params => params |> URLSearchParams.entries |> Js.Array.from; 6 | Js.log(test_entries(params)); 7 | -------------------------------------------------------------------------------- /tests/testHelpers.re: -------------------------------------------------------------------------------- 1 | let unsafelyUnwrapOption = 2 | fun | Some(v) => v 3 | | None => raise(Invalid_argument("Passed `None` to unsafelyUnwrapOption")); 4 | --------------------------------------------------------------------------------