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:
Dominik Picheta 2013-05-30 12:19:15 +01:00
commit 264d062bae
4 changed files with 110 additions and 17 deletions

View file

@ -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()

View file

@ -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>

View file

@ -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%;

View 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