您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Loads top comments from all pages and threads in any Dreamwidth post into a single page
当前为
- // ==UserScript==
- // @name Quick-load Dreamwidth comment pages
- // @namespace rallamajoop@gmail.com
- // @description Loads top comments from all pages and threads in any Dreamwidth post into a single page
- // @include https://*.dreamwidth.org/*.html*view=top-only*
- // @include https://*.dreamwidth.org/*.html*view=top-only&page=1*
- // @exclude /^.*page(1\d+|[2-9]\d*).*/
- // @version 1.1
- // @license MIT
- // ==/UserScript==
- //Loads top comments of every thread in any Dreamwidth post in one place by appending contents of pages 2-n to bottom of page 1 under ?view=top-only
- //'Threaded' links redirected to threaded comments for that page, rather than threaded comments page 1.
- //NOTE: Breaks "Show [x] comments" links on every page after page 1. I have tried to find a workaround to fix this and given up.
- //NOTE: Does not change behaviour on top-level pages from 2-max
- // V1.1: Minor update to fix TamperMonkey bug
- //Retrieve page as javascript object
- function getSourceAsDOM(url)
- {
- var xmlhttp=new XMLHttpRequest();
- xmlhttp.open("GET",url,false);
- xmlhttp.send();
- var parser=new DOMParser();
- return parser.parseFromString(xmlhttp.responseText,"text/html");
- }
- //Remove all children of className (used for stripping redundant/broken material out of later pages)
- function removeAll(doc, className, keepCommentText=false) {
- var children = doc.getElementsByClassName(className);
- var leng = children.length;
- if (leng<1) {
- return;
- }
- for (var j=0; j<leng; j++) {
- var par = children[0].parentNode;
- if (keepCommentText) {
- var span=document.createElement('span');
- span.innerHTML = children[0].innerText.replace("Show ", "");
- par.insertBefore(span, children[0].nextSibling);
- }
- par.removeChild(children[0]);
- }
- }
- var topLinks = document.getElementsByClassName("comment-pages toppages");
- var pages = topLinks[0].getElementsByTagName("a");
- var comments = document.getElementById("comments");
- removeAll(comments, "bottomcomment");
- var loc = location.href;
- var parts = loc.split(".html");
- loc=parts[0] + ".html";
- var head = document.getElementsByTagName('head')[0];
- for (var i=1; i<pages.length; i++) {
- //Print notification that next page is loading
- var loading=document.createElement('div');
- loading.innerHTML="<p><h3>(Loading page " + (i+1) + ")<br><marquee style='width:50px' direction='right'>...</marquee></b></h3><br></p>";
- comments.appendChild(loading);
- //Load next page
- var pagehref=loc + "?view=top-only&page=" + (i+1) + "#comments";
- var pg = getSourceAsDOM(pagehref);
- //Trim out redundant links
- var comm = pg.getElementById("comments");
- //removeAll(comm, "comment-pages toppages"); //strip out surplus page links
- if (i<pages.length-1) {
- removeAll(comm, "bottomcomment"); //strip out surplus page links
- }
- //strip out 'Show comments' links, as these will be broken on pages>1
- removeAll(comm, "link cmt_unhide", true);
- removeAll(comm, "link expand");
- //Modify 'Threaded' links in header/footer of each page to point threaded page corresponding to this page number
- var num=i+1;
- var threaded=comm.getElementsByClassName("view-threaded");
- for (var j=0; j<threaded.length; j++) {
- var lnks=threaded[j].getElementsByTagName("a");
- for (var k=0; k<lnks.length; k++) {
- lnks[k].href=loc+"?page=" + num + "#comments";
- lnks[k].text+=" (Page "+num+")";
- var newlink=document.createElement('span');
- newlink.innerHTML=" | <a href=\""+pagehref+"\">Top-Level (Page "+num+")</a>";
- lnks[k].parentNode.parentNode.appendChild(newlink);
- }
- }
- //Print summary on last page
- if (i==pages.length-1) {
- var pgs=pages.length;
- num=comm.getElementsByClassName("comment-thread comment-depth-odd comment-depth-1").length;
- var div = document.createElement('div');
- div.innerHTML="<p><b>Threads on last page: "+num+"/25<br>Threads total: "+(num+(pgs-1)*25)+"</b></p>";
- comm.appendChild(div);
- //alert(num);
- }
- //Add new page to end of current
- comments.appendChild(comm);
- //Remove notification that next page is loading and replace with generic title
- loading.innerHTML="<p><a href=\""+pagehref+"\"><h1>Page " + (i+1) + "</h1></a></p>";
- }