diff options
Diffstat (limited to 'youtube')
-rw-r--r-- | youtube/__init__.py | 1 | ||||
-rw-r--r-- | youtube/comments.py | 8 | ||||
-rw-r--r-- | youtube/static/js/comments.js | 20 | ||||
-rw-r--r-- | youtube/static/js/common.js | 16 | ||||
-rw-r--r-- | youtube/templates/comments.html | 9 | ||||
-rw-r--r-- | youtube/templates/comments_page.html | 30 | ||||
-rw-r--r-- | youtube/templates/watch.html | 19 | ||||
-rw-r--r-- | youtube/watch.py | 2 |
8 files changed, 86 insertions, 19 deletions
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, |