Simplify queries
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user