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)