// ==UserScript==
// @name dm5/dmzj/manhuagui/copymanga - navigate with keyboard
// @name:zh-TW 動漫屋/動漫之家/漫畫櫃/拷貝漫畫 鍵盤導覽
// @name:zh-CN 动漫屋/动漫之家/漫画柜/拷貝漫畫 键盘导览
// @description [a / ←]prev page, [d / →]next page, [w / ↑]next chapter, [s / ↓]prev chapter, [q]newer comments, [e]older comments, [r]load all comments new-to-old on dm5, [t]load all comments old-to-new on dm5, [esc]stop loading more comments on dm5, [v]picture size switch between one-page/actual
// @description:zh-TW [a / ←]前一頁,[d / →]下一頁,[w / ↑]新一章,[s / ↓]舊一章,[q]新一頁留言,[e]舊一頁留言,[r]dm5載入全部留言_新到舊,[t]dm5載入全部留言_舊到新,[esc]中斷載入更多留言,[v]圖片尺寸切換 整頁/實際
// @description:zh-CN [a / ←]前一页,[d / →]下一页,[w / ↑]新一章,[s / ↓]旧一章,[q]新一页留言,[e]旧一页留言,[r]dm5载入全部留言_新到旧,[t]dm5载入全部留言_旧到新,[esc]中断载入更多留言,[v]图片尺寸切换 整页/实际
// @author Evan Tseng
// @namespace https://greasyfork.org/zh-TW/users/393133-evan-tseng
// @version 1.0.18
// @match *://*.dm5.com/*
// @match *://*.dm5.cn/*
// @match *://*.dmzj.com/*
// @match *://*.mhgui.com/*
// @match *://*.manhuagui.com/*
// @match *://*.copymanga.com/*
// @match *://*.copymanga.info/*
// @match *://*.copymanga.net/*
// @match *://*.copymanga.org/*
// @match *://*.copymanga.site/*
// @run-at document-idle
// @grant GM.setValue
// @grant GM.getValue
// @license MIT
// @downloadURL none
// ==/UserScript==
(async function() {
'use strict';
var mySetting;
if((mySetting = await GM.getValue("setting", false)) == false){
mySetting = { "dm5": { "loadAllComments": "none" } };
await GM.setValue("setting", mySetting);
}
let theHost = window.location.hostname.replace(/(?:[^\.]+\.)*(dm5|dmzj|manhuagui|mhgui|copymanga)\.(?:cn|com|info|net|org|site)/, "$1");
switch(theHost) {
case "dm5":
// dm5 讀取留言・改
var loadCmts=null;
var getAllPost2 = async function(pageindex, pagesize, tid, type, rev=false, first=false) {
var cid = 0;
if (typeof (DM5_CID) != "undefined") {
cid = DM5_CID;
}
$.ajax({
url: 'pagerdata.ashx?d=' + new Date().getTime(),
data: { pageindex: pageindex, pagesize: pagesize, tid: tid, mid:tid, cid: cid, t: type },
error: function (msg) {
//ShowDialog("服务器出现异常请重试");
},
success: function (json) {
var objs = eval(json);
var html = "";
for (var i = 0; i < objs.length; i++) {
var obj = rev ? objs[objs.length-1-i] : objs[i];
html += "
";
html += "
";
html += "";
html += "
";
html += obj.Poster;
if (obj.VipLevel > 0) {
html += "VIP" + obj.VipLevel + "";
if (obj.VipType == 1) {
html += "年费";
}
}
html += "
";
if (obj.ToPostShowDataItems) {
var topostcount = obj.ToPostShowDataItems.length;
for (var j = 0; j < obj.ToPostShowDataItems.length; j++) {
var topost = obj.ToPostShowDataItems[j];
if (j == 0) {
html += '
'
}
if (topostcount >= 4) {
if (j == 1) {
html += '- 展开全部楼层
'
}
if (j == 0 || j == (topostcount - 1)) {
html += '- ';
}
else {
html += '
- ';
}
}
else {
html += '
- ';
}
html += '
";
}
first? $(".postlist").html(html): $(".postlist").html($(".postlist").html()+html);
$(".postlist").find(".recommentbtn").click(function () {
$('body').addClass('toolbar');
reComment($(this).attr("pid"), $(this).attr("data"), $(this));
});
$(".postlist").find(".openpostbtn").click(function () {
openpost($(this));
});
$(".postlist").find(".zanbtn").click(function () {
praisepost($(this).attr("pid"), $(this));
});
if(rev) {
if(pageindex>1) loadCmts=setTimeout(function(){ getAllPost2(pageindex-1, pagesize, tid, type, rev); }, 600);
else loadCmts=null;
}
else {
if(pageindex100?100:DM5_PAGEPCOUNT, DM5_PAGEPCOUNT, DM5_TIEBATOPICID, DM5_PAGETYPE, true, true);
}
else if (DM5_PAGETYPE == 4) {
getAllPost2(DM5_PAGEPCOUNT>100?100:DM5_PAGEPCOUNT, DM5_PAGEPCOUNT, DM5_COMIC_MID, DM5_PAGETYPE, true, true);
}
}
}
else {
if (typeof (DM5_PAGETYPE) != "undefined") {
if (DM5_PAGETYPE == 9) {
getAllPost2(1, DM5_PAGEPCOUNT, DM5_TIEBATOPICID, DM5_PAGETYPE, false, true);
}
else if (DM5_PAGETYPE == 4) {
getAllPost2(1, DM5_PAGEPCOUNT, DM5_COMIC_MID, DM5_PAGETYPE, false, true);
}
}
}
$(".view-comment-main .top .page, .view-comment-main .bottom-page").hide()
}
document.addEventListener('readystatechange', (event) => {
if(document.readyState == 'complete') {
let adutBtn = document.querySelector("#checkAdult");
if(adutBtn) adutBtn.click();
if(document.querySelector(".view-comment-main .postlist")) {
switch(mySetting.dm5.loadAllComments) {
case "backward":
dm5AllComments("b");
break
case "forward":
dm5AllComments("f")
break;
}
}
}
});
document.addEventListener("keydown", async function(e) {
if(document.querySelector("input:focus, textarea:focus, [contenteditable='true']:focus") || (e.shiftKey | e.ctrlKey | e.altKey | e.metaKey | e.isComposing)) return;
var PrevC, NextC, PrevP, NextP,
ppa = document.querySelectorAll(".view-paging>.container>a");
PrevC = NextC = PrevP = NextP = null;
for(let i in ppa) {
switch(ppa[i].innerText) {
case "上一章": PrevC=ppa[i]; break;
case "下一章": NextC=ppa[i]; break;
case "上一页": PrevP=ppa[i]; break;
case "下一页": NextP=ppa[i]; break;
}
}
var actP=document.querySelector("li.lidaykey.active a, .page-pagination ul li a.active");
e = await (e || window.event);
try {
switch(await e.key.toLowerCase()) {
case 'arrowup':
case 'w': // 新一章
if(NextC) NextC.click();
break;
case 'arrowdown':
case 's': // 舊一章
if(PrevC) PrevC.click();
break;
case 'arrowleft':
case 'a': // 前一頁
if(document.querySelector("#comicRead[style='']")) return;
$('#last-mask, #last-win').hide();
if(PrevP) ShowPre();
else if(actP) actP.parentNode.previousElementSibling.querySelector('a').click();
else YingdmList.self.changepager(parseInt(actP.innerText)-1)
break;
case 'arrowright':
case 'd': // 下一頁
if(document.querySelector("#comicRead[style='']")) return;
$('#last-mask, #last-win').hide();
if(NextP) ShowNext();
else if(actP) actP.parentNode.nextElementSibling.querySelector('a').click();
else YingdmList.self.changepager(parseInt(actP.innerText)+1)
break;
case 'e': // 載入舊一頁留言
if(loadCmts) clearTimeout(loadCmts)
$('#last-mask, #last-win').hide();
var NextE=document.querySelector(".view-comment-main .top .page span.current").nextElementSibling;
if(NextE) NextE.click();
$(".view-comment-main .top .page, .view-comment-main .bottom-page").show();
mySetting.dm5.loadAllComments="none";
await GM.setValue("setting", mySetting);
break;
case 'q': // 載入新一頁留言
if(loadCmts) clearTimeout(loadCmts)
$('#last-mask, #last-win').hide();
var PrevE=document.querySelector(".view-comment-main .top .page span.current").previousElementSibling;
if(PrevE) PrevE.click();
$(".view-comment-main .top .page, .view-comment-main .bottom-page").show();
mySetting.dm5.loadAllComments="none";
await GM.setValue("setting", mySetting);
break;
case 'v':
document.body.classList.toggle("actualSize");
break;
case 'r': // 載入全部留言,新→舊
if(loadCmts) clearTimeout(loadCmts)
$('#last-mask, #last-win').hide();
if(document.querySelector(".view-comment-main .postlist")) dm5AllComments("b");
mySetting.dm5.loadAllComments="backward";
await GM.setValue("setting", mySetting);
break;
case 't': // 載入全部留言,舊→新
if(loadCmts) clearTimeout(loadCmts)
$('#last-mask, #last-win').hide();
if(document.querySelector(".view-comment-main .postlist")) dm5AllComments("f");
mySetting.dm5.loadAllComments="forward";
await GM.setValue("setting", mySetting);
break;
case 'escape': // 中斷載入更多留言
if(loadCmts) clearTimeout(loadCmts)
$('#last-mask, #last-win').hide();
break;
}
} catch(err) { console.log(err); }
});
break;
//=============================================================================
case "dmzj":
document.addEventListener("keydown", function(e) {
if(document.querySelector("input:focus, textarea:focus, [contenteditable='true']:focus") || (e.shiftKey | e.ctrlKey | e.altKey | e.metaKey | e.isComposing)) return;
var elm=document.querySelectorAll(".pages a[href]"),
PrevC=null, NextC=null, PrevP=null, NextP=null;
for(let i in elm) {
switch(elm[i].innerText) {
case "上一章节": PrevC=elm[i]; break;
case "下一章节": NextC=elm[i]; break;
case "上一页": PrevP=elm[i]; break;
case "下一页": NextP=elm[i]; break;
}
}
e = e || window.event;
try {
switch(e.key.toLowerCase()) {
case 'arrowup':
case 'w':
document.querySelector(".btmBtnBox>a.btm_chapter_btn.fr").click();
break;
case 'arrowdown':
case 's':
document.querySelector(".btmBtnBox>a.btm_chapter_btn.fl").click();
break;
case 'arrowleft':
case 'a':
if(elm) PrevP.click();
else if(elm=document.querySelector(".comment_con_tab a.prev")) elm.click()
else prev_img();
break;
case 'arrowright':
case 'd':
if(elm) NextP.click();
else if(elm=document.querySelector(".comment_con_tab a.next")) elm.click()
else next_img();
break;
case 'v':
document.body.classList.toggle("actualSize");
break;
}
} catch(err) { console.log(err); }
});
break;
//=============================================================================
case "mhgui":
case "manhuagui":
document.addEventListener('readystatechange', (event) => {
if(document.readyState == 'interactive') {
setTimeout(function(){
let adutBtn = document.querySelector("#checkAdult");
if(adutBtn) adutBtn.click();
}, 200);
}
});
document.addEventListener("keydown", function(e) {
if(document.querySelector("input:focus, textarea:focus, [contenteditable='true']:focus") || (e.shiftKey | e.ctrlKey | e.altKey | e.metaKey | e.isComposing)) return;
e = e || window.event;
var curr=document.querySelector(".pager .current, .page .cu, div.flickr span.current"),
view=document.querySelector('#mangaBox'),
scrollMode=document.querySelector(".w980.sub-btn .support .pfunc:last-child a.current");
try {
$("#pb, #pb-mask").remove();
switch(e.key.toLowerCase()) {
case 'arrowup':
case 'w':
document.querySelector(".main-btn>a.nextC").click();
break;
case 'arrowdown':
case 's':
document.querySelector(".main-btn>a.prevC").click();
break;
case 'arrowleft':
if(view) break;
case 'a':
if(document.querySelector("#comicRead[style='']")) return;
if(curr && !scrollMode) curr.previousElementSibling.click();
break;
case 'arrowright':
if(view) break;
case 'd':
if(document.querySelector("#comicRead[style='']")) return;
if(curr && !scrollMode) curr.nextElementSibling.click();
break;
case 'v':
document.body.classList.toggle("actualSize");
break;
}
} catch(err){ console.log(err); }
});
break;
//=============================================================================
case "copymanga":
document.addEventListener("keydown", function(e) {
if(document.querySelector("input:focus, textarea:focus, [contenteditable='true']:focus") || (e.shiftKey | e.ctrlKey | e.altKey | e.metaKey | e.isComposing)) return;
var elm=null;
e = e || window.event;
try {
switch(e.key.toLowerCase()) {
case 'arrowup':
case 'w':
elm=document.querySelector(".footer .comicContent-next a:not(.prev-null)");
break;
case 'arrowdown':
case 's':
elm=document.querySelector(".footer .comicContent-prev:not(.index):not(.list) a:not(.prev-null)");
break;
case 'arrowleft':
case 'a':
if(document.querySelector("#comicRead[style='']")) return;
elm=document.querySelector(".el-pagination li.active");
if(elm) elm=elm.previousElementSibling;
else elm=document.querySelector(".page-all li.prev>a, .comic-detail-page li.prev>a");
break;
case 'arrowright':
case 'd':
if(document.querySelector("#comicRead[style='']")) return;
elm=document.querySelector(".el-pagination li.active");
if(elm) elm=elm.nextElementSibling;
else elm=document.querySelector(".page-all li.next>a, .comic-detail-page li.next>a");
break;
case 'v':
document.body.classList.toggle("actualSize");
break;
}
if(elm) elm.click();
} catch(err) { console.log(err); }
});
break;
}
})();