1
0
Fork 0
mirror of https://code.sup39.dev/repos/Wqawg synced 2025-01-11 02:16:46 +09:00
vervis/src/Vervis/Widget/Discussion.hs

71 lines
2.1 KiB
Haskell
Raw Normal View History

2016-05-18 19:10:07 +09:00
{- This file is part of Vervis.
-
- Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
-
- Copying is an act of love. Please copy, reuse and share.
-
- The author(s) have dedicated all copyright and related and neighboring
- rights to this software to the public domain worldwide. This software is
- distributed without any warranty.
-
- You should have received a copy of the CC0 Public Domain Dedication along
- with this software. If not, see
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
module Vervis.Widget.Discussion
2016-05-20 01:58:23 +09:00
( messageW
, discussionW
2016-05-18 19:10:07 +09:00
)
where
import Prelude
import Control.Monad.IO.Class (liftIO)
import Data.Foldable (traverse_)
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Data.Time.Clock (UTCTime, diffUTCTime, getCurrentTime)
import Data.Tree (Tree (..))
import Text.Cassius (cassiusFile)
2016-05-20 07:07:25 +09:00
import Yesod.Core (Route)
import Yesod.Core.Handler (newIdent)
import Yesod.Core.Widget (whamlet, toWidget, handlerToWidget)
import Data.EventTime.Local (intervalToEventTime, showEventTime)
import Data.Time.Clock.Local ()
2016-05-20 01:58:23 +09:00
import Vervis.Discussion (getDiscussionTree)
2016-05-18 19:10:07 +09:00
import Vervis.Foundation
import Vervis.MediaType (MediaType (Markdown))
import Vervis.Model
import Vervis.Render (renderSourceT)
2016-05-18 19:10:07 +09:00
import Vervis.Settings (widgetFile)
2016-05-20 07:07:25 +09:00
messageW :: UTCTime -> Sharer -> Message -> (Int -> Route App) -> Widget
messageW now shr msg reply =
$(widgetFile "discussion/widget/message")
2016-05-20 07:07:25 +09:00
messageTreeW
:: (Int -> Route App)
-> Text
-> UTCTime
-> Tree (Message, Sharer)
-> Widget
messageTreeW reply cReplies now t = go t
where
go (Node (message, sharer) trees) = do
2016-05-20 07:07:25 +09:00
messageW now sharer message reply
[whamlet|
<div .#{cReplies}>
$forall tree <- trees
^{go tree}
|]
discussionW :: AppDB DiscussionId -> (Int -> Route App) -> Widget
discussionW getdid reply = do
forest <- handlerToWidget $ getDiscussionTree getdid
cReplies <- newIdent
now <- liftIO getCurrentTime
toWidget $(cassiusFile "templates/discussion/widget/tree.cassius")
2016-05-20 07:07:25 +09:00
traverse_ (messageTreeW reply cReplies now) forest