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
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
instance Widget Panel PanelState where
getWidgetId = panelId
renderWidget w =
H.div ! A.id (toValue $ panelId w) $ do
mempty
showWidget w s = show w ++ "->" ++ show s
encodeClientStateJs _ = [julius| null |]
decodeClientStateJs _ = [julius| null |]
mkPanel :: Widget w s => w -> CallbackM Panel
mkPanel pw = addWidget pw (\i -> return (Panel i, PanelState ()))