sukebei preview

sukebei preview script

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name       sukebei preview
// @namespace  https://sukebei.nyaa.si/
// @author      etorrent
// @version    1.94
// @description  sukebei preview script
// @include     http*://sukebei.nyaa.*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require     http://cdnjs.cloudflare.com/ajax/libs/markdown-it/8.3.1/markdown-it.min.js
// @grant       GM_xmlhttpRequest
// @copyright  2012+, You
// ==/UserScript==


var urlOpt = {
	//이미지 링크 추가
	img: ["pornhd720p.com","pixsense.net", "imgwallet.com", "img.yt", "imgstudio.org", "hentai-jav.top", "hentai-sun.top", "star-hentai.com", "hentai-baka.com", "imageteam.org"],
	//html 링크 추가
	html: ["postadult.info","ecoimages.xyz","imagespublic.tk","imagede.top","imgblaze.net","imgweng.xyz","imgfrost.net","picshub.co","hentai-covers.site","imgbaron.com","iceimg.net","chaosimg.site","vestimage.site","picbaron.com","hotimg.site","imagexport.com","imgchili.net","iceimg.net","imgflare.com","imghost.top","xxx.pornscreen.xyz","imagetwist.com","imgazel.info","55888.eu","imgadult.com","dimtus.com","damimage.com","imagedecode.com","pixsense.net","imgtaxi.com","imgseed.com","h-hentai.com","imgdrive.net"],
	imgfile: ["pixsense.net","iceimg.net","chaosimg.site","vestimage.site"],
	ogimage: ["postadult.info","picshub.co","hentai-covers.site","imgadult.com","imgdrive.net","imgtaxi.com"],
	center: ["imagede.top","hotimg.site","imghost.top","xxx.pornscreen.xyz","imgazel.info","55888.eu","dimtus.com","damimage.com","imgseed.com","imagedecode.com"],
	setcookie: ["picbaron.com","imgbaron.com"],
	continuetoimage: ["imagespublic.tk","ecoimages.xyz"]
}
var markdownOptions = {
    html: false,
    breaks: true,
    linkify: true,
    typographer: true
};
var markdown = window.markdownit(markdownOptions);
markdown.renderer.rules.table_open = function(tokens, idx) {
    return '<table class="table table-striped table-bordered" style="width: auto;">';
};

$(function() {
	$("body").append("<label class='nyaa_check' style='position:absolute;right:5px;top:60px;font-size:12px'><input type='checkbox' id='nyaa_check' checked='checked' style='display:inline-block;margin:-1px 2px 0 0;vertical-align:middle'>사용</label>");
	$("#nyaa_check").on("change", function() {
		localStorage.setItem("nyaa_check", this.checked ? "use" : "no");
		if(this.checked) {
			location.reload();
		}
	});
	
	var getNyaaUse = localStorage.getItem("nyaa_check");
	if(getNyaaUse != undefined && getNyaaUse != null && getNyaaUse == "no") {
		$("#nyaa_check").prop("checked",false).trigger("change");
		return false;
	}
	
	page.load();
        page.convertload();

	var convertIdx = 0;
	$(".torrent-list tbody tr").each(function(key) {        
		var getTarget = $(this);
		var getUrl = getTarget.find("td:eq(1) a").attr("target","_blank").attr("href");
		var getTime = getTarget.find("td:eq(4)").text();
		if(getUrl != undefined && getUrl != "" && getUrl.indexOf("view") > -1) {			
			page.checkpoint(true, getUrl);
			
			if(page.data[getUrl] == undefined) {
				page.list.push([getTarget, getUrl, getTime]);
			}
			else {
				convertIdx += 1;
				setTimeout(function() {
					page.convert(getTarget, page.data[getUrl][0], page.data[getUrl][1]);
				}, convertIdx * page.delay);
			}
		}
	});
	
	//임시 클릭시 실행하기
	if(page.autoload == false) {
		$("body").on("click", ".torrent-list .preview_box", function() {
			var getTarget = $(this);
			if(!getTarget.hasClass(".preview_box")) getTarget = $(this).closest(".preview_box");
			var target = getTarget.data("target");
			var data = getTarget.data("data");
			var time = getTarget.data("time");
			page.converthtml(getTarget, target, data, time);
			return false;
		});
	}

	page.detail(0);
	
	if(page.debug == true) {
		$("body").append("<textarea id='input_debug' style='position:fixed;left:0;top:0;width:80px;height:60px;z-index:10000'></textarea>");
		$("#input_debug").on("focusin", function() {
			$(this).css({ width:500, height:200 });
		}).on("focusout", function() {
			$(this).css({ width:80, height:60 });
		});
	}
});

