Skip to content

easafe/purescript-flame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a5cef59 · Jul 19, 2023
Jun 6, 2022
Jun 14, 2022
Nov 7, 2021
Aug 28, 2022
Sep 16, 2021
Dec 17, 2022
Sep 22, 2022
Feb 4, 2022
Aug 28, 2022
Apr 18, 2019
Nov 7, 2021
Jan 17, 2023
May 9, 2022
Jul 19, 2023
Sep 22, 2022
Aug 28, 2022
May 8, 2022

Repository files navigation

Flame build status

Flame is a fast & simple framework inspired by the Elm architecture for building web applications in PureScript

Documentation

See the project page or pursuit

Examples

See the examples folder

Quick start

Install:

spago install flame

Example counter app:

module Counter.Main where

import Prelude

import Effect (Effect)
import Flame (Html, QuerySelector(..), Subscription)
-- Side effects free updating; see docs for other examples
import Flame.Application.NoEffects as FAN
import Flame.Html.Element as HE
import Flame.Html.Attribute as HA

-- | The model represents the state of the app
type Model = Int

-- | Data type used to represent events
data Message = Increment | Decrement

-- | Initial state of the app
init :: Model
init = 0

-- | `update` is called to handle events
update :: Model -> Message -> Model
update model = case _ of
      Increment -> model + 1
      Decrement -> model - 1

-- | `view` is called whenever the model is updated
view :: Model -> Html Message
view model = HE.main "main" [
      HE.button [HA.onClick Decrement] "-",
      HE.text $ show model,
      HE.button [HA.onClick Increment] "+"
]

-- | Events that come from outside the `view`
subscribe :: Array (Subscription Message)
subscribe = []

-- | Mount the application on the given selector
main :: Effect Unit
main = FAN.mount_ (QuerySelector "body") {
      init,
      view,
      update,
      subscribe
}

Tools

breeze can be used to generate Flame markup from HTML

Licensing

Licenses for loadash, stage0 and snabbdom-to-html added under licenses since parts of the rendering code was adapted from these projects

Funding

If this project is useful for you, consider throwing a buck to keep development possible