From 7b0eafb589d4fa7b01d4ca2974d8eb54b5bec1ca Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 2 Aug 2015 19:18:48 +0100 Subject: [PATCH 1/3] Initial work on a more complete library --- bower.json | 9 +- docs/DOM.md | 35 - docs/DOM/File.md | 37 -- docs/DOM/XHR.md | 29 - gulpfile.js | 23 +- src/DOM.purs | 12 +- src/DOM/Event/Event.js | 54 ++ src/DOM/Event/Event.purs | 67 ++ src/DOM/Event/EventPhase.purs | 48 ++ src/DOM/Event/EventTarget.js | 44 ++ src/DOM/Event/EventTarget.purs | 27 + src/DOM/Event/Types.js | 12 + src/DOM/Event/Types.purs | 733 +++++++++++++++++++++ src/DOM/File.purs | 14 - src/DOM/HTML.js | 8 + src/DOM/HTML.purs | 8 + src/DOM/HTML/Document.js | 10 + src/DOM/HTML/Document.purs | 10 + src/DOM/HTML/Types.purs | 29 + src/DOM/HTML/Window.js | 10 + src/DOM/HTML/Window.purs | 8 + src/DOM/Node/ChildNode.js | 10 + src/DOM/Node/ChildNode.purs | 11 + src/DOM/Node/Document.js | 116 ++++ src/DOM/Node/Document.purs | 32 + src/DOM/Node/DocumentType.js | 14 + src/DOM/Node/DocumentType.purs | 8 + src/DOM/Node/Element.js | 71 ++ src/DOM/Node/Element.purs | 22 + src/DOM/Node/HTMLCollection.js | 26 + src/DOM/Node/HTMLCollection.purs | 21 + src/DOM/Node/Node.js | 169 +++++ src/DOM/Node/Node.purs | 113 ++++ src/DOM/Node/NodeList.js | 18 + src/DOM/Node/NodeList.purs | 17 + src/DOM/Node/NodeType.purs | 79 +++ src/DOM/Node/NonDocumentTypeChildNode.js | 12 + src/DOM/Node/NonDocumentTypeChildNode.purs | 12 + src/DOM/Node/NonElementParentNode.js | 16 + src/DOM/Node/NonElementParentNode.purs | 14 + src/DOM/Node/ParentNode.js | 36 + src/DOM/Node/ParentNode.purs | 27 + src/DOM/Node/Types.purs | 75 +++ src/DOM/XHR.purs | 11 - 44 files changed, 2009 insertions(+), 148 deletions(-) delete mode 100644 docs/DOM.md delete mode 100644 docs/DOM/File.md delete mode 100644 docs/DOM/XHR.md create mode 100644 src/DOM/Event/Event.js create mode 100644 src/DOM/Event/Event.purs create mode 100644 src/DOM/Event/EventPhase.purs create mode 100644 src/DOM/Event/EventTarget.js create mode 100644 src/DOM/Event/EventTarget.purs create mode 100644 src/DOM/Event/Types.js create mode 100644 src/DOM/Event/Types.purs delete mode 100644 src/DOM/File.purs create mode 100644 src/DOM/HTML.js create mode 100644 src/DOM/HTML.purs create mode 100644 src/DOM/HTML/Document.js create mode 100644 src/DOM/HTML/Document.purs create mode 100644 src/DOM/HTML/Types.purs create mode 100644 src/DOM/HTML/Window.js create mode 100644 src/DOM/HTML/Window.purs create mode 100644 src/DOM/Node/ChildNode.js create mode 100644 src/DOM/Node/ChildNode.purs create mode 100644 src/DOM/Node/Document.js create mode 100644 src/DOM/Node/Document.purs create mode 100644 src/DOM/Node/DocumentType.js create mode 100644 src/DOM/Node/DocumentType.purs create mode 100644 src/DOM/Node/Element.js create mode 100644 src/DOM/Node/Element.purs create mode 100644 src/DOM/Node/HTMLCollection.js create mode 100644 src/DOM/Node/HTMLCollection.purs create mode 100644 src/DOM/Node/Node.js create mode 100644 src/DOM/Node/Node.purs create mode 100644 src/DOM/Node/NodeList.js create mode 100644 src/DOM/Node/NodeList.purs create mode 100644 src/DOM/Node/NodeType.purs create mode 100644 src/DOM/Node/NonDocumentTypeChildNode.js create mode 100644 src/DOM/Node/NonDocumentTypeChildNode.purs create mode 100644 src/DOM/Node/NonElementParentNode.js create mode 100644 src/DOM/Node/NonElementParentNode.purs create mode 100644 src/DOM/Node/ParentNode.js create mode 100644 src/DOM/Node/ParentNode.purs create mode 100644 src/DOM/Node/Types.purs delete mode 100644 src/DOM/XHR.purs diff --git a/bower.json b/bower.json index 94a9fd6..8073019 100644 --- a/bower.json +++ b/bower.json @@ -18,5 +18,12 @@ "bower.json", "gulpfile.js", "package.json" - ] + ], + "dependencies": { + "purescript-unsafe-coerce": "^0.1.0", + "purescript-enums": "^0.7.0", + "purescript-foreign": "^0.7.0", + "purescript-exceptions": "~0.3.0", + "purescript-nullable": "~0.2.1" + } } diff --git a/docs/DOM.md b/docs/DOM.md deleted file mode 100644 index 81e33bc..0000000 --- a/docs/DOM.md +++ /dev/null @@ -1,35 +0,0 @@ -## Module DOM - -#### `DOM` - -``` purescript -data DOM :: ! -``` - -Effect type for DOM maniupulation - -#### `Document` - -``` purescript -data Document :: * -``` - -General type for DOM documents. - -#### `Node` - -``` purescript -data Node :: * -``` - -General type for DOM nodes. - -#### `NodeList` - -``` purescript -data NodeList :: * -``` - -General type for DOM node lists. - - diff --git a/docs/DOM/File.md b/docs/DOM/File.md deleted file mode 100644 index ce52fa5..0000000 --- a/docs/DOM/File.md +++ /dev/null @@ -1,37 +0,0 @@ -## Module DOM.File - -Types for the [W3C File API](http://dev.w3.org/2006/webapi/FileAPI/). - -#### `File` - -``` purescript -data File :: * -``` - -A `File` object instance. - -#### `FileList` - -``` purescript -data FileList :: * -``` - -A `FileList` object instance. - -#### `FileReader` - -``` purescript -data FileReader :: * -``` - -A `FileReader` object instance. - -#### `Blob` - -``` purescript -data Blob :: * -``` - -A `Blob` object instance. - - diff --git a/docs/DOM/XHR.md b/docs/DOM/XHR.md deleted file mode 100644 index 7106b56..0000000 --- a/docs/DOM/XHR.md +++ /dev/null @@ -1,29 +0,0 @@ -## Module DOM.XHR - -Types for the [WHATWG XMLHttpRequest Living Standard](https://xhr.spec.whatwg.org/#interface-formdata). - -#### `XMLHttpRequest` - -``` purescript -data XMLHttpRequest :: * -``` - -An `XMLHttpRequest` object instance. - -#### `FormData` - -``` purescript -data FormData :: * -``` - -A `FormData` object instance. - -#### `ProgressEvent` - -``` purescript -data ProgressEvent :: * -``` - -A `ProgressEvent` object instance. - - diff --git a/gulpfile.js b/gulpfile.js index 2d85ffb..e33c44a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,20 +29,21 @@ gulp.task("make", function() { return purescript.psc({ src: sources, ffi: foreigns }); }); -gulp.task("docs", ["clean-docs"], function () { - return purescript.pscDocs({ - src: sources, - docgen: { - "DOM": "docs/DOM.md", - "DOM.File": "docs/DOM/File.md", - "DOM.XHR": "docs/DOM/XHR.md" - } - }); -}); +// gulp.task("docs", ["clean-docs"], function () { +// return purescript.pscDocs({ +// src: sources, +// docgen: { +// "DOM": "docs/DOM.md", +// "DOM.File": "docs/DOM/File.md", +// "DOM.XHR": "docs/DOM/XHR.md" +// } +// }); +// }); gulp.task("dotpsci", function () { return purescript.psci({ src: sources, ffi: foreigns }) .pipe(gulp.dest(".")); }); -gulp.task("default", ["make", "docs", "dotpsci"]); +gulp.task("default", ["make", "dotpsci"]); +// gulp.task("default", ["make", "docs", "dotpsci"]); diff --git a/src/DOM.purs b/src/DOM.purs index 053627f..19570f2 100644 --- a/src/DOM.purs +++ b/src/DOM.purs @@ -1,13 +1,5 @@ module DOM where --- | Effect type for DOM maniupulation +-- | Effect type for when the DOM is being manipulated or mutable values are +-- | being read from the DOM. foreign import data DOM :: ! - --- | General type for DOM documents. -foreign import data Document :: * - --- | General type for DOM nodes. -foreign import data Node :: * - --- | General type for DOM node lists. -foreign import data NodeList :: * diff --git a/src/DOM/Event/Event.js b/src/DOM/Event/Event.js new file mode 100644 index 0000000..d8c1c34 --- /dev/null +++ b/src/DOM/Event/Event.js @@ -0,0 +1,54 @@ +/* global exports */ +"use strict"; + +// module DOM.Event.Event + +exports.bubbles = function (e) { + return e.bubbles; +}; + +exports.cancelable = function (e) { + return e.cancelable; +}; + +exports.currentTarget = function (e) { + return e.currentTarget; +}; + +exports.defaultPrevented = function (e) { + return e.defaultPrevented; +}; + +exports.eventPhaseIndex = function (e) { + return e.eventPhase; +}; + +exports.target = function (e) { + return e.target; +}; + +exports.timeStamp = function (e) { + return e.timeStamp; +}; + +exports.type_ = function (e) { + return e.type; +}; + +exports.preventDefault = function (e) { + return function () { + return e.preventDefault(); + }; +}; + +exports.stopImmediatePropagation = function (e) { + return function () { + return e.stopImmediatePropagation(); + }; +}; + +exports.stopPropagation = function (e) { + return function () { + return e.stopPropagation(); + }; +}; diff --git a/src/DOM/Event/Event.purs b/src/DOM/Event/Event.purs new file mode 100644 index 0000000..4c210b6 --- /dev/null +++ b/src/DOM/Event/Event.purs @@ -0,0 +1,67 @@ +module DOM.Event.Event + ( bubbles + , cancelable + , currentTarget + , defaultPrevented + , eventPhase + , eventPhaseIndex + , target + , timeStamp + , type_ + , preventDefault + , stopImmediatePropagation + , stopPropagation + ) where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Enum (toEnum) +import qualified Data.Maybe.Unsafe as U + +import DOM +import DOM.Event.EventPhase +import DOM.Event.Types +import DOM.Node.Types + +-- | The event type. +foreign import type_ :: Event -> EventType + +-- | The element that was the source of the event. +foreign import target :: Event -> Node + +-- | The element that the event listener was added to. +foreign import currentTarget :: Event -> Node + +-- | Indicates which phase of the event flow that is currently being processed +-- | for the event. +eventPhase :: Event -> EventPhase +eventPhase = U.fromJust <<< toEnum <<< eventPhaseIndex + +-- | The integer value for the current event phase. +foreign import eventPhaseIndex :: Event -> Int + +-- | Prevents the event from bubbling up to futher event listeners. Other event +-- | listeners on the current target will still fire. +foreign import stopPropagation :: Event -> Eff (dom :: DOM) Unit + +-- | Prevents all other listeners for the event from being called. This includes +-- | event listeners added to the current target after the current listener. +foreign import stopImmediatePropagation :: Event -> Eff (dom :: DOM) Unit + +-- | Indicates whether the event will bubble up through the DOM or not. +foreign import bubbles :: Event -> Boolean + +-- | Indicates whether the event can be cancelled. +foreign import cancelable :: Event -> Boolean + +-- | Cancels the event if it can be cancelled. +foreign import preventDefault :: Event -> Eff (dom :: DOM) Unit + +-- | Indicates whether `preventDefault` was called on the event. +foreign import defaultPrevented :: Event -> Boolean + +-- | The time in milliseconds between 01/01/1970 and when the event was +-- | dispatched. +foreign import timeStamp :: Event -> Number diff --git a/src/DOM/Event/EventPhase.purs b/src/DOM/Event/EventPhase.purs new file mode 100644 index 0000000..80e11bd --- /dev/null +++ b/src/DOM/Event/EventPhase.purs @@ -0,0 +1,48 @@ +module DOM.Event.EventPhase (EventPhase(..)) where + +import Prelude + +import Data.Enum (Enum, Cardinality(..), defaultSucc, defaultPred, toEnum, fromEnum) +import Data.Maybe (Maybe(..)) + +data EventPhase + = None + | Capturing + | AtTarget + | Bubbling + +instance eqEventPhase :: Eq EventPhase where + eq None None = true + eq Capturing Capturing = true + eq AtTarget AtTarget = true + eq Bubbling Bubbling = true + eq _ _ = false + +instance ordEventPhase :: Ord EventPhase where + compare x y = compare (fromEnumEventPhase x) (fromEnumEventPhase y) + +instance boundedEventPhase :: Bounded EventPhase where + bottom = None + top = Bubbling + +instance boundedOrdEventPhase :: BoundedOrd EventPhase + +instance enumEventPhase :: Enum EventPhase where + cardinality = Cardinality 4 + succ = defaultSucc toEnumEventPhase fromEnumEventPhase + pred = defaultPred toEnumEventPhase fromEnumEventPhase + toEnum = toEnumEventPhase + fromEnum = fromEnumEventPhase + +toEnumEventPhase :: Int -> Maybe EventPhase +toEnumEventPhase 0 = Just None +toEnumEventPhase 1 = Just Capturing +toEnumEventPhase 2 = Just AtTarget +toEnumEventPhase 3 = Just Bubbling +toEnumEventPhase _ = Nothing + +fromEnumEventPhase :: EventPhase -> Int +fromEnumEventPhase None = 0 +fromEnumEventPhase Capturing = 1 +fromEnumEventPhase AtTarget = 2 +fromEnumEventPhase Bubbling = 3 diff --git a/src/DOM/Event/EventTarget.js b/src/DOM/Event/EventTarget.js new file mode 100644 index 0000000..ece64a2 --- /dev/null +++ b/src/DOM/Event/EventTarget.js @@ -0,0 +1,44 @@ +/* global exports */ +"use strict"; + +// module DOM.Event.EventTarget + +exports.eventListener = function (fn) { + return function (event) { + return fn(event)(); + }; +}; + +exports.addEventListener = function (type) { + return function (listener) { + return function (useCapture) { + return function (target) { + return function () { + target.addEventListener(type, listener, useCapture); + return {}; + }; + }; + }; + }; +}; + +exports.removeEventListener = function (type) { + return function (listener) { + return function (useCapture) { + return function (target) { + return function () { + target.removeEventListener(type, listener, useCapture); + return {}; + }; + }; + }; + }; +}; + +exports.dispatchEvent = function (event) { + return function (target) { + return function () { + return target.dispatchEvent(event); + }; + }; +}; diff --git a/src/DOM/Event/EventTarget.purs b/src/DOM/Event/EventTarget.purs new file mode 100644 index 0000000..3d5048e --- /dev/null +++ b/src/DOM/Event/EventTarget.purs @@ -0,0 +1,27 @@ +module DOM.Event.EventTarget where + +import Prelude + +import Control.Monad.Eff (Eff()) +import Control.Monad.Eff.Exception (EXCEPTION()) + +import DOM +import DOM.Event.Types + +-- | A boxed function that can be used as an event listener. This is necessary +-- | due to the underling implementation of Eff functions. +foreign import data EventListener :: # ! -> * + +-- | Creates an EventListener from a normal PureScript Eff function. +foreign import eventListener :: forall eff a. (Event -> Eff (dom :: DOM) a) -> EventListener eff + +-- | Adds a listener to an event target. The boolean argument indicates whether +-- | the listener should be added for the "capture" phase. +foreign import addEventListener :: forall eff. EventType -> EventListener eff -> Boolean -> EventTarget -> Eff (dom :: DOM | eff) Unit + +-- | Removes a listener to an event target. The boolean argument indicates +-- | whether the listener should be removed for the "capture" phase. +foreign import removeEventListener :: forall eff. EventType -> EventListener eff -> Boolean -> EventTarget -> Eff (dom :: DOM | eff) Unit + +-- | Dispatches an event from an event target. +foreign import dispatchEvent :: forall eff. Event -> EventTarget -> Eff (dom :: DOM, err :: EXCEPTION | eff) Boolean diff --git a/src/DOM/Event/Types.js b/src/DOM/Event/Types.js new file mode 100644 index 0000000..3de90af --- /dev/null +++ b/src/DOM/Event/Types.js @@ -0,0 +1,12 @@ +/* global exports, EventTarget */ +"use strict"; + +// module DOM.Event.Types + +exports._readEventTarget = function (left) { + return function (right) { + return function (foreign) { + return foreign instanceof EventTarget ? left("Value is not an EventTarget") : right(foreign); + }; + }; +}; diff --git a/src/DOM/Event/Types.purs b/src/DOM/Event/Types.purs new file mode 100644 index 0000000..678b6b2 --- /dev/null +++ b/src/DOM/Event/Types.purs @@ -0,0 +1,733 @@ +module DOM.Event.Types + ( Event() + , EventType() + , EventTarget() + , readEventTarget + , AnimationEvent() + , animationEventToEvent + , readAnimationEvent + , AudioProcessingEvent() + , audioProcessingEventToEvent + , readAudioProcessingEvent + , BeforeInputEvent() + , beforeInputEventToEvent + , readBeforeInputEvent + , BeforeUnloadEvent() + , beforeUnloadEventToEvent + , readBeforeUnloadEvent + , BlobEvent() + , blobEventToEvent + , readBlobEvent + , ClipboardEvent() + , clipboardEventToEvent + , readClipboardEvent + , CloseEvent() + , closeEventToEvent + , readCloseEvent + , CompositionEvent() + , compositionEventToEvent + , readCompositionEvent + , CSSFontFaceLoadEvent() + , cssFontFaceLoadEventToEvent + , readCSSFontFaceLoadEvent + , CustomEvent() + , customEventToEvent + , readCustomEvent + , DeviceLightEvent() + , deviceLightEventToEvent + , readDeviceLightEvent + , DeviceMotionEvent() + , deviceMotionEventToEvent + , readDeviceMotionEvent + , DeviceOrientationEvent() + , deviceOrientationEventToEvent + , readDeviceOrientationEvent + , DeviceProximityEvent() + , deviceProximityEventToEvent + , readDeviceProximityEvent + , DOMTransactionEvent() + , domTransactionEventToEvent + , readDOMTransactionEvent + , DragEvent() + , dragEventToEvent + , readDragEvent + , EditingBeforeInputEvent() + , editingBeforeInputEventToEvent + , readEditingBeforeInputEvent + , ErrorEvent() + , errorEventToEvent + , readErrorEvent + , FetchEvent() + , fetchEventToEvent + , readFetchEvent + , FocusEvent() + , focusEventToEvent + , readFocusEvent + , GamepadEvent() + , gamepadEventToEvent + , readGamepadEvent + , HashChangeEvent() + , hashChangeEventToEvent + , readHashChangeEvent + , IDBVersionChangeEvent() + , idbVersionChangeEventToEvent + , readIDBVersionChangeEvent + , InputEvent() + , inputEventToEvent + , readInputEvent + , KeyboardEvent() + , keyboardEventToEvent + , readKeyboardEvent + , MediaStreamEvent() + , mediaStreamEventToEvent + , readMediaStreamEvent + , MessageEvent() + , messageEventToEvent + , readMessageEvent + , MouseEvent() + , mouseEventToEvent + , readMouseEvent + , MutationEvent() + , mutationEventToEvent + , readMutationEvent + , OfflineAudioCompletionEvent() + , offlineAudioCompletionEventToEvent + , readOfflineAudioCompletionEvent + , PageTransitionEvent() + , pageTransitionEventToEvent + , readPageTransitionEvent + , PointerEvent() + , pointerEventToEvent + , readPointerEvent + , PopStateEvent() + , popStateEventToEvent + , readPopStateEvent + , ProgressEvent() + , progressEventToEvent + , readProgressEvent + , RelatedEvent() + , relatedEventToEvent + , readRelatedEvent + , RTCDataChannelEvent() + , rtcDataChannelEventToEvent + , readRTCDataChannelEvent + , RTCIdentityErrorEvent() + , rtcIdentityErrorEventToEvent + , readRTCIdentityErrorEvent + , RTCIdentityEvent() + , rtcIdentityEventToEvent + , readRTCIdentityEvent + , RTCPeerConnectionIceEvent() + , rtcPeerConnectionIceEventToEvent + , readRTCPeerConnectionIceEvent + , SensorEvent() + , sensorEventToEvent + , readSensorEvent + , StorageEvent() + , storageEventToEvent + , readStorageEvent + , SVGEvent() + , svgEventToEvent + , readSVGEvent + , SVGZoomEvent() + , svgZoomEventToEvent + , readSVGZoomEvent + , TimeEvent() + , timeEventToEvent + , readTimeEvent + , TouchEvent() + , touchEventToEvent + , readTouchEvent + , TransitionEvent() + , transitionEventToEvent + , readTransitionEvent + , UIEvent() + , uiEventToEvent + , readUIEvent + , UserProximityEvent() + , userProximityEventToEvent + , readUserProximityEvent + , WheelEvent() + , wheelEventToEvent + , readWheelEvent + ) where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Either (Either(..)) +import Data.Foreign (Foreign(), F(), unsafeReadTagged) +import Data.Foreign.Class (IsForeign) +import qualified Data.Maybe.Unsafe as U + +import qualified Unsafe.Coerce as U + +import DOM +import DOM.Event.EventPhase +import DOM.Node.Types + +-- | Basic type for all DOM events. +foreign import data Event :: * + +-- | The type of strings used for event types. +newtype EventType = EventType String + +instance eqEventType :: Eq EventType where + eq (EventType x) (EventType y) = x == y + +instance ordEventType :: Ord EventType where + compare (EventType x) (EventType y) = compare x y + +-- | A DOM item that can emit events. +foreign import data EventTarget :: * + +readEventTarget :: Foreign -> F EventTarget +readEventTarget = _readEventTarget Left Right + +foreign import _readEventTarget :: (forall a b. a -> Either a b) -> (forall a b. b -> Either a b) -> Foreign -> F EventTarget + +instance isIsForeignEventTarget :: IsForeign EventTarget where + read = readEventTarget + +unsafeToEvent :: forall e. e -> Event +unsafeToEvent = U.unsafeCoerce + +foreign import data AnimationEvent :: * + +animationEventToEvent :: AnimationEvent -> Event +animationEventToEvent = unsafeToEvent + +readAnimationEvent :: Foreign -> F AnimationEvent +readAnimationEvent = unsafeReadTagged "AnimationEvent" + +instance isIsForeignAnimationEvent :: IsForeign AnimationEvent where + read = readAnimationEvent + +foreign import data AudioProcessingEvent :: * + +audioProcessingEventToEvent :: AudioProcessingEvent -> Event +audioProcessingEventToEvent = unsafeToEvent + +readAudioProcessingEvent :: Foreign -> F AudioProcessingEvent +readAudioProcessingEvent = unsafeReadTagged "AudioProcessingEvent" + +instance isIsForeignAudioProcessingEvent :: IsForeign AudioProcessingEvent where + read = readAudioProcessingEvent + +foreign import data BeforeInputEvent :: * + +beforeInputEventToEvent :: BeforeInputEvent -> Event +beforeInputEventToEvent = unsafeToEvent + +readBeforeInputEvent :: Foreign -> F BeforeInputEvent +readBeforeInputEvent = unsafeReadTagged "BeforeInputEvent" + +instance isIsForeignBeforeInputEvent :: IsForeign BeforeInputEvent where + read = readBeforeInputEvent + +foreign import data BeforeUnloadEvent :: * + +beforeUnloadEventToEvent :: BeforeUnloadEvent -> Event +beforeUnloadEventToEvent = unsafeToEvent + +readBeforeUnloadEvent :: Foreign -> F BeforeUnloadEvent +readBeforeUnloadEvent = unsafeReadTagged "BeforeUnloadEvent" + +instance isIsForeignBeforeUnloadEvent :: IsForeign BeforeUnloadEvent where + read = readBeforeUnloadEvent + +foreign import data BlobEvent :: * + +blobEventToEvent :: BlobEvent -> Event +blobEventToEvent = unsafeToEvent + +readBlobEvent :: Foreign -> F BlobEvent +readBlobEvent = unsafeReadTagged "BlobEvent" + +instance isIsForeignBlobEvent :: IsForeign BlobEvent where + read = readBlobEvent + +foreign import data ClipboardEvent :: * + +clipboardEventToEvent :: ClipboardEvent -> Event +clipboardEventToEvent = unsafeToEvent + +readClipboardEvent :: Foreign -> F ClipboardEvent +readClipboardEvent = unsafeReadTagged "ClipboardEvent" + +instance isIsForeignClipboardEvent :: IsForeign ClipboardEvent where + read = readClipboardEvent + +foreign import data CloseEvent :: * + +closeEventToEvent :: CloseEvent -> Event +closeEventToEvent = unsafeToEvent + +readCloseEvent :: Foreign -> F CloseEvent +readCloseEvent = unsafeReadTagged "CloseEvent" + +instance isIsForeignCloseEvent :: IsForeign CloseEvent where + read = readCloseEvent + +foreign import data CompositionEvent :: * + +compositionEventToEvent :: CompositionEvent -> Event +compositionEventToEvent = unsafeToEvent + +readCompositionEvent :: Foreign -> F CompositionEvent +readCompositionEvent = unsafeReadTagged "CompositionEvent" + +instance isIsForeignCompositionEvent :: IsForeign CompositionEvent where + read = readCompositionEvent + +foreign import data CSSFontFaceLoadEvent :: * + +cssFontFaceLoadEventToEvent :: CSSFontFaceLoadEvent -> Event +cssFontFaceLoadEventToEvent = unsafeToEvent + +readCSSFontFaceLoadEvent :: Foreign -> F CSSFontFaceLoadEvent +readCSSFontFaceLoadEvent = unsafeReadTagged "CSSFontFaceLoadEvent" + +instance isIsForeignCSSFontFaceLoadEvent :: IsForeign CSSFontFaceLoadEvent where + read = readCSSFontFaceLoadEvent + +foreign import data CustomEvent :: * + +customEventToEvent :: CustomEvent -> Event +customEventToEvent = unsafeToEvent + +readCustomEvent :: Foreign -> F CustomEvent +readCustomEvent = unsafeReadTagged "CustomEvent" + +instance isIsForeignCustomEvent :: IsForeign CustomEvent where + read = readCustomEvent + +foreign import data DeviceLightEvent :: * + +deviceLightEventToEvent :: DeviceLightEvent -> Event +deviceLightEventToEvent = unsafeToEvent + +readDeviceLightEvent :: Foreign -> F DeviceLightEvent +readDeviceLightEvent = unsafeReadTagged "DeviceLightEvent" + +instance isIsForeignDeviceLightEvent :: IsForeign DeviceLightEvent where + read = readDeviceLightEvent + +foreign import data DeviceMotionEvent :: * + +deviceMotionEventToEvent :: DeviceMotionEvent -> Event +deviceMotionEventToEvent = unsafeToEvent + +readDeviceMotionEvent :: Foreign -> F DeviceMotionEvent +readDeviceMotionEvent = unsafeReadTagged "DeviceMotionEvent" + +instance isIsForeignDeviceMotionEvent :: IsForeign DeviceMotionEvent where + read = readDeviceMotionEvent + +foreign import data DeviceOrientationEvent :: * + +deviceOrientationEventToEvent :: DeviceOrientationEvent -> Event +deviceOrientationEventToEvent = unsafeToEvent + +readDeviceOrientationEvent :: Foreign -> F DeviceOrientationEvent +readDeviceOrientationEvent = unsafeReadTagged "DeviceOrientationEvent" + +instance isIsForeignDeviceOrientationEvent :: IsForeign DeviceOrientationEvent where + read = readDeviceOrientationEvent + +foreign import data DeviceProximityEvent :: * + +deviceProximityEventToEvent :: DeviceProximityEvent -> Event +deviceProximityEventToEvent = unsafeToEvent + +readDeviceProximityEvent :: Foreign -> F DeviceProximityEvent +readDeviceProximityEvent = unsafeReadTagged "DeviceProximityEvent" + +instance isIsForeignDeviceProximityEvent :: IsForeign DeviceProximityEvent where + read = readDeviceProximityEvent + +foreign import data DOMTransactionEvent :: * + +domTransactionEventToEvent :: DOMTransactionEvent -> Event +domTransactionEventToEvent = unsafeToEvent + +readDOMTransactionEvent :: Foreign -> F DOMTransactionEvent +readDOMTransactionEvent = unsafeReadTagged "DOMTransactionEvent" + +instance isIsForeignDOMTransactionEvent :: IsForeign DOMTransactionEvent where + read = readDOMTransactionEvent + +foreign import data DragEvent :: * + +dragEventToEvent :: DragEvent -> Event +dragEventToEvent = unsafeToEvent + +readDragEvent :: Foreign -> F DragEvent +readDragEvent = unsafeReadTagged "DragEvent" + +instance isIsForeignDragEvent :: IsForeign DragEvent where + read = readDragEvent + +foreign import data EditingBeforeInputEvent :: * + +editingBeforeInputEventToEvent :: EditingBeforeInputEvent -> Event +editingBeforeInputEventToEvent = unsafeToEvent + +readEditingBeforeInputEvent :: Foreign -> F EditingBeforeInputEvent +readEditingBeforeInputEvent = unsafeReadTagged "EditingBeforeInputEvent" + +instance isIsForeignEditingBeforeInputEvent :: IsForeign EditingBeforeInputEvent where + read = readEditingBeforeInputEvent + +foreign import data ErrorEvent :: * + +errorEventToEvent :: ErrorEvent -> Event +errorEventToEvent = unsafeToEvent + +readErrorEvent :: Foreign -> F ErrorEvent +readErrorEvent = unsafeReadTagged "ErrorEvent" + +instance isIsForeignErrorEvent :: IsForeign ErrorEvent where + read = readErrorEvent + +foreign import data FetchEvent :: * + +fetchEventToEvent :: FetchEvent -> Event +fetchEventToEvent = unsafeToEvent + +readFetchEvent :: Foreign -> F FetchEvent +readFetchEvent = unsafeReadTagged "FetchEvent" + +instance isIsForeignFetchEvent :: IsForeign FetchEvent where + read = readFetchEvent + +foreign import data FocusEvent :: * + +focusEventToEvent :: FocusEvent -> Event +focusEventToEvent = unsafeToEvent + +readFocusEvent :: Foreign -> F FocusEvent +readFocusEvent = unsafeReadTagged "FocusEvent" + +instance isIsForeignFocusEvent :: IsForeign FocusEvent where + read = readFocusEvent + +foreign import data GamepadEvent :: * + +gamepadEventToEvent :: GamepadEvent -> Event +gamepadEventToEvent = unsafeToEvent + +readGamepadEvent :: Foreign -> F GamepadEvent +readGamepadEvent = unsafeReadTagged "GamepadEvent" + +instance isIsForeignGamepadEvent :: IsForeign GamepadEvent where + read = readGamepadEvent + +foreign import data HashChangeEvent :: * + +hashChangeEventToEvent :: HashChangeEvent -> Event +hashChangeEventToEvent = unsafeToEvent + +readHashChangeEvent :: Foreign -> F HashChangeEvent +readHashChangeEvent = unsafeReadTagged "HashChangeEvent" + +instance isIsForeignHashChangeEvent :: IsForeign HashChangeEvent where + read = readHashChangeEvent + +foreign import data IDBVersionChangeEvent :: * + +idbVersionChangeEventToEvent :: IDBVersionChangeEvent -> Event +idbVersionChangeEventToEvent = unsafeToEvent + +readIDBVersionChangeEvent :: Foreign -> F IDBVersionChangeEvent +readIDBVersionChangeEvent = unsafeReadTagged "IDBVersionChangeEvent" + +instance isIsForeignIDBVersionChangeEvent :: IsForeign IDBVersionChangeEvent where + read = readIDBVersionChangeEvent + +foreign import data InputEvent :: * + +inputEventToEvent :: InputEvent -> Event +inputEventToEvent = unsafeToEvent + +readInputEvent :: Foreign -> F InputEvent +readInputEvent = unsafeReadTagged "InputEvent" + +instance isIsForeignInputEvent :: IsForeign InputEvent where + read = readInputEvent + +foreign import data KeyboardEvent :: * + +keyboardEventToEvent :: KeyboardEvent -> Event +keyboardEventToEvent = unsafeToEvent + +readKeyboardEvent :: Foreign -> F KeyboardEvent +readKeyboardEvent = unsafeReadTagged "KeyboardEvent" + +instance isIsForeignKeyboardEvent :: IsForeign KeyboardEvent where + read = readKeyboardEvent + +foreign import data MediaStreamEvent :: * + +mediaStreamEventToEvent :: MediaStreamEvent -> Event +mediaStreamEventToEvent = unsafeToEvent + +readMediaStreamEvent :: Foreign -> F MediaStreamEvent +readMediaStreamEvent = unsafeReadTagged "MediaStreamEvent" + +instance isIsForeignMediaStreamEvent :: IsForeign MediaStreamEvent where + read = readMediaStreamEvent + +foreign import data MessageEvent :: * + +messageEventToEvent :: MessageEvent -> Event +messageEventToEvent = unsafeToEvent + +readMessageEvent :: Foreign -> F MessageEvent +readMessageEvent = unsafeReadTagged "MessageEvent" + +instance isIsForeignMessageEvent :: IsForeign MessageEvent where + read = readMessageEvent + +foreign import data MouseEvent :: * + +mouseEventToEvent :: MouseEvent -> Event +mouseEventToEvent = unsafeToEvent + +readMouseEvent :: Foreign -> F MouseEvent +readMouseEvent = unsafeReadTagged "MouseEvent" + +instance isIsForeignMouseEvent :: IsForeign MouseEvent where + read = readMouseEvent + +foreign import data MutationEvent :: * + +mutationEventToEvent :: MutationEvent -> Event +mutationEventToEvent = unsafeToEvent + +readMutationEvent :: Foreign -> F MutationEvent +readMutationEvent = unsafeReadTagged "MutationEvent" + +instance isIsForeignMutationEvent :: IsForeign MutationEvent where + read = readMutationEvent + +foreign import data OfflineAudioCompletionEvent :: * + +offlineAudioCompletionEventToEvent :: OfflineAudioCompletionEvent -> Event +offlineAudioCompletionEventToEvent = unsafeToEvent + +readOfflineAudioCompletionEvent :: Foreign -> F OfflineAudioCompletionEvent +readOfflineAudioCompletionEvent = unsafeReadTagged "OfflineAudioCompletionEvent" + +instance isIsForeignOfflineAudioCompletionEvent :: IsForeign OfflineAudioCompletionEvent where + read = readOfflineAudioCompletionEvent + +foreign import data PageTransitionEvent :: * + +pageTransitionEventToEvent :: PageTransitionEvent -> Event +pageTransitionEventToEvent = unsafeToEvent + +readPageTransitionEvent :: Foreign -> F PageTransitionEvent +readPageTransitionEvent = unsafeReadTagged "PageTransitionEvent" + +instance isIsForeignPageTransitionEvent :: IsForeign PageTransitionEvent where + read = readPageTransitionEvent + +foreign import data PointerEvent :: * + +pointerEventToEvent :: PointerEvent -> Event +pointerEventToEvent = unsafeToEvent + +readPointerEvent :: Foreign -> F PointerEvent +readPointerEvent = unsafeReadTagged "PointerEvent" + +instance isIsForeignPointerEvent :: IsForeign PointerEvent where + read = readPointerEvent + +foreign import data PopStateEvent :: * + +popStateEventToEvent :: PopStateEvent -> Event +popStateEventToEvent = unsafeToEvent + +readPopStateEvent :: Foreign -> F PopStateEvent +readPopStateEvent = unsafeReadTagged "PopStateEvent" + +instance isIsForeignPopStateEvent :: IsForeign PopStateEvent where + read = readPopStateEvent + +foreign import data ProgressEvent :: * + +progressEventToEvent :: ProgressEvent -> Event +progressEventToEvent = unsafeToEvent + +readProgressEvent :: Foreign -> F ProgressEvent +readProgressEvent = unsafeReadTagged "ProgressEvent" + +instance isIsForeignProgressEvent :: IsForeign ProgressEvent where + read = readProgressEvent + +foreign import data RelatedEvent :: * + +relatedEventToEvent :: RelatedEvent -> Event +relatedEventToEvent = unsafeToEvent + +readRelatedEvent :: Foreign -> F RelatedEvent +readRelatedEvent = unsafeReadTagged "RelatedEvent" + +instance isIsForeignRelatedEvent :: IsForeign RelatedEvent where + read = readRelatedEvent + +foreign import data RTCDataChannelEvent :: * + +rtcDataChannelEventToEvent :: RTCDataChannelEvent -> Event +rtcDataChannelEventToEvent = unsafeToEvent + +readRTCDataChannelEvent :: Foreign -> F RTCDataChannelEvent +readRTCDataChannelEvent = unsafeReadTagged "RTCDataChannelEvent" + +instance isIsForeignRTCDataChannelEvent :: IsForeign RTCDataChannelEvent where + read = readRTCDataChannelEvent + +foreign import data RTCIdentityErrorEvent :: * + +rtcIdentityErrorEventToEvent :: RTCIdentityErrorEvent -> Event +rtcIdentityErrorEventToEvent = unsafeToEvent + +readRTCIdentityErrorEvent :: Foreign -> F RTCIdentityErrorEvent +readRTCIdentityErrorEvent = unsafeReadTagged "RTCIdentityErrorEvent" + +instance isIsForeignRTCIdentityErrorEvent :: IsForeign RTCIdentityErrorEvent where + read = readRTCIdentityErrorEvent + +foreign import data RTCIdentityEvent :: * + +rtcIdentityEventToEvent :: RTCIdentityEvent -> Event +rtcIdentityEventToEvent = unsafeToEvent + +readRTCIdentityEvent :: Foreign -> F RTCIdentityEvent +readRTCIdentityEvent = unsafeReadTagged "RTCIdentityEvent" + +instance isIsForeignRTCIdentityEvent :: IsForeign RTCIdentityEvent where + read = readRTCIdentityEvent + +foreign import data RTCPeerConnectionIceEvent :: * + +rtcPeerConnectionIceEventToEvent :: RTCPeerConnectionIceEvent -> Event +rtcPeerConnectionIceEventToEvent = unsafeToEvent + +readRTCPeerConnectionIceEvent :: Foreign -> F RTCPeerConnectionIceEvent +readRTCPeerConnectionIceEvent = unsafeReadTagged "RTCPeerConnectionIceEvent" + +instance isIsForeignRTCPeerConnectionIceEvent :: IsForeign RTCPeerConnectionIceEvent where + read = readRTCPeerConnectionIceEvent + +foreign import data SensorEvent :: * + +sensorEventToEvent :: SensorEvent -> Event +sensorEventToEvent = unsafeToEvent + +readSensorEvent :: Foreign -> F SensorEvent +readSensorEvent = unsafeReadTagged "SensorEvent" + +instance isIsForeignSensorEvent :: IsForeign SensorEvent where + read = readSensorEvent + +foreign import data StorageEvent :: * + +storageEventToEvent :: StorageEvent -> Event +storageEventToEvent = unsafeToEvent + +readStorageEvent :: Foreign -> F StorageEvent +readStorageEvent = unsafeReadTagged "StorageEvent" + +instance isIsForeignStorageEvent :: IsForeign StorageEvent where + read = readStorageEvent + +foreign import data SVGEvent :: * + +svgEventToEvent :: SVGEvent -> Event +svgEventToEvent = unsafeToEvent + +readSVGEvent :: Foreign -> F SVGEvent +readSVGEvent = unsafeReadTagged "SVGEvent" + +instance isIsForeignSVGEvent :: IsForeign SVGEvent where + read = readSVGEvent + +foreign import data SVGZoomEvent :: * + +svgZoomEventToEvent :: SVGZoomEvent -> Event +svgZoomEventToEvent = unsafeToEvent + +readSVGZoomEvent :: Foreign -> F SVGZoomEvent +readSVGZoomEvent = unsafeReadTagged "SVGZoomEvent" + +instance isIsForeignSVGZoomEvent :: IsForeign SVGZoomEvent where + read = readSVGZoomEvent + +foreign import data TimeEvent :: * + +timeEventToEvent :: TimeEvent -> Event +timeEventToEvent = unsafeToEvent + +readTimeEvent :: Foreign -> F TimeEvent +readTimeEvent = unsafeReadTagged "TimeEvent" + +instance isIsForeignTimeEvent :: IsForeign TimeEvent where + read = readTimeEvent + +foreign import data TouchEvent :: * + +touchEventToEvent :: TouchEvent -> Event +touchEventToEvent = unsafeToEvent + +readTouchEvent :: Foreign -> F TouchEvent +readTouchEvent = unsafeReadTagged "TouchEvent" + +instance isIsForeignTouchEvent :: IsForeign TouchEvent where + read = readTouchEvent + +foreign import data TransitionEvent :: * + +transitionEventToEvent :: TransitionEvent -> Event +transitionEventToEvent = unsafeToEvent + +readTransitionEvent :: Foreign -> F TransitionEvent +readTransitionEvent = unsafeReadTagged "TransitionEvent" + +instance isIsForeignTransitionEvent :: IsForeign TransitionEvent where + read = readTransitionEvent + +foreign import data UIEvent :: * + +uiEventToEvent :: UIEvent -> Event +uiEventToEvent = unsafeToEvent + +readUIEvent :: Foreign -> F UIEvent +readUIEvent = unsafeReadTagged "UIEvent" + +instance isIsForeignUIEvent :: IsForeign UIEvent where + read = readUIEvent + +foreign import data UserProximityEvent :: * + +userProximityEventToEvent :: UserProximityEvent -> Event +userProximityEventToEvent = unsafeToEvent + +readUserProximityEvent :: Foreign -> F UserProximityEvent +readUserProximityEvent = unsafeReadTagged "UserProximityEvent" + +instance isIsForeignUserProximityEvent :: IsForeign UserProximityEvent where + read = readUserProximityEvent + +foreign import data WheelEvent :: * + +wheelEventToEvent :: WheelEvent -> Event +wheelEventToEvent = unsafeToEvent + +readWheelEvent :: Foreign -> F WheelEvent +readWheelEvent = unsafeReadTagged "WheelEvent" + +instance isIsForeignWheelEvent :: IsForeign WheelEvent where + read = readWheelEvent diff --git a/src/DOM/File.purs b/src/DOM/File.purs deleted file mode 100644 index 4f7ac0f..0000000 --- a/src/DOM/File.purs +++ /dev/null @@ -1,14 +0,0 @@ --- | Types for the [W3C File API](http://dev.w3.org/2006/webapi/FileAPI/). -module DOM.File where - --- | A `File` object instance. -foreign import data File :: * - --- | A `FileList` object instance. -foreign import data FileList :: * - --- | A `FileReader` object instance. -foreign import data FileReader :: * - --- | A `Blob` object instance. -foreign import data Blob :: * diff --git a/src/DOM/HTML.js b/src/DOM/HTML.js new file mode 100644 index 0000000..d10018a --- /dev/null +++ b/src/DOM/HTML.js @@ -0,0 +1,8 @@ +/* global exports, window */ +"use strict"; + +// module DOM.HTML + +exports.window = function () { + return window; +}; diff --git a/src/DOM/HTML.purs b/src/DOM/HTML.purs new file mode 100644 index 0000000..dcdfc7b --- /dev/null +++ b/src/DOM/HTML.purs @@ -0,0 +1,8 @@ +module DOM.HTML where + +import Control.Monad.Eff (Eff()) + +import DOM +import DOM.HTML.Types + +foreign import window :: forall eff. Eff (dom :: DOM | eff) Window diff --git a/src/DOM/HTML/Document.js b/src/DOM/HTML/Document.js new file mode 100644 index 0000000..035340b --- /dev/null +++ b/src/DOM/HTML/Document.js @@ -0,0 +1,10 @@ +/* global exports */ +"use strict"; + +// module DOM.HTML.Document + +exports.body = function (doc) { + return function () { + return doc.body; + }; +}; diff --git a/src/DOM/HTML/Document.purs b/src/DOM/HTML/Document.purs new file mode 100644 index 0000000..8cdaf68 --- /dev/null +++ b/src/DOM/HTML/Document.purs @@ -0,0 +1,10 @@ +module DOM.HTML.Document where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.HTML.Types + +foreign import body :: forall eff. HTMLDocument -> Eff (dom :: DOM | eff) (Nullable HTMLElement) diff --git a/src/DOM/HTML/Types.purs b/src/DOM/HTML/Types.purs new file mode 100644 index 0000000..e022924 --- /dev/null +++ b/src/DOM/HTML/Types.purs @@ -0,0 +1,29 @@ +-- http://www.w3.org/TR/html5 +module DOM.HTML.Types where + +import Prelude + +import DOM.Node.Types + +import qualified Unsafe.Coerce as U + +foreign import data Window :: * + +foreign import data HTMLDocument :: * + +htmlDocumentToDocument :: HTMLDocument -> Document +htmlDocumentToDocument = U.unsafeCoerce + +foreign import data HTMLElement :: * + +htmlElementToElement :: HTMLElement -> Element +htmlElementToElement = U.unsafeCoerce + +htmlElementToParentNode :: Element -> ParentNode +htmlElementToParentNode = U.unsafeCoerce + +htmlElementToNonDocumentTypeChildNode :: Element -> NonDocumentTypeChildNode +htmlElementToNonDocumentTypeChildNode = U.unsafeCoerce + +htmlElementToNode :: HTMLElement -> Node +htmlElementToNode = U.unsafeCoerce diff --git a/src/DOM/HTML/Window.js b/src/DOM/HTML/Window.js new file mode 100644 index 0000000..3857ec7 --- /dev/null +++ b/src/DOM/HTML/Window.js @@ -0,0 +1,10 @@ +/* global exports */ +"use strict"; + +// module DOM.HTML.Window + +exports.document = function (window) { + return function () { + return window.document; + }; +}; diff --git a/src/DOM/HTML/Window.purs b/src/DOM/HTML/Window.purs new file mode 100644 index 0000000..1a317d4 --- /dev/null +++ b/src/DOM/HTML/Window.purs @@ -0,0 +1,8 @@ +module DOM.HTML.Window where + +import Control.Monad.Eff (Eff()) + +import DOM +import DOM.HTML.Types + +foreign import document :: forall eff. Window -> Eff (dom :: DOM | eff) HTMLDocument diff --git a/src/DOM/Node/ChildNode.js b/src/DOM/Node/ChildNode.js new file mode 100644 index 0000000..19cd941 --- /dev/null +++ b/src/DOM/Node/ChildNode.js @@ -0,0 +1,10 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.ChildNode + +exports.remove = function (node) { + return function () { + return node.remove(); + }; +}; diff --git a/src/DOM/Node/ChildNode.purs b/src/DOM/Node/ChildNode.purs new file mode 100644 index 0000000..53c0728 --- /dev/null +++ b/src/DOM/Node/ChildNode.purs @@ -0,0 +1,11 @@ +module DOM.Node.ChildNode where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import DOM +import DOM.Node.Types + +-- | Removes the node from its parent. +foreign import remove :: forall eff. ChildNode -> Eff (dom :: DOM | eff) Unit diff --git a/src/DOM/Node/Document.js b/src/DOM/Node/Document.js new file mode 100644 index 0000000..abad5ab --- /dev/null +++ b/src/DOM/Node/Document.js @@ -0,0 +1,116 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.Document + +var getEffProp = function (name) { + return function (doc) { + return function () { + return doc[name]; + }; + }; +}; + +exports.url = getEffProp("URL"); +exports.documentURI = getEffProp("documentURI"); +exports.origin = getEffProp("origin"); +exports.compatMode = getEffProp("compatMode"); +exports.characterSet = getEffProp("characterSet"); +exports.contentType = getEffProp("contentType"); + +exports.doctype = getEffProp("doctype"); +exports.documentElement = getEffProp("documentElement"); + +exports.getElementsByTagName = function (localName) { + return function (doc) { + return function () { + return doc.getElementsByTagName(localName); + }; + }; +}; + +exports.getElementsByTagNameNS = function (ns) { + return function (localName) { + return function (doc) { + return function () { + return doc.getElementsByTagNameNS(ns, localName); + }; + }; + }; +}; + +exports.getElementsByClassName = function (classNames) { + return function (doc) { + return function () { + return doc.getElementsByClassName(classNames); + }; + }; +}; + +exports.createElement = function (localName) { + return function (doc) { + return function () { + return doc.createElement(localName); + }; + }; +}; + +exports.createElementNS = function (ns) { + return function (qualifiedName) { + return function (doc) { + return function () { + return doc.createElement(ns, qualifiedName); + }; + }; + }; +}; + +exports.createDocumentFragment = function (doc) { + return function () { + return doc.createDocumentFragment(); + }; +}; + +exports.createTextNode = function (data) { + return function (doc) { + return function () { + return doc.createTextNode(data); + }; + }; +}; + +exports.createComment = function (data) { + return function (doc) { + return function () { + return doc.createComment(data); + }; + }; +}; + +exports.createProcessingInstruction = function (target) { + return function (data) { + return function (doc) { + return function () { + return doc.createProcessingInstruction(target, data); + }; + }; + }; +}; + +exports.importNode = function (node) { + return function (deep) { + return function (doc) { + return function () { + return doc.importNode(node, deep); + }; + }; + }; +}; + +exports.adoptNode = function (node) { + return function (doc) { + return function () { + return doc.adoptNode(node); + }; + }; +}; diff --git a/src/DOM/Node/Document.purs b/src/DOM/Node/Document.purs new file mode 100644 index 0000000..9cffc78 --- /dev/null +++ b/src/DOM/Node/Document.purs @@ -0,0 +1,32 @@ +module DOM.Node.Document where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +foreign import url :: forall eff. Document -> Eff (dom :: DOM | eff) String +foreign import documentURI :: forall eff. Document -> Eff (dom :: DOM | eff) String +foreign import origin :: forall eff. Document -> Eff (dom :: DOM | eff) String +foreign import compatMode :: forall eff. Document -> Eff (dom :: DOM | eff) String +foreign import characterSet :: forall eff. Document -> Eff (dom :: DOM | eff) String +foreign import contentType :: forall eff. Document -> Eff (dom :: DOM | eff) String + +foreign import doctype :: forall eff. Document -> Eff (dom :: DOM | eff) (Nullable DocumentType) +foreign import documentElement :: forall eff. Document -> Eff (dom :: DOM | eff) (Nullable Element) + +foreign import getElementsByTagName :: forall eff. String -> Document -> Eff (dom :: DOM | eff) HTMLCollection +foreign import getElementsByTagNameNS :: forall eff. Nullable String -> String -> Document -> Eff (dom :: DOM | eff) HTMLCollection +foreign import getElementsByClassName :: forall eff. String -> Document -> Eff (dom :: DOM | eff) HTMLCollection + +foreign import createElement :: forall eff. String -> Document -> Eff (dom :: DOM | eff) Element +foreign import createElementNS :: forall eff. Nullable String -> String -> Document -> Eff (dom :: DOM | eff) Element +foreign import createDocumentFragment :: forall eff. Document -> Eff (dom :: DOM | eff) DocumentFragment +foreign import createTextNode :: forall eff. String -> Eff (dom :: DOM | eff) Text +foreign import createComment :: forall eff. String -> Eff (dom :: DOM | eff) Comment +foreign import createProcessingInstruction :: forall eff. String -> String -> Eff (dom :: DOM | eff) ProcessingInstruction + +foreign import importNode :: forall eff. Node -> Boolean -> Document -> Eff (dom :: DOM | eff) Node +foreign import adoptNode :: forall eff. Node -> Document -> Eff (dom :: DOM | eff) Node diff --git a/src/DOM/Node/DocumentType.js b/src/DOM/Node/DocumentType.js new file mode 100644 index 0000000..a759184 --- /dev/null +++ b/src/DOM/Node/DocumentType.js @@ -0,0 +1,14 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.DocumentType + +var getProp = function (name) { + return function (doctype) { + return doctype[name]; + }; +}; + +exports.name = getProp("name"); +exports.publicId = getProp("publicId"); +exports.systemId = getProp("systemId"); diff --git a/src/DOM/Node/DocumentType.purs b/src/DOM/Node/DocumentType.purs new file mode 100644 index 0000000..f438892 --- /dev/null +++ b/src/DOM/Node/DocumentType.purs @@ -0,0 +1,8 @@ +module DOM.Node.DocumentType where + +import DOM +import DOM.Node.Types + +foreign import name :: DocumentType -> String +foreign import publicId :: DocumentType -> String +foreign import systemId :: DocumentType -> String diff --git a/src/DOM/Node/Element.js b/src/DOM/Node/Element.js new file mode 100644 index 0000000..b2ef356 --- /dev/null +++ b/src/DOM/Node/Element.js @@ -0,0 +1,71 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.Element + +var getProp = function (name) { + return function (doctype) { + return doctype[name]; + }; +}; + +exports.namespaceURI = getProp("namespaceURI"); +exports.prefix = getProp("prefix"); +exports.localName = getProp("localName"); +exports.tagName = getProp("tagName"); + +exports.id = function (node) { + return function () { + return node.id; + }; +}; + +exports.setId = function (id) { + return function (node) { + return function () { + node.id = id; + return {}; + }; + }; +}; + +exports.className = function (node) { + return function () { + return node.className; + }; +}; + +exports.setClassName = function (className) { + return function (node) { + return function () { + node.className = className; + return {}; + }; + }; +}; + +exports.getElementsByTagName = function (localName) { + return function (doc) { + return function () { + return doc.getElementsByTagName(localName); + }; + }; +}; + +exports.getElementsByTagNameNS = function (ns) { + return function (localName) { + return function (doc) { + return function () { + return doc.getElementsByTagNameNS(ns, localName); + }; + }; + }; +}; + +exports.getElementsByClassName = function (classNames) { + return function (doc) { + return function () { + return doc.getElementsByClassName(classNames); + }; + }; +}; diff --git a/src/DOM/Node/Element.purs b/src/DOM/Node/Element.purs new file mode 100644 index 0000000..f68f7e2 --- /dev/null +++ b/src/DOM/Node/Element.purs @@ -0,0 +1,22 @@ +module DOM.Node.Element where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +foreign import namespaceURI :: Element -> Nullable String +foreign import prefix :: Element -> Nullable String +foreign import localName :: Element -> String +foreign import tagName :: Element -> String + +foreign import id :: forall eff. Element -> Eff (dom :: DOM | eff) ElementId +foreign import setId :: forall eff. ElementId -> Element -> Eff (dom :: DOM | eff) ElementId +foreign import className :: forall eff. Element -> Eff (dom :: DOM | eff) String +foreign import setClassName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) String + +foreign import getElementsByTagName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) HTMLCollection +foreign import getElementsByTagNameNS :: forall eff. Nullable String -> String -> Element -> Eff (dom :: DOM | eff) HTMLCollection +foreign import getElementsByClassName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) HTMLCollection diff --git a/src/DOM/Node/HTMLCollection.js b/src/DOM/Node/HTMLCollection.js new file mode 100644 index 0000000..70c2e13 --- /dev/null +++ b/src/DOM/Node/HTMLCollection.js @@ -0,0 +1,26 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.HTMLCollection + +exports.length = function (list) { + return function () { + return list.length; + }; +}; + +exports.item = function (index) { + return function (list) { + return function () { + return list.item(index); + }; + }; +}; + +exports.namedItem = function (name) { + return function (list) { + return function () { + return list.namedItem(name); + }; + }; +}; diff --git a/src/DOM/Node/HTMLCollection.purs b/src/DOM/Node/HTMLCollection.purs new file mode 100644 index 0000000..b2ce90c --- /dev/null +++ b/src/DOM/Node/HTMLCollection.purs @@ -0,0 +1,21 @@ +module DOM.Node.HTMLCollection where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +-- | The number of elements in a HTMLCollection. +foreign import length :: forall eff. HTMLCollection -> Eff (dom :: DOM | eff) Int + +-- | The element in a HTMLCollection at the specified index, or null if no such +-- | element exists. +foreign import item :: forall eff. Int -> HTMLCollection -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | The first element with the specified name or ID in a HTMLCollection, or +-- | null if no such element exists. +foreign import namedItem :: forall eff. ElementId -> HTMLCollection -> Eff (dom :: DOM | eff) (Nullable Element) diff --git a/src/DOM/Node/Node.js b/src/DOM/Node/Node.js new file mode 100644 index 0000000..a9bd525 --- /dev/null +++ b/src/DOM/Node/Node.js @@ -0,0 +1,169 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.Node + +var getEffProp = function (name) { + return function (node) { + return function () { + return node[name]; + }; + }; +}; + +exports.nodeTypeIndex = function (node) { + return node.nodeType; +}; + +exports.nodeName = function (node) { + return node.nodeName; +}; + +exports.baseURI = getEffProp("baseURI"); + +exports.ownerDocument = getEffProp("ownerDocument"); + +exports.parentNode = getEffProp("parentNode"); + +exports.parentElement = getEffProp("parentElement"); + +exports.hasChildNodes = function (node) { + return function () { + return node.hasChildNodes(); + }; +}; + +exports.childNodes = getEffProp("childNodes"); + +exports.firstChild = getEffProp("firstChild"); + +exports.lastChild = getEffProp("lastChild"); + +exports.previousSibling = getEffProp("previousSibling"); + +exports.nextSibling = getEffProp("nextSibling"); + +exports.nodeValue = getEffProp("nodeValue"); + +exports.setNodeValue = function (value) { + return function (node) { + return function () { + node.nodeValue = value; + return {}; + }; + }; +}; + +exports.textContent = getEffProp("textContent"); + +exports.setTextContent = function (value) { + return function (node) { + return function () { + node.nodeValue = value; + return {}; + }; + }; +}; + +exports.normalize = function (node) { + return function () { + node.normalize(); + return {}; + }; +}; + +exports.clone = function (node) { + return function () { + return node.clone(false); + }; +}; + +exports.deepClone = function (node) { + return function () { + return node.clone(false); + }; +}; + +exports.isEqualNode = function (node1) { + return function (node2) { + return function () { + return node1.isEqualNode(node2); + }; + }; +}; + +exports.compareDocumentPositionBits = function (node1) { + return function (node2) { + return function () { + return node1.compareDocumentPosition(node2); + }; + }; +}; + +exports.contains = function (node1) { + return function (node2) { + return function () { + return node1.contains(node2); + }; + }; +}; + +exports.lookupPrefix = function (prefix) { + return function (node) { + return function () { + return node.lookupPrefix(prefix); + }; + }; +}; + +exports.lookupNamespaceURI = function (ns) { + return function (node) { + return function () { + return node.lookupNamespaceURI(ns); + }; + }; +}; + +exports.lookupNamespaceURI = function (ns) { + return function (node) { + return function () { + return node.isDefaultNamespace(ns); + }; + }; +}; + +exports.insertBefore = function (node1) { + return function (node2) { + return function (parent) { + return function () { + return parent.insertBefore(node1, node2); + }; + }; + }; +}; + +exports.appendChild = function (node) { + return function (parent) { + return function () { + return parent.appendChild(node); + }; + }; +}; + +exports.replaceChild = function (oldChild) { + return function (newChild) { + return function (parent) { + return function () { + return parent.replaceChild(oldChild, newChild); + }; + }; + }; +}; + +exports.removeChild = function (node) { + return function (parent) { + return function () { + return parent.removeChild(node); + }; + }; +}; diff --git a/src/DOM/Node/Node.purs b/src/DOM/Node/Node.purs new file mode 100644 index 0000000..0eee61a --- /dev/null +++ b/src/DOM/Node/Node.purs @@ -0,0 +1,113 @@ +module DOM.Node.Node where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Enum (toEnum) +import Data.Nullable (Nullable()) +import qualified Data.Maybe.Unsafe as U + +import DOM +import DOM.Node.NodeType +import DOM.Node.Types + +-- | The type of a node. +nodeType :: Node -> NodeType +nodeType = U.fromJust <<< toEnum <<< nodeTypeIndex + +-- | The numeric value for the type of a node. +foreign import nodeTypeIndex :: Node -> Int + +-- | For elements this is the tag name, for document types this is the doctype +-- | name, for processing instructions this is the target, for all other nodes +-- | it is a string like `"#text"`, `"#comment", etc. depending on the node +-- | type. +foreign import nodeName :: Node -> String + +-- | The node's base URL. +foreign import baseURI :: forall eff. Node -> Eff (dom :: DOM | eff) String + +-- | The document the node belongs to, unless the node is a document in which +-- | case the value is null. +foreign import ownerDocument :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Document) + +-- | The parent node of the node. +foreign import parentNode :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) + +-- | The parent element of the node. +foreign import parentElement :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | Indicates whether the node has any child nodes. +foreign import hasChildNodes :: forall eff. Node -> Eff (dom :: DOM | eff) Boolean + +-- | The children of the node. +foreign import childNodes :: forall eff. Node -> Eff (dom :: DOM | eff) NodeList + +-- | The first child of the node, or null if the node has no children. +foreign import firstChild :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) + +-- | The last child of the node, or null if the node has no children. +foreign import lastChild :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) + +-- | The previous sibling node, or null if there is no previous sibling. +foreign import previousSibling :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) + +-- | The next sibling node, or null if there is no next sibling. +foreign import nextSibling :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) + +-- | If the node type is text, comment, or processing instruction this is the +-- | node's data, or null in all other cases. +foreign import nodeValue :: forall eff. Node -> Eff (dom :: DOM | eff) String + +-- | If the node type is text, comment, or processing instruction this allows +-- | the node's data to be changed, or has no effect in all other cases. +foreign import setNodeValue :: forall eff. String -> Node -> Eff (dom :: DOM | eff) Unit + +-- | If the node type is document fragment, element, text, processing +-- | instruction, or comment this is the node's data, or null in all other +-- | cases. +foreign import textContent :: forall eff. Node -> Eff (dom :: DOM | eff) String + +-- | If the node type is document fragment, element, text, processing +-- | instruction, or comment this allows the node's data to be changed, or has +-- | no effect in all other cases. +foreign import setTextContent :: forall eff. Node -> Eff (dom :: DOM | eff) String + +-- | Removes empty text nodes and then combines any remaining text nodes that +-- | are contiguous. +foreign import normalize :: forall eff. Node -> Eff (dom :: DOM | eff) Unit + +-- | Clones the node without cloning the node's descendants. +foreign import clone :: forall eff. Node -> Eff (dom :: DOM | eff) Unit + +-- | Clones the node and its descendants. +foreign import deepClone :: forall eff. Node -> Eff (dom :: DOM | eff) Unit + +-- | Checks whether two nodes are equivalent. +foreign import isEqualNode :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Boolean + +-- TODO: compareDocumentPosition that returns a semigroup or something instead of the bitmask value + +-- | Compares the position of two nodes in the document. +foreign import compareDocumentPositionBits :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Int + +-- | Checks whether the second node is contained within the first +foreign import contains :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Boolean + +foreign import lookupPrefix :: forall eff. String -> Node -> Eff (dom :: DOM | eff) (Nullable String) +foreign import lookupNamespaceURI :: forall eff. String -> Node -> Eff (dom :: DOM | eff) (Nullable String) +foreign import isDefaultNamespace :: forall eff. String -> Node -> Eff (dom :: DOM | eff) Boolean + +-- | Inserts the first node before the second as a child of the third node. +foreign import insertBefore :: forall eff. Node -> Node -> Node -> Eff (dom :: DOM | eff) Node + +-- | Appends the first node to the child node list of the second node. +foreign import appendChild :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Node + +-- | Uses the first node as a replacement for the second node in the children +-- | of the third node. +foreign import replaceChild :: forall eff. Node -> Node -> Node -> Eff (dom :: DOM | eff) Node + +-- | Removes the first node from the children of the second node. +foreign import removeChild :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Node diff --git a/src/DOM/Node/NodeList.js b/src/DOM/Node/NodeList.js new file mode 100644 index 0000000..de20425 --- /dev/null +++ b/src/DOM/Node/NodeList.js @@ -0,0 +1,18 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.NodeList + +exports.length = function (list) { + return function () { + return list.length; + }; +}; + +exports.item = function (index) { + return function (list) { + return function () { + return list.item(index); + }; + }; +}; diff --git a/src/DOM/Node/NodeList.purs b/src/DOM/Node/NodeList.purs new file mode 100644 index 0000000..f2f7267 --- /dev/null +++ b/src/DOM/Node/NodeList.purs @@ -0,0 +1,17 @@ +module DOM.Node.NodeList where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +-- | The number of items in a NodeList. +foreign import length :: forall eff. NodeList -> Eff (dom :: DOM | eff) Int + +-- | The item in a NodeList at the specified index, or null if no such node +-- | exists. +foreign import item :: forall eff. Int -> NodeList -> Eff (dom :: DOM | eff) (Nullable Node) diff --git a/src/DOM/Node/NodeType.purs b/src/DOM/Node/NodeType.purs new file mode 100644 index 0000000..7ce3f29 --- /dev/null +++ b/src/DOM/Node/NodeType.purs @@ -0,0 +1,79 @@ +module DOM.Node.NodeType (NodeType(..)) where + +import Prelude +import Data.Maybe (Maybe(..)) +import Data.Enum (Enum, Cardinality(..), defaultSucc, defaultPred, toEnum, fromEnum) + +data NodeType + = ElementNode + | AttributeNode + | TextNode + | CDATASectionNode + | EntityReferenceNode + | EntityNode + | ProcessingInstructionNode + | CommentNode + | DocumentNode + | DocumentTypeNode + | DocumentFragmentNode + | NotationNode + +instance eqNodeType :: Eq NodeType where + eq ElementNode ElementNode = true + eq AttributeNode AttributeNode = true + eq TextNode TextNode = true + eq CDATASectionNode CDATASectionNode = true + eq EntityReferenceNode EntityReferenceNode = true + eq EntityNode EntityNode = true + eq ProcessingInstructionNode ProcessingInstructionNode = true + eq CommentNode CommentNode = true + eq DocumentNode DocumentNode = true + eq DocumentTypeNode DocumentTypeNode = true + eq DocumentFragmentNode DocumentFragmentNode = true + eq NotationNode NotationNode = true + eq _ _ = false + +instance ordNodeType :: Ord NodeType where + compare x y = compare (fromEnumNodeType x) (fromEnumNodeType y) + +instance boundedNodeType :: Bounded NodeType where + bottom = ElementNode + top = NotationNode + +instance boundedOrdNodeType :: BoundedOrd NodeType + +instance enumNodeType :: Enum NodeType where + cardinality = Cardinality 4 + succ = defaultSucc toEnumNodeType fromEnumNodeType + pred = defaultPred toEnumNodeType fromEnumNodeType + toEnum = toEnumNodeType + fromEnum = fromEnumNodeType + +toEnumNodeType :: Int -> Maybe NodeType +toEnumNodeType 1 = Just ElementNode +toEnumNodeType 2 = Just AttributeNode +toEnumNodeType 3 = Just TextNode +toEnumNodeType 4 = Just CDATASectionNode +toEnumNodeType 5 = Just EntityReferenceNode +toEnumNodeType 6 = Just EntityNode +toEnumNodeType 7 = Just ProcessingInstructionNode +toEnumNodeType 8 = Just CommentNode +toEnumNodeType 9 = Just DocumentNode +toEnumNodeType 10 = Just DocumentTypeNode +toEnumNodeType 11 = Just DocumentFragmentNode +toEnumNodeType 12 = Just NotationNode +toEnumNodeType _ = Nothing + +fromEnumNodeType :: NodeType -> Int +fromEnumNodeType ElementNode = 1 +fromEnumNodeType AttributeNode = 2 +fromEnumNodeType TextNode = 3 +fromEnumNodeType CDATASectionNode = 4 +fromEnumNodeType EntityReferenceNode = 5 +fromEnumNodeType EntityNode = 6 +fromEnumNodeType ProcessingInstructionNode = 7 +fromEnumNodeType CommentNode = 8 +fromEnumNodeType DocumentNode = 9 +fromEnumNodeType DocumentTypeNode = 10 +fromEnumNodeType DocumentFragmentNode = 11 +fromEnumNodeType NotationNode = 12 diff --git a/src/DOM/Node/NonDocumentTypeChildNode.js b/src/DOM/Node/NonDocumentTypeChildNode.js new file mode 100644 index 0000000..879a44a --- /dev/null +++ b/src/DOM/Node/NonDocumentTypeChildNode.js @@ -0,0 +1,12 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.NonDocumentTypeChildNode + +exports.getElementById = function (id) { + return function (node) { + return function () { + return node.getElementById(id); + }; + }; +}; diff --git a/src/DOM/Node/NonDocumentTypeChildNode.purs b/src/DOM/Node/NonDocumentTypeChildNode.purs new file mode 100644 index 0000000..cc4d65f --- /dev/null +++ b/src/DOM/Node/NonDocumentTypeChildNode.purs @@ -0,0 +1,12 @@ +module DOM.Node.NonDocumentTypeChildNode where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +-- | The first element within node's descendants with a matching ID, or null if +-- | no such element exists. +foreign import getElementById :: forall eff. ElementId -> NonDocumentTypeChildNode -> Eff (dom :: DOM | eff) (Nullable Element) diff --git a/src/DOM/Node/NonElementParentNode.js b/src/DOM/Node/NonElementParentNode.js new file mode 100644 index 0000000..1a377b0 --- /dev/null +++ b/src/DOM/Node/NonElementParentNode.js @@ -0,0 +1,16 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.NonElementParentNode + +exports.previousElementSibling = function (node) { + return function () { + return node.previousElementSibling; + }; +}; + +exports.nextElementSibling = function (node) { + return function () { + return node.nextElementSibling; + }; +}; diff --git a/src/DOM/Node/NonElementParentNode.purs b/src/DOM/Node/NonElementParentNode.purs new file mode 100644 index 0000000..4009b18 --- /dev/null +++ b/src/DOM/Node/NonElementParentNode.purs @@ -0,0 +1,14 @@ +module DOM.Node.NonElementParentNode where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +-- | The previous sibling that is an element, or null if no such element exists. +foreign import previousElementSibling :: forall eff. NonElementParentNode -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | The next sibling that is an element, or null if no such element exists. +foreign import nextElementSibling :: forall eff. NonElementParentNode -> Eff (dom :: DOM | eff) (Nullable Element) diff --git a/src/DOM/Node/ParentNode.js b/src/DOM/Node/ParentNode.js new file mode 100644 index 0000000..fdb13e7 --- /dev/null +++ b/src/DOM/Node/ParentNode.js @@ -0,0 +1,36 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.ParentNode + +var getEffProp = function (name) { + return function (node) { + return function () { + return node[name]; + }; + }; +}; + +exports.children = getEffProp("children"); + +exports.firstElementChild = getEffProp("firstElementChild"); + +exports.lastElementChild = getEffProp("lastElementChild"); + +exports.childElementCount = getEffProp("childElementCount"); + +exports.querySelector = function (selector) { + return function (node) { + return function () { + return node.querySelector(selector); + }; + }; +}; + +exports.querySelectorAll = function (selector) { + return function (node) { + return function () { + return node.querySelectorAll(selector); + }; + }; +}; diff --git a/src/DOM/Node/ParentNode.purs b/src/DOM/Node/ParentNode.purs new file mode 100644 index 0000000..63d3461 --- /dev/null +++ b/src/DOM/Node/ParentNode.purs @@ -0,0 +1,27 @@ +module DOM.Node.ParentNode where + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + +-- | The child elements for the node. +foreign import children :: forall eff. ParentNode -> Eff (dom :: DOM | eff) HTMLCollection + +-- | The first child that is an element, or null if no such element exists. +foreign import firstElementChild :: forall eff. ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | The last child that is an element, or null if no such element exists. +foreign import lastElementChild :: forall eff. ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | The number of child elements. +foreign import childElementCount :: forall eff. ParentNode -> Eff (dom :: DOM | eff) Int + +-- | Finds the first child that is an element that matches the selector(s), or +-- | null if no such element exists. +foreign import querySelector :: forall eff. String -> ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) + +-- | Finds all the child elements that matches the selector(s). +foreign import querySelectorAll :: forall eff. String -> ParentNode -> Eff (dom :: DOM | eff) NodeList diff --git a/src/DOM/Node/Types.purs b/src/DOM/Node/Types.purs new file mode 100644 index 0000000..4e8ed5c --- /dev/null +++ b/src/DOM/Node/Types.purs @@ -0,0 +1,75 @@ +-- http://www.w3.org/TR/dom +module DOM.Node.Types where + +import Prelude + +import qualified Unsafe.Coerce as U + +foreign import data Node :: * + +foreign import data NonElementParentNode :: * +foreign import data ParentNode :: * +foreign import data NonDocumentTypeChildNode :: * +foreign import data ChildNode :: * +foreign import data NodeList :: * +foreign import data HTMLCollection :: * + +foreign import data Document :: * + +documentToNonElementParentNode :: Document -> NonElementParentNode +documentToNonElementParentNode = U.unsafeCoerce + +documentToParentNode :: Document -> ParentNode +documentToParentNode = U.unsafeCoerce + +documentToNode :: Document -> Node +documentToNode = U.unsafeCoerce + +foreign import data Element :: * + +newtype ElementId = ElementId String + +elementToParentNode :: Element -> ParentNode +elementToParentNode = U.unsafeCoerce + +elementToNonDocumentTypeChildNode :: Element -> NonDocumentTypeChildNode +elementToNonDocumentTypeChildNode = U.unsafeCoerce + +elementToNode :: Element -> Node +elementToNode = U.unsafeCoerce + +foreign import data CharacterData :: * + +characterDataToNonDocumentTypeChildNode :: CharacterData -> NonDocumentTypeChildNode +characterDataToNonDocumentTypeChildNode = U.unsafeCoerce + +foreign import data Text :: * + +textToNode :: Text -> Node +textToNode = U.unsafeCoerce + +foreign import data Comment :: * + +commentToNode :: Comment -> Node +commentToNode = U.unsafeCoerce + +foreign import data ProcessingInstruction :: * + +processingInstructionToNode :: ProcessingInstruction -> Node +processingInstructionToNode = U.unsafeCoerce + +foreign import data DocumentFragment :: * + +documentFragmentToNonElementParentNode :: DocumentFragment -> NonElementParentNode +documentFragmentToNonElementParentNode = U.unsafeCoerce + +documentFragmentToParentNode :: DocumentFragment -> ParentNode +documentFragmentToParentNode = U.unsafeCoerce + +documentFragmentToNode :: DocumentFragment -> Node +documentFragmentToNode = U.unsafeCoerce + +foreign import data DocumentType :: * + +documentTypeToNode :: DocumentType -> Node +documentTypeToNode = U.unsafeCoerce diff --git a/src/DOM/XHR.purs b/src/DOM/XHR.purs deleted file mode 100644 index 4361711..0000000 --- a/src/DOM/XHR.purs +++ /dev/null @@ -1,11 +0,0 @@ --- | Types for the [WHATWG XMLHttpRequest Living Standard](https://xhr.spec.whatwg.org/#interface-formdata). -module DOM.XHR where - --- | An `XMLHttpRequest` object instance. -foreign import data XMLHttpRequest :: * - --- | A `FormData` object instance. -foreign import data FormData :: * - --- | A `ProgressEvent` object instance. -foreign import data ProgressEvent :: * From 47f5d696bd996f175c9b79dca609f22039e29a09 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Fri, 14 Aug 2015 19:34:38 +0100 Subject: [PATCH 2/3] Regenerate docs --- docs/DOM.md | 12 + docs/DOM/Event/Event.md | 103 ++ docs/DOM/Event/EventPhase.md | 22 + docs/DOM/Event/EventTarget.md | 46 + docs/DOM/Event/Types.md | 1171 +++++++++++++++++++++ docs/DOM/HTML.md | 9 + docs/DOM/HTML/Document.md | 9 + docs/DOM/HTML/Types.md | 51 + docs/DOM/HTML/Window.md | 9 + docs/DOM/Node/ChildNode.md | 11 + docs/DOM/Node/Document.md | 117 ++ docs/DOM/Node/DocumentType.md | 21 + docs/DOM/Node/Element.md | 69 ++ docs/DOM/Node/HTMLCollection.md | 29 + docs/DOM/Node/Node.md | 247 +++++ docs/DOM/Node/NodeList.md | 20 + docs/DOM/Node/NodeType.md | 30 + docs/DOM/Node/NonDocumentTypeChildNode.md | 12 + docs/DOM/Node/NonElementParentNode.md | 19 + docs/DOM/Node/ParentNode.md | 52 + docs/DOM/Node/Types.md | 184 ++++ 21 files changed, 2243 insertions(+) create mode 100644 docs/DOM.md create mode 100644 docs/DOM/Event/Event.md create mode 100644 docs/DOM/Event/EventPhase.md create mode 100644 docs/DOM/Event/EventTarget.md create mode 100644 docs/DOM/Event/Types.md create mode 100644 docs/DOM/HTML.md create mode 100644 docs/DOM/HTML/Document.md create mode 100644 docs/DOM/HTML/Types.md create mode 100644 docs/DOM/HTML/Window.md create mode 100644 docs/DOM/Node/ChildNode.md create mode 100644 docs/DOM/Node/Document.md create mode 100644 docs/DOM/Node/DocumentType.md create mode 100644 docs/DOM/Node/Element.md create mode 100644 docs/DOM/Node/HTMLCollection.md create mode 100644 docs/DOM/Node/Node.md create mode 100644 docs/DOM/Node/NodeList.md create mode 100644 docs/DOM/Node/NodeType.md create mode 100644 docs/DOM/Node/NonDocumentTypeChildNode.md create mode 100644 docs/DOM/Node/NonElementParentNode.md create mode 100644 docs/DOM/Node/ParentNode.md create mode 100644 docs/DOM/Node/Types.md diff --git a/docs/DOM.md b/docs/DOM.md new file mode 100644 index 0000000..c7f18f1 --- /dev/null +++ b/docs/DOM.md @@ -0,0 +1,12 @@ +## Module DOM + +#### `DOM` + +``` purescript +data DOM :: ! +``` + +Effect type for when the DOM is being manipulated or mutable values are +being read from the DOM. + + diff --git a/docs/DOM/Event/Event.md b/docs/DOM/Event/Event.md new file mode 100644 index 0000000..8140b42 --- /dev/null +++ b/docs/DOM/Event/Event.md @@ -0,0 +1,103 @@ +## Module DOM.Event.Event + +#### `type_` + +``` purescript +type_ :: Event -> EventType +``` + +The event type. + +#### `target` + +``` purescript +target :: Event -> Node +``` + +The element that was the source of the event. + +#### `currentTarget` + +``` purescript +currentTarget :: Event -> Node +``` + +The element that the event listener was added to. + +#### `eventPhase` + +``` purescript +eventPhase :: Event -> EventPhase +``` + +Indicates which phase of the event flow that is currently being processed +for the event. + +#### `eventPhaseIndex` + +``` purescript +eventPhaseIndex :: Event -> Int +``` + +The integer value for the current event phase. + +#### `stopPropagation` + +``` purescript +stopPropagation :: Event -> Eff (dom :: DOM) Unit +``` + +Prevents the event from bubbling up to futher event listeners. Other event +listeners on the current target will still fire. + +#### `stopImmediatePropagation` + +``` purescript +stopImmediatePropagation :: Event -> Eff (dom :: DOM) Unit +``` + +Prevents all other listeners for the event from being called. This includes +event listeners added to the current target after the current listener. + +#### `bubbles` + +``` purescript +bubbles :: Event -> Boolean +``` + +Indicates whether the event will bubble up through the DOM or not. + +#### `cancelable` + +``` purescript +cancelable :: Event -> Boolean +``` + +Indicates whether the event can be cancelled. + +#### `preventDefault` + +``` purescript +preventDefault :: Event -> Eff (dom :: DOM) Unit +``` + +Cancels the event if it can be cancelled. + +#### `defaultPrevented` + +``` purescript +defaultPrevented :: Event -> Boolean +``` + +Indicates whether `preventDefault` was called on the event. + +#### `timeStamp` + +``` purescript +timeStamp :: Event -> Number +``` + +The time in milliseconds between 01/01/1970 and when the event was +dispatched. + + diff --git a/docs/DOM/Event/EventPhase.md b/docs/DOM/Event/EventPhase.md new file mode 100644 index 0000000..1d0432b --- /dev/null +++ b/docs/DOM/Event/EventPhase.md @@ -0,0 +1,22 @@ +## Module DOM.Event.EventPhase + +#### `EventPhase` + +``` purescript +data EventPhase + = None + | Capturing + | AtTarget + | Bubbling +``` + +##### Instances +``` purescript +instance eqEventPhase :: Eq EventPhase +instance ordEventPhase :: Ord EventPhase +instance boundedEventPhase :: Bounded EventPhase +instance boundedOrdEventPhase :: BoundedOrd EventPhase +instance enumEventPhase :: Enum EventPhase +``` + + diff --git a/docs/DOM/Event/EventTarget.md b/docs/DOM/Event/EventTarget.md new file mode 100644 index 0000000..ef55395 --- /dev/null +++ b/docs/DOM/Event/EventTarget.md @@ -0,0 +1,46 @@ +## Module DOM.Event.EventTarget + +#### `EventListener` + +``` purescript +data EventListener :: # ! -> * +``` + +A boxed function that can be used as an event listener. This is necessary +due to the underling implementation of Eff functions. + +#### `eventListener` + +``` purescript +eventListener :: forall eff a. (Event -> Eff (dom :: DOM) a) -> EventListener eff +``` + +Creates an EventListener from a normal PureScript Eff function. + +#### `addEventListener` + +``` purescript +addEventListener :: forall eff. EventType -> EventListener eff -> Boolean -> EventTarget -> Eff (dom :: DOM | eff) Unit +``` + +Adds a listener to an event target. The boolean argument indicates whether +the listener should be added for the "capture" phase. + +#### `removeEventListener` + +``` purescript +removeEventListener :: forall eff. EventType -> EventListener eff -> Boolean -> EventTarget -> Eff (dom :: DOM | eff) Unit +``` + +Removes a listener to an event target. The boolean argument indicates +whether the listener should be removed for the "capture" phase. + +#### `dispatchEvent` + +``` purescript +dispatchEvent :: forall eff. Event -> EventTarget -> Eff (dom :: DOM, err :: EXCEPTION | eff) Boolean +``` + +Dispatches an event from an event target. + + diff --git a/docs/DOM/Event/Types.md b/docs/DOM/Event/Types.md new file mode 100644 index 0000000..44ba6c1 --- /dev/null +++ b/docs/DOM/Event/Types.md @@ -0,0 +1,1171 @@ +## Module DOM.Event.Types + +#### `Event` + +``` purescript +data Event :: * +``` + +Basic type for all DOM events. + +#### `EventType` + +``` purescript +newtype EventType +``` + +The type of strings used for event types. + +##### Instances +``` purescript +instance eqEventType :: Eq EventType +instance ordEventType :: Ord EventType +``` + +#### `EventTarget` + +``` purescript +data EventTarget :: * +``` + +A DOM item that can emit events. + +##### Instances +``` purescript +instance isIsForeignEventTarget :: IsForeign EventTarget +``` + +#### `readEventTarget` + +``` purescript +readEventTarget :: Foreign -> F EventTarget +``` + +#### `AnimationEvent` + +``` purescript +data AnimationEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignAnimationEvent :: IsForeign AnimationEvent +``` + +#### `animationEventToEvent` + +``` purescript +animationEventToEvent :: AnimationEvent -> Event +``` + +#### `readAnimationEvent` + +``` purescript +readAnimationEvent :: Foreign -> F AnimationEvent +``` + +#### `AudioProcessingEvent` + +``` purescript +data AudioProcessingEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignAudioProcessingEvent :: IsForeign AudioProcessingEvent +``` + +#### `audioProcessingEventToEvent` + +``` purescript +audioProcessingEventToEvent :: AudioProcessingEvent -> Event +``` + +#### `readAudioProcessingEvent` + +``` purescript +readAudioProcessingEvent :: Foreign -> F AudioProcessingEvent +``` + +#### `BeforeInputEvent` + +``` purescript +data BeforeInputEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignBeforeInputEvent :: IsForeign BeforeInputEvent +``` + +#### `beforeInputEventToEvent` + +``` purescript +beforeInputEventToEvent :: BeforeInputEvent -> Event +``` + +#### `readBeforeInputEvent` + +``` purescript +readBeforeInputEvent :: Foreign -> F BeforeInputEvent +``` + +#### `BeforeUnloadEvent` + +``` purescript +data BeforeUnloadEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignBeforeUnloadEvent :: IsForeign BeforeUnloadEvent +``` + +#### `beforeUnloadEventToEvent` + +``` purescript +beforeUnloadEventToEvent :: BeforeUnloadEvent -> Event +``` + +#### `readBeforeUnloadEvent` + +``` purescript +readBeforeUnloadEvent :: Foreign -> F BeforeUnloadEvent +``` + +#### `BlobEvent` + +``` purescript +data BlobEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignBlobEvent :: IsForeign BlobEvent +``` + +#### `blobEventToEvent` + +``` purescript +blobEventToEvent :: BlobEvent -> Event +``` + +#### `readBlobEvent` + +``` purescript +readBlobEvent :: Foreign -> F BlobEvent +``` + +#### `ClipboardEvent` + +``` purescript +data ClipboardEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignClipboardEvent :: IsForeign ClipboardEvent +``` + +#### `clipboardEventToEvent` + +``` purescript +clipboardEventToEvent :: ClipboardEvent -> Event +``` + +#### `readClipboardEvent` + +``` purescript +readClipboardEvent :: Foreign -> F ClipboardEvent +``` + +#### `CloseEvent` + +``` purescript +data CloseEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignCloseEvent :: IsForeign CloseEvent +``` + +#### `closeEventToEvent` + +``` purescript +closeEventToEvent :: CloseEvent -> Event +``` + +#### `readCloseEvent` + +``` purescript +readCloseEvent :: Foreign -> F CloseEvent +``` + +#### `CompositionEvent` + +``` purescript +data CompositionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignCompositionEvent :: IsForeign CompositionEvent +``` + +#### `compositionEventToEvent` + +``` purescript +compositionEventToEvent :: CompositionEvent -> Event +``` + +#### `readCompositionEvent` + +``` purescript +readCompositionEvent :: Foreign -> F CompositionEvent +``` + +#### `CSSFontFaceLoadEvent` + +``` purescript +data CSSFontFaceLoadEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignCSSFontFaceLoadEvent :: IsForeign CSSFontFaceLoadEvent +``` + +#### `cssFontFaceLoadEventToEvent` + +``` purescript +cssFontFaceLoadEventToEvent :: CSSFontFaceLoadEvent -> Event +``` + +#### `readCSSFontFaceLoadEvent` + +``` purescript +readCSSFontFaceLoadEvent :: Foreign -> F CSSFontFaceLoadEvent +``` + +#### `CustomEvent` + +``` purescript +data CustomEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignCustomEvent :: IsForeign CustomEvent +``` + +#### `customEventToEvent` + +``` purescript +customEventToEvent :: CustomEvent -> Event +``` + +#### `readCustomEvent` + +``` purescript +readCustomEvent :: Foreign -> F CustomEvent +``` + +#### `DeviceLightEvent` + +``` purescript +data DeviceLightEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDeviceLightEvent :: IsForeign DeviceLightEvent +``` + +#### `deviceLightEventToEvent` + +``` purescript +deviceLightEventToEvent :: DeviceLightEvent -> Event +``` + +#### `readDeviceLightEvent` + +``` purescript +readDeviceLightEvent :: Foreign -> F DeviceLightEvent +``` + +#### `DeviceMotionEvent` + +``` purescript +data DeviceMotionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDeviceMotionEvent :: IsForeign DeviceMotionEvent +``` + +#### `deviceMotionEventToEvent` + +``` purescript +deviceMotionEventToEvent :: DeviceMotionEvent -> Event +``` + +#### `readDeviceMotionEvent` + +``` purescript +readDeviceMotionEvent :: Foreign -> F DeviceMotionEvent +``` + +#### `DeviceOrientationEvent` + +``` purescript +data DeviceOrientationEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDeviceOrientationEvent :: IsForeign DeviceOrientationEvent +``` + +#### `deviceOrientationEventToEvent` + +``` purescript +deviceOrientationEventToEvent :: DeviceOrientationEvent -> Event +``` + +#### `readDeviceOrientationEvent` + +``` purescript +readDeviceOrientationEvent :: Foreign -> F DeviceOrientationEvent +``` + +#### `DeviceProximityEvent` + +``` purescript +data DeviceProximityEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDeviceProximityEvent :: IsForeign DeviceProximityEvent +``` + +#### `deviceProximityEventToEvent` + +``` purescript +deviceProximityEventToEvent :: DeviceProximityEvent -> Event +``` + +#### `readDeviceProximityEvent` + +``` purescript +readDeviceProximityEvent :: Foreign -> F DeviceProximityEvent +``` + +#### `DOMTransactionEvent` + +``` purescript +data DOMTransactionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDOMTransactionEvent :: IsForeign DOMTransactionEvent +``` + +#### `domTransactionEventToEvent` + +``` purescript +domTransactionEventToEvent :: DOMTransactionEvent -> Event +``` + +#### `readDOMTransactionEvent` + +``` purescript +readDOMTransactionEvent :: Foreign -> F DOMTransactionEvent +``` + +#### `DragEvent` + +``` purescript +data DragEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignDragEvent :: IsForeign DragEvent +``` + +#### `dragEventToEvent` + +``` purescript +dragEventToEvent :: DragEvent -> Event +``` + +#### `readDragEvent` + +``` purescript +readDragEvent :: Foreign -> F DragEvent +``` + +#### `EditingBeforeInputEvent` + +``` purescript +data EditingBeforeInputEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignEditingBeforeInputEvent :: IsForeign EditingBeforeInputEvent +``` + +#### `editingBeforeInputEventToEvent` + +``` purescript +editingBeforeInputEventToEvent :: EditingBeforeInputEvent -> Event +``` + +#### `readEditingBeforeInputEvent` + +``` purescript +readEditingBeforeInputEvent :: Foreign -> F EditingBeforeInputEvent +``` + +#### `ErrorEvent` + +``` purescript +data ErrorEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignErrorEvent :: IsForeign ErrorEvent +``` + +#### `errorEventToEvent` + +``` purescript +errorEventToEvent :: ErrorEvent -> Event +``` + +#### `readErrorEvent` + +``` purescript +readErrorEvent :: Foreign -> F ErrorEvent +``` + +#### `FetchEvent` + +``` purescript +data FetchEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignFetchEvent :: IsForeign FetchEvent +``` + +#### `fetchEventToEvent` + +``` purescript +fetchEventToEvent :: FetchEvent -> Event +``` + +#### `readFetchEvent` + +``` purescript +readFetchEvent :: Foreign -> F FetchEvent +``` + +#### `FocusEvent` + +``` purescript +data FocusEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignFocusEvent :: IsForeign FocusEvent +``` + +#### `focusEventToEvent` + +``` purescript +focusEventToEvent :: FocusEvent -> Event +``` + +#### `readFocusEvent` + +``` purescript +readFocusEvent :: Foreign -> F FocusEvent +``` + +#### `GamepadEvent` + +``` purescript +data GamepadEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignGamepadEvent :: IsForeign GamepadEvent +``` + +#### `gamepadEventToEvent` + +``` purescript +gamepadEventToEvent :: GamepadEvent -> Event +``` + +#### `readGamepadEvent` + +``` purescript +readGamepadEvent :: Foreign -> F GamepadEvent +``` + +#### `HashChangeEvent` + +``` purescript +data HashChangeEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignHashChangeEvent :: IsForeign HashChangeEvent +``` + +#### `hashChangeEventToEvent` + +``` purescript +hashChangeEventToEvent :: HashChangeEvent -> Event +``` + +#### `readHashChangeEvent` + +``` purescript +readHashChangeEvent :: Foreign -> F HashChangeEvent +``` + +#### `IDBVersionChangeEvent` + +``` purescript +data IDBVersionChangeEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignIDBVersionChangeEvent :: IsForeign IDBVersionChangeEvent +``` + +#### `idbVersionChangeEventToEvent` + +``` purescript +idbVersionChangeEventToEvent :: IDBVersionChangeEvent -> Event +``` + +#### `readIDBVersionChangeEvent` + +``` purescript +readIDBVersionChangeEvent :: Foreign -> F IDBVersionChangeEvent +``` + +#### `InputEvent` + +``` purescript +data InputEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignInputEvent :: IsForeign InputEvent +``` + +#### `inputEventToEvent` + +``` purescript +inputEventToEvent :: InputEvent -> Event +``` + +#### `readInputEvent` + +``` purescript +readInputEvent :: Foreign -> F InputEvent +``` + +#### `KeyboardEvent` + +``` purescript +data KeyboardEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignKeyboardEvent :: IsForeign KeyboardEvent +``` + +#### `keyboardEventToEvent` + +``` purescript +keyboardEventToEvent :: KeyboardEvent -> Event +``` + +#### `readKeyboardEvent` + +``` purescript +readKeyboardEvent :: Foreign -> F KeyboardEvent +``` + +#### `MediaStreamEvent` + +``` purescript +data MediaStreamEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignMediaStreamEvent :: IsForeign MediaStreamEvent +``` + +#### `mediaStreamEventToEvent` + +``` purescript +mediaStreamEventToEvent :: MediaStreamEvent -> Event +``` + +#### `readMediaStreamEvent` + +``` purescript +readMediaStreamEvent :: Foreign -> F MediaStreamEvent +``` + +#### `MessageEvent` + +``` purescript +data MessageEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignMessageEvent :: IsForeign MessageEvent +``` + +#### `messageEventToEvent` + +``` purescript +messageEventToEvent :: MessageEvent -> Event +``` + +#### `readMessageEvent` + +``` purescript +readMessageEvent :: Foreign -> F MessageEvent +``` + +#### `MouseEvent` + +``` purescript +data MouseEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignMouseEvent :: IsForeign MouseEvent +``` + +#### `mouseEventToEvent` + +``` purescript +mouseEventToEvent :: MouseEvent -> Event +``` + +#### `readMouseEvent` + +``` purescript +readMouseEvent :: Foreign -> F MouseEvent +``` + +#### `MutationEvent` + +``` purescript +data MutationEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignMutationEvent :: IsForeign MutationEvent +``` + +#### `mutationEventToEvent` + +``` purescript +mutationEventToEvent :: MutationEvent -> Event +``` + +#### `readMutationEvent` + +``` purescript +readMutationEvent :: Foreign -> F MutationEvent +``` + +#### `OfflineAudioCompletionEvent` + +``` purescript +data OfflineAudioCompletionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignOfflineAudioCompletionEvent :: IsForeign OfflineAudioCompletionEvent +``` + +#### `offlineAudioCompletionEventToEvent` + +``` purescript +offlineAudioCompletionEventToEvent :: OfflineAudioCompletionEvent -> Event +``` + +#### `readOfflineAudioCompletionEvent` + +``` purescript +readOfflineAudioCompletionEvent :: Foreign -> F OfflineAudioCompletionEvent +``` + +#### `PageTransitionEvent` + +``` purescript +data PageTransitionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignPageTransitionEvent :: IsForeign PageTransitionEvent +``` + +#### `pageTransitionEventToEvent` + +``` purescript +pageTransitionEventToEvent :: PageTransitionEvent -> Event +``` + +#### `readPageTransitionEvent` + +``` purescript +readPageTransitionEvent :: Foreign -> F PageTransitionEvent +``` + +#### `PointerEvent` + +``` purescript +data PointerEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignPointerEvent :: IsForeign PointerEvent +``` + +#### `pointerEventToEvent` + +``` purescript +pointerEventToEvent :: PointerEvent -> Event +``` + +#### `readPointerEvent` + +``` purescript +readPointerEvent :: Foreign -> F PointerEvent +``` + +#### `PopStateEvent` + +``` purescript +data PopStateEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignPopStateEvent :: IsForeign PopStateEvent +``` + +#### `popStateEventToEvent` + +``` purescript +popStateEventToEvent :: PopStateEvent -> Event +``` + +#### `readPopStateEvent` + +``` purescript +readPopStateEvent :: Foreign -> F PopStateEvent +``` + +#### `ProgressEvent` + +``` purescript +data ProgressEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignProgressEvent :: IsForeign ProgressEvent +``` + +#### `progressEventToEvent` + +``` purescript +progressEventToEvent :: ProgressEvent -> Event +``` + +#### `readProgressEvent` + +``` purescript +readProgressEvent :: Foreign -> F ProgressEvent +``` + +#### `RelatedEvent` + +``` purescript +data RelatedEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignRelatedEvent :: IsForeign RelatedEvent +``` + +#### `relatedEventToEvent` + +``` purescript +relatedEventToEvent :: RelatedEvent -> Event +``` + +#### `readRelatedEvent` + +``` purescript +readRelatedEvent :: Foreign -> F RelatedEvent +``` + +#### `RTCDataChannelEvent` + +``` purescript +data RTCDataChannelEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignRTCDataChannelEvent :: IsForeign RTCDataChannelEvent +``` + +#### `rtcDataChannelEventToEvent` + +``` purescript +rtcDataChannelEventToEvent :: RTCDataChannelEvent -> Event +``` + +#### `readRTCDataChannelEvent` + +``` purescript +readRTCDataChannelEvent :: Foreign -> F RTCDataChannelEvent +``` + +#### `RTCIdentityErrorEvent` + +``` purescript +data RTCIdentityErrorEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignRTCIdentityErrorEvent :: IsForeign RTCIdentityErrorEvent +``` + +#### `rtcIdentityErrorEventToEvent` + +``` purescript +rtcIdentityErrorEventToEvent :: RTCIdentityErrorEvent -> Event +``` + +#### `readRTCIdentityErrorEvent` + +``` purescript +readRTCIdentityErrorEvent :: Foreign -> F RTCIdentityErrorEvent +``` + +#### `RTCIdentityEvent` + +``` purescript +data RTCIdentityEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignRTCIdentityEvent :: IsForeign RTCIdentityEvent +``` + +#### `rtcIdentityEventToEvent` + +``` purescript +rtcIdentityEventToEvent :: RTCIdentityEvent -> Event +``` + +#### `readRTCIdentityEvent` + +``` purescript +readRTCIdentityEvent :: Foreign -> F RTCIdentityEvent +``` + +#### `RTCPeerConnectionIceEvent` + +``` purescript +data RTCPeerConnectionIceEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignRTCPeerConnectionIceEvent :: IsForeign RTCPeerConnectionIceEvent +``` + +#### `rtcPeerConnectionIceEventToEvent` + +``` purescript +rtcPeerConnectionIceEventToEvent :: RTCPeerConnectionIceEvent -> Event +``` + +#### `readRTCPeerConnectionIceEvent` + +``` purescript +readRTCPeerConnectionIceEvent :: Foreign -> F RTCPeerConnectionIceEvent +``` + +#### `SensorEvent` + +``` purescript +data SensorEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignSensorEvent :: IsForeign SensorEvent +``` + +#### `sensorEventToEvent` + +``` purescript +sensorEventToEvent :: SensorEvent -> Event +``` + +#### `readSensorEvent` + +``` purescript +readSensorEvent :: Foreign -> F SensorEvent +``` + +#### `StorageEvent` + +``` purescript +data StorageEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignStorageEvent :: IsForeign StorageEvent +``` + +#### `storageEventToEvent` + +``` purescript +storageEventToEvent :: StorageEvent -> Event +``` + +#### `readStorageEvent` + +``` purescript +readStorageEvent :: Foreign -> F StorageEvent +``` + +#### `SVGEvent` + +``` purescript +data SVGEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignSVGEvent :: IsForeign SVGEvent +``` + +#### `svgEventToEvent` + +``` purescript +svgEventToEvent :: SVGEvent -> Event +``` + +#### `readSVGEvent` + +``` purescript +readSVGEvent :: Foreign -> F SVGEvent +``` + +#### `SVGZoomEvent` + +``` purescript +data SVGZoomEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignSVGZoomEvent :: IsForeign SVGZoomEvent +``` + +#### `svgZoomEventToEvent` + +``` purescript +svgZoomEventToEvent :: SVGZoomEvent -> Event +``` + +#### `readSVGZoomEvent` + +``` purescript +readSVGZoomEvent :: Foreign -> F SVGZoomEvent +``` + +#### `TimeEvent` + +``` purescript +data TimeEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignTimeEvent :: IsForeign TimeEvent +``` + +#### `timeEventToEvent` + +``` purescript +timeEventToEvent :: TimeEvent -> Event +``` + +#### `readTimeEvent` + +``` purescript +readTimeEvent :: Foreign -> F TimeEvent +``` + +#### `TouchEvent` + +``` purescript +data TouchEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignTouchEvent :: IsForeign TouchEvent +``` + +#### `touchEventToEvent` + +``` purescript +touchEventToEvent :: TouchEvent -> Event +``` + +#### `readTouchEvent` + +``` purescript +readTouchEvent :: Foreign -> F TouchEvent +``` + +#### `TransitionEvent` + +``` purescript +data TransitionEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignTransitionEvent :: IsForeign TransitionEvent +``` + +#### `transitionEventToEvent` + +``` purescript +transitionEventToEvent :: TransitionEvent -> Event +``` + +#### `readTransitionEvent` + +``` purescript +readTransitionEvent :: Foreign -> F TransitionEvent +``` + +#### `UIEvent` + +``` purescript +data UIEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignUIEvent :: IsForeign UIEvent +``` + +#### `uiEventToEvent` + +``` purescript +uiEventToEvent :: UIEvent -> Event +``` + +#### `readUIEvent` + +``` purescript +readUIEvent :: Foreign -> F UIEvent +``` + +#### `UserProximityEvent` + +``` purescript +data UserProximityEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignUserProximityEvent :: IsForeign UserProximityEvent +``` + +#### `userProximityEventToEvent` + +``` purescript +userProximityEventToEvent :: UserProximityEvent -> Event +``` + +#### `readUserProximityEvent` + +``` purescript +readUserProximityEvent :: Foreign -> F UserProximityEvent +``` + +#### `WheelEvent` + +``` purescript +data WheelEvent :: * +``` + +##### Instances +``` purescript +instance isIsForeignWheelEvent :: IsForeign WheelEvent +``` + +#### `wheelEventToEvent` + +``` purescript +wheelEventToEvent :: WheelEvent -> Event +``` + +#### `readWheelEvent` + +``` purescript +readWheelEvent :: Foreign -> F WheelEvent +``` + + diff --git a/docs/DOM/HTML.md b/docs/DOM/HTML.md new file mode 100644 index 0000000..14beba8 --- /dev/null +++ b/docs/DOM/HTML.md @@ -0,0 +1,9 @@ +## Module DOM.HTML + +#### `window` + +``` purescript +window :: forall eff. Eff (dom :: DOM | eff) Window +``` + + diff --git a/docs/DOM/HTML/Document.md b/docs/DOM/HTML/Document.md new file mode 100644 index 0000000..9e4993a --- /dev/null +++ b/docs/DOM/HTML/Document.md @@ -0,0 +1,9 @@ +## Module DOM.HTML.Document + +#### `body` + +``` purescript +body :: forall eff. HTMLDocument -> Eff (dom :: DOM | eff) (Nullable HTMLElement) +``` + + diff --git a/docs/DOM/HTML/Types.md b/docs/DOM/HTML/Types.md new file mode 100644 index 0000000..53c0893 --- /dev/null +++ b/docs/DOM/HTML/Types.md @@ -0,0 +1,51 @@ +## Module DOM.HTML.Types + +#### `Window` + +``` purescript +data Window :: * +``` + +#### `HTMLDocument` + +``` purescript +data HTMLDocument :: * +``` + +#### `htmlDocumentToDocument` + +``` purescript +htmlDocumentToDocument :: HTMLDocument -> Document +``` + +#### `HTMLElement` + +``` purescript +data HTMLElement :: * +``` + +#### `htmlElementToElement` + +``` purescript +htmlElementToElement :: HTMLElement -> Element +``` + +#### `htmlElementToParentNode` + +``` purescript +htmlElementToParentNode :: Element -> ParentNode +``` + +#### `htmlElementToNonDocumentTypeChildNode` + +``` purescript +htmlElementToNonDocumentTypeChildNode :: Element -> NonDocumentTypeChildNode +``` + +#### `htmlElementToNode` + +``` purescript +htmlElementToNode :: HTMLElement -> Node +``` + + diff --git a/docs/DOM/HTML/Window.md b/docs/DOM/HTML/Window.md new file mode 100644 index 0000000..6967cc0 --- /dev/null +++ b/docs/DOM/HTML/Window.md @@ -0,0 +1,9 @@ +## Module DOM.HTML.Window + +#### `document` + +``` purescript +document :: forall eff. Window -> Eff (dom :: DOM | eff) HTMLDocument +``` + + diff --git a/docs/DOM/Node/ChildNode.md b/docs/DOM/Node/ChildNode.md new file mode 100644 index 0000000..c07cd2c --- /dev/null +++ b/docs/DOM/Node/ChildNode.md @@ -0,0 +1,11 @@ +## Module DOM.Node.ChildNode + +#### `remove` + +``` purescript +remove :: forall eff. ChildNode -> Eff (dom :: DOM | eff) Unit +``` + +Removes the node from its parent. + + diff --git a/docs/DOM/Node/Document.md b/docs/DOM/Node/Document.md new file mode 100644 index 0000000..7207005 --- /dev/null +++ b/docs/DOM/Node/Document.md @@ -0,0 +1,117 @@ +## Module DOM.Node.Document + +#### `url` + +``` purescript +url :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `documentURI` + +``` purescript +documentURI :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `origin` + +``` purescript +origin :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `compatMode` + +``` purescript +compatMode :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `characterSet` + +``` purescript +characterSet :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `contentType` + +``` purescript +contentType :: forall eff. Document -> Eff (dom :: DOM | eff) String +``` + +#### `doctype` + +``` purescript +doctype :: forall eff. Document -> Eff (dom :: DOM | eff) (Nullable DocumentType) +``` + +#### `documentElement` + +``` purescript +documentElement :: forall eff. Document -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +#### `getElementsByTagName` + +``` purescript +getElementsByTagName :: forall eff. String -> Document -> Eff (dom :: DOM | eff) HTMLCollection +``` + +#### `getElementsByTagNameNS` + +``` purescript +getElementsByTagNameNS :: forall eff. Nullable String -> String -> Document -> Eff (dom :: DOM | eff) HTMLCollection +``` + +#### `getElementsByClassName` + +``` purescript +getElementsByClassName :: forall eff. String -> Document -> Eff (dom :: DOM | eff) HTMLCollection +``` + +#### `createElement` + +``` purescript +createElement :: forall eff. String -> Document -> Eff (dom :: DOM | eff) Element +``` + +#### `createElementNS` + +``` purescript +createElementNS :: forall eff. Nullable String -> String -> Document -> Eff (dom :: DOM | eff) Element +``` + +#### `createDocumentFragment` + +``` purescript +createDocumentFragment :: forall eff. Document -> Eff (dom :: DOM | eff) DocumentFragment +``` + +#### `createTextNode` + +``` purescript +createTextNode :: forall eff. String -> Eff (dom :: DOM | eff) Text +``` + +#### `createComment` + +``` purescript +createComment :: forall eff. String -> Eff (dom :: DOM | eff) Comment +``` + +#### `createProcessingInstruction` + +``` purescript +createProcessingInstruction :: forall eff. String -> String -> Eff (dom :: DOM | eff) ProcessingInstruction +``` + +#### `importNode` + +``` purescript +importNode :: forall eff. Node -> Boolean -> Document -> Eff (dom :: DOM | eff) Node +``` + +#### `adoptNode` + +``` purescript +adoptNode :: forall eff. Node -> Document -> Eff (dom :: DOM | eff) Node +``` + + diff --git a/docs/DOM/Node/DocumentType.md b/docs/DOM/Node/DocumentType.md new file mode 100644 index 0000000..1250b64 --- /dev/null +++ b/docs/DOM/Node/DocumentType.md @@ -0,0 +1,21 @@ +## Module DOM.Node.DocumentType + +#### `name` + +``` purescript +name :: DocumentType -> String +``` + +#### `publicId` + +``` purescript +publicId :: DocumentType -> String +``` + +#### `systemId` + +``` purescript +systemId :: DocumentType -> String +``` + + diff --git a/docs/DOM/Node/Element.md b/docs/DOM/Node/Element.md new file mode 100644 index 0000000..689bd7a --- /dev/null +++ b/docs/DOM/Node/Element.md @@ -0,0 +1,69 @@ +## Module DOM.Node.Element + +#### `namespaceURI` + +``` purescript +namespaceURI :: Element -> Nullable String +``` + +#### `prefix` + +``` purescript +prefix :: Element -> Nullable String +``` + +#### `localName` + +``` purescript +localName :: Element -> String +``` + +#### `tagName` + +``` purescript +tagName :: Element -> String +``` + +#### `id` + +``` purescript +id :: forall eff. Element -> Eff (dom :: DOM | eff) ElementId +``` + +#### `setId` + +``` purescript +setId :: forall eff. ElementId -> Element -> Eff (dom :: DOM | eff) ElementId +``` + +#### `className` + +``` purescript +className :: forall eff. Element -> Eff (dom :: DOM | eff) String +``` + +#### `setClassName` + +``` purescript +setClassName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) String +``` + +#### `getElementsByTagName` + +``` purescript +getElementsByTagName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) HTMLCollection +``` + +#### `getElementsByTagNameNS` + +``` purescript +getElementsByTagNameNS :: forall eff. Nullable String -> String -> Element -> Eff (dom :: DOM | eff) HTMLCollection +``` + +#### `getElementsByClassName` + +``` purescript +getElementsByClassName :: forall eff. String -> Element -> Eff (dom :: DOM | eff) HTMLCollection +``` + + diff --git a/docs/DOM/Node/HTMLCollection.md b/docs/DOM/Node/HTMLCollection.md new file mode 100644 index 0000000..c96c238 --- /dev/null +++ b/docs/DOM/Node/HTMLCollection.md @@ -0,0 +1,29 @@ +## Module DOM.Node.HTMLCollection + +#### `length` + +``` purescript +length :: forall eff. HTMLCollection -> Eff (dom :: DOM | eff) Int +``` + +The number of elements in a HTMLCollection. + +#### `item` + +``` purescript +item :: forall eff. Int -> HTMLCollection -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The element in a HTMLCollection at the specified index, or null if no such +element exists. + +#### `namedItem` + +``` purescript +namedItem :: forall eff. ElementId -> HTMLCollection -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The first element with the specified name or ID in a HTMLCollection, or +null if no such element exists. + + diff --git a/docs/DOM/Node/Node.md b/docs/DOM/Node/Node.md new file mode 100644 index 0000000..fcf2c99 --- /dev/null +++ b/docs/DOM/Node/Node.md @@ -0,0 +1,247 @@ +## Module DOM.Node.Node + +#### `nodeType` + +``` purescript +nodeType :: Node -> NodeType +``` + +The type of a node. + +#### `nodeTypeIndex` + +``` purescript +nodeTypeIndex :: Node -> Int +``` + +The numeric value for the type of a node. + +#### `nodeName` + +``` purescript +nodeName :: Node -> String +``` + +For elements this is the tag name, for document types this is the doctype +name, for processing instructions this is the target, for all other nodes +it is a string like `"#text"`, `"#comment", etc. depending on the node +type. + +#### `baseURI` + +``` purescript +baseURI :: forall eff. Node -> Eff (dom :: DOM | eff) String +``` + +The node's base URL. + +#### `ownerDocument` + +``` purescript +ownerDocument :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Document) +``` + +The document the node belongs to, unless the node is a document in which +case the value is null. + +#### `parentNode` + +``` purescript +parentNode :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The parent node of the node. + +#### `parentElement` + +``` purescript +parentElement :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The parent element of the node. + +#### `hasChildNodes` + +``` purescript +hasChildNodes :: forall eff. Node -> Eff (dom :: DOM | eff) Boolean +``` + +Indicates whether the node has any child nodes. + +#### `childNodes` + +``` purescript +childNodes :: forall eff. Node -> Eff (dom :: DOM | eff) NodeList +``` + +The children of the node. + +#### `firstChild` + +``` purescript +firstChild :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The first child of the node, or null if the node has no children. + +#### `lastChild` + +``` purescript +lastChild :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The last child of the node, or null if the node has no children. + +#### `previousSibling` + +``` purescript +previousSibling :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The previous sibling node, or null if there is no previous sibling. + +#### `nextSibling` + +``` purescript +nextSibling :: forall eff. Node -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The next sibling node, or null if there is no next sibling. + +#### `nodeValue` + +``` purescript +nodeValue :: forall eff. Node -> Eff (dom :: DOM | eff) String +``` + +If the node type is text, comment, or processing instruction this is the +node's data, or null in all other cases. + +#### `setNodeValue` + +``` purescript +setNodeValue :: forall eff. String -> Node -> Eff (dom :: DOM | eff) Unit +``` + +If the node type is text, comment, or processing instruction this allows +the node's data to be changed, or has no effect in all other cases. + +#### `textContent` + +``` purescript +textContent :: forall eff. Node -> Eff (dom :: DOM | eff) String +``` + +If the node type is document fragment, element, text, processing +instruction, or comment this is the node's data, or null in all other +cases. + +#### `setTextContent` + +``` purescript +setTextContent :: forall eff. Node -> Eff (dom :: DOM | eff) String +``` + +If the node type is document fragment, element, text, processing +instruction, or comment this allows the node's data to be changed, or has +no effect in all other cases. + +#### `normalize` + +``` purescript +normalize :: forall eff. Node -> Eff (dom :: DOM | eff) Unit +``` + +Removes empty text nodes and then combines any remaining text nodes that +are contiguous. + +#### `clone` + +``` purescript +clone :: forall eff. Node -> Eff (dom :: DOM | eff) Unit +``` + +Clones the node without cloning the node's descendants. + +#### `deepClone` + +``` purescript +deepClone :: forall eff. Node -> Eff (dom :: DOM | eff) Unit +``` + +Clones the node and its descendants. + +#### `isEqualNode` + +``` purescript +isEqualNode :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Boolean +``` + +Checks whether two nodes are equivalent. + +#### `compareDocumentPositionBits` + +``` purescript +compareDocumentPositionBits :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Int +``` + +#### `contains` + +``` purescript +contains :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Boolean +``` + +Checks whether the second node is contained within the first + +#### `lookupPrefix` + +``` purescript +lookupPrefix :: forall eff. String -> Node -> Eff (dom :: DOM | eff) (Nullable String) +``` + +#### `lookupNamespaceURI` + +``` purescript +lookupNamespaceURI :: forall eff. String -> Node -> Eff (dom :: DOM | eff) (Nullable String) +``` + +#### `isDefaultNamespace` + +``` purescript +isDefaultNamespace :: forall eff. String -> Node -> Eff (dom :: DOM | eff) Boolean +``` + +#### `insertBefore` + +``` purescript +insertBefore :: forall eff. Node -> Node -> Node -> Eff (dom :: DOM | eff) Node +``` + +Inserts the first node before the second as a child of the third node. + +#### `appendChild` + +``` purescript +appendChild :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Node +``` + +Appends the first node to the child node list of the second node. + +#### `replaceChild` + +``` purescript +replaceChild :: forall eff. Node -> Node -> Node -> Eff (dom :: DOM | eff) Node +``` + +Uses the first node as a replacement for the second node in the children +of the third node. + +#### `removeChild` + +``` purescript +removeChild :: forall eff. Node -> Node -> Eff (dom :: DOM | eff) Node +``` + +Removes the first node from the children of the second node. + + diff --git a/docs/DOM/Node/NodeList.md b/docs/DOM/Node/NodeList.md new file mode 100644 index 0000000..dd34000 --- /dev/null +++ b/docs/DOM/Node/NodeList.md @@ -0,0 +1,20 @@ +## Module DOM.Node.NodeList + +#### `length` + +``` purescript +length :: forall eff. NodeList -> Eff (dom :: DOM | eff) Int +``` + +The number of items in a NodeList. + +#### `item` + +``` purescript +item :: forall eff. Int -> NodeList -> Eff (dom :: DOM | eff) (Nullable Node) +``` + +The item in a NodeList at the specified index, or null if no such node +exists. + + diff --git a/docs/DOM/Node/NodeType.md b/docs/DOM/Node/NodeType.md new file mode 100644 index 0000000..5cdbf5a --- /dev/null +++ b/docs/DOM/Node/NodeType.md @@ -0,0 +1,30 @@ +## Module DOM.Node.NodeType + +#### `NodeType` + +``` purescript +data NodeType + = ElementNode + | AttributeNode + | TextNode + | CDATASectionNode + | EntityReferenceNode + | EntityNode + | ProcessingInstructionNode + | CommentNode + | DocumentNode + | DocumentTypeNode + | DocumentFragmentNode + | NotationNode +``` + +##### Instances +``` purescript +instance eqNodeType :: Eq NodeType +instance ordNodeType :: Ord NodeType +instance boundedNodeType :: Bounded NodeType +instance boundedOrdNodeType :: BoundedOrd NodeType +instance enumNodeType :: Enum NodeType +``` + + diff --git a/docs/DOM/Node/NonDocumentTypeChildNode.md b/docs/DOM/Node/NonDocumentTypeChildNode.md new file mode 100644 index 0000000..1eecc02 --- /dev/null +++ b/docs/DOM/Node/NonDocumentTypeChildNode.md @@ -0,0 +1,12 @@ +## Module DOM.Node.NonDocumentTypeChildNode + +#### `getElementById` + +``` purescript +getElementById :: forall eff. ElementId -> NonDocumentTypeChildNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The first element within node's descendants with a matching ID, or null if +no such element exists. + + diff --git a/docs/DOM/Node/NonElementParentNode.md b/docs/DOM/Node/NonElementParentNode.md new file mode 100644 index 0000000..17f54f0 --- /dev/null +++ b/docs/DOM/Node/NonElementParentNode.md @@ -0,0 +1,19 @@ +## Module DOM.Node.NonElementParentNode + +#### `previousElementSibling` + +``` purescript +previousElementSibling :: forall eff. NonElementParentNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The previous sibling that is an element, or null if no such element exists. + +#### `nextElementSibling` + +``` purescript +nextElementSibling :: forall eff. NonElementParentNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The next sibling that is an element, or null if no such element exists. + + diff --git a/docs/DOM/Node/ParentNode.md b/docs/DOM/Node/ParentNode.md new file mode 100644 index 0000000..a2fc926 --- /dev/null +++ b/docs/DOM/Node/ParentNode.md @@ -0,0 +1,52 @@ +## Module DOM.Node.ParentNode + +#### `children` + +``` purescript +children :: forall eff. ParentNode -> Eff (dom :: DOM | eff) HTMLCollection +``` + +The child elements for the node. + +#### `firstElementChild` + +``` purescript +firstElementChild :: forall eff. ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The first child that is an element, or null if no such element exists. + +#### `lastElementChild` + +``` purescript +lastElementChild :: forall eff. ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +The last child that is an element, or null if no such element exists. + +#### `childElementCount` + +``` purescript +childElementCount :: forall eff. ParentNode -> Eff (dom :: DOM | eff) Int +``` + +The number of child elements. + +#### `querySelector` + +``` purescript +querySelector :: forall eff. String -> ParentNode -> Eff (dom :: DOM | eff) (Nullable Element) +``` + +Finds the first child that is an element that matches the selector(s), or +null if no such element exists. + +#### `querySelectorAll` + +``` purescript +querySelectorAll :: forall eff. String -> ParentNode -> Eff (dom :: DOM | eff) NodeList +``` + +Finds all the child elements that matches the selector(s). + + diff --git a/docs/DOM/Node/Types.md b/docs/DOM/Node/Types.md new file mode 100644 index 0000000..bcc7b27 --- /dev/null +++ b/docs/DOM/Node/Types.md @@ -0,0 +1,184 @@ +## Module DOM.Node.Types + +#### `Node` + +``` purescript +data Node :: * +``` + +#### `NonElementParentNode` + +``` purescript +data NonElementParentNode :: * +``` + +#### `ParentNode` + +``` purescript +data ParentNode :: * +``` + +#### `NonDocumentTypeChildNode` + +``` purescript +data NonDocumentTypeChildNode :: * +``` + +#### `ChildNode` + +``` purescript +data ChildNode :: * +``` + +#### `NodeList` + +``` purescript +data NodeList :: * +``` + +#### `HTMLCollection` + +``` purescript +data HTMLCollection :: * +``` + +#### `Document` + +``` purescript +data Document :: * +``` + +#### `documentToNonElementParentNode` + +``` purescript +documentToNonElementParentNode :: Document -> NonElementParentNode +``` + +#### `documentToParentNode` + +``` purescript +documentToParentNode :: Document -> ParentNode +``` + +#### `documentToNode` + +``` purescript +documentToNode :: Document -> Node +``` + +#### `Element` + +``` purescript +data Element :: * +``` + +#### `ElementId` + +``` purescript +newtype ElementId + = ElementId String +``` + +#### `elementToParentNode` + +``` purescript +elementToParentNode :: Element -> ParentNode +``` + +#### `elementToNonDocumentTypeChildNode` + +``` purescript +elementToNonDocumentTypeChildNode :: Element -> NonDocumentTypeChildNode +``` + +#### `elementToNode` + +``` purescript +elementToNode :: Element -> Node +``` + +#### `CharacterData` + +``` purescript +data CharacterData :: * +``` + +#### `characterDataToNonDocumentTypeChildNode` + +``` purescript +characterDataToNonDocumentTypeChildNode :: CharacterData -> NonDocumentTypeChildNode +``` + +#### `Text` + +``` purescript +data Text :: * +``` + +#### `textToNode` + +``` purescript +textToNode :: Text -> Node +``` + +#### `Comment` + +``` purescript +data Comment :: * +``` + +#### `commentToNode` + +``` purescript +commentToNode :: Comment -> Node +``` + +#### `ProcessingInstruction` + +``` purescript +data ProcessingInstruction :: * +``` + +#### `processingInstructionToNode` + +``` purescript +processingInstructionToNode :: ProcessingInstruction -> Node +``` + +#### `DocumentFragment` + +``` purescript +data DocumentFragment :: * +``` + +#### `documentFragmentToNonElementParentNode` + +``` purescript +documentFragmentToNonElementParentNode :: DocumentFragment -> NonElementParentNode +``` + +#### `documentFragmentToParentNode` + +``` purescript +documentFragmentToParentNode :: DocumentFragment -> ParentNode +``` + +#### `documentFragmentToNode` + +``` purescript +documentFragmentToNode :: DocumentFragment -> Node +``` + +#### `DocumentType` + +``` purescript +data DocumentType :: * +``` + +#### `documentTypeToNode` + +``` purescript +documentTypeToNode :: DocumentType -> Node +``` + + From 78dfefba29920f0fe3e31d69a8ddb7b7d93fe5c4 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 16 Aug 2015 16:41:13 +0100 Subject: [PATCH 3/3] Restore File and XHR types --- src/DOM/File/Types.purs | 8 ++++++++ src/DOM/XHR/Types.purs | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 src/DOM/File/Types.purs create mode 100644 src/DOM/XHR/Types.purs diff --git a/src/DOM/File/Types.purs b/src/DOM/File/Types.purs new file mode 100644 index 0000000..0ab993e --- /dev/null +++ b/src/DOM/File/Types.purs @@ -0,0 +1,8 @@ +module DOM.File.Types where + +foreign import data Blob :: * +foreign import data BlobURL :: * +foreign import data File :: * +foreign import data FileList :: * +foreign import data FileReader :: * +foreign import data FileReaderSync :: * diff --git a/src/DOM/XHR/Types.purs b/src/DOM/XHR/Types.purs new file mode 100644 index 0000000..05f8194 --- /dev/null +++ b/src/DOM/XHR/Types.purs @@ -0,0 +1,6 @@ +module DOM.XHR.Types where + +foreign import data XMLHttpRequestEventTarget :: * +foreign import data XMLHttpRequestUpload :: * +foreign import data XMLHttpRequest :: * +foreign import data FormData :: *