var page = {
	autoload: true,
	debug: false,
	delay: 600,
	list: [],
	data: {},
	link: {},
	prevlist: [0],
	urlcheck: function(type, url) {
		var result = false;
		$.each(urlOpt[type], function(key, value) {
			if(url.indexOf(value) > -1) {
				result = true;
				return false;
			}
		});
		return result;
	},
	detail: function(idx) {
		if(page.list[idx] == undefined) return;
		$.ajax({
			url:page.list[idx][1],
			dataType:"html",
			success:function(data) {
				//console.log(data);
				if(data && data.indexOf("torrent-description") > -1) {
					var getHtml = $(data).find("#torrent-description").html();
					page.data[page.list[idx][1]] = [getHtml, page.list[idx][2]];
					page.convert(page.list[idx][0], getHtml, page.list[idx][2]);

					page.save();
				}
				setTimeout(function() {
					page.detail(idx + 1);
				}, page.delay);
			},
			error:function() {
				setTimeout(function() {
					page.detail(idx + 1);
				}, page.delay);
			}
		});
	},
	convert: function(target, data, time) {
		//console.log(data);
		var getDescHtml = markdown.render(data);
		var getPreviewBox = $("<tr class='preview_box'><td colspan='9' style='padding:5px;white-space:normal' class='viewdescription'>" + getDescHtml + "</td></tr>").insertAfter(target);
		getPreviewBox.data({ target:target, data:data, time:time });
		
		//클릭시 실행하게 막기
		if(page.autoload == true) {
			page.converthtml(getPreviewBox, target, data, time);
		}
	},
	converthtml: function(getPreviewBox, target, data, time) {
		getPreviewBox.find("a").each(function() {
			var getText = $(this).text();
			if(getText.indexOf("[/img") > -1 || getText.indexOf("<img") > -1) {
				getText = getText.replace("[/img]", "").replace("[/img", "");
				$(this).attr("href",getText).empty().append("<img src='" + getText + "' alt='" + getText + "' style='max-width:500px'>");
			}
			else {
				var getImgs = getText.match(/(http)?s?:?(\/\/[^"']*\.(?:png|jpg|jpeg|gif|png|svg))/gi);
				if(getImgs !== null && getImgs.length > 0 && getImgs[0] !== "") {
					$(this).attr("href",getText).empty().append("<img src='" + getImgs[0] + "' alt='" + getText + "' style='max-width:500px'>");
				}
			}
		});

		getPreviewBox.find("img").css({ "maxWidth": 500 }).eq(0).each(function() {
			//if($(this).parent()[0].tagName == "A" && $(this).parent().attr("href") != "") {
			//	return true;
			//}
			var getImg = $(this);
			var getLinkSrc = getImg.attr("src");
			if(page.link[getLinkSrc] != undefined && page.link[getLinkSrc] != "") {
				console.log("link data", getLinkSrc, page.link[getLinkSrc]);
				getImg.attr("src",page.link[getLinkSrc]);
			}
			else {
				var getSrc = page.image("img", getImg, getLinkSrc, time);
			}
		});
		
		getPreviewBox.find("a").attr("target","_blank").each(function() {
			$(this).slice(0,2).each(function() {
				var getLink = $(this);
				var getLinkSrc = getLink.attr("href");
				if(getLinkSrc.indexOf("imgur.com") > -1) {
					if(getLinkSrc.indexOf(".jpg") == -1 && getLinkSrc.indexOf(".jpeg") == -1 && getLinkSrc.indexOf(".png") == -1) {
						var getImg = $("<img>").attr("src", getLinkSrc + ".jpg").css("maxWidth", 500);
						var getImg2 = $("<img>").attr("src", getLinkSrc + ".png").css("maxWidth", 500);
						getLink.empty().append(getImg).append(getImg2);					
					}
					else {					
						var getImg = $("<img>").attr("src", getLinkSrc).css("maxWidth", 500);
						getLink.empty().append(getImg);
					}
				}
                else if(getLinkSrc.indexOf("pornhd720p.com") > -1) {
                    var getLinkArray = getLinkSrc.split("/img-");
                    getLinkSrc = getLinkArray[0] + "dlimg.php?id=" + getLinkArray[1].split(".")[0];
                    var getImg = $("<img>").attr("src", getLinkSrc).css("maxWidth", 500);
                    getLink.empty().append(getImg);
                }
				else if(getLinkSrc.indexOf("jav321.com") > -1 && (getLinkSrc.indexOf(".jpg") > -1 || getLinkSrc.indexOf(".png") > -1)) {
					var getImg = $("<img>").attr("src", getLinkSrc).css("maxWidth", 500);
					getLink.empty().append(getImg);
				}
				else if((getLinkSrc.indexOf("img169.com") > -1 || getLinkSrc.indexOf("imgtuku.com") > -1) && getLinkSrc.indexOf(".jp") > -1) {
					var getImg = $("<img>").attr("src", getLinkSrc).css("maxWidth", 500);
					getLink.empty().append(getImg);
				}			
				else {
					if(page.link[getLinkSrc] != undefined && page.link[getLinkSrc] != "") {
						console.log("link data", getLinkSrc, page.link[getLinkSrc]);
						var getImg = $("<img>").attr("src", page.link[getLinkSrc]).css("maxWidth", 500);
						getLink.empty().append(getImg);
					}
					else {
						var getSrc = page.image("html", getLink, getLinkSrc, time);
					}
				}
			});
		});
	},
	onload: function(type, target, src, img) {
		if(src != "") {
			console.log("onload",type,src,img);
			if(type == "img") {
				var imgObj = new Image();
				imgObj.onload = function() {
					page.link[img] = src;
					page.convertsave();
					console.log("onload success",type,src,img);

					target.addClass("active").attr("src",src).on("click", function() {
						window.open(src,"_blank");
						return false;
					});
				};
				imgObj.src = src;
			}
			else {
				if(target.find("img.active").length > 0) return;
				var imgObj = new Image();
				imgObj.onload = function() {
					page.link[img] = src;
					page.convertsave();
					console.log("onload success",type,src,img);

					var getImg = $("<img>").attr("src", src).css("maxWidth", 500);
					target.attr("src",src).empty().append(getImg);
				};
				imgObj.src = src;
			}
		}
	},
	image: function(type, target, img, time) {
		var getSrc = "";
		
		//핫링크 차단
		 //imgadult.com imgtaxi.com imgdrive.net 

		if(type == "img") {
			if(page.urlcheck("img", img)) {
			    getSrc = img.replace("small/","big/").replace("/small-","/");
			}
			else {
				//console.log("image", type,target,img,time);
			}	
			if(getSrc != "") {
				page.onload(type, target, getSrc, img);
			}
		}
		else {
			if(page.urlcheck("html", img)) {
				page.ajax(type, target, img);
			}
			else {
				console.log("html", type,target,img,time);
			}
		}

		page.onload(type, target, getSrc, img);
	},
	ajax: function(type, target, img) {
		console.log("html ajax", img);
		if(img.indexOf("imgflare.com") > -1) {
			img += "?attempt=1";
		}
		else if(page.urlcheck("imgfile", img)) {
			img = "http://www.imgfile.net/" + img.split("/").pop();
		}
        else if(img.indexOf("imgblaze.net") > -1 || img.indexOf("imgfrost.net") > -1) {
			img = img.replace("imgblaze.net","imgweng.xyz");
		}

		GM_xmlhttpRequest({
			method: "GET",
			url: img,
			overrideMimeType:"text/plain; charset=utf-8",
			headers:{
				"Content-Type": "text/plain; charset=utf-8",
				"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",    // If not specified, navigator.userAgent will be used.
				"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"            // If not specified, browser defaults will be used.
			},
			onload: function(response) {
				if(response && response.status && response.status == 200 && response.responseText) {
					//console.log("html ajax onload", img);
					try{
						var getHtml = $(response.responseText);
					}
					catch(error) {
						var getHtml = response.responseText;
					}
					
					if(page.debug == true) {
						$("#input_debug").val(response.responseText);
					}
					var getSrc = "";
					if(img.indexOf("pixsense.net_bak") > -1) {
						if(getHtml.find("#myUniqueImg").length > 0) {
							getSrc = getHtml.find("#myUniqueImg").attr("src");
							if(getSrc.indexOf("pixsense.net") == -1) {								
								getSrc = getHtml.find("#myUniqueImg").parent().attr("href");
							}
						}
					}
					else if(getSrc.indexOf("iceimg.net") > -1) {
						getSrc = getHtml.find("#myUniqueImg").attr("href");
					}
					else if(page.urlcheck("ogimage", img)) {
						if(response.responseText.indexOf("og:image") > -1) {
							var getSrcArray = response.responseText.split("og:image")[1].split("\"");
							if(getSrcArray.length > 2 && getSrcArray[2] != "") {
								getSrc = getSrcArray[2];
							}
						}

						//if(getHtml.find("meta[property='og:image']").length > 0) {
							//getSrc = getHtml.find("meta[property='og:image']").attr("content");
							//if(getSrc != undefined && getSrc != null && getSrc != "") {
							//	getSrc = getSrc.replace("/small","/big");
							//}
							//else getSrc = "";
						//}
					}
					else if(page.urlcheck("center", img)) {
						if(getHtml.find("img.centred").length > 0) {
							getSrc = getHtml.find("img.centred").attr("src");
						}
						else if(getHtml.find("img.centred_resized").length > 0) {
							getSrc = getHtml.find("img.centred_resized").attr("src");
						}
					}
					else if(img.indexOf("imgflare.com") > -1) {
						if(getHtml.find("#this_image").length > 0) {
							getSrc = getHtml.find("#this_image").attr("src");
						}
					}
					else if(img.indexOf("imgchili.net") > -1) {
						if(getHtml.find("#show_image").length > 0) {
							getSrc = getHtml.find("#show_image").attr("src");
						}
					}
					else if(img.indexOf("h-hentai.com") > -1) {
						if(getHtml.find(".dishImage").length > 0) {
							getSrc = getHtml.find(".dishImage > .attachment-full").attr("src");
						}
					}
					else if(img.indexOf("imagetwist.com") > -1 || img.indexOf("imagexport.com") > -1) {
						if(getHtml.find(".img-responsive").length > 0) {
							getSrc = getHtml.find(".img-responsive").attr("src");
						}
					}
					else if(page.urlcheck("setcookie", img)) {
						if(response.responseText.indexOf("setcookie.php?img=") > -1) {
							getSrc = response.responseText.split("setcookie.php?img=")[1].split("\"")[0];
						}
					}
					else if(img.indexOf("imgfile.net") > -1) {
						if(response.responseText.indexOf('document.getElementById("soDaBug").src') > -1) {
							getSrc = response.responseText.split('document.getElementById("soDaBug").src')[1].split('\"')[1];
						}
					}
					else if(page.urlcheck("continuetoimage", img)) {
						if(response.responseText.indexOf("'continuetoimage'>") > -1) {
							var getImg = response.responseText.split("'continuetoimage'>")[1];
							getImg = getImg.split("</div>")[0];
							getImg = getImg.split("<img")[1];
							getImg = "<img" + getImg.split(">")[0] + ">";
							getSrc = $(getImg).attr("src");

							if(getSrc !== undefined && getSrc !== "") {
								getSrc = getSrc.replace("small","big");
							}
							else getSrc = "";
						}
					}
                    else if(img.indexOf("imgblaze.net") > -1 || img.indexOf("imgweng.xyz") > -1 || img.indexOf("imgfrost.net") > -1) {
                            var getImg = response.responseText.split('document.getElementById("soDaBug")')[1];
                            getImg = getImg.split("\"")[1];
                            getSrc = getImg.split("\"")[0];

							if(getSrc !== undefined && getSrc !== "") {
								getSrc = getSrc.replace("small","big");
							}
							else getSrc = "";
					}
					if(getSrc != "") {
						page.onload(type, target, getSrc, img);
					}
				}
			}
		});
	},
	load: function() {
		var getLastTime = localStorage.getItem("sukebie_time");
		var getNowTime = new Date().getTime();
		var timeCheck = false;
		console.log("page load", parseInt(getLastTime, 10), getNowTime, getNowTime - parseInt(getLastTime, 10), getNowTime - parseInt(getLastTime, 10) < 1000 * 60 * 60);
		if(getLastTime == null || getLastTime == undefined || getLastTime == "" || getNowTime - parseInt(getLastTime, 10) < 1000 * 60 * 60) {
			timeCheck = true;
		}

		var getData = localStorage.getItem("sukebie_data");
		if(timeCheck == true && getData != null && getData !=="") {
			getData = $.parseJSON(getData);
			if(getData != null && getData != undefined && getData.data != undefined) {				
				page.data = getData.data;
				console.log("page load", page.data);
			}
		}
		else {
			console.log("데이터 초기화");
			localStorage.removeItem("sukebie_data");
			localStorage.removeItem("sukebie_list");
		}

		page.checkpoint(false, "");
	},
	saveinterval: null,
	save: function() {
		clearTimeout(page.saveinterval);        
		page.saveinterval = setTimeout(function() {
			console.log("page save", page.data);
			localStorage.setItem("sukebie_data",JSON.stringify({ time:new Date().getTime(), data:page.data }));
			localStorage.setItem("sukebie_time", new Date().getTime());
		}, 3000);
	},
	convertload: function() {        
		var getData = localStorage.getItem("sukebie_list");
		if(getData != null && getData !=="") {
			getData = $.parseJSON(getData);
			if(getData != null && getData != undefined && getData.data != undefined) {
				page.link = getData.data;
				console.log("page convertload", page.link);
			}
		}
	},
	convertsaveinterval: null,
	convertsave: function() {
		clearTimeout(page.convertsaveinterval);
		page.convertsaveinterval = setTimeout(function() {
			console.log("page convertsave", page.link);
			localStorage.setItem("sukebie_list",JSON.stringify({ time:new Date().getTime(), data:page.link }));
			localStorage.setItem("sukebie_time", new Date().getTime());
		}, 3000);
	},
	checkpoint: function(type,url) {
		if(type == true) {
			var currCheck = parseInt(url.replace("/view/",""), 10);
			var maxCheck = true;
			$.each(page.prevlist, function(key, value) {
				if(currCheck <= value) {
					maxCheck = false;
					return false;
				}
			});
			
			if(maxCheck == true) {
				page.prevlist.push(currCheck);				
				localStorage.setItem("sukebie_checkpoint_list", JSON.stringify(page.prevlist.slice(-7)));
			}
		}
		else {
			var getPrev = localStorage.getItem("sukebie_checkpoint_list");			
			if(getPrev != null && getPrev != undefined && getPrev != "") {
				page.prevlist = $.parseJSON(getPrev);
				$.each(page.prevlist, function(key, value) {
					var getLast = $(".torrent-list tbody tr a[href='/view/" + value + "']");
					if(getLast.length > 0) {
						$("<tr><td colspan='9' style='padding:5px;text-align:center;color:#fff;font-size:14px;background:#a90101'><p style='margin:0'>▼ 이전에 여기까지 읽음</p></td></tr>").insertBefore(getLast.closest("tr"));
					}
				});				
			}
		}
	}
};