changed code to be not shit
This commit is contained in:
parent
7f15993a74
commit
0d3469df66
6 changed files with 80 additions and 37 deletions
|
@ -32,23 +32,25 @@ proc getUrlPrefix*(cfg: Config): string =
|
||||||
if cfg.useHttps: https & cfg.hostname
|
if cfg.useHttps: https & cfg.hostname
|
||||||
else: "http://" & cfg.hostname
|
else: "http://" & cfg.hostname
|
||||||
|
|
||||||
proc stripHtml*(text: string): string =
|
proc shortLink*(text: string; length=28): string =
|
||||||
|
result = text.replace(wwwRegex, "")
|
||||||
|
if result.len > length:
|
||||||
|
result = result[0 ..< length] & "…"
|
||||||
|
|
||||||
|
proc stripHtml*(text: string; shorten=false): string =
|
||||||
var html = parseHtml(text)
|
var html = parseHtml(text)
|
||||||
for el in html.findAll("a"):
|
for el in html.findAll("a"):
|
||||||
let link = el.attr("href")
|
let link = el.attr("href")
|
||||||
if "http" in link:
|
if "http" in link:
|
||||||
if el.len == 0: continue
|
if el.len == 0: continue
|
||||||
el[0].text = link
|
el[0].text =
|
||||||
|
if shorten: link.shortLink
|
||||||
|
else: link
|
||||||
html.innerText()
|
html.innerText()
|
||||||
|
|
||||||
proc sanitizeXml*(text: string): string =
|
proc sanitizeXml*(text: string): string =
|
||||||
text.replace(illegalXmlRegex, "")
|
text.replace(illegalXmlRegex, "")
|
||||||
|
|
||||||
proc shortLink*(text: string; length=28): string =
|
|
||||||
result = text.replace(wwwRegex, "")
|
|
||||||
if result.len > length:
|
|
||||||
result = result[0 ..< length] & "…"
|
|
||||||
|
|
||||||
proc replaceUrls*(body: string; prefs: Prefs; absolute=""): string =
|
proc replaceUrls*(body: string; prefs: Prefs; absolute=""): string =
|
||||||
result = body
|
result = body
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import types, config, prefs, formatters, redis_cache, http_pool, tokens
|
||||||
import views/[general, about]
|
import views/[general, about]
|
||||||
import routes/[
|
import routes/[
|
||||||
preferences, timeline, status, media, search, rss, list, debug,
|
preferences, timeline, status, media, search, rss, list, debug,
|
||||||
unsupported, embed, resolver, router_utils, embedtweet]
|
unsupported, embed, resolver, router_utils]
|
||||||
|
|
||||||
const instancesUrl = "https://github.com/zedeus/nitter/wiki/Instances"
|
const instancesUrl = "https://github.com/zedeus/nitter/wiki/Instances"
|
||||||
const issuesUrl = "https://github.com/zedeus/nitter/issues"
|
const issuesUrl = "https://github.com/zedeus/nitter/issues"
|
||||||
|
@ -51,7 +51,6 @@ createMediaRouter(cfg)
|
||||||
createEmbedRouter(cfg)
|
createEmbedRouter(cfg)
|
||||||
createRssRouter(cfg)
|
createRssRouter(cfg)
|
||||||
createDebugRouter(cfg)
|
createDebugRouter(cfg)
|
||||||
createEmbedTweetRouter(cfg)
|
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
port = Port(cfg.port)
|
port = Port(cfg.port)
|
||||||
|
@ -102,4 +101,3 @@ routes:
|
||||||
extend media, ""
|
extend media, ""
|
||||||
extend embed, ""
|
extend embed, ""
|
||||||
extend debug, ""
|
extend debug, ""
|
||||||
extend embedtweet, ""
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
import asyncdispatch, strutils, options
|
import asyncdispatch, strutils, options
|
||||||
import jester
|
import jester, karax/vdom
|
||||||
import ".."/[types, api], ../views/embed
|
import ".."/[types, api], ../views/[embed, tweet, general]
|
||||||
|
import router_utils
|
||||||
|
|
||||||
export api, embed
|
export api, embed, vdom
|
||||||
|
export tweet, general
|
||||||
|
export router_utils
|
||||||
|
|
||||||
proc createEmbedRouter*(cfg: Config) =
|
proc createEmbedRouter*(cfg: Config) =
|
||||||
router embed:
|
router embed:
|
||||||
|
@ -13,3 +16,11 @@ proc createEmbedRouter*(cfg: Config) =
|
||||||
resp Http404
|
resp Http404
|
||||||
|
|
||||||
resp renderVideoEmbed(cfg, convo.tweet)
|
resp renderVideoEmbed(cfg, convo.tweet)
|
||||||
|
|
||||||
|
get "/@user/status/@id/embedded":
|
||||||
|
let
|
||||||
|
tweet = (await getTweet(@"id")).tweet
|
||||||
|
prefs = cookiePrefs()
|
||||||
|
path = getPath()
|
||||||
|
|
||||||
|
resp $renderEmbeddedTweet(tweet, cfg, prefs, path)
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
import asyncdispatch, strutils, uri, options
|
|
||||||
import jester, karax/vdom
|
|
||||||
|
|
||||||
import router_utils
|
|
||||||
import ".."/views/[general, tweet]
|
|
||||||
import ".."/[types, api]
|
|
||||||
|
|
||||||
export vdom
|
|
||||||
export router_utils
|
|
||||||
export api, tweet, general
|
|
||||||
|
|
||||||
proc createEmbedTweetRouter*(cfg: Config) =
|
|
||||||
router embedtweet:
|
|
||||||
get "/embed/Tweet.html":
|
|
||||||
let
|
|
||||||
prefs = cookiePrefs()
|
|
||||||
t = (await getTweet(@"id")).tweet
|
|
||||||
|
|
||||||
resp ($renderHead(prefs, cfg) & $renderTweet(t, prefs, getPath(), mainTweet=true))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,12 @@ from jester import Request, cookies
|
||||||
|
|
||||||
import ../views/general
|
import ../views/general
|
||||||
import ".."/[utils, prefs, types]
|
import ".."/[utils, prefs, types]
|
||||||
export utils, prefs, types
|
export utils, prefs, types, uri
|
||||||
|
|
||||||
template savePref*(pref, value: string; req: Request; expire=false) =
|
template savePref*(pref, value: string; req: Request; expire=false) =
|
||||||
if not expire or pref in cookies(req):
|
if not expire or pref in cookies(req):
|
||||||
setCookie(pref, value, daysForward(when expire: -10 else: 360),
|
setCookie(pref, value, daysForward(when expire: -10 else: 360),
|
||||||
httpOnly=true, secure=cfg.useHttps)
|
httpOnly=true, secure=cfg.useHttps, sameSite=None)
|
||||||
|
|
||||||
template cookiePrefs*(): untyped {.dirty.} =
|
template cookiePrefs*(): untyped {.dirty.} =
|
||||||
getPrefs(cookies(request))
|
getPrefs(cookies(request))
|
||||||
|
|
|
@ -4,6 +4,7 @@ import karax/[karaxdsl, vdom, vstyles]
|
||||||
|
|
||||||
import renderutils
|
import renderutils
|
||||||
import ".."/[types, utils, formatters]
|
import ".."/[types, utils, formatters]
|
||||||
|
import general
|
||||||
|
|
||||||
proc getSmallPic(url: string): string =
|
proc getSmallPic(url: string): string =
|
||||||
result = url
|
result = url
|
||||||
|
@ -275,6 +276,59 @@ proc renderLocation*(tweet: Tweet): string =
|
||||||
text place
|
text place
|
||||||
return $node
|
return $node
|
||||||
|
|
||||||
|
proc renderEmbeddedTweet*(tweet: Tweet; cfg: Config; prefs: Prefs; path: string): VNode =
|
||||||
|
let fullTweet = tweet
|
||||||
|
var retweet: string
|
||||||
|
var tweet = fullTweet
|
||||||
|
if tweet.retweet.isSome:
|
||||||
|
tweet = tweet.retweet.get
|
||||||
|
retweet = fullTweet.profile.fullname
|
||||||
|
|
||||||
|
# handle unavailable
|
||||||
|
|
||||||
|
buildHtml(tdiv(class="timeline-item")):
|
||||||
|
renderHead(prefs, cfg)
|
||||||
|
tdiv(class="tweet-body"):
|
||||||
|
var views = ""
|
||||||
|
renderHeader(tweet, retweet, prefs)
|
||||||
|
|
||||||
|
var tweetClass = "tweet-content media-body"
|
||||||
|
if prefs.bidiSupport:
|
||||||
|
tweetClass &= " tweet-bidi"
|
||||||
|
|
||||||
|
tdiv(class=tweetClass, dir="auto"):
|
||||||
|
verbatim replaceUrls(tweet.text, prefs) & renderLocation(tweet)
|
||||||
|
|
||||||
|
if tweet.attribution.isSome:
|
||||||
|
renderAttribution(tweet.attribution.get(), prefs)
|
||||||
|
|
||||||
|
if tweet.card.isSome:
|
||||||
|
renderCard(tweet.card.get(), prefs, path)
|
||||||
|
|
||||||
|
if tweet.photos.len > 0:
|
||||||
|
renderAlbum(tweet)
|
||||||
|
elif tweet.video.isSome:
|
||||||
|
renderVideo(tweet.video.get(), prefs, path)
|
||||||
|
views = tweet.video.get().views
|
||||||
|
elif tweet.gif.isSome:
|
||||||
|
renderGif(tweet.gif.get(), prefs)
|
||||||
|
views = "GIF"
|
||||||
|
|
||||||
|
if tweet.poll.isSome:
|
||||||
|
renderPoll(tweet.poll.get())
|
||||||
|
|
||||||
|
if tweet.quote.isSome:
|
||||||
|
renderQuote(tweet.quote.get(), prefs, path)
|
||||||
|
|
||||||
|
p(class="tweet-published"): text getTime(tweet)
|
||||||
|
|
||||||
|
if tweet.mediaTags.len > 0:
|
||||||
|
renderMediaTags(tweet.mediaTags)
|
||||||
|
|
||||||
|
if not prefs.hideTweetStats:
|
||||||
|
renderStats(tweet.stats, views)
|
||||||
|
|
||||||
|
|
||||||
proc renderTweet*(tweet: Tweet; prefs: Prefs; path: string; class=""; index=0;
|
proc renderTweet*(tweet: Tweet; prefs: Prefs; path: string; class=""; index=0;
|
||||||
last=false; showThread=false; mainTweet=false; afterTweet=false): VNode =
|
last=false; showThread=false; mainTweet=false; afterTweet=false): VNode =
|
||||||
var divClass = class
|
var divClass = class
|
||||||
|
|
Loading…
Reference in a new issue