packages feed

yesod-examples-0.6.0: yesod/tutorial/mkToForm.hs

{-# LANGUAGE TypeFamilies, QuasiQuotes, GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
import Yesod
import Yesod.Helpers.Crud
import Yesod.Form.Jquery
import Yesod.Form.Nic
import Database.Persist.Sqlite
import Database.Persist.TH
import Data.Time (Day)
import MkToForm

jqueryDayField' :: YesodJquery m => FormFieldSettings -> FormletField s m Day
jqueryDayField' = jqueryDayField def
mkToForm (undefined :: Entry)

instance Item Entry where
    itemTitle = entryTitle

data Blog = Blog { pool :: ConnectionPool }

type EntryCrud = Crud Blog Entry

mkYesod "Blog" [$parseRoutes|
/ RootR GET
/entry/#EntryId EntryR GET
/admin AdminR EntryCrud defaultCrud
|]

instance Yesod Blog where
    approot _ = "http://localhost:3000"

instance YesodPersist Blog where
    type YesodDB Blog = SqlPersist
    runDB db = fmap pool getYesod >>= runSqlPool db

instance YesodJquery Blog
instance YesodNic Blog

getRootR = do
    entries <- runDB $ selectList [] [EntryDayDesc] 0 0
    defaultLayout $ do
        setTitle $ string "Yesod Blog Tutorial Homepage"
        addHamlet [$hamlet|
%h1 Archive
%ul
    $forall entries entry
        %li
            %a!href=@EntryR.fst.entry@ $entryTitle.snd.entry$
%p
    %a!href=@AdminR.CrudListR@ Admin
|]

getEntryR entryid = do
    entry <- runDB $ get404 entryid
    defaultLayout $ do
        setTitle $ string $ entryTitle entry
        addHamlet [$hamlet|
%h1 $entryTitle.entry$
%h2 $show.entryDay.entry$
$entryContent.entry$
|]

withBlog f = withSqlitePool "blog.db3" 8 $ \pool -> do
    flip runSqlPool pool $ runMigration $ do
        migrate (undefined :: Entry)
    f $ Blog pool

main = withBlog $ basicHandler 3000