------------------------------------------------------------------
-- |
-- Module      :  Data.DOM.JSMWExt
-- Copyright   :  (c) Dmitry Golubovsky, 2009
-- License     :  BSD-style
-- 
-- Maintainer  :  golubovsky@gmail.com
-- Stability   :  experimental
-- Portability :  portable
-- 
--
--
-- DOM extensions specific to JSMW
------------------------------------------------------------------

module Data.DOM.JSMWExt (
  addChildren
 ,alert
 ,status 
) where

import Data.DOM
import Data.DOM.Dom
import BrownPLT.JavaScript
import Language.JSMW.Monad

-- | Add multiple children to a node. Unlike 'addChild', this function
-- returns the parent element.

addChildren :: (CNode p, CNode c) => [Expression c] -> Expression p -> JSMW e (Expression p)

addChildren [] p = once =<< return p
addChildren (c:cs) p = do
  once =<< addChild c p
  addChildren cs p

-- | Pop up an alert window.

alert :: Expression String -> JSMW e (Expression ())

alert s = do
  vs <- once =<< return s
  once =<< return (CallExpr () (VarRef () (Id () "alert")) [vs /\ ()])

-- | Update window status line.

status :: Expression String -> JSMW e (Expression ())

status s = do
  vs <- once =<< return s
  writeStmt $ ExprStmt () $ AssignExpr () OpAssign (VarRef () (Id () "window.status")) (vs /\ ())
  return $ NullLit ()