sectioned

This commit is contained in:
goolord 2019-05-06 11:39:16 -04:00
parent fb6a80c49e
commit 47bd6c4685
3 changed files with 29 additions and 2 deletions

View File

@ -21,6 +21,7 @@ library
, colonnade >= 1.1.1 && < 1.3 , colonnade >= 1.1.1 && < 1.3
, lucid >= 2.9 && < 3.0 , lucid >= 2.9 && < 3.0
, text >= 1.2 && < 1.3 , text >= 1.2 && < 1.3
, vector >= 0.10 && < 0.13
default-language: Haskell2010 default-language: Haskell2010
source-repository head source-repository head

View File

@ -40,13 +40,15 @@ import Data.String (IsString(..))
import Data.Maybe (listToMaybe) import Data.Maybe (listToMaybe)
import Data.Char (isSpace) import Data.Char (isSpace)
import Control.Applicative (liftA2) import Control.Applicative (liftA2)
import Lucid import Lucid hiding (for_)
import qualified Colonnade as Col import qualified Colonnade as Col
import qualified Data.List as List import qualified Data.List as List
import qualified Colonnade.Encode as E import qualified Colonnade.Encode as E
import qualified Data.Text as Text import qualified Data.Text as Text
import qualified Data.Text.Lazy as LText import qualified Data.Text.Lazy as LText
import qualified Data.Text.Lazy.Builder as TBuilder import qualified Data.Text.Lazy.Builder as TBuilder
import qualified Data.Vector as V
import qualified Data.Text as T
-- $build -- $build
-- --
@ -264,4 +266,28 @@ htmlFromCell f (Cell attr content) = f attr content
-- situation, it is necessary to introduce 'Cell', which includes -- situation, it is necessary to introduce 'Cell', which includes
-- the possibility of attributes on the parent node. -- the possibility of attributes on the parent node.
sectioned ::
(Foldable f, E.Headedness h, Foldable g, Monoid c)
=> [Attribute] -- ^ @\<table\>@ tag attributes
-> Maybe ([Attribute], [Attribute])
-- ^ Attributes of @\<thead\>@ and its @\<tr\>@, pass 'Nothing' to omit @\<thead\>@
-> [Attribute] -- ^ @\<tbody\>@ tag attributes
-> (a -> [Attribute]) -- ^ @\<tr\>@ tag attributes for data rows
-> (b -> Cell c) -- ^ Section divider encoding strategy
-> Colonnade h a (Cell c) -- ^ Data encoding strategy
-> f (b, g a) -- ^ Collection of data
-> Html ()
sectioned tableAttrs mheadAttrs bodyAttrs trAttrs dividerContent colonnade@(E.Colonnade v) collection = do
pure ()
let vlen = V.length v
table_ tableAttrs $ do
for_ mheadAttrs $ \(headAttrs,headTrAttrs) ->
thead_ headAttrs . tr_ headTrAttrs $
E.headerMonadicGeneral_ colonnade (htmlFromCell th_)
tbody_ bodyAttrs $ forM_ collection $ \(b,as) -> do
let Cell attrs contents = dividerContent b
tr_ [] $ do
td_ ((colspan_ $ T.pack (show vlen)): attrs) contents
flip foldlMapM' as $ \a -> do
tr_ (trAttrs a) $ E.rowMonadic colonnade (htmlFromCell td_) a

View File

@ -17,7 +17,7 @@ library
exposed-modules: exposed-modules:
Yesod.Colonnade Yesod.Colonnade
build-depends: build-depends:
base >= 4.9.1.0 && < 4.12 base >= 4.9.1.0 && < 4.13
, colonnade >= 1.2 && < 1.3 , colonnade >= 1.2 && < 1.3
, yesod-core >= 1.6 && < 1.7 , yesod-core >= 1.6 && < 1.7
, conduit >= 1.3 && < 1.4 , conduit >= 1.3 && < 1.4