No known key found for this signature in database
GPG Key ID: B8254FB7EC3D37F2
22 changed files with 422 additions and 31 deletions
-
101assets/js/community.js
-
1locales/ar.json
-
1locales/de.json
-
1locales/el.json
-
1locales/en-US.json
-
1locales/eo.json
-
1locales/es.json
-
1locales/fr.json
-
1locales/it.json
-
1locales/nb_NO.json
-
1locales/nl.json
-
1locales/pl.json
-
1locales/ru.json
-
1locales/uk.json
-
1locales/zh-CN.json
-
59src/invidious.cr
-
88src/invidious/channels.cr
-
85src/invidious/comments.cr
-
5src/invidious/views/channel.ecr
-
80src/invidious/views/community.ecr
-
14src/invidious/views/licenses.ecr
-
7src/invidious/views/playlists.ecr
@ -0,0 +1,101 @@ |
|||
String.prototype.supplant = function (o) { |
|||
return this.replace(/{([^{}]*)}/g, function (a, b) { |
|||
var r = o[b]; |
|||
return typeof r === 'string' || typeof r === 'number' ? r : a; |
|||
}); |
|||
} |
|||
|
|||
function hide_youtube_replies(event) { |
|||
var target = event.target; |
|||
|
|||
sub_text = target.getAttribute('data-inner-text'); |
|||
inner_text = target.getAttribute('data-sub-text'); |
|||
|
|||
body = target.parentNode.parentNode.children[1]; |
|||
body.style.display = 'none'; |
|||
|
|||
target.innerHTML = sub_text; |
|||
target.onclick = show_youtube_replies; |
|||
target.setAttribute('data-inner-text', inner_text); |
|||
target.setAttribute('data-sub-text', sub_text); |
|||
} |
|||
|
|||
function show_youtube_replies(event) { |
|||
var target = event.target; |
|||
|
|||
sub_text = target.getAttribute('data-inner-text'); |
|||
inner_text = target.getAttribute('data-sub-text'); |
|||
|
|||
body = target.parentNode.parentNode.children[1]; |
|||
body.style.display = ''; |
|||
|
|||
target.innerHTML = sub_text; |
|||
target.onclick = hide_youtube_replies; |
|||
target.setAttribute('data-inner-text', inner_text); |
|||
target.setAttribute('data-sub-text', sub_text); |
|||
} |
|||
|
|||
function number_with_separator(val) { |
|||
while (/(\d+)(\d{3})/.test(val.toString())) { |
|||
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); |
|||
} |
|||
return val; |
|||
} |
|||
|
|||
function get_youtube_replies(target, load_more) { |
|||
var continuation = target.getAttribute('data-continuation'); |
|||
|
|||
var body = target.parentNode.parentNode; |
|||
var fallback = body.innerHTML; |
|||
body.innerHTML = |
|||
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>'; |
|||
|
|||
var url = '/api/v1/channels/comments/' + community_data.ucid + |
|||
'?format=html' + |
|||
'&hl=' + community_data.preferences.locale + |
|||
'&thin_mode=' + community_data.preferences.thin_mode + |
|||
'&continuation=' + continuation; |
|||
var xhr = new XMLHttpRequest(); |
|||
xhr.responseType = 'json'; |
|||
xhr.timeout = 10000; |
|||
xhr.open('GET', url, true); |
|||
|
|||
xhr.onreadystatechange = function () { |
|||
if (xhr.readyState == 4) { |
|||
if (xhr.status == 200) { |
|||
if (load_more) { |
|||
body = body.parentNode.parentNode; |
|||
body.removeChild(body.lastElementChild); |
|||
body.innerHTML += xhr.response.contentHtml; |
|||
} else { |
|||
body.removeChild(body.lastElementChild); |
|||
|
|||
var p = document.createElement('p'); |
|||
var a = document.createElement('a'); |
|||
p.appendChild(a); |
|||
|
|||
a.href = 'javascript:void(0)'; |
|||
a.onclick = hide_youtube_replies; |
|||
a.setAttribute('data-sub-text', community_data.hide_replies_text); |
|||
a.setAttribute('data-inner-text', community_data.show_replies_text); |
|||
a.innerText = community_data.hide_replies_text; |
|||
|
|||
var div = document.createElement('div'); |
|||
div.innerHTML = xhr.response.contentHtml; |
|||
|
|||
body.appendChild(p); |
|||
body.appendChild(div); |
|||
} |
|||
} else { |
|||
body.innerHTML = fallback; |
|||
} |
|||
} |
|||
} |
|||
|
|||
xhr.ontimeout = function () { |
|||
console.log('Pulling comments failed.'); |
|||
body.innerHTML = fallback; |
|||
} |
|||
|
|||
xhr.send(); |
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
<% content_for "header" do %> |
|||
<title><%= channel.author %> - Invidious</title> |
|||
<% end %> |
|||
|
|||
<% if channel.banner %> |
|||
<div class="h-box"> |
|||
<img style="width:100%" src="/ggpht<%= URI.parse(channel.banner.not_nil!.gsub("=w1060-", "=w1280-")).full_path %>"> |
|||
</div> |
|||
|
|||
<div class="h-box"> |
|||
<hr> |
|||
</div> |
|||
<% end %> |
|||
|
|||
<div class="pure-g h-box"> |
|||
<div class="pure-u-2-3"> |
|||
<div class="channel-profile"> |
|||
<img src="/ggpht<%= URI.parse(channel.author_thumbnail).full_path %>"> |
|||
<span><%= channel.author %></span> |
|||
</div> |
|||
</div> |
|||
<div class="pure-u-1-3" style="text-align:right"> |
|||
<h3> |
|||
<a href="/feed/channel/<%= channel.ucid %>"><i class="icon ion-logo-rss"></i></a> |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="h-box"> |
|||
<% ucid = channel.ucid %> |
|||
<% author = channel.author %> |
|||
<% sub_count_text = number_to_short_text(channel.sub_count) %> |
|||
<%= rendered "components/subscribe_widget" %> |
|||
</div> |
|||
|
|||
<div class="pure-g h-box"> |
|||
<div class="pure-u-1-3"> |
|||
<a href="https://www.youtube.com/channel/<%= channel.ucid %>/community"><%= translate(locale, "View channel on YouTube") %></a> |
|||
<% if !channel.auto_generated %> |
|||
<div class="pure-u-1 pure-md-1-3"> |
|||
<a href="/channel/<%= channel.ucid %>"><%= translate(locale, "Videos") %></a> |
|||
</div> |
|||
<% end %> |
|||
<div class="pure-u-1 pure-md-1-3"> |
|||
<a href="/channel/<%= channel.ucid %>/playlists"><%= translate(locale, "Playlists") %></a> |
|||
</div> |
|||
<div class="pure-u-1 pure-md-1-3"> |
|||
<% if channel.tabs.includes? "community" %> |
|||
<b><%= translate(locale, "Community") %></b> |
|||
<% end %> |
|||
</div> |
|||
</div> |
|||
<div class="pure-u-2-3"></div> |
|||
</div> |
|||
|
|||
<div class="h-box"> |
|||
<hr> |
|||
</div> |
|||
|
|||
<% if error_message %> |
|||
<div class="h-box"> |
|||
<p><%= error_message %></p> |
|||
</div> |
|||
<% else %> |
|||
<div class="h-box pure-g" id="comments"> |
|||
<%= template_youtube_comments(items.not_nil!, locale, thin_mode) %> |
|||
</div> |
|||
<% end %> |
|||
|
|||
<script> |
|||
var community_data = { |
|||
ucid: '<%= channel.ucid %>', |
|||
youtube_comments_text: '<%= HTML.escape(translate(locale, "View YouTube comments")) %>', |
|||
comments_text: '<%= HTML.escape(translate(locale, "View `x` comments", "{commentCount}")) %>', |
|||
hide_replies_text: '<%= HTML.escape(translate(locale, "Hide replies")) %>', |
|||
show_replies_text: '<%= HTML.escape(translate(locale, "Show replies")) %>', |
|||
preferences: <%= env.get("preferences").as(Preferences).to_json %>, |
|||
} |
|||
</script> |
|||
<script src="/js/community.js?v=<%= ASSET_COMMIT %>"></script> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue