Moves the new design to /.
This commit is contained in:
parent
8a8f99e198
commit
840d8164eb
5 changed files with 34 additions and 169 deletions
181
forum.nim
181
forum.nim
|
|
@ -1191,24 +1191,19 @@ proc executeRegister(c: TForumData, name, pass, antibot, userIp,
|
|||
initialise()
|
||||
|
||||
routes:
|
||||
get "/":
|
||||
createTFD()
|
||||
c.isThreadsList = true
|
||||
var count = 0
|
||||
let threadList = genThreadsList(c, count)
|
||||
let data = genMain(c, threadList,
|
||||
additionalHeaders = genRSSHeaders(c), showRssLinks = true)
|
||||
resp data
|
||||
|
||||
get "/karax/nimforum.css":
|
||||
get "/nimforum.css":
|
||||
resp readFile("frontend/nimforum.css"), "text/css"
|
||||
get "/karax/nimcache/forum.js":
|
||||
get "/nimcache/forum.js":
|
||||
resp readFile("frontend/nimcache/forum.js"), "application/javascript"
|
||||
get "/karax/images/crown.png":
|
||||
resp readFile("frontend/images/crown.png"), "image/png"
|
||||
get re"/images/(.+?\.png)/?":
|
||||
let path = "frontend/images/" & request.matches[0]
|
||||
if fileExists(path):
|
||||
resp readFile(path), "image/png"
|
||||
else:
|
||||
resp Http404, "No such file."
|
||||
|
||||
|
||||
get "/karax/threads.json":
|
||||
get "/threads.json":
|
||||
var
|
||||
start = getInt(@"start", 0)
|
||||
count = getInt(@"count", 30)
|
||||
|
|
@ -1227,7 +1222,7 @@ routes:
|
|||
|
||||
resp $(%list), "application/json"
|
||||
|
||||
get "/karax/posts.json":
|
||||
get "/posts.json":
|
||||
createTFD()
|
||||
var
|
||||
id = getInt(@"id", -1)
|
||||
|
|
@ -1274,7 +1269,7 @@ routes:
|
|||
|
||||
resp $(%list), "application/json"
|
||||
|
||||
get "/karax/specific_posts.json":
|
||||
get "/specific_posts.json":
|
||||
createTFD()
|
||||
var
|
||||
ids = parseJson(@"ids")
|
||||
|
|
@ -1296,7 +1291,7 @@ routes:
|
|||
|
||||
resp $(%list), "application/json"
|
||||
|
||||
get "/karax/post.rst":
|
||||
get "/post.rst":
|
||||
createTFD()
|
||||
let postId = getInt(@"id", -1)
|
||||
cond postId != -1
|
||||
|
|
@ -1311,7 +1306,7 @@ routes:
|
|||
else:
|
||||
resp content, "text/x-rst"
|
||||
|
||||
get "/karax/profile.json":
|
||||
get "/profile.json":
|
||||
createTFD()
|
||||
var
|
||||
username = @"username"
|
||||
|
|
@ -1395,7 +1390,7 @@ routes:
|
|||
|
||||
resp $(%profile), "application/json"
|
||||
|
||||
post "/karax/login":
|
||||
post "/login":
|
||||
createTFD()
|
||||
let formData = request.formData
|
||||
cond "username" in formData
|
||||
|
|
@ -1411,7 +1406,7 @@ routes:
|
|||
except ForumError as exc:
|
||||
resp Http400, $(%exc.data), "application/json"
|
||||
|
||||
post "/karax/signup":
|
||||
post "/signup":
|
||||
createTFD()
|
||||
let formData = request.formData
|
||||
let username = formData["username"].body
|
||||
|
|
@ -1432,7 +1427,7 @@ routes:
|
|||
let exc = (ref ForumError)(getCurrentException())
|
||||
resp Http400, $(%exc.data), "application/json"
|
||||
|
||||
get "/karax/status.json":
|
||||
get "/status.json":
|
||||
createTFD()
|
||||
|
||||
let user =
|
||||
|
|
@ -1458,7 +1453,7 @@ routes:
|
|||
)
|
||||
resp $(%status), "application/json"
|
||||
|
||||
post "/karax/preview":
|
||||
post "/preview":
|
||||
createTFD()
|
||||
if not c.loggedIn():
|
||||
let err = PostError(
|
||||
|
|
@ -1481,7 +1476,7 @@ routes:
|
|||
)
|
||||
resp Http400, $(%err), "application/json"
|
||||
|
||||
post "/karax/createPost":
|
||||
post "/createPost":
|
||||
createTFD()
|
||||
if not c.loggedIn():
|
||||
let err = PostError(
|
||||
|
|
@ -1510,7 +1505,7 @@ routes:
|
|||
except ForumError as exc:
|
||||
resp Http400, $(%exc.data), "application/json"
|
||||
|
||||
post "/karax/updatePost":
|
||||
post "/updatePost":
|
||||
createTFD()
|
||||
if not c.loggedIn():
|
||||
let err = PostError(
|
||||
|
|
@ -1538,7 +1533,7 @@ routes:
|
|||
except ForumError as exc:
|
||||
resp Http400, $(%exc.data), "application/json"
|
||||
|
||||
post "/karax/newthread":
|
||||
post "/newthread":
|
||||
createTFD()
|
||||
if not c.loggedIn():
|
||||
let err = PostError(
|
||||
|
|
@ -1561,7 +1556,7 @@ routes:
|
|||
except ForumError as exc:
|
||||
resp Http400, $(%exc.data), "application/json"
|
||||
|
||||
get re"/karax/(.+)?":
|
||||
get re"/(.+)?":
|
||||
resp readFile("frontend/karax.html")
|
||||
|
||||
get "/threadActivity.xml":
|
||||
|
|
@ -1573,140 +1568,6 @@ routes:
|
|||
createTFD()
|
||||
resp genPostsRSS(c), "application/atom+xml"
|
||||
|
||||
get "/t/@threadid/?@page?/?@postid?/?":
|
||||
createTFD()
|
||||
parseInt(@"threadid", c.threadId, -1..1000_000)
|
||||
|
||||
if c.threadId == unselectedThread:
|
||||
# Thread has just been deleted.
|
||||
redirect(uri("/"))
|
||||
|
||||
if @"page".len > 0:
|
||||
parseInt(@"page", c.pageNum, 0..1000_000)
|
||||
if @"postid".len > 0:
|
||||
parseInt(@"postid", c.postId, 0..1000_000)
|
||||
cond(c.pageNum > 0)
|
||||
var count = 0
|
||||
var pSubject = getThreadTitle(c.threadid, c.pageNum)
|
||||
cond validThreadId(c)
|
||||
gatherTotalPosts(c)
|
||||
if (@"action").len > 0:
|
||||
var title = ""
|
||||
case @"action"
|
||||
of "reply":
|
||||
let subject = getValue(db,
|
||||
sql"select header from post where id = (select max(id) from post where thread = ?)",
|
||||
$c.threadId).prependRe
|
||||
body = genPostsList(c, $c.threadId, count)
|
||||
cond count != 0
|
||||
body.add genFormPost(c, "doreply", "Reply", subject, "", false)
|
||||
title = "Replying to thread: " & pSubject
|
||||
of "edit":
|
||||
cond c.postId != -1
|
||||
const query = sql"select header, content from post where id = ?"
|
||||
let row = getRow(db, query, $c.postId)
|
||||
let header = ||row[0]
|
||||
let content = ||row[1]
|
||||
body = genFormPost(c, "doedit", "Edit", header, content, true)
|
||||
title = "Editing post"
|
||||
else: discard
|
||||
resp c.genMain(body, title & " - Nim Forum")
|
||||
else:
|
||||
incrementViews(c)
|
||||
let posts = genPostsList(c, $c.threadId, count)
|
||||
cond count != 0
|
||||
resp genMain(c, posts, pSubject & " - Nim Forum")
|
||||
|
||||
get "/page/?@page?/?":
|
||||
createTFD()
|
||||
c.isThreadsList = true
|
||||
cond(@"page" != "")
|
||||
parseInt(@"page", c.pageNum, 0..1000_000)
|
||||
cond(c.pageNum > 0)
|
||||
var count = 0
|
||||
let list = genThreadsList(c, count)
|
||||
if count == 0:
|
||||
pass()
|
||||
resp genMain(c, list, "Page " & $c.pageNum & " - Nim Forum",
|
||||
genRSSHeaders(c), showRssLinks = true)
|
||||
|
||||
get "/profile/@nick/?":
|
||||
createTFD()
|
||||
cond(@"nick" != "")
|
||||
var userinfo: TUserInfo
|
||||
if gatherUserInfo(c, @"nick", userinfo):
|
||||
resp genMain(c, c.genProfile(userinfo),
|
||||
@"nick" & "'s profile - Nim Forum")
|
||||
else:
|
||||
halt()
|
||||
|
||||
get "/login/?":
|
||||
createTFD()
|
||||
resp genMain(c, genFormLogin(c), "Log in - Nim Forum")
|
||||
|
||||
get "/logout/?":
|
||||
createTFD()
|
||||
logout(c)
|
||||
redirect(uri("/"))
|
||||
|
||||
get "/register/?":
|
||||
createTFD()
|
||||
resp genMain(c, genFormRegister(c), "Register - Nim Forum")
|
||||
|
||||
template readIDs() =
|
||||
# Retrieve the threadid, postid and pagenum
|
||||
if (@"threadid").len > 0:
|
||||
parseInt(@"threadid", c.threadId, -1..1000_000)
|
||||
if (@"postid").len > 0:
|
||||
parseInt(@"postid", c.postId, -1..1000_000)
|
||||
|
||||
template finishLogin() =
|
||||
setCookie("sid", c.userpass, daysForward(7))
|
||||
redirect(uri("/"))
|
||||
|
||||
template handleError(action: string, topText: string, isEdit: bool) =
|
||||
if c.isPreview:
|
||||
body().add genPostPreview(c, @"subject", @"content",
|
||||
c.userName, $getGMTime(getTime()))
|
||||
body().add genFormPost(c, action, topText, reuseText, reuseText, isEdit)
|
||||
resp genMain(c, body(), "Nim Forum - " &
|
||||
(if c.isPreview: "Preview" else: "Error"))
|
||||
|
||||
post "/donewthread":
|
||||
createTFD()
|
||||
if newThread(c):
|
||||
redirect(uri("/"))
|
||||
else:
|
||||
body = ""
|
||||
handleError("donewthread", "New thread", false)
|
||||
|
||||
post "/doreply":
|
||||
createTFD()
|
||||
readIDs()
|
||||
if reply(c):
|
||||
redirect(c.genThreadUrl(pageNum = $(c.getPagesInThread+1)) & "#" & $c.postId)
|
||||
else:
|
||||
var count = 0
|
||||
if c.isPreview:
|
||||
c.pageNum = c.getPagesInThread+1
|
||||
body = genPostsList(c, $c.threadId, count)
|
||||
handleError("doreply", "Reply", false)
|
||||
|
||||
post "/doedit":
|
||||
createTFD()
|
||||
readIDs()
|
||||
if edit(c, c.postId):
|
||||
redirect(c.genThreadUrl(postId = $c.postId,
|
||||
pageNum = $(c.getPagesInThread+1)))
|
||||
else:
|
||||
body = ""
|
||||
handleError("doedit", "Edit", true)
|
||||
|
||||
get "/newthread/?":
|
||||
createTFD()
|
||||
resp genMain(c, genFormPost(c, "donewthread", "New thread", "", "", false),
|
||||
"New Thread - Nim Forum")
|
||||
|
||||
get "/deleteAll/?":
|
||||
createTFD()
|
||||
cond(@"nick" != "")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from dom import window, Location
|
|||
include karax/prelude
|
||||
import jester/patterns
|
||||
|
||||
import threadlist, postlist, header, profile, newthread
|
||||
import threadlist, postlist, header, profile, newthread, error
|
||||
import karaxutils
|
||||
|
||||
type
|
||||
|
|
@ -29,7 +29,6 @@ proc onPopState(event: dom.Event) =
|
|||
state.url = window.location
|
||||
redraw()
|
||||
|
||||
const appName = "/karax"
|
||||
type Params = Table[string, string]
|
||||
type
|
||||
Route = object
|
||||
|
|
@ -38,12 +37,17 @@ type
|
|||
|
||||
proc r(n: string, p: proc (params: Params): VNode): Route = Route(n: n, p: p)
|
||||
proc route(routes: openarray[Route]): VNode =
|
||||
let path =
|
||||
if state.url.pathname.len == 0: "/" else: $state.url.pathname
|
||||
let prefix = if appName == "/": "" else: appName
|
||||
for route in routes:
|
||||
let pattern = (appName & route.n).parsePattern()
|
||||
let (matched, params) = pattern.match($state.url.pathname)
|
||||
let pattern = (prefix & route.n).parsePattern()
|
||||
let (matched, params) = pattern.match(path)
|
||||
if matched:
|
||||
return route.p(params)
|
||||
|
||||
return renderError("Unmatched route: " & path)
|
||||
|
||||
proc render(): VNode =
|
||||
result = buildHtml(tdiv()):
|
||||
renderHeader()
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ when defined(js):
|
|||
tdiv(class="navbar container grid-xl"):
|
||||
section(class="navbar-section"):
|
||||
a(href=makeUri("/")):
|
||||
img(src="/karax/images/crown.png", id="img-logo") # TODO: Customisation.
|
||||
img(src="/images/logo.png", id="img-logo") # TODO: Customisation.
|
||||
section(class="navbar-section"):
|
||||
tdiv(class="input-group input-inline"):
|
||||
input(class="search-input input-sm",
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@
|
|||
|
||||
<title>The Nim programming language forum</title>
|
||||
|
||||
<link rel="stylesheet" href="/karax/nimforum.css">
|
||||
<link rel="stylesheet" href="/nimforum.css">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.12/css/all.css" integrity="sha384-G0fIWCsCzJIMAVNQPfjH08cyYaUtMwjJwqiRKxxE/rx96Uroj1BtIQ6MLJuheaO9" crossorigin="anonymous">
|
||||
<link rel="icon" href="/karax/images/favicon.png">
|
||||
<link rel="icon" href="/images/favicon.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="ROOT" />
|
||||
|
||||
<script type="text/javascript" src="/karax/nimcache/forum.js"></script>
|
||||
<script type="text/javascript" src="/nimcache/forum.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ when defined(js):
|
|||
|
||||
import dom except window
|
||||
|
||||
const appName = "/karax/"
|
||||
const appName* = "/"
|
||||
|
||||
proc class*(classes: varargs[tuple[name: string, present: bool]],
|
||||
defaultClasses: string = ""): string =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue