sukebei preview

sukebei preview script

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

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

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==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"));
					}
				});				
			}
		}
	}
};