您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Preview to the top comments on Reddit
当前为
// ==UserScript== // @name Reddit - Top Comments Preview // @namespace https://greasyfork.org/users/5174-jesuis-parapluie // @author Erik Wannebo, gavin19, jesuis-unparapluie // @description Preview to the top comments on Reddit // @include http://*.reddit.com/* // @exclude http://*.reddit.com/*/comments/* // @include https://*.reddit.com/* // @exclude https://*.reddit.com/*/comments/* // @grant none // @version 1.64 // ==/UserScript== (function () { 'use strict'; var topCP = { opts: { /* Number of comments to display. Default is 3 */ topComments: 3, /* click or hover. Do you want to hover the link to trigger it, or click? */ eventType: 'click', /* set keyboard shortcut 't' to show/hide active top comments (needs RES) */ setShortCut: true, /* auto load all comments */ autoLoadComments: false, /* auto load all images (for RES) */ autoExpandImages: false }, addTopLinks: function () { var i, len, link, li, articleID, tmp, parent, a = document.querySelectorAll('.linklisting .comments:not(.empty)'); if (a.length) { for (i = 0, len = a.length; i < len; i += 1) { if (!a[i].parentNode.parentNode.querySelector('.toplink') && /[0-9]/.test(a[i])) { articleID = a[i].getAttribute('href'); articleID = articleID.substring(articleID.indexOf('/comments/') + 10, articleID.indexOf('/comments/') + 16); link = document.createElement('a'); li = document.createElement('li'); //li.className = 'rcp'; li.appendChild(link); link.className = 'toplink'; tmp = "java"; link.href = tmp + 'script:;'; link.setAttribute('id', 'toplink' + articleID); link.setAttribute('style', 'color:orangered;text-decoration:none;'); link.textContent = ' top'; parent = a[i].parentNode.parentNode; parent.insertBefore(li, parent.querySelector('.first + li')); topCP.addListener(link, articleID); if (topCP.opts.autoLoadComments) { topCP.retrieveTopComments(link, articleID); } } } } }, addListener: function (link, id) { link.addEventListener(topCP.opts.eventType, function () { topCP.retrieveTopComments(this, id); }); }, retrieveTopComments: function (ele, articleID) { var pre, url, xhr, thisPre; topCP.kill_preview = function () { this.parentNode.removeChild(this); } ele = ele.parentNode.parentNode.parentNode; if (!document.querySelector('#preview' + articleID)) { pre = document.createElement('div'); pre.setAttribute('id', 'preview' + articleID); pre.classList.add('loading'); pre.addEventListener('click', topCP.kill_preview); //ele.querySelector('.first').insertBefore(pre, null); ele.insertBefore(pre, ele.querySelector('.expando')); } if (document.querySelector('#preview' + articleID).classList.contains("loading")) { url = window.location.href.split("/")[0]+'//www.reddit.com/comments/' + articleID + '/.json?limit=' + (topCP.opts.topComments + 5) + '&sort=top'; xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { topCP.onloadJSON(xhr); } else if (xhr.status === 503) { // Service not available, retry every second setTimeout(topCP.retrieveTopComments(ele, articleID),1000); } }; xhr.send(null); } else { thisPre = document.querySelector('#preview' + articleID); thisPre.parentNode.parentNode.style.marginBottom = ''; thisPre.parentNode.removeChild(thisPre); } }, onloadJSON: function (response) { var i, len, content, score, contentDiv, article, author, permalink, newHTML = '', comments = JSON.parse(response.responseText), commentsLength = comments[1].data.children.length, articleID = comments[0].data.children[0].data.id, threadLink = comments[0].data.children[0].data.permalink; len = topCP.opts.topComments < commentsLength ? topCP.opts.topComments : commentsLength; for (i = 0; i < len; i += 1) { content = comments[1].data.children[i].data.body_html; if (content) { contentDiv = document.createElement('div'); contentDiv.innerHTML = content; content = contentDiv.firstChild.textContent; author = comments[1].data.children[i].data.author; score = comments[1].data.children[i].data.score; permalink = threadLink + comments[1].data.children[i].data.id; newHTML += (i > 0 ? '<hr>' : ''); newHTML += '<a class="ulink" target="_blank" href="/u/' + author; newHTML += '">' + author + '</a>'; newHTML += '<span class="points">| score: ' + score + '</span>'; newHTML += '<a class="permalink" target="_blank" href="' + permalink + '">permalink</a><br />' + content; } } article = document.querySelector('#preview' + articleID); if (article) { article.classList.remove('loading'); article.innerHTML = newHTML; article.removeEventListener(topCP.opts.eventType, topCP.kill_preview); } article = document.querySelector('#preview' + articleID); if (article) { article.classList.remove('loading'); article.innerHTML = newHTML; article.removeEventListener('click', topCP.kill_preview); } }, addStyle: function () { var style, sheet = ''; sheet += "div[id^=preview]{box-sizing:border-box;-moz-box-sizing:border-box;background:#fff;border-radius:5px;border:1px solid #dbdbdb;white-space:normal;padding:5px;display:inline-block;margin:8px 0;}"; sheet += ".loading:before{content:\"Loading...\";}div[id^=preview] .md{border:1px solid #ddd;background:#f0f0f0;box-sizing:border-box;-moz-box-sizing:border-box;margin:3px 0;box-sizing:border-box;padding:2px 8px;}"; sheet += "div[id^=preview] .md *{white-space:normal;}div[id^=preview] .md code{white-space:pre;}"; sheet += "div[id^=preview] .md pre{overflow:visible}div[id^=preview]>*{font-size: small;}"; sheet += "div[id^=preview] .ulink,div[id^=preview] .md a{font-weight:bold;color:#369!important;}"; sheet += ".listing-page .buttons li{vertical-align:top;}.toplink{text-decoration:none;}"; sheet += ".permalink { float: right; color: #666;}.points{color:#333;font-weight:bold;margin-left:.5em;}" sheet += ".res-nightmode div[id^=preview] .ulink,.res-nightmode div[id^=preview] .md a{color: rgb(20, 150, 220)!important;}"; sheet += ".res-nightmode div[id^=preview]{ background: #333!important;border-color:#666!important}"; sheet += ".res-nightmode .toplink{color: #eee!important;}"; sheet += ".res-nightmode div[id^=preview] .points{color: #ddd!important;}"; sheet += ".res-nightmode div[id^=preview] .permalink{color: #ccc!important;}"; sheet += ".res-nightmode div[id^=preview] .md{background:#555!important;border-color: #222!important;}"; sheet += ".res-nightmode div[id^=preview] .md blockquote{color:#8C8C8C!important;}"; sheet += ".res-nightmode div[id^=preview] hr{border-color:#777!important;}"; style = document.createElement('style'); style.type = 'text/css'; style.textContent = sheet; document.querySelector('head').appendChild(style); }, init: function () { document.body.addEventListener('DOMNodeInserted', function (e) { if ((e.target.tagName === 'DIV') && (e.target.getAttribute('id') && e.target.getAttribute('id').indexOf('siteTable') !== -1)) { topCP.addTopLinks(); } }, true); document.body.addEventListener('DOMNodeInserted', function (e) { if ((e.target.tagName === 'DIV') && (e.target.getAttribute('id') && e.target.getAttribute('id').indexOf('siteTable') !== -1)) { topCP.addTopLinks(); } }, true); if (topCP.opts.setShortCut) { window.addEventListener("keyup", function(e) { //t: keycode 84 if(e.keyCode === 84 && document.querySelector('.RES-keyNav-activeElement')) { document.querySelector('.RES-keyNav-activeElement .toplink').click(); } }); } if (topCP.opts.autoExpandImages) { document.querySelector('#viewImagesButton').click(); } topCP.addStyle(); topCP.addTopLinks(); } }; if (document.body) { setTimeout(function () { topCP.init(); }, 300); } else { window.addEventListener('load', function () { topCP.init(); }, false); } }());