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