module Web.HTML.HTMLDocument ( HTMLDocument , fromDocument , fromNode , fromParentNode , fromNonElementParentNode , fromEventTarget , toDocument , toNode , toParentNode , toNonElementParentNode , toEventTarget , documentElement , head , body , readyState , visibilityState , activeElement , currentScript , referrer , title , setTitle ) where import Prelude import Data.Maybe (Maybe, fromMaybe) import Data.Nullable (Nullable, toMaybe) import Effect (Effect) import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2) import Unsafe.Coerce (unsafeCoerce) import Web.DOM.Document (Document) import Web.DOM.Internal.Types (Node) import Web.DOM.NonElementParentNode (NonElementParentNode) import Web.DOM.ParentNode (ParentNode) import Web.Event.EventTarget (EventTarget) import Web.HTML.HTMLDocument.ReadyState (ReadyState) import Web.HTML.HTMLDocument.ReadyState as ReadyState import Web.HTML.HTMLDocument.VisibilityState (VisibilityState) import Web.HTML.HTMLDocument.VisibilityState as VisibilityState import Web.HTML.HTMLElement (HTMLElement) import Web.HTML.HTMLHtmlElement (HTMLHtmlElement) import Web.HTML.HTMLScriptElement (HTMLScriptElement) import Web.Internal.FFI (unsafeReadProtoTagged) foreign import data HTMLDocument :: Type fromDocument :: Document -> Maybe HTMLDocument fromDocument = unsafeReadProtoTagged "HTMLDocument" fromNode :: Node -> Maybe HTMLDocument fromNode = unsafeReadProtoTagged "HTMLDocument" fromParentNode :: ParentNode -> Maybe HTMLDocument fromParentNode = unsafeReadProtoTagged "HTMLDocument" fromNonElementParentNode :: NonElementParentNode -> Maybe HTMLDocument fromNonElementParentNode = unsafeReadProtoTagged "HTMLDocument" fromEventTarget :: EventTarget -> Maybe HTMLDocument fromEventTarget = unsafeReadProtoTagged "HTMLDocument" toDocument :: HTMLDocument -> Document toDocument = unsafeCoerce toNode :: HTMLDocument -> Node toNode = unsafeCoerce toParentNode :: HTMLDocument -> ParentNode toParentNode = unsafeCoerce toNonElementParentNode :: HTMLDocument -> NonElementParentNode toNonElementParentNode = unsafeCoerce toEventTarget :: HTMLDocument -> EventTarget toEventTarget = unsafeCoerce foreign import _documentElement :: EffectFn1 HTMLDocument (Nullable HTMLHtmlElement) documentElement :: HTMLDocument -> Effect (Maybe HTMLHtmlElement) documentElement doc = toMaybe <$> runEffectFn1 _documentElement doc foreign import _head :: EffectFn1 HTMLDocument (Nullable HTMLElement) head :: HTMLDocument -> Effect (Maybe HTMLElement) head doc = toMaybe <$> runEffectFn1 _head doc foreign import _body :: EffectFn1 HTMLDocument (Nullable HTMLElement) body :: HTMLDocument -> Effect (Maybe HTMLElement) body doc = toMaybe <$> runEffectFn1 _body doc foreign import _readyState :: EffectFn1 HTMLDocument String readyState :: HTMLDocument -> Effect ReadyState readyState doc = (fromMaybe ReadyState.Loading <<< ReadyState.parse) <$> (runEffectFn1 _readyState doc) foreign import _visibilityState :: EffectFn1 HTMLDocument String visibilityState :: HTMLDocument -> Effect VisibilityState visibilityState doc = (fromMaybe VisibilityState.Visible <<< VisibilityState.parse) <$> (runEffectFn1 _visibilityState doc) foreign import _activeElement :: EffectFn1 HTMLDocument (Nullable HTMLElement) activeElement :: HTMLDocument -> Effect (Maybe HTMLElement) activeElement doc = toMaybe <$> (runEffectFn1 _activeElement doc) foreign import _currentScript :: EffectFn1 HTMLDocument (Nullable HTMLScriptElement) currentScript :: HTMLDocument -> Effect (Maybe HTMLScriptElement) currentScript doc = toMaybe <$> (runEffectFn1 _currentScript doc) foreign import _referrer :: EffectFn1 HTMLDocument String referrer :: HTMLDocument -> Effect String referrer doc = runEffectFn1 _referrer doc foreign import _title :: EffectFn1 HTMLDocument String title :: HTMLDocument -> Effect String title doc = runEffectFn1 _title doc foreign import _setTitle :: EffectFn2 String HTMLDocument Unit setTitle :: String -> HTMLDocument -> Effect Unit setTitle newTitle doc = runEffectFn2 _setTitle newTitle doc