1 {-# LANGUAGE OverloadedStrings #-}
    2 module 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 Has (view)
   13 import qualified Store.Config as Conf
   14 import Model.Format
   15 import Service.Messages
   16 import Action
   17 import View.Html
   18 import 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)