Implemented generation of sponsors page + missing assets.

This commit is contained in:
Dominik Picheta 2016-06-04 17:16:20 +01:00
commit cf70fe629a
7 changed files with 124 additions and 2 deletions

View file

@ -9,7 +9,7 @@
import
os, strutils, times, parseopt, parsecfg, streams, strtabs, tables,
re, htmlgen, macros, md5, osproc
re, htmlgen, macros, md5, osproc, parsecsv
type
TKeyValPair = tuple[key, id, val: string]
@ -29,6 +29,15 @@ type
TAction = enum
actAll, actOnlyWebsite, actPdf
Sponsor = object
logo: string
name: string
url: string
thisMonth: int
allTime: int
since: string
level: int
var action: TAction
proc initConfigData(c: var TConfigData) =
@ -83,6 +92,7 @@ Compile_options:
rYearMonthDayTitle = r"(\d{4})-(\d{2})-(\d{2})\s+(.*)"
rssUrl = "http://nim-lang.org/news.xml"
rssNewsUrl = "http://nim-lang.org/news.html"
sponsors = "web/sponsors.csv"
validAnchorCharacters = Letters + Digits
@ -407,6 +417,30 @@ proc buildJS(destPath: string) =
exec("nim js -d:release --out:$1 web/nimblepkglist.nim" %
[destPath / "nimblepkglist.js"])
proc readSponsors(sponsorsFile: string): seq[Sponsor] =
result = @[]
var fileStream = newFileStream(sponsorsFile, fmRead)
if fileStream == nil: quit("Cannot open sponsors.csv file: " & sponsorsFile)
var parser: CsvParser
open(parser, fileStream, sponsorsFile)
discard readRow(parser) # Skip the header row.
while readRow(parser):
result.add(Sponsor(logo: parser.row[0], name: parser.row[1],
url: parser.row[2], thisMonth: parser.row[3].parseInt,
allTime: parser.row[4].parseInt,
since: parser.row[5], level: parser.row[6].parseInt))
parser.close()
proc buildSponsors(c: var TConfigData, sponsorsFile: string, outputDir: string) =
let sponsors = generateSponsors(readSponsors(sponsorsFile))
let outFile = outputDir / "sponsors.html"
var f: File
if open(f, outFile, fmWrite):
writeLine(f, generateHtmlPage(c, "Our Sponsors", sponsors, ""))
close(f)
else:
quit("[Error] Cannot write file: " & outFile)
proc buildWebsite(c: var TConfigData) =
const
cmd = "nim rst2html --compileonly $1 -o:web/$2.temp web/$2.txt"
@ -438,6 +472,7 @@ proc buildWebsite(c: var TConfigData) =
removeFile(temp)
copyDir("web/assets", "web/upload/assets")
buildNewsRss(c, "web/upload")
buildSponsors(c, sponsors, "web/upload")
proc main(c: var TConfigData) =
buildWebsite(c)

View file

@ -209,3 +209,37 @@ runForever()
# end if
</body>
</html>
#end proc
#
#proc generateSponsors(sponsors: seq[Sponsor]): string =
#result = ""
<h1 id="our-current-sponsors">Our Current Sponsors</h1>
<p>This page lists the companies and individuals that are, very kindly, contributing a
monthly amount to help sustain Nim's development. For more details take a
look at the <a href="https://salt.bountysource.com/teams/nim">Bountysource campaign</a>.</p>
<dl>
#for sponsor in sponsors:
<dt class="level-${sponsor.level}">
#if sponsor.url.len > 0:
<a href="${sponsor.url}" target="_blank">${sponsor.name}</a>
#else:
${sponsor.name}
#end if
</dt>
<dd class="logo">
#if sponsor.logo.len > 0:
<a href="${sponsor.url}" target="_blank">
<img alt="${sponsor.name}'s logo" src="${sponsor.logo}"/>
</a>
#end if
</dd>
<dd class="this_month">
Donated <b>$$${sponsor.thisMonth}</b> this month
</dd>
<dd class="legend">
Donated $$${sponsor.allTime} in total since ${sponsor.since}
</dd>
#end for
</dl>
#
#end proc