general.nim 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import karax/[karaxdsl, vdom]
  2. import ../utils, ../types
  3. const doctype = "<!DOCTYPE html>\n"
  4. proc renderNavbar*(title: string): VNode =
  5. buildHtml(nav(id="nav", class="nav-bar container")):
  6. tdiv(class="inner-nav"):
  7. tdiv(class="item"):
  8. a(class="site-name", href="/"): text title
  9. a(href="/"): img(class="site-logo", src="/logo.png")
  10. tdiv(class="item right"):
  11. a(class="site-about", href="/about"): text "🛈"
  12. a(class="site-prefs", href="/settings"): text "⚙"
  13. proc renderMain*(body: VNode; prefs: Prefs; title="Nitter"; titleText=""; desc="";
  14. `type`="article"; video=""; images: seq[string] = @[]): string =
  15. let node = buildHtml(html(lang="en")):
  16. head:
  17. link(rel="stylesheet", `type`="text/css", href="/style.css")
  18. title:
  19. if titleText.len > 0:
  20. text titleText & " | " & title
  21. else:
  22. text title
  23. meta(property="og:type", content=`type`)
  24. meta(property="og:title", content=titleText)
  25. meta(property="og:description", content=desc)
  26. meta(property="og:site_name", content="Twitter")
  27. for url in images:
  28. meta(property="og:image", content=getSigUrl(url, "pic"))
  29. if video.len > 0:
  30. meta(property="og:video:url", content=video)
  31. meta(property="og:video:secure_url", content=video)
  32. body:
  33. renderNavbar(title)
  34. tdiv(id="content", class="container"):
  35. body
  36. result = doctype & $node
  37. proc renderSearch*(): VNode =
  38. buildHtml(tdiv(class="panel")):
  39. tdiv(class="search-panel"):
  40. form(`method`="post", action="search"):
  41. input(`type`="text", name="query", autofocus="", placeholder="Enter usernames...")
  42. button(`type`="submit"): text "🔎"
  43. proc renderError*(error: string): VNode =
  44. buildHtml(tdiv(class="panel")):
  45. tdiv(class="error-panel"):
  46. span: text error
  47. proc showError*(error: string; title: string; prefs: Prefs): string =
  48. renderMain(renderError(error), prefs, title=title, titleText="Error")