mirror of
https://github.com/zedeus/nitter
synced 2026-09-05 22:59:31 +00:00
Add tweet embed and oEmbed API support
This commit is contained in:
parent
06c52473ab
commit
9be0b8f826
10 changed files with 389 additions and 31 deletions
|
|
@ -1,15 +1,18 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
import options
|
||||
import karax/[karaxdsl, vdom]
|
||||
from jester import Request
|
||||
|
||||
import ".."/[types, formatters]
|
||||
import general, tweet
|
||||
|
||||
const doctype = "<!DOCTYPE html>\n"
|
||||
const
|
||||
doctype = "<!DOCTYPE html>\n"
|
||||
embedResizeJs = staticRead("../../public/js/embedResize.js")
|
||||
embedTweetJs = embedResizeJs & staticRead("../../public/js/embedTweet.js")
|
||||
embedErrorJs = embedResizeJs & ";requestAnimationFrame(arguments[0]);"
|
||||
|
||||
proc renderVideoEmbed*(tweet: Tweet; cfg: Config; req: Request): string =
|
||||
let
|
||||
let
|
||||
video = tweet.getVideos()[0]
|
||||
thumb = video.thumb
|
||||
vidUrl = getVideoEmbed(cfg, tweet.id)
|
||||
|
|
@ -22,4 +25,37 @@ proc renderVideoEmbed*(tweet: Tweet; cfg: Config; req: Request): string =
|
|||
tdiv(class="embed-video"):
|
||||
renderVideo(video, prefs, "")
|
||||
|
||||
script:
|
||||
verbatim embedResizeJs
|
||||
|
||||
result = doctype & $node
|
||||
|
||||
proc renderTweetEmbed*(tweet: Tweet; path: string; prefs: Prefs; cfg: Config; req: Request): string =
|
||||
let node = buildHtml(html(lang="en")):
|
||||
renderHead(prefs, cfg, req)
|
||||
|
||||
body:
|
||||
tdiv(class="tweet-embed"):
|
||||
a(class="tweet-link", href=getLink(tweet), target="_blank")
|
||||
renderTweet(tweet, prefs, path, mainTweet=true)
|
||||
a(class="embed-footer", href=getLink(tweet), target="_blank"):
|
||||
text "Read more on " & cfg.hostname
|
||||
|
||||
script:
|
||||
verbatim embedTweetJs
|
||||
|
||||
result = doctype & $node
|
||||
|
||||
proc renderErrorEmbed*(error: string; prefs: Prefs; cfg: Config; req: Request): string =
|
||||
let node = buildHtml(html(lang="en")):
|
||||
renderHead(prefs, cfg, req)
|
||||
|
||||
body:
|
||||
tdiv(class="tweet-embed error-embed"):
|
||||
tdiv(class="error-panel"):
|
||||
span: text error
|
||||
|
||||
script:
|
||||
verbatim embedErrorJs
|
||||
|
||||
result = doctype & $node
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
|
|||
let opensearchUrl = getUrlPrefix(cfg) & "/opensearch"
|
||||
|
||||
buildHtml(head):
|
||||
link(rel="stylesheet", type="text/css", href="/css/style.css?v=51")
|
||||
link(rel="stylesheet", type="text/css", href="/css/style.css?v=52")
|
||||
link(rel="stylesheet", type="text/css", href="/css/fontello.css?v=7")
|
||||
|
||||
if theme.len > 0:
|
||||
|
|
|
|||
6
src/views/oembed.nimf
Normal file
6
src/views/oembed.nimf
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#? stdtmpl(subsChar = '$', metaChar = '#')
|
||||
## SPDX-License-Identifier: AGPL-3.0-only
|
||||
#proc renderOembedIframe*(embedUrl: string): string =
|
||||
# result = ""
|
||||
<iframe src="$embedUrl" style="width:100%;max-width:550px;height:250px;border:none" scrolling="no" loading="lazy" onload="let c=new MessageChannel;c.port1.onmessage=e=>this.style.height=e.data+'px';this.contentWindow.postMessage('','*',[c.port2])"></iframe>
|
||||
#end proc
|
||||
|
|
@ -5,7 +5,6 @@ from jester import Request
|
|||
|
||||
import renderutils
|
||||
import ".."/[types, utils, formatters]
|
||||
import general
|
||||
|
||||
const doctype = "<!DOCTYPE html>\n"
|
||||
|
||||
|
|
@ -464,13 +463,3 @@ proc renderTweet*(tweet: Tweet; prefs: Prefs; path: string; class=""; index=0;
|
|||
|
||||
if not prefs.hideTweetStats:
|
||||
renderStats(tweet.stats)
|
||||
|
||||
proc renderTweetEmbed*(tweet: Tweet; path: string; prefs: Prefs; cfg: Config; req: Request): string =
|
||||
let node = buildHtml(html(lang="en")):
|
||||
renderHead(prefs, cfg, req)
|
||||
|
||||
body:
|
||||
tdiv(class="tweet-embed"):
|
||||
renderTweet(tweet, prefs, path, mainTweet=true)
|
||||
|
||||
result = doctype & $node
|
||||
|
|
|
|||
Loading…
Reference in a new issue