status.nim 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import karax/[karaxdsl, vdom]
  2. import ".."/[types, formatters]
  3. import tweet, timeline
  4. proc renderMoreReplies(thread: Chain): VNode =
  5. let num = if thread.more != -1: $thread.more & " " else: ""
  6. let reply = if thread.more == 1: "reply" else: "replies"
  7. let link = getLink(thread.content[^1])
  8. buildHtml(tdiv(class="timeline-item more-replies")):
  9. if link.len > 0:
  10. a(class="more-replies-text", href=link):
  11. text $num & "more " & reply
  12. else:
  13. a(class="more-replies-text"):
  14. text $num & "more " & reply
  15. proc renderReplyThread(thread: Chain; prefs: Prefs; path: string): VNode =
  16. buildHtml(tdiv(class="reply thread thread-line")):
  17. for i, tweet in thread.content:
  18. let last = (i == thread.content.high and thread.more == 0)
  19. renderTweet(tweet, prefs, path, index=i, last=last)
  20. if thread.more != 0:
  21. renderMoreReplies(thread)
  22. proc renderConversation*(conversation: Conversation; prefs: Prefs; path: string): VNode =
  23. let hasAfter = conversation.after != nil
  24. buildHtml(tdiv(class="conversation")):
  25. tdiv(class="main-thread"):
  26. if conversation.before != nil:
  27. tdiv(class="before-tweet thread-line"):
  28. for i, tweet in conversation.before.content:
  29. renderTweet(tweet, prefs, path, index=i)
  30. tdiv(class="main-tweet", id="m"):
  31. let afterClass = if hasAfter: "thread thread-line" else: ""
  32. renderTweet(conversation.tweet, prefs, path, class=afterClass,
  33. mainTweet=true)
  34. if hasAfter:
  35. tdiv(class="after-tweet thread-line"):
  36. let total = conversation.after.content.high
  37. let more = conversation.after.more
  38. for i, tweet in conversation.after.content:
  39. renderTweet(tweet, prefs, path, index=i, last=(i == total and more == 0))
  40. if more != 0:
  41. renderMoreReplies(conversation.after)
  42. if not conversation.replies.beginning:
  43. renderNewer(Query(), getLink(conversation.tweet))
  44. if conversation.replies.content.len > 0:
  45. tdiv(class="replies"):
  46. for thread in conversation.replies.content:
  47. if thread == nil: continue
  48. renderReplyThread(thread, prefs, path)
  49. if conversation.replies.hasMore:
  50. renderMore(Query(), conversation.replies.minId)