- // ==UserScript==
- // @name DLBOOKS BETTER
- // @namespace https://greasyfork.org/ja/scripts/40309-dlbooks-better
- // @version 1.05
- // @description make it easier to read books!
- // @author badfalcon
- // @match http://dlbooks.to/detail/*
- // @grant GM_setValue
- // @grant GM_getValue
- /* load jQuery */
- // @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- var fullscreen = true;
- var slideshow = false;
- var expandSidemenu = false;
-
- /*
- function getSettings(){
- fullscreen = GM_getValue('fullscreen',true);
- GM_setValue('fullscreen',false);
- console.log(fullscreen);
- }
- getSettings();
- */
-
- var loading = false;
-
- var totalPages = parseInt($('#page_num').text().match(/\((.+)\/(.+)\)/i)[2]);
-
- var currentPage = 1;
- var loadedPages = 0;
- var finishedPages = 0;
- var preloadNum = 100;
- var intervalTime = 100; // millisec
- var slideshowInterval = 3000; // millisec
- var interval = false;
- var timer;
- var imageWidth = 0;
- var imageHeight = 0;
- var imageRatio = 0;
- var windowWidth = 0;
- var windowHeight = 0;
- var windowRatio = 0;
-
- timer = false;
-
- var debug = false;
-
- if(!debug){
- preload();
- }
-
- $('.movie-in-ad').remove();
-
- var modalWindow = $('<div>').attr('id','modalWindow')
- .css({'position':'fixed',
- 'z-index':'100',
- 'background-color':'rgba(0,0,0,0.8)',
- 'width':'100%',
- 'height':'100%',
- });
-
- var mainBlock = $('<div>').attr('id','mainBlock')
- .css({'display':'flex',
- 'justify-content': 'center',
- 'width':'100%',
- 'height':'100%',
- });
-
- var statusBar = $('<div>').attr('id','statusBar')
- .css({'color':'white',
- 'position':'fixed',
- 'z-index':'100',
- 'background-color':'rgba(0,0,0,0.6)',
- // 'top':'0',
- // 'left':windowWidth/2,
- 'padding':'5px',
- 'border-radius':'0px 0px 5px 5px',
- '-webkit-border-radius':'0px 0px 5px 5px',
- '-moz-border-radius':'0px 0px 5px 5px',
- 'display':'flex',
- 'flex-direction':'column',
- });
-
- var statusPopup = $('<div>').attr('id','statusPopup')
- .css({'color':'white',
- });
-
- var statusTimeoutID = null;
- function showStatus(str,timer){
- // statusBar.css('left',(windowWidth-statusPopup.width())/2);
- statusPopup.text(str).slideDown("fast",function(){
- // statusBar.css('left',(windowWidth-statusBar.width())/2);
- if(statusTimeoutID !== null){
- clearTimeout(statusTimeoutID);
- }
- if(timer){
- statusTimeoutID = setTimeout(function(){
- statusPopup.slideUp('normal',function(){
- // statusBar.css('left',(windowWidth-statusBar.width())/2);
- });
- },2000);
- }else{
-
- }
- });
- }
-
- function hideOverlay(){
- fullscreen = false;
- if(slideshow){slideshowButton.click();}
- modalWindow.hide();
- }
-
- function showOverlay(){
- fullscreen = true;
- modalWindow.show();
- }
-
- var openButton = $('<button>').text('fullscreen');
- openButton.on('click',function(){
- showOverlay();
- });
- $('#one_col > h2:nth-child(1) > span').after(openButton);
-
- var sideMenu = $('<div>').css({
- "display":"flex",
- "flex-direction":"row",
- "position":"fixed",
- });
-
- var sideList = $('<div>').css({
- "display":"flex",
- "flex-direction":"column",
- "width":"80px",
- "height":"100%",
- "background-color":"rgba(0,0,0,0.5)",
- });
-
- var toggleButton = $('<button>').text('>');
- toggleButton.on('click',function(){
- if (sideList.is(':visible')) {
- // 表示されている場合の処理
- sideList.hide();
- $(this).text('>');
- expandSidemenu = false;
- } else {
- // 非表示の場合の処理
- sideList.show();
- $(this).text('<');
- expandSidemenu = true;
- }
- });
-
- var status = $('<div>').attr('class','statusText').html('C('+currentPage+'/'+totalPages+')<br>L('+loadedPages+ '/' + totalPages + ')').css('color','white');
- function updateStatus(){
- var slideshowStatus = slideshow ? 'playing ' : '';
- status.html(slideshowStatus + 'C('+currentPage+'/'+loadedPages+':'+totalPages+')');
- }
-
- var reloadButton = $('<button>').text('reload');
- reloadButton.on('click',function(){
- reloadImages();
- });
-
- var slideshowTimeoutID = null;
- var slideshowButton = $('<button>').text('play');
- slideshowButton.on('click',function(){
- slideshow = !slideshow;
- if(slideshow){
- slideshowButton.text('stop');
- slideshowTimeoutID = setInterval(function(){
- thumbNext(totalPages);
- // showStatus("play (" + currentPage + "/" + totalPages + ")",true);
- },slideshowInterval);
- }else{
- slideshowButton.text('play');
- clearInterval(slideshowTimeoutID);
- }
- });
-
-
- var closeButton = $('<button>').text('×');
- closeButton.on('click',function(){
- hideOverlay();
- });
-
- var downloadButton = $('<button>').text('dlZip');
- downloadButton.on('click',function(){
- $('#download > li:nth-child(2) > a')[0].click();
- });
-
- var favoriteButton;
- var t = $('#download > li.bookshelf > a > img').attr('src');
- if(t != null){
- var favorited = $('#download > li.bookshelf > a > img').attr('src').includes('set');
-
- favoriteButton = $('<button>').text('fav');
- function updateFavButton(){
- if(favorited){
- favoriteButton.text('unfav');
- }else{
- favoriteButton.text('fav');
- }
- }
- favoriteButton.on('click',function(){
- $('#download > li.bookshelf > a')[0].click();
- favorited = !favorited;
- updateFavButton();
- });
- updateFavButton();
- }
-
- var tags = $('<div>').text('△tags').css('color','white');
- var showTags = true;
- var tagList = $('#detail > ul.tag_list').clone(true).css({
- 'color':'white',
- 'display':'flex',
- 'flex-direction':'column'
- });
- tags.on('click',function(){
- showTags = !showTags;
- if(showTags){
- tags.text('△tags');
- tagList.show();
- }else{
- tags.text('▽tags');
- tagList.hide();
- }
- });
- statusBar.append(status);
- statusBar.append(statusPopup);
- mainBlock.append(statusBar);
- statusPopup.hide();
-
- // sideList.append(status);
- sideList.append(closeButton);
- sideList.append(reloadButton);
- sideList.append(slideshowButton);
- sideList.append(downloadButton);
- if(t != null){
- sideList.append(favoriteButton);
- }
- sideList.append(tags);
- sideList.append(tagList);
-
- sideMenu.append(sideList).append(toggleButton);
-
- sideList.hide();
-
- var mainImage = $('<div>')
- // .attr({'':'',
- // })
- .css({'display':'flex',
- 'justify-content':'center',
- 'align-items':'center',
- '':'',
- });
- mainImage.append($('#thumbnail1').clone(true));
- mainBlock.append(mainImage);
-
- modalWindow.append(sideMenu).append(mainBlock);
-
- $('#container').before(modalWindow);
- // $('#container').before($('#thumbnail1').clone(true));
-
- // toggleButton.click();
-
- function preload(){
- if(!loading){
- console.log("load start:"+(finishedPages+1) + "~" + (finishedPages + preloadNum));
- loading = true;
- var url = $('#thumbnail1').attr('src');
- var match = url.match(/(http.+\/)(\d{5})\.(jpg|jpeg|gif|png)/i);
- var index = parseInt(match[2]);
- var finished = 0;
- if(interval){
- var i = 1;
- var id = setInterval(function(){
- if(loadedPages+1 > totalPages){
- clearInterval(id); //idをclearIntervalで指定している
- console.log("preload finished to " + loadedPages + " pages");
- }else{
- loadedPages++;
- }
- $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){
- finished++;
- finishedPages++;
- if(finished == preloadNum || finishedPages == totalPages){
- loading = false;
- showStatus("load finished",true);
- }else{
- showStatus('Loading ('+finishedPages+ '/' + totalPages + ')',true);
- }
- updateStatus();
- });
- if(i < preloadNum){
- i++;
- }else{
- clearInterval(id); //idをclearIntervalで指定している
- console.log("preload finished to " + loadedPages + " pages");
- }
- }, intervalTime);
- }else{
- for(var i = 1;i <= preloadNum;i++){
- if(loadedPages+1 > totalPages){
- break;
- }else{
- loadedPages++;
- }
- $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){
- finished++;
- finishedPages++;
- if(finished == preloadNum|| finishedPages == totalPages){
- loading = false;
- showStatus("load finished",true); }else{
- showStatus('Loading ('+finishedPages+ '/' + totalPages + ')',true);
- }
- updateStatus();
- });
- }
- }
- }
-
- }
-
- function reloadImages(){
- if(!loading){
- loading = true;
- var currentTotal = loadedPages;
- loadedPages = 0;
- var finished = 0;
- finishedPages = 0;
- var url = $('#thumbnail1').attr('src');
- var match = url.match(/(http.+\/)(\d{5})\.(jpg|jpeg|gif|png)/i);
- var index = parseInt(match[2]);
- if(interval){
- var i = 1;
- var id = setInterval(function(){
- if(loadedPages+1 > totalPages){
- clearInterval(id); //idをclearIntervalで指定している
- }else{
- loadedPages++;
- }
- $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){
- finished++; finishedPages++;
- if(finishedPages == currentTotal){
- loading = false;
- console.log("reload finished:" + "~" + currentTotal);
- showStatus("reload finished",true);
- }else{
- showStatus('Reloading ('+finishedPages+ '/' + currentTotal + ')',true);
- }
- updateStatus();
- });
- if(i < currentTotal){
- i++;
- }else{
- clearInterval(id); //idをclearIntervalで指定している
- }
- }, intervalTime);
- }else{
- for(var i = 1;i <= currentTotal;i++){
- if(loadedPages+1 > totalPages){
- break;
- }else{
- loadedPages++;
- }
- $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){
- finished++; finishedPages++;
- if(finishedPages == currentTotal){
- loading = false;
- console.log("reload finished:" + "~" + currentTotal);
- showStatus("reload finished",true);
- }else{
- showStatus('Reloading ('+finishedPages+ '/' + currentTotal + ')',true);
- }
- updateStatus();
- });
- }
- }
- }
-
- }
-
-
- // Your code here...
- $(window).on('scroll',function(e) {
- e.stopPropagation();
- e.preventDefault();
- if($(window).scrollLeft() > 0){
- $(window).scrollLeft(0);
- }
-
- });
-
- function initSize(){
- imageWidth = $('#thumbnail1').width();
- imageHeight = $('#thumbnail1').height();
- imageRatio = imageWidth/imageHeight;
- onResize();
- }
-
-
-
- function onResize() {
- if (timer !== false) {
- clearTimeout(timer);
- }
- timer = setTimeout(function () {
- // 何らかの処理
- windowWidth = $(window).outerWidth(true);
- windowHeight = $(window).outerHeight(true);
- modalWindow.css('width','100%').css('height','100%');
- windowRatio = windowWidth/windowHeight;
- if(windowRatio >= imageRatio){
- $('#thumbnail1').css('width',windowHeight*imageRatio);
- $('#thumbnail1').css('height',windowHeight);
- }else{
- $('#thumbnail1').css('width',windowWidth);
- $('#thumbnail1').css('height',windowWidth/imageRatio);
- }
- // statusBar.css('left',(windowWidth-statusBar.width())/2);
- }, 200);
- }
-
- initSize();
-
- window.addEventListener('resize',onResize);
-
- $(window).on('keydown',function(e){
- var keycode = e.keyCode;
- switch(keycode){
- case 27:
- // esc
- if(fullscreen){
- hideOverlay();
- }else{
- showOverlay();
- }
- break;
- default:
- break;
- }
- if(fullscreen){
- switch(keycode){
- case 38:
- // ↑
- thumbPre(totalPages);
- return false;
- case 40:
- // ↓
- thumbNext(totalPages);
- return false;
- case 116:
- // F5
- reloadImages();
- return false;
- default:
- break;
- }
- }
- });
-
- var mousewheelevent = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
- $(document).on(mousewheelevent,function(e){
- var num = parseInt($('.wheel').text());
- if(fullscreen){
- e.preventDefault();
- var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail);
- if (delta < 0){
- thumbNext(totalPages);
- return false;
- } else {
- thumbPre(totalPages);
- return false;
- }
- }
- });
-
- $('#page_num').on('DOMSubtreeModified propertychange',kd);
-
- function kd(){
- var pageMatch = $('#page_num').text().match(/\((.+)\/(.+)\)/i);
- if(pageMatch != null){
- if(currentPage != pageMatch[1]){
- currentPage = pageMatch[1];
- updateStatus();
- if(currentPage >= loadedPages-(preloadNum/2) && loadedPages !== totalPages){
- preload();
- }
- }
- }
- }
-
- })();