Merge branch 'pr_implements_rss' of git://github.com/gradha/nimforum into gradha-pr-implements-rss
Conflicts: forum.nim main.tmpl
This commit is contained in:
commit
264d062bae
4 changed files with 110 additions and 17 deletions
11
forum.nim
11
forum.nim
|
|
@ -651,12 +651,16 @@ get "/":
|
|||
c.isThreadsList = true
|
||||
var count = 0
|
||||
resp genMain(c, genThreadsList(c, count),
|
||||
additionalHeaders = genRSSHeaders(c))
|
||||
additionalHeaders = genRSSHeaders(c), showRssLinks = true)
|
||||
|
||||
get "/threadActivity.xml":
|
||||
createTFD()
|
||||
c.isThreadsList = true
|
||||
resp genRSS(c), "application/atom+xml"
|
||||
resp genThreadsRSS(c), "application/atom+xml"
|
||||
|
||||
get "/postActivity.xml":
|
||||
createTFD()
|
||||
resp genPostsRSS(c), "application/atom+xml"
|
||||
|
||||
get "/t/@threadid/?@page?/?":
|
||||
createTFD()
|
||||
|
|
@ -706,7 +710,8 @@ get "/page/@page/?":
|
|||
let list = genThreadsList(c, count)
|
||||
if count == 0:
|
||||
pass()
|
||||
resp genMain(c, list, "Nimrod Forum - Page " & $c.pageNum, genRSSHeaders(c))
|
||||
resp genMain(c, list, "Nimrod Forum - Page " & $c.pageNum,
|
||||
genRSSHeaders(c), showRssLinks = true)
|
||||
|
||||
get "/profile/@nick/?":
|
||||
createTFD()
|
||||
|
|
|
|||
92
main.tmpl
92
main.tmpl
|
|
@ -1,6 +1,6 @@
|
|||
#! stdtmpl
|
||||
#proc genMain(c: var TForumData, content: string,
|
||||
# title = "Nimrod Forum", additional_headers = ""): string =
|
||||
#proc genMain(c: var TForumData, content: string, title = "Nimrod Forum",
|
||||
# additional_headers = "", showRssLinks = false): string =
|
||||
# result = ""
|
||||
# var stats: TForumStats
|
||||
# if c.isThreadsList: stats = c.getStats(false)
|
||||
|
|
@ -52,6 +52,20 @@
|
|||
#end if
|
||||
<div id="topbar">
|
||||
${c.genActionMenu}
|
||||
#if showRssLinks:
|
||||
<span id="rss">
|
||||
<a href="${c.req.makeUri("/threadActivity.xml")}"
|
||||
><img
|
||||
src="${c.req.makeUri("/images/Feed-icon.svg", absolute = false)}"
|
||||
style="width:1em;height:1em;vertical-align:middle"
|
||||
>Thread activity</a>
|
||||
<a href="${c.req.makeUri("/postActivity.xml")}"
|
||||
><img
|
||||
src="${c.req.makeUri("/images/Feed-icon.svg", absolute = false)}"
|
||||
style="width:1em;height:1em;vertical-align:middle"
|
||||
>Posts activity</a>
|
||||
</span>
|
||||
#end if
|
||||
</div>
|
||||
|
||||
#if c.isThreadsList:
|
||||
|
|
@ -70,21 +84,17 @@
|
|||
#
|
||||
#proc genRSSHeaders(c: var TForumData): string =
|
||||
# result = ""
|
||||
<link href="${c.req.makeUri("threadActivity.xml")}" title="Thread activity"
|
||||
<link href="${c.req.makeUri("/threadActivity.xml")}" title="Thread activity"
|
||||
type="application/atom+xml" rel="alternate">
|
||||
<link href="${c.req.makeUri("/postActivity.xml")}" title="Post activity"
|
||||
type="application/atom+xml" rel="alternate">
|
||||
#end proc
|
||||
#
|
||||
#proc genRSS(c: var TForumData): string =
|
||||
#proc genThreadsRSS(c: var TForumData): string =
|
||||
# result = ""
|
||||
# var stats: TForumStats
|
||||
# let frontQuery = c.req.makeUri("/")
|
||||
# if c.isThreadsList: stats = c.getStats(false)
|
||||
# else:
|
||||
# stats = c.getStats(true)
|
||||
# end if
|
||||
# const query = sql"""SELECT A.id, A.name,
|
||||
# strftime('%Y-%m-%dT%H:%M:%S', (A.modified)),
|
||||
# COUNT(B.id), C.name, B.content
|
||||
# COUNT(B.id), C.name, B.content, B.id
|
||||
# FROM thread AS A, post AS B, person AS C
|
||||
# WHERE A.id = b.thread AND B.author = C.id
|
||||
# GROUP BY B.thread
|
||||
|
|
@ -95,6 +105,8 @@
|
|||
# const postCount = 3
|
||||
# const postAuthor = 4
|
||||
# const postContent = 5
|
||||
# const postId = 6
|
||||
# let frontQuery = c.req.makeUri("/")
|
||||
# let recent = GetValue(db, sql"""SELECT
|
||||
# strftime('%Y-%m-%dT%H:%M:%S', (modified)) FROM thread
|
||||
# ORDER BY modified DESC LIMIT 1""")
|
||||
|
|
@ -102,18 +114,70 @@
|
|||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<title>Nimrod forum thread activity</title>
|
||||
<link href="${c.req.makeUri("/threadActivity.xml")}" rel="self" />
|
||||
<link href="${frontQuery}" rel="self" />
|
||||
<link href="${frontQuery}" />
|
||||
<id>${frontQuery}</id>
|
||||
<updated>${recent}</updated>
|
||||
# for row in Rows(db, query, 10):
|
||||
<entry>
|
||||
<title>${XMLencode(%name)}</title>
|
||||
<id>urn:entry:${%threadid}</id>
|
||||
# let url = c.genThreadUrl(threadid = %threadid,
|
||||
# pageNum = $(ceil(parseInt(%postCount) / postsPerPage).int)) &
|
||||
# "#" & %postId
|
||||
<link rel="alternate" type="text/html"
|
||||
href="${c.req.makeUri(c.genThreadUrl(threadid = %threadid))}"/>
|
||||
href="${c.req.makeUri(url)}"/>
|
||||
<updated>${%threadDate}</updated>
|
||||
<author><name>${XMLEncode(%postAuthor)}</name></author>
|
||||
<content type="text"
|
||||
>Posts ${postCount}, ${XMLEncode(%postAuthor)} said: ${XMLEncode(%postContent)}</content>
|
||||
>Posts ${%postCount}, ${XMLEncode(%postAuthor)} said: ${XMLEncode(%postContent)}</content>
|
||||
</entry>
|
||||
# end for
|
||||
</feed>
|
||||
#end proc
|
||||
#
|
||||
#proc genPostsRSS(c: var TForumData): string =
|
||||
# result = ""
|
||||
# const query = sql"""SELECT A.id, B.name, A.content, A.thread,
|
||||
# A.header, strftime('%Y-%m-%dT%H:%M:%S', A.creation),
|
||||
# A.creation, COUNT(C.id)
|
||||
# FROM post AS A, person AS B, post AS C
|
||||
# WHERE A.author = B.id AND A.thread = C.thread AND C.id <= A.id
|
||||
# GROUP BY A.id
|
||||
# ORDER BY A.creation DESC LIMIT ?"""
|
||||
# const postId = 0
|
||||
# const postAuthor = 1
|
||||
# const postContent = 2
|
||||
# const postThread = 3
|
||||
# const postHeader = 4
|
||||
# const postRssDate = 5
|
||||
# const postHumanDate = 6
|
||||
# const postPosition = 7
|
||||
# let frontQuery = c.req.makeUri("/")
|
||||
# let recent = GetValue(db, sql"""SELECT
|
||||
# strftime('%Y-%m-%dT%H:%M:%S', creation) FROM post
|
||||
# ORDER BY creation DESC LIMIT 1""")
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<title>Nimrod forum post activity</title>
|
||||
<link href="${c.req.makeUri("/postActivity.xml")}" rel="self" />
|
||||
<link href="${frontQuery}" />
|
||||
<id>${frontQuery}</id>
|
||||
<updated>${recent}</updated>
|
||||
# for row in Rows(db, query, 10):
|
||||
<entry>
|
||||
<title>${XMLencode(%postHeader)}</title>
|
||||
<id>urn:entry:${%postId}</id>
|
||||
# let url = c.genThreadUrl(threadid = %postThread,
|
||||
# pageNum = $(ceil(parseInt(%postPosition) / postsPerPage).int)) &
|
||||
# "#" & %postId
|
||||
<link rel="alternate" type="text/html"
|
||||
href="${c.req.makeUri(url)}"/>
|
||||
<updated>${%postRssDate}</updated>
|
||||
<author><name>${XMLEncode(%postAuthor)}</name></author>
|
||||
<content type="text"
|
||||
>On ${XMLEncode(%postHumanDate)}, ${XMLEncode(%postAuthor)} said:
|
||||
|
||||
${XMLEncode(%postContent)}</content>
|
||||
</entry>
|
||||
# end for
|
||||
</feed>
|
||||
|
|
|
|||
|
|
@ -182,6 +182,12 @@ div#header a:hover, #nimbtn a:hover {
|
|||
margin: 5pt;
|
||||
}
|
||||
|
||||
div#topbar span#rss {
|
||||
float: right;
|
||||
padding: 0;
|
||||
padding-right: 7pt;
|
||||
}
|
||||
|
||||
#content .post {
|
||||
border: #4d4d4d solid 2px;
|
||||
width: 100%;
|
||||
|
|
|
|||
18
public/images/Feed-icon.svg
Normal file
18
public/images/Feed-icon.svg
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
|
||||
<defs>
|
||||
<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
|
||||
<stop offset="0.0" stop-color="#E3702D"/><stop offset="0.1071" stop-color="#EA7D31"/>
|
||||
<stop offset="0.3503" stop-color="#F69537"/><stop offset="0.5" stop-color="#FB9E3A"/>
|
||||
<stop offset="0.7016" stop-color="#EA7C31"/><stop offset="0.8866" stop-color="#DE642B"/>
|
||||
<stop offset="1.0" stop-color="#D95B29"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="256" height="256" rx="55" ry="55" x="0" y="0" fill="#CC5D15"/>
|
||||
<rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/>
|
||||
<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
|
||||
<circle cx="68" cy="189" r="24" fill="#FFF"/>
|
||||
<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
|
||||
<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
Loading…
Add table
Add a link
Reference in a new issue