plzwrk-0.0.0.3: A front-end framework

Copyright(c) Mike Solomon 2020
LicenseGPL-3
Maintainermike@meeshkan.com
Stabilityexperimental
PortabilityPOSIX, Windows
Safe HaskellNone
LanguageHaskell2010

Web.Framework.Plzwrk

Description

This module contains the base functions for plzwrk, notably the family of plzwrk functions needed for plzwrk to work. It also exports most of the utility functions used for building web applications, like event handling and attribute wrangling.

Synopsis

Documentation

plzwrk Source #

Arguments

:: (state -> Node state jsval)

A function that takes a state and produces a DOM

-> state

An initial state

-> Browserful jsval

A browser implementation, ie Asterius or the mock browser

-> String

The id of the element into which the DOM is inserted. Note that plzwrk manages all children under this element. Touching the managed elements can break plzwrk.

-> IO ()

Returns nothing

The main function that makes a web app.

plzwrk' :: (state -> Node state jsval) -> state -> Browserful jsval -> IO () Source #

A variation of plzwrk that inserts the node as a child of the document's body.

plzwrk'_ :: (() -> Node () jsval) -> Browserful jsval -> IO () Source #

A variation of plzwrk that takes no state.

plzwrkSSR Source #

Arguments

:: (state -> Node state jsval)

A function that takes a state and produces a DOM

-> state

An initial state

-> Browserful jsval

A browser implementation, ie Asterius or the mock browser

-> String

The id of the element into which the DOM is inserted. Note that plzwrk manages all children under this element. Touching the managed elements can break plzwrk.

-> IO ()

Returns nothing

A variant of plzwrk that acts on a node already rendered to the DOM, ie by server-side rendering. It assumes the node has been rendered with the same state-to-node function as well as the same state.

toHTML Source #

Arguments

:: (state -> Node state jsval)

A function that takes a state and produces a DOM

-> state

An initial state

-> String

The resulting HTML

Converts a Node to HTML.

data Node s opq Source #

A DOM node. The easiest way to create nodes is using tags such as span or br. Nodes can be created for arbitrary tags using the Element constructor.

Node is parameterized by two types * s - the type of the state * opq - the type of an opaque object in JavaScript

Note that nodes, when passed as an arguemnt to plzwrk, need to be Applicative Functors in the form (s -> Node s opq).

Constructors

Element 

Fields

TextNode 

Fields

Instances
Show (Node s opq) Source # 
Instance details

Defined in Web.Framework.Plzwrk.Base

Methods

showsPrec :: Int -> Node s opq -> ShowS #

show :: Node s opq -> String #

showList :: [Node s opq] -> ShowS #

data Attributes s opq Source #

Attributes for a DOM Node. Attributes are parameterized by two types * s - the type of the state * opq - the type of an opaque object in JavaScript

You will rarely need to instantiate Attributes yourself, as it is easier to work with utility functions like wId, wStyle etc that produce Applicative Functors with signature (s -> Attributes s opq). These AFs are used in the Node data.

Instances
Show (Attributes s opq) Source # 
Instance details

Defined in Web.Framework.Plzwrk.Base

Methods

showsPrec :: Int -> Attributes s opq -> ShowS #

show :: Attributes s opq -> String #

showList :: [Attributes s opq] -> ShowS #

data Browserful jsval Source #

A data class holding functions that operate on opaque JavaScript types, parameterized by jsval. When possible, the real names of browser functions like addEventListener and appendChild are used.

Browserful is currently implemented as data instead of as a typeclass because it is unclear what type of additional monadic transformer around IO would be most appropriate to retain the state of jsval objects, whereas when part of a dataclass, the state retention is abstracted away.

Constructors

Browserful 

Fields

(<.>) :: (s -> Attributes s opq) -> (s -> Attributes s opq) -> s -> Attributes s opq Source #

Merges two Attributes

wStyle :: String -> String -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a single style.

wStyle' :: String -> String -> Attributes s opq Source #

Constrcts an Attributes from a single style.

wStyles :: [(String, String)] -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a list of styles.

wStyles' :: [(String, String)] -> Attributes s opq Source #

Constrcts an Attributes from a list of styles.

wClass :: String -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a single class.

wClass' :: String -> Attributes s opq Source #

Constrcts an Attributes from a single class.

wClasses :: [String] -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a list of clases.

wClasses' :: [String] -> Attributes s opq Source #

Constrcts an Attributes from a list of classes.

wOnClick :: (opq -> s -> IO s) -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from an onClick callback.

wOnClick' :: (opq -> s -> IO s) -> Attributes s opq Source #

Constrcts an Attributes from an onClick callback.

wId :: String -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor with a given id.

wId' :: String -> Attributes s opq Source #

Constrcts an Attributes with a given id.

wOnInput :: (opq -> s -> IO s) -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from an onInput callback.

wOnInput' :: (opq -> s -> IO s) -> Attributes s opq Source #

Constrcts an Attributes from an onInput callback.

wAttr :: String -> String -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a single attribute.

wAttr' :: String -> String -> Attributes s opq Source #

Constrcts an Attributes from a single attribute.

wAttrs :: [(String, String)] -> s -> Attributes s opq Source #

Constrcts a stateful Attributes applicative functor from a list of attributes.

wAttrs' :: [(String, String)] -> Attributes s opq Source #

Constrcts an Attributes from a list of attributes.

eventPreventDefault Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the event

-> IO ()

returns nothing

Take an event and prevent the default.

eventTargetBlur Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the event

-> IO ()

returns nothing

From an event, takes the target and blurs it.

eventTargetValue Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the event

-> IO (Maybe String)

the target value, or nothing if it doesn't exist

From an event, gets the target's value.

elementSetAttribute Source #

Arguments

:: Browserful jsval

The browser

-> jsval

the node

-> String

the attribute name

-> String

the attribute

-> IO ()

returns nothing

Sets on an element an attribute. See Element.setAttribute

elementTagName Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the element

-> IO (Maybe String)

Returns the tag name

Gets the tag name of an element. See Element.tagName

eventTargetAddEventListener Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the element

-> String

the listener name. note that this should be "click" or "input", not "onclick" nor "oninput"

-> jsval

the listener

-> IO ()

returns nothing

Takes a target and an event name and adds a listener. See EventTarget.addEventListener

eventTargetRemoveEventListener Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the element

-> String

the listener name. note that this should be "click" or "input", not "onclick" nor "oninput"

-> jsval

the listener

-> IO ()

returns nothing

Takes a target and an event name and removes a listener. See EventTarget.removeEventListener

getPropertyAsBool Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the object containing the property

-> String

the property name

-> IO (Maybe Bool)

the response if the property is a bool, else Nothing

Gets a JavaScript property as a bool, returning Nothing if the object being called is null or undefined or the property cannot be cast to a bool.

getPropertyAsDouble Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the object containing the property

-> String

the property name

-> IO (Maybe Double)

the response if the property is a double, else Nothing

Gets a JavaScript property as a double, returning Nothing if the object being called is null or undefined or the property cannot be cast to a double.

getPropertyAsInt Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the object containing the property

-> String

the property name

-> IO (Maybe Int)

the response if the property is an int, else Nothing

Gets a JavaScript property as an int, returning Nothing if the object being called is null or undefined or the property cannot be cast to an int.

getPropertyAsString Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the object containing the property

-> String

the property name

-> IO (Maybe String)

the response

Gets a JavaScript property as an string, returning Nothing if the object being called is null or undefined.

htmlElemenetClick :: Browserful jsval -> jsval -> IO () Source #

Takes an element and clicks it. Useful for testing. See HTMLElement.click

consoleLogS :: Browserful jsval -> String -> IO () Source #

Logs a string. See Console.log

nodeAppendChild Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the node

-> jsval

the child to append

-> IO ()

returns nothing

Takes a node and appends a child. See Node.appendChild

nodeChildNodes Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the node

-> IO (Maybe [jsval]) 

Get the children of a node. See Node.childNodes

nodeInsertBefore Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the parent element

-> jsval

the new node

-> jsval

the pre-existing node

-> IO ()

returns nothing

Inserts a node into an element before another node. See Node.insertBefore

nodeRemoveChild Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the parent element

-> jsval

the child to remove

-> IO ()

returns nothing

Removes a child from a parent node. See Node.removeChild

nodeTextContent Source #

Arguments

:: Browserful jsval

the browser

-> jsval

the node

-> IO (Maybe String)

the text content as a string

Gets the text content of a node. See Node.textContent