// ==UserScript==
// @name sukebei preview
// @namespace https://sukebei.nyaa.si/
// @author darkyop
// @version 0.24
// @description sukebei preview script
// @include http*://sukebei.nyaa.si/*
// @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
// @downloadURL none
// ==/UserScript==
var markdownOptions = {
html: false,
breaks: true,
linkify: true,
typographer: true
};
var markdown = window.markdownit(markdownOptions);
markdown.renderer.rules.table_open = function(tokens, idx) {
return '
';
};
$(function() {
$("body").append("");
$("#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("");
$("#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],
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 = $("" + getDescHtml + " |
").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 = getText.replace("[/img]", "").replace("[/img", "");
$(this).attr("href",getText).empty().append("
");
}
});
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 = $("
").attr("src", getLinkSrc + ".jpg").css("maxWidth", 500);
var getImg2 = $("
").attr("src", getLinkSrc + ".png").css("maxWidth", 500);
getLink.empty().append(getImg).append(getImg2);
}
else {
var getImg = $("
").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 = $("
").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 = $("
").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 = $("
").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 = $("
").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(img.indexOf("pixsense.net") > -1) {
getSrc = img.replace("small/","big/").replace("/small-","/");
}
//else if(img.indexOf("imgwallet.com") > -1 || img.indexOf("img.yt") > -1 || img.indexOf("imgstudio.org") > -1 || img.indexOf("hentai-jav.top") > -1 || img.indexOf("hentai-sun.top") > -1 || img.indexOf("imageteam.org") > -1 || img.indexOf("imgdrive.net") > -1 || img.indexOf("imgadult.com") > -1 || img.indexOf("imgtaxi.com") > -1) {
else if(img.indexOf("imgwallet.com") > -1 || img.indexOf("img.yt") > -1 || img.indexOf("imgstudio.org") > -1 || img.indexOf("hentai-jav.top") > -1 || img.indexOf("hentai-sun.top") > -1 || img.indexOf("star-hentai.com") > -1 || img.indexOf("hentai-baka.com") > -1 || img.indexOf("imageteam.org") > -1) {
getSrc = img.replace("small/","big/");
}
else {
console.log("image", type,target,img,time);
}
if(getSrc != "") {
page.onload(type, target, getSrc, img);
}
}
else {
//if(img.indexOf("imagetwist.com") > -1 || img.indexOf("imgazel.info") > -1 || img.indexOf("55888.eu") > -1 || img.indexOf("imgadult.com") > -1 || img.indexOf("dimtus.com") > -1 || img.indexOf("damimage.com") > -1 || img.indexOf("imagedecode.com") > -1 || img.indexOf("pixsense.net") > -1 || img.indexOf("imgtaxi.com") > -1 || img.indexOf("imgseed.com") > -1 || img.indexOf("imgchili.net") > -1 || img.indexOf("h-hentai.com") > -1) {
if(img.indexOf("imagetwist.com") > -1 || img.indexOf("imgazel.info") > -1 || img.indexOf("55888.eu") > -1 || img.indexOf("imgadult.com") > -1 || img.indexOf("dimtus.com") > -1 || img.indexOf("damimage.com") > -1 || img.indexOf("imagedecode.com") > -1 || img.indexOf("pixsense.net") > -1 || img.indexOf("imgtaxi.com") > -1 || img.indexOf("imgseed.com") > -1 || img.indexOf("h-hentai.com") > -1) {
console.log("html ajax", img);
page.ajax(type, target, img);
}
else if(img.indexOf("imgchili.net") > -1) {
getSrc = img.replace("imgchili.net/show/","i13.imgchili.net/");
page.onload(type, target, getSrc, img);
}
else {
console.log("html", type,target,img,time);
}
}
page.onload(type, target, getSrc, img);
},
ajax: function(type, target, img) {
GM_xmlhttpRequest({
method: "GET",
url: img,
overrideMimeType:"text/html; charset=utf-8",
headers:{
"Content-Type": "text/html; 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) {
var getHtml = $(response.responseText);
console.log("html ajax onload", img);
if(page.debug == true) {
$("#input_debug").val(response.responseText);
}
var getSrc = "";
if(img.indexOf("pixsense.net") > -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(img.indexOf("imgadult.com") > -1 || img.indexOf("imgtaxi.com") > -1) {
if(response.responseText.indexOf("og:image") > -1) {
var getSrcArray = response.responseText.split("og:image")[1].split("\"");
console.log(getSrcArray[2]);
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(img.indexOf("imgazel.info") > -1 || img.indexOf("55888.eu") > -1 || img.indexOf("dimtus.com") > -1 || img.indexOf("damimage.com") > -1 || img.indexOf("imgseed.com") > -1 || img.indexOf("imagedecode.com") > -1) {
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("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) {
if(getHtml.find(".img-responsive").length > 0) {
getSrc = getHtml.find(".img-responsive").attr("src");
}
}
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) {
$("▼ 이전에 여기까지 읽음 |
").insertBefore(getLast.closest("tr"));
}
});
}
}
}
};