- // ==UserScript==
- // @name 煎蛋侠
- // @name:en Jandan Hero
- // @name:zh-TW 煎蛋俠
- // @namespace hoothin
- // @version 2.0
- // @icon http://cdn.jandan.net/static/img/favicon.ico
- // @description 为煎蛋jandan.net提供左右方向键快捷翻页、上下方向键快捷切图、鼠标悬停显示大图、屏蔽指定用户发言等功能
- // @description:en Tools for jandan.net
- // @description:zh-TW 為煎蛋jandan.net提供左右方向鍵快捷翻頁、上下方向鍵快捷切圖、鼠標懸停顯示大圖、屏蔽指定用戶發言等功能
- // @author hoothin
- // @match http*://jandan.net/*
- // @match http*://i.jandan.net/*
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // @grant GM_addStyle
- // @run-at document-idle
- // ==/UserScript==
-
- (function() {
- 'use strict';
- var timer,tempImg=document.createElement("img"),getImgWH=function(img,callBack){
- if(timer)clearInterval(timer);
- tempImg.src="";
- tempImg.src=img.src;
- var check=function(){
- if(tempImg.width>0 || tempImg.height>0){
- if(timer)clearInterval(timer);
- callBack(tempImg.width,tempImg.height);
- return true;
- }else{
- return false;
- }
- };
- var geted=check();
- if(!geted){
- timer = setInterval(check,40);
- }
- };
-
- document.addEventListener("keyup", function(e) {
- if(/INPUT|TEXTAREA/.test(document.activeElement.tagName))return;
- switch(e.keyCode){
- case 37://←
- var next=document.querySelector("span#nav_next>a");
- if(next)next.click();
- break;
- case 39://→
- var pre=document.querySelector("span#nav_prev>a");
- if(pre)pre.click();
- break;
- case 38://↑
- if(/jandan\.net\/(ooxx|pic|girl|top|zoo|dzh)/.test(location.href)){
- moveToPic(false);
- }
- break;
- case 40://↓
- if(/jandan\.net\/(ooxx|pic|girl|top|zoo|dzh)/.test(location.href)){
- moveToPic(true);
- }
- break;
- }
- });
-
- var pic,pics,currentPic,i;
- var isHttps=location.protocol=="https:",selector;
- var isTucao=document.querySelector(".tucao-list")!=null;
- var isTop=location.href.indexOf("jandan.net/top")!=-1;
- var isMobile=location.href.indexOf("i.jandan.net")!=-1;
-
- function moveToPic(d){
- pics=document.querySelectorAll(".commentlist .text img,.tucao-list img");
- if(!currentPic && pics)currentPic=pics[0];
- else{
- for(i=0;i<pics.length;i++){
- pic=pics[i];
- if(isTucao){
- if(($(window).scrollTop() + $(window).height() / 2) < ($(pic).offset().top + $(pic).outerHeight()) &&
- ($(window).scrollTop() + $(window).height() / 2) > $(pic).offset().top){
- currentPic=pic;
- break;
- }
- }else{
- if($(window).scrollTop() < ($(pic).offset().top + $(pic).outerHeight()) &&
- ($(window).scrollTop() + $(window).height()) > $(pic).offset().top){
- currentPic=pic;
- break;
- }
- }
- }
- if(!currentPic && pics)currentPic=pics[0];
- for(var i=0;i<pics.length;i++){
- pic=pics[i];
- var pi;
- if(currentPic==pic){
- if(d && pics.length>(i+1)){
- pi=i+1;
- currentPic=pics[pi];
- while($(currentPic).is(":hidden") && ++pi<pics.length){
- currentPic=pics[pi];
- }
- }else if(!d && i>0){
- pi=i-1;
- currentPic=pics[pi];
- while($(currentPic).is(":hidden") && --pi>0){
- currentPic=pics[pi];
- }
- }
- break;
- }
- }
- }
- setTimeout(()=>{
- if(isTucao){
- currentPic.scrollIntoView({behavior: "smooth", block: "center", inline: "center"});
- }else if(currentPic.nextSibling && currentPic.nextSibling.className=="gif-mask"){
- currentPic.nextSibling.click();
- }
- currentPic.click();
- },100);
- }
-
- function checkBan(author){
- let authorId;
- let changeBtn = author.querySelector("#changeBtn");
- if(changeBtn == null){
- changeBtn=document.createElement("a");
- changeBtn.href=`javascript:void(0);`;
- changeBtn.id="changeBtn";
- if(isMobile){
- author=author.querySelector("b");
- if(!author)return;
- authorId=author.innerText;
- author.parentNode.insertBefore(changeBtn,author.parentNode.querySelector(".righttext"));
- }else if(isTucao){
- authorId=author.querySelector(".tucao-author").innerText;
- author.insertBefore(changeBtn,author.querySelector(".tucao-author").nextSibling);
- }else{
- authorId=isTop?author.querySelector("strong").innerText:author.querySelector("strong").title.replace(/防伪码:/,"");
- author.insertBefore(changeBtn,author.querySelector("br"));
- }
- changeBtn.onclick=function(){
- var author_s,j,shown;
- if(author.parentNode.classList.contains("hide")){
- shown=false;
- GM_deleteValue("jandanDis_"+authorId);
- }else{
- shown=true;
- GM_setValue("jandanDis_"+authorId,true);
- }
- var authors=document.querySelectorAll("div.author,.tucao-author-bar,.commentlist>li>b");
- for(j=0;j<authors.length;j++){
- author_s=authors[j];
- var changeBtn_s=author_s.querySelector("#changeBtn");
- var isSame=false;
- if(isMobile){
- isSame=author_s.childNodes[0].nodeValue==authorId;
- }else if(isTucao){
- isSame=author_s.querySelector(".tucao-author").innerText==authorId;
- }else if(isTop){
- isSame=author_s.querySelector("strong").innerText==authorId;
- }else{
- isSame=author_s.querySelector("strong").title.replace(/防伪码:/,"")==authorId;
- }
- if(isSame){
- //author_s.nextSibling.nextSibling.style.display=shown?"none":"block";
- if(shown){
- author_s.parentNode.classList.add("hide");
- if(changeBtn_s)changeBtn_s.innerHTML="显";
- }else{
- author_s.parentNode.classList.remove("hide");
- if(changeBtn_s)changeBtn_s.innerHTML="隐";
- }
- }
- }
- };
- if(GM_getValue("jandanDis_"+authorId)){
- author.parentNode.classList.add("hide");
- changeBtn.innerHTML="显";
- }else{
- changeBtn.innerHTML="隐";
- }
- }
- return changeBtn;
- }
-
- if(isMobile){
- selector=".commentlist>li";
- }else{
- selector="div.author,.tucao-author-bar";
- }
- [].forEach.call(document.querySelectorAll(selector), item=>{
- checkBan(item);
- });
- var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
- var observer = new MutationObserver(function(records){
- records.map(function(record) {
- for(var i=0;i<record.addedNodes.length;i++){
- var curNode=record.addedNodes[i];
- if(curNode.className=="tucao-row"){
- checkBan(curNode.querySelector(selector));
- }
- }
- });
- });
- var option = {
- 'childList': true
- };
- var tucaoList=document.querySelector("div.tucao-list");
- if(tucaoList)observer.observe(tucaoList, option);
- $("body").on("mouseover", selector, e=>{
- let changeBtn=checkBan(e.currentTarget);
- changeBtn.style.display="initial";
- //console.log(e);
- });
- $("body").on("mouseout", selector, e=>{
- let author=e.currentTarget;
- let changeBtn = author.querySelector("#changeBtn");
- if(changeBtn)changeBtn.style.display="";
- });
- /*for(i=0;i<authors.length;i++){
- let author=authors[i];
- let changeBtn=document.createElement("a");
- changeBtn.href=`javascript:void(0);`;
- changeBtn.id="changeBtn";
- changeBtn.style.display="none";
- let authorId;
- if(isTucao){
- authorId=author.querySelector(".tucao-author").innerText;
- author.appendChild(changeBtn);
- }else{
- authorId=isTop?author.querySelector("strong").innerText:author.querySelector("strong").title.replace(/防伪码:/,"");
- author.insertBefore(changeBtn,author.querySelector("br"));
- }
- if(GM_getValue("jandanDis_"+authorId)){
- author.parentNode.classList.add("hide");
- changeBtn.innerHTML="显";
- }else{
- changeBtn.innerHTML="隐";
- }
- author.onmouseover=function(){
- changeBtn.style.display="block";
- };
- author.onmouseout=function(){
- changeBtn.style.display="none";
- };
- changeBtn.onclick=function(){
- var author_s,j,shown;
- if(author.parentNode.classList.contains("hide")){
- shown=false;
- GM_deleteValue("jandanDis_"+authorId);
- }else{
- shown=true;
- GM_setValue("jandanDis_"+authorId,true);
- }
- for(j=0;j<authors.length;j++){
- author_s=authors[j];
- if((isTucao && author_s.querySelector(".tucao-author").innerText==authorId) || !isTucao &&(
- (!isTop && author_s.querySelector("strong").title.replace(/防伪码:/,"")==authorId) ||
- (isTop && author_s.querySelector("strong").innerText==authorId))){
- //author_s.nextSibling.nextSibling.style.display=shown?"none":"block";
- if(shown){
- author_s.parentNode.classList.add("hide");
- author_s.querySelector("#changeBtn").innerHTML="显";
- }else{
- author_s.parentNode.classList.remove("hide");
- author_s.querySelector("#changeBtn").innerHTML="隐";
- }
- }
- }
- };
- }*/
- var left,top,src;
- var bigImg=document.createElement("img");
- bigImg.className="big_img";
- $("body").on("mouseover","img",e=>{
- if(isMobile)return;
- let img=e.currentTarget;
- src=img.src.replace(/\b(!(custom|square))\b/,"").replace(/\b(custom|square)\b/,"medium").replace(/\.sinaimg\.cn\/thumb\d+/,".sinaimg.cn/large");
- src=isHttps?src.replace(/http\:\/\//,"https://"):src.replace(/https\:\/\//,"http://");
- bigImg.src=img.src;
- bigImg.src=src;
- left=e.clientX;
- top=e.clientY;
- document.body.appendChild(bigImg);
- setTimeout(()=>{
- bigImg.style.opacity=1;
- },0);
- relocBigImg(left, top);
- getImgWH(bigImg,function(w,h){
- relocBigImg(left, top, w, h);
- });
- bigImg.onload=function(){
- relocBigImg(left, top);
- };
- });
- $("body").on("mouseout","img",e=>{
- if(isMobile)return;
- if(bigImg.parentNode){
- bigImg.style.opacity=0;
- bigImg.parentNode.removeChild(bigImg);
- }
- bigImg.removeAttribute("height");
- bigImg.removeAttribute("width");
- });
- $("body").on("mousemove","img",e=>{
- if(isMobile)return;
- left=e.clientX;
- top=e.clientY;
- if(!bigImg.src || bigImg.src===""){
- img.onmouseover(e);
- }
- relocBigImg(left, top);
- });
- /*for(i=0;i<imgs.length;i++){
- let img=imgs[i];
- img.onmouseover=function(e){
- src=img.src.replace(/\b(!(custom|square))\b/,"").replace(/\b(custom|square)\b/,"medium").replace(/\.sinaimg\.cn\/thumb\d+/,".sinaimg.cn/large");
- src=isHttps?src.replace(/http\:\/\//,"https://"):src.replace(/https\:\/\//,"http://");
- bigImg.src=img.src;
- bigImg.src=src;
- left=e.clientX;
- top=e.clientY;
- document.body.appendChild(bigImg);
- setTimeout(()=>{
- bigImg.style.opacity=1;
- },500);
- relocBigImg(left, top);
- getImgWH(bigImg,function(w,h){
- relocBigImg(left, top, w, h);
- });
- bigImg.onload=function(){
- relocBigImg(left, top);
- };
- };
- img.onmouseout=function(e){
- if(bigImg.parentNode){
- bigImg.style.opacity=0;
- bigImg.parentNode.removeChild(bigImg);
- }
- bigImg.removeAttribute("height");
- bigImg.removeAttribute("width");
- };
- img.onmousemove=function(e){
- left=e.clientX;
- top=e.clientY;
- if(!bigImg.src || bigImg.src===""){
- img.onmouseover(e);
- }
- relocBigImg(left, top);
- };
- }*/
- $("body").on("mouseover","div.gif-mask",function(e){
- if(isMobile)return;
- src=this.previousSibling.getAttribute("org_src").replace(/\b(!(custom|square))\b/,"").replace(/\b(custom|square)\b/,"medium").replace(/\.sinaimg\.cn\/(mw600|thumb\d+)/,".sinaimg.cn/large");
- src=isHttps?src.replace(/http\:\/\//,"https://"):src.replace(/https\:\/\//,"http://");
- bigImg.src=this.previousSibling.src;
- bigImg.src=src;
- document.body.appendChild(bigImg);
- setTimeout(()=>{
- bigImg.style.opacity=1;
- },0);
- getImgWH(bigImg,function(w,h){
- relocBigImg(left, top, w, h);
- });
- bigImg.onload=function(){
- relocBigImg(left, top);
- };
- });
- $("body").on("mouseout","div.gif-mask",function(e){
- if(isMobile)return;
- if(bigImg.parentNode){
- bigImg.style.opacity=0;
- bigImg.parentNode.removeChild(bigImg);
- }
- bigImg.removeAttribute("height");
- bigImg.removeAttribute("width");
- });
- $("body").on("mousemove","div.gif-mask",function(e){
- if(isMobile)return;
- if(e){
- left=e.clientX;
- top=e.clientY;
- }
- if(!bigImg.src || bigImg.src===""){
- this.onmouseover(e);
- }
- relocBigImg(left, top);
- });
- function relocBigImg(left, top, w, h){
- var imgWidth=w?w:bigImg.width;
- var imgHeight=h?h:bigImg.height;
- var type=imgHeight/imgWidth>document.documentElement.clientHeight/document.documentElement.clientWidth;
- if(type && imgHeight>document.documentElement.clientHeight){
- imgHeight=bigImg.height=document.documentElement.clientHeight;
- }
- if(!type && imgWidth>document.documentElement.clientWidth){
- imgWidth=bigImg.width=document.documentElement.clientWidth;
- }
- if(top-imgHeight<0){
- top=0;
- }else{
- top-=imgHeight;
- }
- if(left>document.documentElement.clientWidth/2){
- if(left+imgWidth>document.documentElement.clientWidth){
- left=document.documentElement.clientWidth-imgWidth;
- }
- left+=10;
- }else{
- left=left-imgWidth;
- if(left<0){
- left=0;
- }else left-=10;
- }
- bigImg.style.left=left+"px";
- bigImg.style.top=top+"px";
- }
- GM_addStyle(`
- .row.hide,.tucao-row.hide{
- opacity: 0.1;
- }
- .row.hide div.text,.tucao-row.hide .tucao-content,.tucao-row.hide .tucao-image,li.hide>.commenttext{
- display: none;
- }
- .row.hide:hover,.tucao-row.hide:hover{
- opacity: 0.5;
- }
- .tucao-author-bar #changeBtn{
- padding: 0 10px;
- }
- #changeBtn{
- display: none;
- }
- .big_img{
- pointer-events: none;
- position: fixed;
- z-index: 999;
- opacity: 0;
- transition: opacity .5s ease-in-out;
- -moz-transition: opacity .5s ease-in-out;
- -o-transition: opacity .5s ease-in-out;
- -webkit-transition: opacity .5s ease-in-out;
- }
- `);
- })();