Advertisement
Guest User

Untitled

a guest
Mar 27th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {-# LANGUAGE OverloadedStrings #-}
  2.  
  3. import           Clay as C
  4. import           Control.Monad.Trans (liftIO)
  5. import qualified Data.Text as T
  6. import qualified Data.Text.Lazy as L
  7. import qualified Database.PostgreSQL.Simple as SQL
  8. import           Database.PostgreSQL.Simple.FromRow (FromRow, fromRow, field)
  9. import           Lucid
  10. import           Network.Wai.Middleware.RequestLogger (logStdoutDev)
  11. import           Network.Wai.Middleware.Static (addBase, staticPolicy)
  12. import qualified Web.Scotty as S
  13.  
  14.  
  15. data Bmxrider = Bmxrider
  16.     { name :: T.Text
  17.     , image :: T.Text
  18.     } deriving Show
  19.  
  20. instance FromRow Bmxrider where
  21.     fromRow = Bmxrider <$> field <*> field
  22.  
  23.  
  24. myCss :: C.Css
  25. myCss = do
  26.     C.a C.# C.byClass "aCss" C.? do
  27.         C.textDecoration  C.none
  28.         C.color           C.inherit
  29.     C.body C.? do
  30.         C.backgroundColor  C.azure
  31.     C.div C.# C.byClass "divCss" C.? do
  32.         C.backgroundColor  C.beige
  33.         C.border           C.solid (C.px 1) C.black
  34.         C.margin           (C.em 1) (C.em 1) (C.em 1) (C.em 1)
  35.         C.width            (C.px 320)
  36.         C.textAlign        C.center
  37.         C.float            C.floatLeft
  38.     C.img C.# C.byClass "imgCss" C.? do
  39.         C.width            (C.px 320)
  40.         C.height           (C.px 240)
  41.     C.p C.# C.byClass "pCss" C.? do
  42.         C.fontWeight C.bold
  43.  
  44. getRiders :: IO [Bmxrider]
  45. getRiders = do
  46.     conn <- SQL.connectPostgreSQL "host='localhost' port=5432 dbname=bmxriders user=bmxrideruser password='bmxrideruser'"
  47.     res <- SQL.query_ conn "SELECT name, image FROM bmxrider" :: IO [Bmxrider]
  48.     SQL.close conn
  49.     return res
  50.  
  51. formatRider :: Bmxrider -> Html ()
  52. formatRider (Bmxrider name image) =
  53.     a_ [class_ "aCss", href_ image] $ do
  54.         div_ [class_ "divCss"] $ do
  55.             p_ [class_ "pCss"] $ toHtml name
  56.             img_ [class_ "imgCss", src_ image]
  57.  
  58. generatePage :: [Bmxrider] -> L.Text
  59. generatePage riders = renderText $ html_ $ do
  60.     head_ $ do
  61.         style_ $ L.toStrict $ C.render myCss
  62.         title_ "Bmx riders"
  63.     body_ $ do
  64.         h1_ "Bmx riders"
  65.         toHtml (mapM_ formatRider riders)
  66.  
  67. main = S.scotty 3000 $ do
  68.  
  69.     S.middleware logStdoutDev
  70.     S.middleware $ staticPolicy $ addBase "img"
  71.  
  72.     S.get "/" $ do
  73.         riders <- liftIO getRiders
  74.         liftIO $ print riders
  75.         S.html $ generatePage riders
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement