您需要先安装一个扩展,例如 篡改猴、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 [email protected] // @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.11 // @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>"; }