| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- # SPDX-License-Identifier: AGPL-3.0-only
- import asyncdispatch, tables, strutils
- import jester, karax/vdom
- import ".."/[types, api]
- import ../views/[article, general]
- import router_utils
- export api, article, vdom, general, router_utils
- proc createArticleRouter*(cfg: Config) =
- router articleRoute:
- get "/i/article/@id":
- cond @"id".allCharsInSet(Digits)
- let article = await getGraphArticle(@"id")
- if article == nil:
- resp Http404, showError("Article not found", cfg)
- var tweetIds: seq[string]
- for e in article.entities.values:
- if e.kind == "TWEET":
- tweetIds.add e.tweetId
- var tweets = initTable[int64, Tweet]()
- if tweetIds.len > 0:
- try:
- for t in await getGraphTweetResults(tweetIds):
- tweets[t.id] = t
- except CatchableError:
- discard
- let
- prefs = requestPrefs()
- path = getPath()
- html = renderArticle(article, tweets, path, prefs, @"id")
- twitterUrl = "https://x.com/" & article.user.username & "/article/" & @"id"
- resp renderMain(html, request, cfg, prefs, titleText=article.title,
- twitterLink=twitterUrl)
- get "/@name/article/@id/?":
- cond '.' notin @"name"
- cond @"id".allCharsInSet(Digits)
- redirect("/i/article/" & @"id")
- get "/@name/status/@id/article":
- cond '.' notin @"name"
- cond @"id".allCharsInSet(Digits)
- redirect("/i/article/" & @"id")
|