47 lines
1.0 KiB
Nim
47 lines
1.0 KiB
Nim
import std/[uri, tables, random]
|
|
import karax/[kbase, karaxdsl, vdom, jstrutils]
|
|
|
|
import ../[packages, style, context, utils]
|
|
|
|
randomize()
|
|
|
|
proc renderTag*(tag: kstring): VNode =
|
|
buildHtml:
|
|
tdiv(class = "link md:p-2 p-1 m-1" & borderStyle):
|
|
text tag
|
|
|
|
proc renderTags*(tags: seq[kstring]): VNode =
|
|
buildHtml:
|
|
tdiv(class = "flex flex-wrap"):
|
|
for i, tag in tags:
|
|
let query = encodeQuery({"query": $("tag:" & tag)})
|
|
a(
|
|
href = ("/?" & query & "#/search").jss,
|
|
class = "no-underline"
|
|
):
|
|
tag.renderTag
|
|
|
|
proc selectRandomTags*(ctx: Context): seq[kstring] =
|
|
var tagCounts: CountTable[kstring]
|
|
for pkg in ctx.nimpkgs.packages.values():
|
|
for tag in pkg.tags:
|
|
tagCounts.inc tag
|
|
|
|
var tags: seq[kstring]
|
|
for tag, cnt in tagCounts:
|
|
if cnt > 3: tags.add tag
|
|
|
|
while result.len < 5:
|
|
let tag = tags.sample()
|
|
if tag notin result:
|
|
result.add tag
|
|
|
|
proc randomTags*(ctx: Context): VNode =
|
|
let tags = ctx.selectRandomTags()
|
|
buildHtml(tdiv):
|
|
tags.renderTags
|
|
|
|
|
|
|
|
|