123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import base64, strutils, json, htmlgen, dom, algorithm
- type
- TData = object
- content {.importc.}: cstring
- proc decodeContent(content: string): string =
- result = ""
- for line in content.splitLines:
- if line != "":
- result.add decode(line)
- proc contains(x: seq[JSonNode], s: string): bool =
- for i in x:
- assert i.kind == JString
- if i.str == s: return true
- proc processContent(content: string) =
- var jsonDoc = parseJson(content)
- assert jsonDoc.kind == JArray
- var jsonArr = jsonDoc.elems
- jsonArr.sort do (x, y: JsonNode) -> int:
- strutils.cmpIgnoreCase(x["name"].str, y["name"].str)
- var
- officialList = ""
- officialCount = 0
- unofficialList = ""
- unofficialCount = 0
- let
- endings = {'.', '!'}
- for pkg in jsonArr:
- assert pkg.kind == JObject
- if not pkg.hasKey"url": continue
- let pkgWeb =
- if pkg.hasKey("web"): pkg["web"].str
- else: pkg["url"].str
- let
- desc = pkg["description"].str
- dot = if desc.high > 0 and desc[desc.high] in endings: "" else: "."
- listItem = li(a(href=pkgWeb, pkg["name"].str), " ", desc & dot)
- if pkg["url"].str.startsWith("https://github.com/nim-lang") or
- pkg["url"].str.startsWith("git://github.com/nim-lang") or
- "official" in pkg["tags"].elems:
- officialCount.inc
- officialList.add listItem & "\n"
- else:
- unofficialCount.inc
- unofficialList.add listItem & "\n"
- var officialPkgListDiv = document.getElementById("officialPkgList")
- officialPkgListDiv.innerHTML =
- p("There are currently " & $officialCount &
- " official packages in the Nimble package repository.") &
- ul(officialList)
- var unofficialPkgListDiv = document.getElementById("unofficialPkgList")
- unofficialPkgListDiv.innerHTML =
- p("There are currently " & $unofficialCount &
- " unofficial packages in the Nimble package repository.") &
- ul(unofficialList)
- proc gotPackageList(apiReply: TData) {.exportc.} =
- let decoded = decodeContent($apiReply.content)
- try:
- processContent(decoded)
- except:
- var officialPkgListDiv = document.getElementById("officialPkgList")
- var unofficialPkgListDiv = document.getElementById("unofficialPkgList")
- let msg = p("Unable to retrieve package list: ",
- code(getCurrentExceptionMsg()))
- officialPkgListDiv.innerHTML = msg
- unofficialPkgListDiv.innerHTML = msg
|