dingo-widgets-0.0.2: src/Dingo/Widget/Panel.hs
module Dingo.Widget.Panel ( Panel
, mkPanel
) where
import Data.Aeson (FromJSON(..), ToJSON(..), Value(..))
import Data.Monoid (mempty)
import Data.Typeable (Typeable)
import Dingo.Callback
import Dingo.Widget
import Text.Blaze ((!), toValue)
import Text.Julius (julius)
import qualified Data.Map as M
import qualified Text.Blaze.Html4.Strict as H
import qualified Text.Blaze.Html4.Strict.Attributes as A
-- Panel type.
data Panel =
Panel { panelId :: WidgetId
}
deriving (Show, Typeable)
data PanelState = PanelState ()
deriving (Show, Typeable)
instance FromJSON PanelState where
parseJSON _ = return $ PanelState ()
instance ToJSON PanelState where
toJSON (PanelState ()) = Object M.empty
-- Panel is a widget.
instance Widget Panel PanelState where
-- Get the widget ID.
getWidgetId = panelId
-- Render panel to HTML.
renderWidget w =
H.div ! A.id (toValue $ panelId w) $ do
mempty
-- Show widget.
showWidget w s = show w ++ "->" ++ show s
-- Client state handling.
encodeClientStateJs _ = [julius| null |]
decodeClientStateJs _ = [julius| null |]
-- Make a new panel.
mkPanel :: Widget w s => w -> CallbackM Panel
mkPanel pw = addWidget pw (\i -> return (Panel i, PanelState ()))