Simplify queries

This commit is contained in:
Zed
2019-09-20 22:56:27 +02:00
parent cd16ad8086
commit d1fbcef64d
9 changed files with 61 additions and 103 deletions

View File

@@ -1,11 +1,15 @@
import uri
import karax/[karaxdsl, vdom]
import renderutils
import ../utils, ../types
import ../utils, ../types, ../prefs
import jester
const doctype = "<!DOCTYPE html>\n"
proc renderNavbar*(title, path, rss: string): VNode =
proc renderNavbar*(title, rss: string; req: Request): VNode =
let path = $(parseUri(req.path) ? filterParams(req.params))
buildHtml(nav):
tdiv(class="inner-nav"):
tdiv(class="nav-item"):
@@ -20,8 +24,9 @@ proc renderNavbar*(title, path, rss: string): VNode =
icon "info-circled", title="About", href="/about"
iconReferer "cog", "/settings", path, title="Preferences"
proc renderMain*(body: VNode; prefs: Prefs; title="Nitter"; titleText=""; desc=""; path="/";
proc renderMain*(body: VNode; req: Request; title="Nitter"; titleText=""; desc="";
rss=""; `type`="article"; video=""; images: seq[string] = @[]): string =
let prefs = getPrefs(req.cookies.getOrDefault("preferences"))
let node = buildHtml(html(lang="en")):
head:
link(rel="stylesheet", `type`="text/css", href="/css/style.css")
@@ -54,7 +59,7 @@ proc renderMain*(body: VNode; prefs: Prefs; title="Nitter"; titleText=""; desc="
meta(property="og:video:secure_url", content=video)
body:
renderNavbar(title, path, rss)
renderNavbar(title, rss, req)
tdiv(class="container"):
body
@@ -67,4 +72,4 @@ proc renderError*(error: string): VNode =
span: text error
proc showError*(error, title: string): string =
renderMain(renderError(error), Prefs(), title, "Error")
renderMain(renderError(error), Request(), title, "Error")

View File

@@ -28,10 +28,9 @@ proc renderSearch*(): VNode =
button(`type`="submit"): icon "search"
proc getTabClass(query: Query; tab: QueryKind): string =
var classes = @["tab-item"]
result = "tab-item"
if query.kind == tab:
classes.add "active"
return classes.join(" ")
result &= " active"
proc renderProfileTabs*(query: Query; username: string): VNode =
let link = "/" & username
@@ -50,10 +49,10 @@ proc renderSearchTabs*(query: Query): VNode =
buildHtml(ul(class="tab")):
li(class=query.getTabClass(custom)):
q.kind = custom
a(href=genQueryUrl(q)): text "Tweets"
a(href=("?" & genQueryUrl(q))): text "Tweets"
li(class=query.getTabClass(users)):
q.kind = users
a(href=genQueryUrl(q)): text "Users"
a(href=("?" & genQueryUrl(q))): text "Users"
proc isPanelOpen(q: Query): bool =
q.fromUser.len == 0 and (q.filters.len > 0 or q.excludes.len > 0 or

View File

@@ -1,26 +1,24 @@
import strutils, strformat, sequtils, algorithm, times
import strutils, strformat, sequtils, algorithm, times, uri
import karax/[karaxdsl, vdom, vstyles]
import ".."/[types, query, formatters]
import tweet, renderutils
proc getQuery(query: Query): string =
if query.kind == posts:
result = "?"
else:
if query.kind != posts:
result = genQueryUrl(query)
if result[^1] != '?':
result &= "&"
if result.len > 0:
result &= "&"
proc renderNewer(query: Query): VNode =
proc renderNewer(query: Query; path: string): VNode =
buildHtml(tdiv(class="timeline-item show-more")):
a(href=(getQuery(query).strip(chars={'?', '&'}))):
a(href=(&"{path}?{genQueryUrl(query)}")):
text "Load newest"
proc renderOlder(query: Query; minId: string): VNode =
proc renderMore(query: Query; minId: string): VNode =
buildHtml(tdiv(class="show-more")):
a(href=(&"{getQuery(query)}after={minId}")):
text "Load older"
a(href=(&"?{getQuery(query)}after={minId}")):
text "Load more"
proc renderNoMore(): VNode =
buildHtml(tdiv(class="timeline-footer")):
@@ -58,15 +56,15 @@ proc renderUser(user: Profile; prefs: Prefs): VNode =
tdiv(class="tweet-content media-body"):
verbatim linkifyText(user.bio, prefs)
proc renderTimelineUsers*(results: Result[Profile]; prefs: Prefs): VNode =
proc renderTimelineUsers*(results: Result[Profile]; prefs: Prefs; path=""): VNode =
buildHtml(tdiv(class="timeline")):
if not results.beginning:
renderNewer(results.query)
renderNewer(results.query, path)
if results.content.len > 0:
for user in results.content:
renderUser(user, prefs)
renderOlder(results.query, results.minId)
renderMore(results.query, results.minId)
elif results.beginning:
renderNoneFound()
else:
@@ -75,7 +73,7 @@ proc renderTimelineUsers*(results: Result[Profile]; prefs: Prefs): VNode =
proc renderTimelineTweets*(results: Result[Tweet]; prefs: Prefs; path: string): VNode =
buildHtml(tdiv(class="timeline")):
if not results.beginning:
renderNewer(results.query)
renderNewer(results.query, parseUri(path).path)
if results.content.len == 0:
renderNoneFound()
@@ -94,6 +92,6 @@ proc renderTimelineTweets*(results: Result[Tweet]; prefs: Prefs; path: string):
threads &= tweet.threadId
if results.hasMore or results.query.kind != posts:
renderOlder(results.query, results.minId)
renderMore(results.query, results.minId)
else:
renderNoMore()