A Simple Tool To Archive Twitter Threads
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

70 lines
2.1 KiB

import strformat
import karax / [karaxdsl, vdom]
proc layout(inner : VNode) : string =
let vnode = buildHtml(html):
head:
meta(charset="utf-8")
link(href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css", rel="stylesheet")
body:
tdiv(class="text-center appearance-none"):
inner
"<!DOCTYPE html>\n" & $vnode
proc tweetThread*(author : string,
tweets : seq[string]): string =
let title = fmt"Thread by {author}"
let vnode = buildHtml(tdiv(class="")):
h4: text title
ul:
li: a(href="/"): text "Main Page"
li: a(href=fmt"/author/{author}/threads"): text (fmt"See all of {author}'s threads")
ul(class="m-auto max-w-md list-decimal text-left"):
for tweet in tweets:
li: text tweet
result = $vnode.layout
proc checkBack*() : string =
let vnode = buildHtml(tdiv):
h4: text "Check back later please"
result = $vnode.layout
proc listThreads*(author : string,
threads : seq[string]) : string =
let title = fmt"Threads for {author}"
let vnode = buildHtml(tdiv):
a(href="/"): text "Main Page"
h4: text title
ul:
for thread in threads:
li: a(href=fmt"/thread/{author}/status/{thread}"): text thread
result = $vnode.layout
# Main page
proc listAuthors*(authors : seq[string]) : VNode =
let title = "Authors"
let vnode = buildHtml(tdiv):
h1(class="uppercase text-center"): text title
ul(class="text-center"):
for author in authors:
li:
a(href = fmt"/author/{author}/threads"):
text author
result = vnode
proc submitThread() : VNode =
let vnode = buildHtml(tdiv):
form(action = "/thread", `method`="POST", class="appearance-none"):
tdiv(class="text-center"):
label(`for`="tweetUrl"):
text "Tweet URL"
input(class="bg-teal-100", `type`="text", name="tweetURL", id="tweeturl", required="true")
result = vnode
proc mainPage*(authors : seq[string]) : string =
let vnode = buildHtml(tdiv):
listAuthors(authors)
submitThread()
result = $vnode.layout