Made notes public by default and added an RSS feed
This commit is contained in:
parent
3476642fbb
commit
8ed3965b7e
|
@ -8,6 +8,7 @@
|
||||||
-- notes
|
-- notes
|
||||||
!/#UserNameP/notes NotesR GET
|
!/#UserNameP/notes NotesR GET
|
||||||
!/#UserNameP/notes/add AddNoteViewR GET
|
!/#UserNameP/notes/add AddNoteViewR GET
|
||||||
|
!/#UserNameP/notes/feed.xml NotesFeedR GET
|
||||||
!/#UserNameP/notes/#NtSlug NoteR GET
|
!/#UserNameP/notes/#NtSlug NoteR GET
|
||||||
!/api/note/add AddNoteR POST
|
!/api/note/add AddNoteR POST
|
||||||
!/api/note/#Int64 DeleteNoteR DELETE
|
!/api/note/#Int64 DeleteNoteR DELETE
|
||||||
|
|
|
@ -5,23 +5,25 @@ import Import
|
||||||
import Handler.Common (lookupPagingParams)
|
import Handler.Common (lookupPagingParams)
|
||||||
import qualified Data.Aeson as A
|
import qualified Data.Aeson as A
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import Yesod.RssFeed
|
||||||
|
import Text.Blaze.Html (toHtml)
|
||||||
|
import qualified Text.Blaze.Html5 as H
|
||||||
|
|
||||||
getNotesR :: UserNameP -> Handler Html
|
getNotesR :: UserNameP -> Handler Html
|
||||||
getNotesR unamep@(UserNameP uname) = do
|
getNotesR unamep@(UserNameP uname) = do
|
||||||
void requireAuthId
|
|
||||||
(limit', page') <- lookupPagingParams
|
(limit', page') <- lookupPagingParams
|
||||||
let queryp = "query" :: Text
|
let queryp = "query" :: Text
|
||||||
mquery <- lookupGetParam queryp
|
mquery <- lookupGetParam queryp
|
||||||
let limit = maybe 20 fromIntegral limit'
|
let limit = maybe 20 fromIntegral limit'
|
||||||
page = maybe 1 fromIntegral page'
|
page = maybe 1 fromIntegral page'
|
||||||
mqueryp = fmap (\q -> (queryp, q)) mquery
|
mqueryp = fmap (\q -> (queryp, q)) mquery
|
||||||
(bcount, notes) <-
|
(bcount, notes) <- runDB $ do
|
||||||
runDB $
|
Entity userId _ <- getBy404 (UniqueUserName uname)
|
||||||
do Entity userId _ <- getBy404 (UniqueUserName uname)
|
getNoteList userId mquery limit page
|
||||||
getNoteList userId mquery limit page
|
|
||||||
req <- getRequest
|
req <- getRequest
|
||||||
mroute <- getCurrentRoute
|
mroute <- getCurrentRoute
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
|
rssLink (NotesFeedR unamep) "feed"
|
||||||
let pager = $(widgetFile "pager")
|
let pager = $(widgetFile "pager")
|
||||||
search = $(widgetFile "search")
|
search = $(widgetFile "search")
|
||||||
renderEl = "notes" :: Text
|
renderEl = "notes" :: Text
|
||||||
|
@ -36,7 +38,6 @@ getNotesR unamep@(UserNameP uname) = do
|
||||||
|
|
||||||
getNoteR :: UserNameP -> NtSlug -> Handler Html
|
getNoteR :: UserNameP -> NtSlug -> Handler Html
|
||||||
getNoteR unamep@(UserNameP uname) slug = do
|
getNoteR unamep@(UserNameP uname) slug = do
|
||||||
void requireAuthId
|
|
||||||
let renderEl = "note" :: Text
|
let renderEl = "note" :: Text
|
||||||
note <-
|
note <-
|
||||||
runDB $
|
runDB $
|
||||||
|
@ -130,3 +131,37 @@ _toNote userId NoteForm {..} = do
|
||||||
(fromMaybe False _isMarkdown)
|
(fromMaybe False _isMarkdown)
|
||||||
(fromMaybe time (fmap unUTCTimeStr _created))
|
(fromMaybe time (fmap unUTCTimeStr _created))
|
||||||
(fromMaybe time (fmap unUTCTimeStr _updated))
|
(fromMaybe time (fmap unUTCTimeStr _updated))
|
||||||
|
|
||||||
|
noteToRssEntry :: UserNameP -> Entity Note -> FeedEntry (Route App)
|
||||||
|
noteToRssEntry usernamep (Entity entryId entry) =
|
||||||
|
FeedEntry { feedEntryLink = NoteR usernamep (noteSlug entry)
|
||||||
|
, feedEntryUpdated = (noteUpdated entry)
|
||||||
|
, feedEntryTitle = (noteTitle entry)
|
||||||
|
, feedEntryContent = (toHtml (noteText entry))
|
||||||
|
, feedEntryEnclosure = Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
getNotesFeedR :: UserNameP -> Handler RepRss
|
||||||
|
getNotesFeedR unamep@(UserNameP uname) = do
|
||||||
|
(limit', page') <- lookupPagingParams
|
||||||
|
let queryp = "query" :: Text
|
||||||
|
mquery <- lookupGetParam queryp
|
||||||
|
let limit = maybe 20 fromIntegral limit'
|
||||||
|
page = maybe 1 fromIntegral page'
|
||||||
|
(bcount, notes) <- runDB $ do
|
||||||
|
Entity userId _ <- getBy404 (UniqueUserName uname)
|
||||||
|
getNoteList userId mquery limit page
|
||||||
|
let (descr :: Html) = toHtml $ H.text (uname <> " notes")
|
||||||
|
let entries = map (noteToRssEntry unamep) notes
|
||||||
|
updated <- case maximumMay (map feedEntryUpdated entries) of
|
||||||
|
Nothing -> liftIO $ getCurrentTime
|
||||||
|
Just m -> return m
|
||||||
|
rssFeed $ Feed (uname <> " notes")
|
||||||
|
(NotesFeedR unamep)
|
||||||
|
(NotesR unamep)
|
||||||
|
uname
|
||||||
|
descr
|
||||||
|
"en"
|
||||||
|
updated
|
||||||
|
Nothing
|
||||||
|
entries
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
<div .w-100.mw8.center>
|
<div .w-100.mw8.center>
|
||||||
<div .fr.nt1 style="margin-bottom:.7rem">
|
<div .fr.nt1 style="margin-bottom:.7rem">
|
||||||
^{search}
|
^{search}
|
||||||
|
<div .di>
|
||||||
|
<div .fr.f6.pr3.dib.mb2>
|
||||||
|
<a .link.gold.hover-orange
|
||||||
|
href="@{NotesFeedR unamep}">RSS
|
||||||
|
|
||||||
<span .db .mb3>#{T.append "" (maybe "You have" (const "Found") mquery)} #{bcount} notes:
|
<span .db .mb3>#{T.append "" (maybe "You have" (const "Found") mquery)} #{bcount} notes:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue