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)