Greasy Fork is available in English.

sukebei preview

sukebei preview script

질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==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"));
					}
				});				
			}
		}
	}
};