157 lines
3.7 KiB
OCaml
157 lines
3.7 KiB
OCaml
|
type Comment := {
|
||
|
data: String,
|
||
|
length: Number,
|
||
|
nodeName: "#comment",
|
||
|
nodeType: 8,
|
||
|
nodeValue: String,
|
||
|
ownerDoucment: null | Document,
|
||
|
|
||
|
toString: (this: Comment) => String
|
||
|
}
|
||
|
|
||
|
type DOMText := {
|
||
|
data: String,
|
||
|
type: "DOMTextNode",
|
||
|
length: Number,
|
||
|
nodeType: 3,
|
||
|
|
||
|
toString: (this: DOMText) => String,
|
||
|
replaceChild: (
|
||
|
this: DOMText,
|
||
|
index: Number,
|
||
|
length: Number,
|
||
|
value: String
|
||
|
) => void
|
||
|
}
|
||
|
|
||
|
type DOMNode := DOMText | DOMElement | DocumentFragment
|
||
|
type DOMChild := DOMText | DOMElement
|
||
|
|
||
|
type DOMElement := {
|
||
|
tagName: String,
|
||
|
className: String,
|
||
|
dataset: Object<String, Any>,
|
||
|
childNodes: Array<DOMChild>,
|
||
|
parentNode: null | DOMElement,
|
||
|
style: Object<String, String>,
|
||
|
type: "DOMElement",
|
||
|
nodeType: 1,
|
||
|
ownerDoucment: null | Document,
|
||
|
namespaceURI: null | String,
|
||
|
|
||
|
appendChild: (this: DOMElement, child: DOMChild) => DOMChild,
|
||
|
replaceChild:(
|
||
|
this: DOMElement,
|
||
|
elem: DOMChild,
|
||
|
needle: DOMChild
|
||
|
) => DOMChild,
|
||
|
removeChild: (this: DOMElement, child: DOMChild) => DOMChild,
|
||
|
insertBefore: (
|
||
|
this: DOMElement,
|
||
|
elem: DOMChild,
|
||
|
needle: DOMChild | null | undefined
|
||
|
) => DOMChild,
|
||
|
addEventListener: addEventListener,
|
||
|
dispatchEvent: dispatchEvent,
|
||
|
focus: () => void,
|
||
|
toString: (this: DOMElement) => String,
|
||
|
getElementsByClassName: (
|
||
|
this: DOMElement,
|
||
|
className: String
|
||
|
) => Array<DOMElement>,
|
||
|
getElementsByTagName: (
|
||
|
this: DOMElement,
|
||
|
tagName: String
|
||
|
) => Array<DOMElement>,
|
||
|
}
|
||
|
|
||
|
type DocumentFragment := {
|
||
|
childNodes: Array<DOMChild>,
|
||
|
parentNode: null | DOMElement,
|
||
|
type: "DocumentFragment",
|
||
|
nodeType: 11,
|
||
|
nodeName: "#document-fragment",
|
||
|
ownerDoucment: Document | null,
|
||
|
|
||
|
appendChild: (this: DocumentFragment, child: DOMChild),
|
||
|
replaceChild:
|
||
|
(this: DocumentFragment, elem: DOMChild, needle: DOMChild),
|
||
|
removeChild: (this: DocumentFragment, child: DOMChild),
|
||
|
toString: (this: DocumentFragment) => String
|
||
|
}
|
||
|
|
||
|
type Document := {
|
||
|
body: DOMElement,
|
||
|
childNodes: Array<DOMChild>,
|
||
|
documentElement: DOMElement,
|
||
|
nodeType: 9,
|
||
|
|
||
|
createComment: (this: Document, data: String) => Commment,
|
||
|
createTextNode: (this: Document, value: String) => DOMText,
|
||
|
createElement: (this: Document, tagName: String) => DOMElement,
|
||
|
createElementNS: (
|
||
|
this: Document,
|
||
|
namespace: String | null,
|
||
|
tagName: String
|
||
|
) => DOMElement,
|
||
|
createDocumentFragment: (this: Document) => DocumentFragment,
|
||
|
createEvent: () => Event,
|
||
|
getElementById: (
|
||
|
this: Document,
|
||
|
id: String,
|
||
|
) => null | DOMElement,
|
||
|
getElementsByClassName: (
|
||
|
this: Document,
|
||
|
className: String
|
||
|
) => Array<DOMElement>,
|
||
|
getElementsByTagName: (
|
||
|
this: Document,
|
||
|
tagName: String
|
||
|
) => Array<DOMElement>
|
||
|
}
|
||
|
|
||
|
type Event := {
|
||
|
type: String,
|
||
|
bubbles: Boolean,
|
||
|
cancelable: Boolean,
|
||
|
|
||
|
initEvent: (
|
||
|
this: Event,
|
||
|
type: String,
|
||
|
bubbles: Boolean,
|
||
|
cancelable: Boolean
|
||
|
) => void
|
||
|
}
|
||
|
|
||
|
type addEventListener := (
|
||
|
this: DOMElement,
|
||
|
type: String,
|
||
|
listener: Listener
|
||
|
) => void
|
||
|
|
||
|
type dispatchEvent := (
|
||
|
this: DOMElement,
|
||
|
ev: Event
|
||
|
)
|
||
|
|
||
|
min-document/event/add-event-listener := addEventListener
|
||
|
|
||
|
min-document/event/dispatch-event := dispatchEvent
|
||
|
|
||
|
min-document/document := () => Document
|
||
|
|
||
|
min-document/dom-element :=
|
||
|
(tagName: String, owner?: Document, namespace?: String | null) => DOMElement
|
||
|
|
||
|
min-document/dom-fragment :=
|
||
|
(owner?: Document) => DocumentFragment
|
||
|
|
||
|
min-document/dom-text :=
|
||
|
(value: String, owner?: Document) => DOMText
|
||
|
|
||
|
min-document/event := () => Event
|
||
|
|
||
|
min-document/serialize := (DOMElement) => String
|
||
|
|
||
|
min-document := Document
|