diff --git a/reflex-dom-colonnade/src/Reflex/Dom/Colonnade.hs b/reflex-dom-colonnade/src/Reflex/Dom/Colonnade.hs
index bc06114..04779f9 100644
--- a/reflex-dom-colonnade/src/Reflex/Dom/Colonnade.hs
+++ b/reflex-dom-colonnade/src/Reflex/Dom/Colonnade.hs
@@ -12,11 +12,9 @@ module Reflex.Dom.Colonnade
-- * Table Encoders
, basic
, static
- , eventful
- , dynamic
- , dynamicEventful
, capped
- , cappedEventful
+ , dynamic
+ , dynamicCapped
-- * Cell Functions
, cell
, charCell
@@ -32,10 +30,8 @@ import qualified Data.Text.Lazy as LT
import qualified Data.Text.Lazy.Builder as LT
import qualified Data.Map.Strict as M
import Data.Foldable (Foldable(..),for_)
-import Data.Traversable (for)
import Data.Semigroup (Semigroup(..))
import Control.Applicative (liftA2)
-import Control.Monad (void)
import Reflex.Dom
import Colonnade (Colonnade,Headed,Fascia,Cornice)
import qualified Colonnade.Encode as E
@@ -107,15 +103,15 @@ body bodyAttrs trAttrs colonnade collection =
E.rowMonoidal colonnade (WrappedApplicative . elFromCell "td") a
static ::
- (DomBuilder t m, PostBuild t m, Foldable f, Foldable h)
+ (DomBuilder t m, PostBuild t m, Foldable f, Foldable h, Monoid e)
=> M.Map T.Text T.Text -- ^ @\
@ tag attributes
-> Maybe (M.Map T.Text T.Text, M.Map T.Text T.Text)
-- ^ Attributes of @\@ and its @\@, pass 'Nothing' to omit @\@
-> M.Map T.Text T.Text -- ^ @\
@ tag attributes
-> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Colonnade h a (Cell t m ()) -- ^ Data encoding strategy
+ -> Colonnade h a (Cell t m e) -- ^ Data encoding strategy
-> f a -- ^ Collection of data
- -> m ()
+ -> m e
static tableAttrs mheadAttrs bodyAttrs trAttrs colonnade collection =
elAttr "table" tableAttrs $ do
for_ mheadAttrs $ \(headAttrs,headTrAttrs) ->
@@ -123,114 +119,91 @@ static tableAttrs mheadAttrs bodyAttrs trAttrs colonnade collection =
E.headerMonadicGeneral_ colonnade (elFromCell "th")
body bodyAttrs trAttrs colonnade collection
-eventful ::
- (DomBuilder t m, PostBuild t m, Foldable f, Foldable h, Semigroup e)
+encodeCorniceHead ::
+ (DomBuilder t m, PostBuild t m, Monoid e)
+ => M.Map T.Text T.Text
+ -> Fascia p (M.Map T.Text T.Text)
+ -> E.AnnotatedCornice p a (Cell t m e)
+ -> m e
+encodeCorniceHead headAttrs fascia annCornice =
+ elAttr "thead" headAttrs (unWrappedApplicative thead)
+ where thead = E.headersMonoidal (Just (fascia, addAttr)) [(th,id)] annCornice
+ th size (Cell attrs contents) = WrappedApplicative (elDynAttr "th" (fmap addColspan attrs) contents)
+ where addColspan = M.insert "colspan" (T.pack (show size))
+ addAttr attrs = WrappedApplicative . elAttr "tr" attrs . unWrappedApplicative
+
+capped ::
+ (DomBuilder t m, PostBuild t m, MonadHold t m, Foldable f, Monoid e)
=> M.Map T.Text T.Text -- ^ @\@ tag attributes
- -> Maybe (M.Map T.Text T.Text, M.Map T.Text T.Text)
- -- ^ Attributes of @\@ and its @\@, pass 'Nothing' to omit @\@
+ -> M.Map T.Text T.Text -- ^ @\@ tag attributes
-> M.Map T.Text T.Text -- ^ @\
@ tag attributes
-> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Colonnade h a (Cell t m (Event t e)) -- ^ Data encoding strategy
+ -> Fascia p (M.Map T.Text T.Text) -- ^ Attributes for @\
@ elements in the @\@
+ -> Cornice p a (Cell t m e) -- ^ Data encoding strategy
-> f a -- ^ Collection of data
- -> m (Event t e)
-eventful tableAttrs mheadAttrs bodyAttrs trAttrs colonnade collection =
+ -> m e
+capped tableAttrs headAttrs bodyAttrs trAttrs fascia cornice collection =
elAttr "table" tableAttrs $ do
- eHead <- for mheadAttrs $ \(headAttrs,headTrAttrs) ->
- elAttr "thead" headAttrs . elAttr "tr" headTrAttrs $
- E.headerMonadicGeneral colonnade (elFromCell "th")
- eBody <- body bodyAttrs trAttrs colonnade collection
- return (maybe never id eHead <> eBody)
+ h <- encodeCorniceHead headAttrs fascia (E.annotate cornice)
+ b <- body bodyAttrs trAttrs (E.discard cornice) collection
+ return (h `mappend` b)
dynamicBody :: (DomBuilder t m, PostBuild t m, Foldable f, Semigroup e, Monoid e)
=> Dynamic t (M.Map T.Text T.Text)
-> (a -> M.Map T.Text T.Text)
-> Colonnade p a (Cell t m e)
- -> f (Dynamic t a)
+ -> Dynamic t (f a)
-> m (Event t e)
-dynamicBody bodyAttrs trAttrs colonnade collection =
- elDynAttr "tbody" bodyAttrs . unWrappedApplicative . flip foldMap collection $ \aDyn ->
- WrappedApplicative .
- elDynAttr "tr" (fmap trAttrs aDyn) $
- dyn (fmap (unWrappedApplicative . E.rowMonoidal colonnade (WrappedApplicative . elFromCell "td")) aDyn)
+dynamicBody bodyAttrs trAttrs colonnade dynCollection =
+ elDynAttr "tbody" bodyAttrs . dyn . ffor dynCollection $ \collection ->
+ unWrappedApplicative .
+ flip foldMap collection $ \a ->
+ WrappedApplicative .
+ elAttr "tr" (trAttrs a) .
+ unWrappedApplicative . E.rowMonoidal colonnade (WrappedApplicative . elFromCell "td") $ a
dynamic ::
- (DomBuilder t m, PostBuild t m, Foldable f, Foldable h)
+ (DomBuilder t m, PostBuild t m, Foldable f, Foldable h, Semigroup e, Monoid e)
=> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
-> Maybe (Dynamic t (M.Map T.Text T.Text), Dynamic t (M.Map T.Text T.Text))
-- ^ Attributes of @\@ and its @\@, pass 'Nothing' to omit @\@
-> Dynamic t (M.Map T.Text T.Text) -- ^ @\
@ tag attributes
-> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Colonnade h a (Cell t m ()) -- ^ Data encoding strategy
- -> f (Dynamic t a) -- ^ Collection of data
- -> m ()
+ -> Colonnade h a (Cell t m e) -- ^ Data encoding strategy
+ -> Dynamic t (f a) -- ^ Collection of data
+ -> m (Event t e)
dynamic tableAttrs mheadAttrs bodyAttrs trAttrs colonnade collection =
elDynAttr "table" tableAttrs $ do
for_ mheadAttrs $ \(headAttrs,headTrAttrs) ->
elDynAttr "thead" headAttrs . elDynAttr "tr" headTrAttrs $
E.headerMonadicGeneral_ colonnade (elFromCell "th")
- void (dynamicBody bodyAttrs trAttrs colonnade collection)
+ dynamicBody bodyAttrs trAttrs colonnade collection
-dynamicEventful ::
- (DomBuilder t m, PostBuild t m, MonadHold t m, Foldable f, Foldable h, Semigroup e)
- => Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Maybe (Dynamic t (M.Map T.Text T.Text), Dynamic t (M.Map T.Text T.Text))
- -- ^ Attributes of @\@ and its @\@, pass 'Nothing' to omit @\@
- -> Dynamic t (M.Map T.Text T.Text) -- ^ @\
@ tag attributes
- -> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Colonnade h a (Cell t m (Event t e)) -- ^ Data encoding strategy
- -> f (Dynamic t a) -- ^ Collection of data
- -> m (Event t e)
-dynamicEventful tableAttrs mheadAttrs bodyAttrs trAttrs colonnade collection =
- elDynAttr "table" tableAttrs $ do
- eHead <- for mheadAttrs $ \(headAttrs,headTrAttrs) ->
- elDynAttr "thead" headAttrs . elDynAttr "tr" headTrAttrs $
- E.headerMonadicGeneral colonnade (elFromCell "th")
- eeBody <- dynamicBody bodyAttrs trAttrs colonnade collection
- eBody <- hold never eeBody
- return (maybe never id eHead <> switch eBody)
-
-encodeCorniceHead ::
+encodeCorniceHeadDynamic ::
(DomBuilder t m, PostBuild t m, Monoid e)
=> Dynamic t (M.Map T.Text T.Text)
-> Fascia p (Dynamic t (M.Map T.Text T.Text))
-> E.AnnotatedCornice p a (Cell t m e)
-> m e
-encodeCorniceHead headAttrs fascia annCornice =
+encodeCorniceHeadDynamic headAttrs fascia annCornice =
elDynAttr "thead" headAttrs (unWrappedApplicative thead)
where thead = E.headersMonoidal (Just (fascia, addAttr)) [(th,id)] annCornice
th size (Cell attrs contents) = WrappedApplicative (elDynAttr "th" (fmap addColspan attrs) contents)
where addColspan = M.insert "colspan" (T.pack (show size))
addAttr attrs = WrappedApplicative . elDynAttr "tr" attrs . unWrappedApplicative
-capped ::
- (DomBuilder t m, PostBuild t m, MonadHold t m, Foldable f)
+dynamicCapped ::
+ (DomBuilder t m, PostBuild t m, MonadHold t m, Foldable f, Semigroup e, Monoid e)
=> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
-> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
-> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
-> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
-> Fascia p (Dynamic t (M.Map T.Text T.Text)) -- ^ Attributes for @\
@ elements in the @\@
- -> Cornice p a (Cell t m ()) -- ^ Data encoding strategy
- -> f (Dynamic t a) -- ^ Collection of data
- -> m ()
-capped tableAttrs headAttrs bodyAttrs trAttrs fascia cornice collection =
- elDynAttr "table" tableAttrs $ do
- encodeCorniceHead headAttrs fascia (E.annotate cornice)
- void (dynamicBody bodyAttrs trAttrs (E.discard cornice) collection)
-
-cappedEventful ::
- forall t m f e p a.
- (DomBuilder t m, PostBuild t m, MonadHold t m, Foldable f, Semigroup e)
- => Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Dynamic t (M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> (a -> M.Map T.Text T.Text) -- ^ @\@ tag attributes
- -> Fascia p (Dynamic t (M.Map T.Text T.Text)) -- ^ Attributes for @\
@ elements in the @\@
- -> Cornice p a (Cell t m (Event t e)) -- ^ Data encoding strategy
- -> f (Dynamic t a) -- ^ Collection of data
+ -> Cornice p a (Cell t m e) -- ^ Data encoding strategy
+ -> Dynamic t (f a) -- ^ Collection of data
-> m (Event t e)
-cappedEventful tableAttrs headAttrs bodyAttrs trAttrs fascia cornice collection =
+dynamicCapped tableAttrs headAttrs bodyAttrs trAttrs fascia cornice collection =
elDynAttr "table" tableAttrs $ do
- eHead <- encodeCorniceHead headAttrs fascia (E.annotate cornice)
- eeBody <- dynamicBody bodyAttrs trAttrs (E.discard cornice) collection
- eBody <- hold never eeBody
- return (eHead <> switch eBody)
+ -- TODO: Figure out what this ignored argument represents and dont ignore it
+ _ <- encodeCorniceHeadDynamic headAttrs fascia (E.annotate cornice)
+ dynamicBody bodyAttrs trAttrs (E.discard cornice) collection