aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--settings.py7
-rw-r--r--youtube/__init__.py1
-rw-r--r--youtube/comments.py8
-rw-r--r--youtube/static/js/comments.js20
-rw-r--r--youtube/static/js/common.js16
-rw-r--r--youtube/templates/comments.html9
-rw-r--r--youtube/templates/comments_page.html30
-rw-r--r--youtube/templates/watch.html19
-rw-r--r--youtube/watch.py2
9 files changed, 93 insertions, 19 deletions
diff --git a/settings.py b/settings.py
index 942f79c..fffe6f2 100644
--- a/settings.py
+++ b/settings.py
@@ -128,6 +128,13 @@ For security reasons, enabling this is not recommended.''',
'comment': '',
}),
+ ('use_comments_js', {
+ 'label': 'Enable comments.js',
+ 'type': bool,
+ 'default': True,
+ 'comment': '',
+ }),
+
('theme', {
'type': int,
'default': 0,
diff --git a/youtube/__init__.py b/youtube/__init__.py
index 9038634..3c271f1 100644
--- a/youtube/__init__.py
+++ b/youtube/__init__.py
@@ -26,6 +26,7 @@ theme_names = {
def inject_theme_preference():
return {
'theme_path': '/youtube.com/static/' + theme_names[settings.theme] + '.css',
+ 'settings': settings,
}
@yt_app.template_filter('commatize')
diff --git a/youtube/comments.py b/youtube/comments.py
index 07d4b89..032ce8a 100644
--- a/youtube/comments.py
+++ b/youtube/comments.py
@@ -27,7 +27,7 @@ from flask import request
def make_comment_ctoken(video_id, sort=0, offset=0, lc='', secret_key=''):
video_id = proto.as_bytes(video_id)
secret_key = proto.as_bytes(secret_key)
-
+
page_info = proto.string(4,video_id) + proto.uint(6, sort)
offset_information = proto.nested(4, page_info) + proto.uint(5, offset)
@@ -41,11 +41,11 @@ def make_comment_ctoken(video_id, sort=0, offset=0, lc='', secret_key=''):
result = proto.nested(2, page_params) + proto.uint(3,6) + proto.nested(6, offset_information)
return base64.urlsafe_b64encode(result).decode('ascii')
-def comment_replies_ctoken(video_id, comment_id, max_results=500):
+def comment_replies_ctoken(video_id, comment_id, max_results=500):
params = proto.string(2, comment_id) + proto.uint(9, max_results)
params = proto.nested(3, params)
-
+
result = proto.nested(2, proto.string(2, video_id)) + proto.uint(3,6) + proto.nested(6, params)
return base64.urlsafe_b64encode(result).decode('ascii')
@@ -187,8 +187,10 @@ def get_comments_page():
'replying': replies,
}
+
return flask.render_template('comments_page.html',
comments_info = comments_info,
comment_posting_box_info = comment_posting_box_info,
+ slim = request.args.get('slim', False)
)
diff --git a/youtube/static/js/comments.js b/youtube/static/js/comments.js
new file mode 100644
index 0000000..845ed3e
--- /dev/null
+++ b/youtube/static/js/comments.js
@@ -0,0 +1,20 @@
+function onClickReplies(e) {
+ var details = e.target.parentElement;
+ // e.preventDefault();
+ console.log("loading replies ..");
+ doXhr(details.getAttribute("src") + "&slim=1", (html) => {
+ var div = details.querySelector(".comment_page");
+ div.innerHTML = html;
+ });
+ details.removeEventListener('click', onClickReplies);
+}
+
+window.addEventListener('DOMContentLoaded', function() {
+ QA("details.replies").forEach(details => {
+ details.addEventListener('click', onClickReplies);
+ details.addEventListener('auxclick', (e) => {
+ if (e.target.parentElement !== details) return;
+ if (e.button == 1) window.open(details.getAttribute("src"));
+ });
+ });
+}); \ No newline at end of file
diff --git a/youtube/static/js/common.js b/youtube/static/js/common.js
index 687c6fa..2997f61 100644
--- a/youtube/static/js/common.js
+++ b/youtube/static/js/common.js
@@ -1,4 +1,5 @@
Q = document.querySelector.bind(document);
+QA = document.querySelectorAll.bind(document);
function text(msg) { return document.createTextNode(msg); }
function clearNode(node) { while (node.firstChild) node.removeChild(node.firstChild); }
function toTimestamp(seconds) {
@@ -36,6 +37,19 @@ function getDefaultTranscriptTrackIdx() {
return textTracks.length - 1;
}
+function doXhr(url, callback=null) {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.onload = (e) => {
+ let ok = xhr.status >= 200 && xhr.status < 300;
+ if (ok) callback(e.currentTarget.response);
+ else alert(`${xhr.responseURL} status code: ${xhr.status}`);
+ }
+ xhr.send();
+ return xhr;
+}
+
+
window.addEventListener('DOMContentLoaded', function() {
cur_track_idx = getDefaultTranscriptTrackIdx();
-});
+}); \ No newline at end of file
diff --git a/youtube/templates/comments.html b/youtube/templates/comments.html
index f2cdf65..9d93b8c 100644
--- a/youtube/templates/comments.html
+++ b/youtube/templates/comments.html
@@ -22,7 +22,14 @@
<span class="likes">{{ comment['likes_text'] if comment['like_count'] else ''}}</span>
<div class="bottom-row">
- <a href="{{ comment['replies_url'] }}" class="replies">{{ comment['view_replies_text'] }}</a>
+ {% if settings.use_comments_js and comment['reply_count'] %}
+ <details class="replies" src="{{ comment['replies_url'] }}">
+ <summary>{{ comment['view_replies_text'] }}</summary>
+ <div class="comment_page">loading..</div>
+ </details>
+ {% else %}
+ <a href="{{ comment['replies_url'] }}" class="replies">{{ comment['view_replies_text'] }}</a>
+ {% endif %}
{% if 'delete_url' is in comment %}
<a href="{{ comment['delete_url'] }}" target="_blank">Delete</a>
{% endif %}
diff --git a/youtube/templates/comments_page.html b/youtube/templates/comments_page.html
index 047404a..269ac83 100644
--- a/youtube/templates/comments_page.html
+++ b/youtube/templates/comments_page.html
@@ -1,13 +1,16 @@
{% set page_title = ('Replies' if comments_info['is_replies'] else 'Comments page ' + comments_info['page_number']) %}
-{% extends "base.html" %}
-{% import "comments.html" as comments %}
+{% import "comments.html" as comments with context %}
-{% block style %}
- .comments-area{
- margin: auto;
- width:640px;
- }
-{% endblock style %}
+{% if not slim %}
+ {% extends "base.html" %}
+
+ {% block style %}
+ .comments-area{
+ margin: auto;
+ width:640px;
+ }
+ {% endblock style %}
+{% endif %}
{% block main %}
@@ -24,7 +27,9 @@
</section>
{% endif %}
- {{ comments.comment_posting_box(comment_posting_box_info) }}
+ {% if not slim %}
+ {{ comments.comment_posting_box(comment_posting_box_info) }}
+ {% endif %}
{% if not comments_info['is_replies'] %}
<div class="comment-links">
@@ -36,13 +41,18 @@
<div class="comments">
{% for comment in comments_info['comments'] %}
- {{ comments.render_comment(comment, comments_info['include_avatars']) }}
+ {{ comments.render_comment(comment, comments_info['include_avatars'], slim) }}
{% endfor %}
</div>
{% if 'more_comments_url' is in comments_info %}
<a class="page-button more-comments" href="{{ comments_info['more_comments_url'] }}">More comments</a>
{% endif %}
</section>
+
+ {% if settings.use_comments_js %}
+ <script src="/youtube.com/static/js/common.js"></script>
+ <script src="/youtube.com/static/js/comments.js"></script>
+ {% endif %}
{% endblock main %}
diff --git a/youtube/templates/watch.html b/youtube/templates/watch.html
index 89f8daa..86644ea 100644
--- a/youtube/templates/watch.html
+++ b/youtube/templates/watch.html
@@ -1,7 +1,7 @@
{% set page_title = title %}
{% extends "base.html" %}
{% import "common_elements.html" as common_elements %}
-{% import "comments.html" as comments %}
+{% import "comments.html" as comments with context %}
{% block style %}
details > summary{
background-color: var(--interface-color);
@@ -14,6 +14,18 @@
text-decoration: underline;
}
+ details.replies > summary{
+ background-color: var(--interface-color);
+ border-style: outset;
+ border-width: 1px;
+ font-weight: bold;
+ padding-bottom: 0px;
+ }
+
+ details.replies .comment{
+ width: 600px;
+ }
+
.playability-error{
height: 360px;
width: 640px;
@@ -678,8 +690,11 @@ Reload without invidious (for usage of new identity button).</a>
{% endif %}
<script src="/youtube.com/static/js/common.js"></script>
+ <script src="/youtube.com/static/js/transcript-table.js"></script>
{% if settings.use_video_hotkeys %}
<script src="/youtube.com/static/js/hotkeys.js"></script>
{% endif %}
- <script src="/youtube.com/static/js/transcript-table.js"></script>
+ {% if settings.use_comments_js %}
+ <script src="/youtube.com/static/js/comments.js"></script>
+ {% endif %}
{% endblock main %}
diff --git a/youtube/watch.py b/youtube/watch.py
index 0746cd6..1a9e6c4 100644
--- a/youtube/watch.py
+++ b/youtube/watch.py
@@ -470,8 +470,6 @@ def get_watch_page(video_id=None):
comment_count = info['comment_count'],
comments_disabled = info['comments_disabled'],
- settings = settings,
-
video_height = video_height,
video_width = video_width,
theater_video_target_width = theater_video_target_width,