1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.Controller.Format
    3   ( viewFormatsHandler
    4   , formatIcon
    5   ) where
    6 
    7 import Control.Monad.Reader (asks)
    8 import qualified Data.Invertible as I
    9 import Data.Monoid ((<>))
   10 import System.Posix.FilePath (splitFileName, splitExtension)
   11 import qualified Web.Route.Invertible as R
   12 
   13 import Databrary.Model.Format
   14 import Databrary.Action.Run
   15 import Databrary.Action
   16 import Databrary.Controller.Web
   17 import Databrary.Controller.Angular
   18 import Databrary.View.Format
   19 
   20 -- NOROUTE: Not in routeMapInvertivle; only used for otherRouteResponse
   21 formatIcon :: ActionRoute Format
   22 formatIcon = (pf I.:<->: fp) `R.mapActionRoute` webFile where
   23   fp f = Just $ staticPath
   24     [ "images", "filetype", "16px"
   25     , case formatExtension f of { e:_ -> e ; _ -> "_blank" } <> ".svg"
   26     ]
   27   pf (Just (StaticPath p))
   28     | ("images/filetype/16px/", i) <- splitFileName p
   29     , (e, ".svg") <- splitExtension i
   30     , Just f <- getFormatByExtension e = f
   31   pf _ = unknownFormat
   32 
   33 viewFormatsHandler :: Action -- TODO: GET only
   34 viewFormatsHandler = withoutAuth $ do
   35   angular
   36   okResponse [] <$> asks htmlFormats