1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.View.Format
    3   ( htmlFormats
    4   ) where
    5 
    6 import Control.Monad (forM_)
    7 import Data.Function (on)
    8 import Data.List (groupBy, sortBy, intersperse)
    9 import qualified Text.Blaze.Html5 as H
   10 import qualified Text.Blaze.Html5.Attributes as HA
   11 
   12 import Databrary.Has (view)
   13 import qualified Databrary.Store.Config as Conf
   14 import Databrary.Model.Format
   15 import Databrary.Service.Messages
   16 import Databrary.Action
   17 import Databrary.View.Html
   18 import Databrary.View.Template
   19 
   20 htmlFormats :: RequestContext -> H.Html
   21 htmlFormats req = htmlTemplate req (Just $ msg "help.formats.title") $ \_ ->
   22   H.article H.! HA.class_ "wrap" $
   23     H.div H.! HA.class_ "row" $ do
   24       H.p $ H.preEscapedText $ msg "help.formats.body"
   25       H.div H.! HA.class_ "col" $
   26         H.table $
   27           forM_ (groupBy (onfmt $ ((==) EQ .) . mimeTypeTopCompare) $ sortBy (onfmt compare) allFormats) $ \group ->
   28             H.tbody $ do
   29               H.tr H.! HA.class_ "hr hr-big" $
   30                 H.th H.! HA.colspan "2" $ H.text $ msg (Conf.Path ["format", "list", mimeTypeTop (formatMimeType (head group))])
   31               H.tr H.! HA.class_ "hr" $ do
   32                 H.th H.! HA.class_ "th-right" $ H.text $ msg "format.list.extension"
   33                 H.th $ H.text $ msg "format.list.description"
   34               forM_ group $ \fmt ->
   35                 H.tr $ do
   36                   H.td H.! HA.class_ "th-right" $ mapM_ byteStringHtml $ intersperse "," $ formatExtension fmt
   37                   H.td $ H.text $ formatName fmt
   38   where
   39   msg m = getMessage m (view req)
   40   onfmt = (`on` formatMimeType)