1 module Rakka.Wiki.Interpreter.Trackback
8 import Network.HTTP.Lucu.RFC1123DateTime
11 import Rakka.SystemConfig
12 import Rakka.TrackBack
14 import Rakka.Wiki.Interpreter
17 interpreters :: [Interpreter]
18 interpreters = [ trackbackURLInterp
23 trackbackURLInterp :: Interpreter
25 = InlineCommandInterpreter {
26 iciName = "trackbackURL"
28 = \ ctx _ -> case ctxPageName ctx of
30 -> return (Text "No trackbacks for this page.")
32 -> do BaseURI baseURI <- getSysConf (ctxSysConf ctx)
33 let uri = mkAuxiliaryURI baseURI ["trackback"] name
34 return $ ExternalLink uri (Just "Trackback URL")
38 trackbacksInterp :: Interpreter
40 = BlockCommandInterpreter {
41 bciName = "trackbacks"
44 do trackbacks <- case ctxPageName ctx of
48 -> getAttachment (ctxStorage ctx) name "trackbacks" Nothing
51 items <- mapM mkListItem trackbacks
53 let divElem = Div [("class", "trackbacks")] [list]
54 list = Block (List Bullet items)
59 mkListItem :: TrackBack -> IO ListItem
61 = do zonedTime <- utcToLocalZonedTime (tbTime tb)
63 let anchor = Just (Inline (ExternalLink (tbURL tb) label))
64 label = case (tbTitle tb, tbBlogName tb) of
65 (Nothing , Nothing ) -> Nothing
66 (Just title, Nothing ) -> Just title
67 (Nothing , Just blogName) -> Just blogName
68 (Just title, Just blogName) -> Just (title ++ " (" ++ blogName ++ ")")
69 date = Just ( Block ( Div [("class", "date")]
70 [Inline (Text (formatRFC1123DateTime zonedTime))]
73 excerpt = do e <- tbExcerpt tb
74 return $ Block $ Paragraph [Text e]
76 return $ catMaybes [anchor, date, excerpt]