Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions rescript.json
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@
"AbortController",
"AbortSignal",
"Event",
"EventType",
"EventTarget",
"ExtendableEvent"
]
Expand Down
2 changes: 1 addition & 1 deletion src/Canvas/CanvasTypes.res
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ TODO: mark as private once mutating fields of private records is allowed
*/
@editor.completeFrom(OffscreenCanvas)
type offscreenCanvas = {
...EventTypes.eventTarget,
...EventTarget.t,
/**
These attributes return the dimensions of the OffscreenCanvas object's bitmap.

Expand Down
2 changes: 1 addition & 1 deletion src/ChannelMessaging/ChannelMessagingTypes.res
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This Channel Messaging API interface represents one of the two ports of a Messag
*/
@editor.completeFrom(MessagePort)
type messagePort = private {
...EventTypes.eventTarget,
...EventTarget.t,
}

type structuredSerializeOptions = {mutable transfer?: array<Dict.t<string>>}
2 changes: 1 addition & 1 deletion src/Clipboard/ClipboardTypes.res
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type clipboardItem = private {
*/
@editor.completeFrom(WebApiClipboard)
type clipboard = private {
...EventTypes.eventTarget,
...EventTarget.t,
}

type clipboardItemOptions = {mutable presentationStyle?: presentationStyle}
4 changes: 2 additions & 2 deletions src/CredentialManagement/CredentialManagementTypes.res
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ type publicKeyCredentialRequestOptions = {

type credentialRequestOptions = {
mutable mediation?: credentialMediationRequirement,
mutable signal?: EventTypes.abortSignal,
mutable signal?: AbortSignal.t,
mutable publicKey?: publicKeyCredentialRequestOptions,
}

Expand Down Expand Up @@ -133,6 +133,6 @@ type publicKeyCredentialCreationOptions = {
}

type credentialCreationOptions = {
mutable signal?: EventTypes.abortSignal,
mutable signal?: AbortSignal.t,
mutable publicKey?: publicKeyCredentialCreationOptions,
}
2 changes: 1 addition & 1 deletion src/DOM/Document.res
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ external createAttributeNS: (
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Document/createEvent)
*/
@send
external createEvent: (DomTypes.document, string) => EventTypes.event = "createEvent"
external createEvent: (DomTypes.document, string) => Event.t = "createEvent"

/**
Returns an empty range object that has both of its boundary points positioned at the beginning of the document.
Expand Down
70 changes: 0 additions & 70 deletions src/DOM/DomGlobal.res
Original file line number Diff line number Diff line change
Expand Up @@ -294,76 +294,6 @@ external requestAnimationFrame: (float => unit) => int = "requestAnimationFrame"
*/
external cancelAnimationFrame: int => unit = "cancelAnimationFrame"

/**
Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
*/
external addEventListener: (
EventTypes.eventType,
EventTypes.eventListener<'event>,
~options: EventTypes.addEventListenerOptions=?,
) => unit = "addEventListener"

/**
Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.

When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.

When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners.

When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.

If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.

The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
*/
external addEventListenerWithCapture: (
EventTypes.eventType,
EventTypes.eventListener<'event>,
@as(json`true`) _,
) => unit = "addEventListener"

/**
Removes the event listener in target's event listener list with the same type, callback, and options.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
*/
external removeEventListener: (
EventTypes.eventType,
EventTypes.eventListener<'event>,
~options: EventTypes.eventListenerOptions=?,
) => unit = "removeEventListener"

/**
Removes the event listener in target's event listener list with the same type, callback, and options.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
*/
external removeEventListenerUseCapture: (
EventTypes.eventType,
EventTypes.eventListener<'event>,
@as(json`true`) _,
) => unit = "removeEventListener"

/**
Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
*/
external dispatchEvent: EventTypes.event => bool = "dispatchEvent"

/**
Closes the window.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/close)
Expand Down
3 changes: 1 addition & 2 deletions src/DOM/DomTypes.res
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
@@warning("-30")

type domStringList = DOM.domStringList
type eventTarget = EventTypes.eventTarget
type eventType = EventTypes.eventType
type eventTarget = EventTarget.t
type file = FileTypes.file
type blob = FileTypes.blob
type fileSystemEntry = FileAndDirectoryEntriesTypes.fileSystemEntry
Expand Down
4 changes: 2 additions & 2 deletions src/DOM/Element.res
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ module Impl = (
) => {
include Node.Impl({type t = T.t})

external asElement: T.t => DomTypes.element = "%identity"

/**
Inserts nodes just after node, while replacing strings in nodes with equivalent Text nodes.

Expand Down Expand Up @@ -505,3 +503,5 @@ Returns true if qualifiedName is now present, and false otherwise.
include Impl({type t = DomTypes.element})

let isInstanceOf = (_: 't): bool => %raw(`param instanceof Element`)

include EventTarget.Impl({type t = DomTypes.element})
4 changes: 2 additions & 2 deletions src/DOM/Window.res
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ include EventTarget.Impl({type t = t})
external current: t = "window"

/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/window)
*/
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/window)
*/
@get
external window: t => t = "window"

Expand Down
6 changes: 4 additions & 2 deletions src/Event/AbortController.res
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortController)
*/
type t = EventTypes.abortController = private {...EventTypes.abortController}

@new
external make: unit => EventTypes.abortController = "AbortController"
external make: unit => t = "AbortController"

/**
Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortController/abort)
*/
@send
external abort: (EventTypes.abortController, ~reason: JSON.t=?) => unit = "abort"
external abort: (t, ~reason: JSON.t=?) => unit = "abort"
12 changes: 7 additions & 5 deletions src/Event/AbortSignal.res
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
include EventTarget.Impl({type t = EventTypes.abortSignal})
type t = EventTypes.abortSignal = private {...EventTypes.abortSignal}

include EventTarget.Impl({type t = t})

/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static)
*/
@scope("AbortSignal")
external abort: (~reason: JSON.t=?) => EventTypes.abortSignal = "abort"
external abort: (~reason: JSON.t=?) => t = "abort"

