您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows the comment for which this comment is an answer
// Answer to... // https://github.com/Inversion-des/Habrahabr--Answer-to // ==UserScript== // @name Answer to... // @description Shows the comment for which this comment is an answer // @namespace Habrahabr // @version 1.3.10 // @include https://geektimes.com/* // @include https://habr.com/* // @supportURL https://github.com/Inversion-des/Habrahabr--Answer-to/issues // ==/UserScript== /* класс стрелочки вверх — up-to-parent href — #comment_1706843 ID ответа — comment_1706843 класс заголовка — div info класс тела — div message */ "use strict"; !function(win) { if (window != window.top) return var doc = win.document win.addEventListener("load", function() { var comments_cont = doc.getElementById('comments') if (comments_cont) { var msgStyle = "\ background-color:white;\ padding:3px 2px 0 5px;\ position:absolute;\ z-index:1;\ overflow-y:auto;\ -webkit-box-shadow: 0px 3px 12px 3px rgba(0, 0, 0, 0.3);\ -moz-box-shadow: 0px 3px 12px 3px rgba(0, 0, 0, 0.3);\ box-shadow: 0px 3px 12px 3px rgba(0, 0, 0, 0.3);" // готовим контейнер для просмотра win.msgContainer_cont = doc.createElement("div") win.msgContainer_cont.className = "content-list__item_comment comments_list_answerTo" win.msgContainer_cont.innerHTML = '<div class="comment" style="'+msgStyle+'"></div>' win.msgContainer_cont.style.cssText = "position:fixed;top:0px;left:0px;display:none;z-index:99;margin:0 !important;padding:0 !important;overflow:visible;text-align:left;" doc.body.appendChild(win.msgContainer_cont) win.msgContainer = win.msgContainer_cont.firstChild // прописываем ховер стрелочкам всех комментов var arrows = comments_cont.getElementsByClassName('js-comment_parent') $.each(arrows, activateArrow) // таймер для активации новых комментариев setInterval(function() { var $ = win.jQuery if ($) { var newComments = $('.comment .is_new .to_parent') for (var i=0, li=newComments.length; i<li; i++) { var link = newComments[i] if (link.getAttribute('oninit') != 'activaded') { activateArrow(link) link.setAttribute('oninit', 'activaded') } } } }, 2000) // на клик — прячем коммент win.addEventListener("mousedown", hideTargetComment, false) } // if comments_cont }, false); function activateArrow(index, arrEl) { arrEl.addEventListener("mouseover", function(){ showTargetComment(this.getAttribute('href'), arrEl) }, false) arrEl.addEventListener("mouseout", hideTargetComment, false) } function showTargetComment(href, arrEl) { // ищем объект по id var id = href.replace(/^.*?#/, '') var target = doc.getElementById(id) // чистим контейнер while (win.msgContainer.childNodes.length) {win.msgContainer.removeChild(win.msgContainer.childNodes[0])} // заполняем контейнер новым комментом var comment_body = target // for (var i=0, l=target.childNodes.length; i<l; i++) { // var tmp = target.childNodes[i] // if (/comment_body/.test(tmp.className)) { // comment_body = tmp // break // } // } if (comment_body) { for (var i=0, l=comment_body.childNodes.length; i<l; i++) { var tmp = comment_body.childNodes[i] if (/head|message/.test(tmp.className)) { win.msgContainer.appendChild(tmp.cloneNode(true)) } // выходим из цикла if (tmp.className == "message") break } } // подгоняем ширину под блок комментариев var pageComments_cont = doc.getElementById('comments') win.msgContainer_cont.style.width = pageComments_cont.offsetWidth+absLeft(pageComments_cont)+2 + 'px' var targetTop = absTop(target) var windowScrollPos = doc.documentElement.scrollTop || doc.body.scrollTop // inline highlight win.msgContainer.style.top = targetTop>windowScrollPos ? targetTop-windowScrollPos-3 +'px' : 0 // height auto adjustment if (targetTop<windowScrollPos) { var currentCommentTop = absTop(arrEl.parentNode.parentNode) var targetCommentHeight = target.offsetHeight var delta = (windowScrollPos + targetCommentHeight) - (currentCommentTop-10) win.msgContainer.style.maxHeight = delta>0 ? targetCommentHeight-delta +'px' : '' } else { win.msgContainer.style.maxHeight = '' } // показываем win.msgContainer.parentNode.style.display = "block" // отступы win.msgContainer.style.marginLeft = absLeft(target)-5+'px' win.msgContainer.style.width = win.msgContainer.parentNode.offsetWidth-parseInt(win.msgContainer.style.marginLeft)+'px' } // showTargetComment function hideTargetComment() { win.msgContainer.parentNode.style.display = "none" } function absLeft(o) { var l = 0 do { if (o.offsetLeft) l += o.offsetLeft-o.scrollLeft; } while (o = o.offsetParent) return l } function absTop(o) { var l = 0 do { if (o.offsetTop) l += o.offsetTop-o.scrollTop; } while (o = o.offsetParent) return l } }(typeof unsafeWindow == 'undefined' ? window : unsafeWindow)
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址