// ==UserScript== // @name GrimRipper // @namespace http://tampermonkey.net/ // @version 1.5 // @description BW Canvas Ripper // @author XXXXXXXXXIII // @match https://viewer.bookwalker.jp/* // @license MIT // @downloadURL none // ==/UserScript== const height = 1600; // USER: Canvas will automatically set to double this value, and same for downloaded image size const width = 1125; (function() { 'use strict'; console.log("Hello There"); var id = setInterval(function setRenderer() { var renderer = getRenderer(); if (!renderer) return; renderer.style.width = width + 'px'; renderer.style.height = height + 'px'; //clearInterval(id); // Keep it running }, 10); setTimeout(main, 3000); })(); function main() { var saved = false; var page = -1; setInterval(() => { try { if (page < 1) page = getPageNum(); if (page != getPageNum()) saved = false; if (page < 1 || saved) return; if (isLoading()) return; console.log("rippin' page " + getPageNum()); let canvas = getActiveCanvas(); saveCanvas(canvas, getPageNum()); saved = true; page = getPageNum(); NFBR.a6G.Initializer.Z4p.menu.options.a6l.moveToNext(); // USER: Auto page flip, comment out if not needed } catch (e) { console.log("Not Ready"); saved = false; } }, 3000); // USER: Auto flip time interval } function getRenderer() { return document.getElementById('renderer'); } function saveCanvas(canvas, page) { //let image = canvas.toDataURL("image/jpeg", 1.0); // Very Slow, highly not recommended. canvas.toBlob((blob) => { var image = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = image; document.body.appendChild(a); a.download = page + ".png"; a.click(); // USER: Disable ask where to store file location setting for usability document.body.removeChild(a); }, "image/png", 1.0); } function isLoading() { if (document.getElementById('viewport0').style.visibility == 'visible') { return document.getElementById('viewport0').getElementsByClassName("loading")[0].style.visibility == 'visible'; } else { return document.getElementById('viewport1').getElementsByClassName("loading")[0].style.visibility == 'visible'; } } function getActiveCanvas() { if (document.getElementById('viewport0').style.visibility == 'visible') { return document.getElementById('viewport0').getElementsByTagName("CANVAS")[0]; } else { return document.getElementById('viewport1').getElementsByTagName("CANVAS")[0]; } } function getPageNum() { var pageNum = document.getElementById('pageSliderCounter').innerHTML; return Number(pageNum.replace(/\/.*/i, "")); }