/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static)
*/
@scope("AbortSignal")
external timeout: int => EventTypes.abortSignal = "timeout"
external timeout: int => t = "timeout"

/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/any_static)
*/
@scope("AbortSignal")
external any: array<EventTypes.abortSignal> => EventTypes.abortSignal = "any"
external any: array<t> => t = "any"

/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted)
*/
@send
external throwIfAborted: EventTypes.abortSignal => unit = "throwIfAborted"
external throwIfAborted: t => unit = "throwIfAborted"
65 changes: 57 additions & 8 deletions src/Event/Event.res
Original file line number Diff line number Diff line change
@@ -1,23 +1,72 @@
/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event)
*/
type t = EventTypes.event = private {...EventTypes.event}

type eventTarget = EventTypes.eventTarget = private {...EventTypes.eventTarget}

type eventListener<'event> = EventTypes.eventListener<'event>

type eventListenerOptions = EventTypes.eventListenerOptions = {mutable capture?: bool}

type abortSignal = EventTypes.abortSignal = private {...EventTypes.abortSignal}

type eventInit = EventTypes.eventInit = {
mutable bubbles?: bool,
mutable cancelable?: bool,
mutable composed?: bool,
}

type addEventListenerOptions = EventTypes.addEventListenerOptions = {
...eventListenerOptions,
mutable passive?: bool,
mutable once?: bool,
mutable signal?: abortSignal,
}

@new
external make: (~type_: string, ~eventInitDict: EventTypes.eventInit=?) => EventTypes.event =
"Event"
external make: (~type_: string, ~eventInitDict: eventInit=?) => t = "Event"

@get
external type_: t => EventType.t = "type"

@get
external target: t => Null.t<eventTarget> = "target"

@get
external currentTarget: t => Null.t<eventTarget> = "currentTarget"

@get
external eventPhase: t => int = "eventPhase"

@get
external bubbles: t => bool = "bubbles"

@get
external cancelable: t => bool = "cancelable"

@get
external defaultPrevented: t => bool = "defaultPrevented"

@get
external composed: t => bool = "composed"

@get
external isTrusted: t => bool = "isTrusted"

@get
external timeStamp: t => float = "timeStamp"

module Impl = (
T: {
type t
},
) => {
external asEvent: T.t => EventTypes.event = "%identity"
external asEvent: T.t => t = "%identity"

/**
Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget.
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event/composedPath)
*/
@send
external composedPath: T.t => array<EventTypes.eventTarget> = "composedPath"
external composedPath: T.t => array<eventTarget> = "composedPath"

/**
If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.
Expand All @@ -41,4 +90,4 @@ When dispatched in a tree, invoking this method prevents event from reaching any
external stopPropagation: T.t => unit = "stopPropagation"
}

include Impl({type t = EventTypes.event})
include Impl({type t = t})
30 changes: 15 additions & 15 deletions src/Event/EventTarget.res
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
/**
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget)
*/
type t = EventTypes.eventTarget = private {...EventTypes.eventTarget}

@new
external make: unit => EventTypes.eventTarget = "EventTarget"
external make: unit => t = "EventTarget"

module Impl = (
T: {
type t
},
) => {
external asEventTarget: T.t => EventTypes.eventTarget = "%identity"

/**
Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.

Expand All @@ -30,9 +30,9 @@ The event listener is appended to target's event listener list and is not append
@send
external addEventListener: (
T.t,
EventTypes.eventType,
EventTypes.eventListener<'event>,
~options: EventTypes.addEventListenerOptions=?,
EventType.t,
Event.eventListener<'event>,
~options: Event.addEventListenerOptions=?,
) => unit = "addEventListener"

/**
Expand All @@ -54,8 +54,8 @@ The event listener is appended to target's event listener list and is not append
@send
external addEventListenerWithCapture: (
T.t,
EventTypes.eventType,
EventTypes.eventListener<'event>,
EventType.t,
Event.eventListener<'event>,
@as(json`true`) _,
) => unit = "addEventListener"

Expand All @@ -66,9 +66,9 @@ Removes the event listener in target's event listener list with the same type, c
@send
external removeEventListener: (
T.t,
EventTypes.eventType,
EventTypes.eventListener<'event>,
~options: EventTypes.eventListenerOptions=?,
EventType.t,
Event.eventListener<'event>,
~options: Event.eventListenerOptions=?,
) => unit = "removeEventListener"

/**
Expand All @@ -78,8 +78,8 @@ Removes the event listener in target's event listener list with the same type, c
@send
external removeEventListenerUseCapture: (
T.t,
EventTypes.eventType,
EventTypes.eventListener<'event>,
EventType.t,
Event.eventListener<'event>,
@as(json`true`) _,
) => unit = "removeEventListener"

Expand All @@ -88,7 +88,7 @@ Dispatches a synthetic event event to target and returns true if either event's
[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
*/
@send
external dispatchEvent: (T.t, EventTypes.event) => bool = "dispatchEvent"
external dispatchEvent: (T.t, Event.t) => bool = "dispatchEvent"
}

include Impl({type t = EventTypes.eventTarget})
include Impl({type t = t})
Loading