dingo-core-0.0.2: src/Dingo/Internal/Application.hs
module Dingo.Internal.Application
( Application
, mkApplication
, setApplicationTitle
) where
import Data.Aeson (Value, FromJSON(..), ToJSON(..), Value(..))
import Data.Text (Text)
import qualified Data.Text as T
import Data.Typeable (Typeable)
import Dingo.Internal.Base (zeroWidgetId, Command(..))
import Dingo.Internal.Callback (CallbackM, addCommand)
import Dingo.Internal.Widget (Widget(..))
import Text.Blaze (toHtml)
import Text.Julius (julius)
-- | Application widget. There is exactly one instance of this widget
-- per client browser.
data Application = Application
deriving (Show, Typeable)
-- Empty state.
data ApplicationState = ApplicationState ()
deriving (Show, Typeable)
-- Need dummy instance.
instance FromJSON ApplicationState where
parseJSON _ = return $ ApplicationState ()
-- Need dummy instance.
instance ToJSON ApplicationState where
toJSON _ = Null
-- Widget instance. We don't really need anything except
-- the widget ID.
instance Widget Application ApplicationState where
getWidgetId _ = zeroWidgetId -- Pre-rendered with this fixed id.
renderWidget _ = toHtml T.empty
encodeClientStateJs _ = [julius| null |]
decodeClientStateJs _ = [julius| null |]
showWidget _ _ = "Application"
-- Instance of the application widget.
mkApplication :: Application
mkApplication = Application
-- | Set application title.
setApplicationTitle :: Application -> Text -> CallbackM ()
setApplicationTitle _ title = addCommand $ SetTitle title