Cabal-Version: >= 1.2
Name: jsmw
Version: 0.1
Copyright: 2009, Dmitry Golubovsky
Maintainer: golubovsky@gmail.com
License: BSD3
License-File: LICENSE
Build-Type: Simple
Author: Dmitry Golubovsky
Synopsis: Javascript Monadic Writer base package.
Description:
An EDSL inspired in part by HJ(ava)Script and HSP aimed at coding in typed
Javascript. It uses WebBits as the underlying representation of Javascript.
.
This package provides the basic API sufficient to create simple dynamic web pages.
.
Below is a simple example of a program that increments or decrements a value
in an input field depending on whether /Enter/ or /Shift-Enter/ was pressed.
.
Save this program in a file, and run @runghc@ on the file. Javascript will be output
to be placed into HEAD element of a blank HTML page. Give the page body attribute:
.
>
.
to run the script when the page loads.
.
A live example of this program is available here:
.
.
> module Main where
>
> import Prelude hiding (putStrLn)
> import System.IO.UTF8
> import BrownPLT.JavaScript
> import BrownPLT.JavaScript.PrettyPrint
> import Control.Monad
> import Language.JSMW
> import Data.DOM
> import Data.DOM.Dom
> import Data.DOM.Html2
> import Data.DOM.Events
> import Data.DOM.KeyEvent
> import Data.DOM.HTMLHRElement
> import Data.DOM.HTMLInputElement
>
> main = putStrLn $ show $ stmt $
> FunctionStmt undefined (Id undefined "main") [] (getBlock ( runJSMW 0 q))
>
>
> q = do
> passive (mkText $ string
> "Example 1: Press Enter to increase value, Shift-Enter to decrease value")
> passive mkHr
> mkInput `container` (do
> setHandler "keypress" plusOne
> ask >>= set'value (string "0") >>= focus)
>
> plusOne :: OnHandler TKeyEvent THTMLInputElement
>
> plusOne e = do
> c <- getm'keyCode e
> switch (c) $ do
> cDOM_VK_ENTER --> do i <- ask
> v <- getm'value i
> vv <- switch v $ do
> "" --> stringM "0"
> none (return v)
> n <- parseInt vv 0
> shft <- get'shiftKey e
> n2 <- switch shft $ do
> True --> return (n - number 1)
> False --> return (n + number 1)
> once =<< (toString n2 >>= flip set'value i)
> return false
> none (return true)
>
Category: Language
Library
build-depends: base >= 4.0.0, mtl, WebBits == 0.15, DOM == 2.0.1
Extensions: FlexibleInstances, TypeSynonymInstances, MultiParamTypeClasses,
FunctionalDependencies, CPP
Exposed-modules:
Language.JSMW, Language.JSMW.Monad, Language.JSMW.Arith,
Language.JSMW.Cond, Data.DOM.JSMWExt, Data.JSRef