forked from midou/invidious
Comments: Move 'template_reddit' function to own file + module
This commit is contained in:
parent
e10f6b6626
commit
de78848039
@ -1,50 +1,3 @@
|
|||||||
def template_reddit_comments(root, locale)
|
|
||||||
String.build do |html|
|
|
||||||
root.each do |child|
|
|
||||||
if child.data.is_a?(RedditComment)
|
|
||||||
child = child.data.as(RedditComment)
|
|
||||||
body_html = HTML.unescape(child.body_html)
|
|
||||||
|
|
||||||
replies_html = ""
|
|
||||||
if child.replies.is_a?(RedditThing)
|
|
||||||
replies = child.replies.as(RedditThing)
|
|
||||||
replies_html = template_reddit_comments(replies.data.as(RedditListing).children, locale)
|
|
||||||
end
|
|
||||||
|
|
||||||
if child.depth > 0
|
|
||||||
html << <<-END_HTML
|
|
||||||
<div class="pure-g">
|
|
||||||
<div class="pure-u-1-24">
|
|
||||||
</div>
|
|
||||||
<div class="pure-u-23-24">
|
|
||||||
END_HTML
|
|
||||||
else
|
|
||||||
html << <<-END_HTML
|
|
||||||
<div class="pure-g">
|
|
||||||
<div class="pure-u-1">
|
|
||||||
END_HTML
|
|
||||||
end
|
|
||||||
|
|
||||||
html << <<-END_HTML
|
|
||||||
<p>
|
|
||||||
<a href="javascript:void(0)" data-onclick="toggle_parent">[ − ]</a>
|
|
||||||
<b><a href="https://www.reddit.com/user/#{child.author}">#{child.author}</a></b>
|
|
||||||
#{translate_count(locale, "comments_points_count", child.score, NumberFormatting::Separator)}
|
|
||||||
<span title="#{child.created_utc.to_s(translate(locale, "%a %B %-d %T %Y UTC"))}">#{translate(locale, "`x` ago", recode_date(child.created_utc, locale))}</span>
|
|
||||||
<a href="https://www.reddit.com#{child.permalink}" title="#{translate(locale, "permalink")}">#{translate(locale, "permalink")}</a>
|
|
||||||
</p>
|
|
||||||
<div>
|
|
||||||
#{body_html}
|
|
||||||
#{replies_html}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
END_HTML
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def replace_links(html)
|
def replace_links(html)
|
||||||
# Check if the document is empty
|
# Check if the document is empty
|
||||||
# Prevents edge-case bug with Reddit comments, see issue #3115
|
# Prevents edge-case bug with Reddit comments, see issue #3115
|
||||||
|
50
src/invidious/frontend/comments_reddit.cr
Normal file
50
src/invidious/frontend/comments_reddit.cr
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
module Invidious::Frontend::Comments
|
||||||
|
extend self
|
||||||
|
|
||||||
|
def template_reddit(root, locale)
|
||||||
|
String.build do |html|
|
||||||
|
root.each do |child|
|
||||||
|
if child.data.is_a?(RedditComment)
|
||||||
|
child = child.data.as(RedditComment)
|
||||||
|
body_html = HTML.unescape(child.body_html)
|
||||||
|
|
||||||
|
replies_html = ""
|
||||||
|
if child.replies.is_a?(RedditThing)
|
||||||
|
replies = child.replies.as(RedditThing)
|
||||||
|
replies_html = self.template_reddit(replies.data.as(RedditListing).children, locale)
|
||||||
|
end
|
||||||
|
|
||||||
|
if child.depth > 0
|
||||||
|
html << <<-END_HTML
|
||||||
|
<div class="pure-g">
|
||||||
|
<div class="pure-u-1-24">
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-23-24">
|
||||||
|
END_HTML
|
||||||
|
else
|
||||||
|
html << <<-END_HTML
|
||||||
|
<div class="pure-g">
|
||||||
|
<div class="pure-u-1">
|
||||||
|
END_HTML
|
||||||
|
end
|
||||||
|
|
||||||
|
html << <<-END_HTML
|
||||||
|
<p>
|
||||||
|
<a href="javascript:void(0)" data-onclick="toggle_parent">[ − ]</a>
|
||||||
|
<b><a href="https://www.reddit.com/user/#{child.author}">#{child.author}</a></b>
|
||||||
|
#{translate_count(locale, "comments_points_count", child.score, NumberFormatting::Separator)}
|
||||||
|
<span title="#{child.created_utc.to_s(translate(locale, "%a %B %-d %T %Y UTC"))}">#{translate(locale, "`x` ago", recode_date(child.created_utc, locale))}</span>
|
||||||
|
<a href="https://www.reddit.com#{child.permalink}" title="#{translate(locale, "permalink")}">#{translate(locale, "permalink")}</a>
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
#{body_html}
|
||||||
|
#{replies_html}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
END_HTML
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -361,7 +361,7 @@ module Invidious::Routes::API::V1::Videos
|
|||||||
|
|
||||||
return reddit_thread.to_json
|
return reddit_thread.to_json
|
||||||
else
|
else
|
||||||
content_html = template_reddit_comments(comments, locale)
|
content_html = Frontend::Comments.template_reddit(comments, locale)
|
||||||
content_html = fill_links(content_html, "https", "www.reddit.com")
|
content_html = fill_links(content_html, "https", "www.reddit.com")
|
||||||
content_html = replace_links(content_html)
|
content_html = replace_links(content_html)
|
||||||
response = {
|
response = {
|
||||||
|
@ -99,7 +99,7 @@ module Invidious::Routes::Watch
|
|||||||
rescue ex
|
rescue ex
|
||||||
if preferences.comments[1] == "reddit"
|
if preferences.comments[1] == "reddit"
|
||||||
comments, reddit_thread = Comments.fetch_reddit(id)
|
comments, reddit_thread = Comments.fetch_reddit(id)
|
||||||
comment_html = template_reddit_comments(comments, locale)
|
comment_html = Frontend::Comments.template_reddit(comments, locale)
|
||||||
|
|
||||||
comment_html = fill_links(comment_html, "https", "www.reddit.com")
|
comment_html = fill_links(comment_html, "https", "www.reddit.com")
|
||||||
comment_html = replace_links(comment_html)
|
comment_html = replace_links(comment_html)
|
||||||
@ -108,7 +108,7 @@ module Invidious::Routes::Watch
|
|||||||
elsif source == "reddit"
|
elsif source == "reddit"
|
||||||
begin
|
begin
|
||||||
comments, reddit_thread = Comments.fetch_reddit(id)
|
comments, reddit_thread = Comments.fetch_reddit(id)
|
||||||
comment_html = template_reddit_comments(comments, locale)
|
comment_html = Frontend::Comments.template_reddit(comments, locale)
|
||||||
|
|
||||||
comment_html = fill_links(comment_html, "https", "www.reddit.com")
|
comment_html = fill_links(comment_html, "https", "www.reddit.com")
|
||||||
comment_html = replace_links(comment_html)
|
comment_html = replace_links(comment_html)
|
||||||
|
Loading…
Reference in New Issue
Block a user