// ==UserScript== // @name dm5/dmzj/manhuagui - 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 // @description:zh-TW [a / ←]前一頁,[d / →]下一頁,[w / ↑]新一章,[s / ↓]舊一章,[q]新一頁留言,[e]舊一頁留言,[r]dm5載入全部留言_新到舊,[t]dm5載入全部留言_舊到新,[esc]中斷載入更多留言 // @description:zh-CN [a / ←]前一页,[d / →]下一页,[w / ↑]新一章,[s / ↓]旧一章,[q]新一页留言,[e]旧一页留言,[r]dm5载入全部留言_新到旧,[t]dm5载入全部留言_旧到新,[esc]中断载入更多留言 // @author Evan Tseng // @namespace https://greasyfork.org/zh-TW/users/393133-evan-tseng // @version 1.0.9 // @match *://*.dm5.com/* // @match *://*.dm5.cn/* // @match *://*.dmzj.com/* // @match *://*.dmzj1.com/* // @match *://*.mhgui.com/* // @match *://*.manhuagui.com/* // @match *://*.copymanga.com/* // @match *://*.copymanga.org/* // @match *://*.copymanga.info/* // @exclude *://*.dm5.com/manhua-new/ // @run-at document-start // @grant GM.setValue // @grant GM.getValue // @downloadURL none // ==/UserScript== (async function() { 'use strict'; var mySetting; if((mySetting=await GM.getValue("setting", false)) == false){ mySetting={ "dm5": { "loadAllComments": false } }; GM.setValue("setting", mySetting); } let theHost = window.location.hostname.replace(/(?:[^\.]+\.)*(dm5|dmzj\d?|manhuagui|mhgui|copymanga)\.(?:cn|com|info|org)/, "$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 += '' } } } html += "

    "; html += obj.PostContent; html += "

    "; html += "

    "; html += obj.PostTime; html += ""; html += ""; if (obj.PraiseCount > 0) { html += obj.PraiseCount; } else { html += "赞"; } html += "" html += ""; html += "评论"; 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 == 'interactive') { setTimeout(function(){ 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; } } }, 200); } }); document.addEventListener('readystatechange', (event) => { if(document.readyState == 'load') { setTimeout(function(){ // 抓取網址再重設漫畫列表的排序方式 if(window.location.pathname.match(/^\/manhua\-list/)){ window.location.pathname.replace(/\//g,"").split("-").forEach( (itm) => { if(itm.match(/^s\d+$/)) yqdm.params.sort = itm.replace("s",""); }); } }, 100); } }); document.addEventListener("keydown", async function(e) { if(document.querySelector("#comicRead[style=''], 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(".page-pagination ul li a.active"); e = e || window.event; try{ switch(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': // 前一頁 $('#last-mask, #last-win').hide(); if(PrevP) ShowPre(); else if(actP) actP.parentNode.previousElementSibling.querySelector('a').click(); // YingdmList.self.changepager(parseInt(actP.innerText)-1) break; case 'arrowright': case 'd': // 下一頁 $('#last-mask, #last-win').hide(); if(NextP) ShowNext(); else if(actP) actP.parentNode.nextElementSibling.querySelector('a').click(); // 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=false; 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=false; await GM.setValue("setting", mySetting); 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("#comicRead[style=''], 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("#next_chapter, a.btm_chapter_btn.fr"); break; case 'arrowdown': case 's': elm=document.querySelector("#prev_chapter, a.btm_chapter_btn.fl"); break; case 'arrowleft': elm=document.querySelector(".pages a.pselected, .page a.cu"); if(elm) do elm=elm.previousElementSibling; while(elm.nodeName == "#text"); break; case 'arrowright': elm=document.querySelector(".pages a.pselected, .page a.cu"); if(elm) do elm=elm.nextElementSibling; while(elm.nodeName == "#text"); break; case 'a': if(elm=document.querySelector("#center_box>a.img_land_prev, .comic_wraCon>a.img_land_prev")) break; else { elm=document.querySelector("#search_list_div .pages a.pselected, .page a.cu"); if(elm) do elm=elm.previousElementSibling; while(elm.nodeName == "#text"); } break; case 'd': if(elm=document.querySelector("#center_box>a.img_land_next, .comic_wraCon>a.img_land_next")) break; else { elm=document.querySelector("#search_list_div .pages a.pselected, .page a.cu"); if(elm) do elm=elm.nextElementSibling; while(elm.nodeName == "#text"); } break; case 'escape': elm=document.querySelector("#close_btn"); break; // case "/": load comments page 3 // comment_news.getAllComment(3); } if(elm) elm.click(); } 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("#comicRead[style=''], 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(curr && !scrollMode) curr.previousElementSibling.click(); break; case 'arrowright': if(view) break; case 'd': if(curr && !scrollMode) curr.nextElementSibling.click(); break; } } catch(err){ console.log(err); } }); window.addEventListener("load", function(){ setTimeout(function(){ document.querySelectorAll("a.bcover img[data-src]").forEach(function(item, index, array){ item.setAttribute("src", item.getAttribute("data-src")); item.removeAttribute("data-src"); }); }, 100); }); break; //============================================================================= case "copymanga": document.addEventListener("keydown", function(e) { if(document.querySelector("#comicRead[style=''], 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': 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': 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; } if(elm) elm.click(); } catch(err) { console.log(err); } }); break; } })();