Booru 大图预览插件

Booru大图预览插件,按下键盘 ↑ ↓ 开启大图模式(上为从头开始,下为从尾开始), ← → 翻页,可单手操作

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Booru 大图预览插件
// @namespace    https://github.com/mouyase/yande.re_large_picture_script
// @version      0.2.1
// @description  Booru大图预览插件,按下键盘 ↑ ↓ 开启大图模式(上为从头开始,下为从尾开始), ← → 翻页,可单手操作
// @author       某亚瑟
// @match        https://yande.re/*
// @match        http://konachan.com/*
// @match        http://konachan.net/*
// @match        https://konachan.com/*
// @match        https://konachan.net/*
// @grant        none
// ==/UserScript==
(function () {
    'use strict';

    var imgList = new Array();
    window.imgList = imgList;
    var zoom = '<div id="zoom" style="display: none;"></div>';
    jQuery("body").append(zoom);
    var $zoom = jQuery("#zoom");
    $zoom.hide();
    function addZoomPreview() {
        var $allPostLi = jQuery("#post-list-posts > li");
        var id = 0;
        jQuery.each($allPostLi, function (index, item) {
            var $item = jQuery(item);
            var $a = $item.find(".thumb");
            // $a.attr("href", "javascript:void(0)");
            var reg = "(\/files.+?(\.jpg|\.png))";
            var result = jQuery($item).html().match(reg);
            var imgurl = result[0];
            imgList[id] = imgurl;
            // $item.click(function () {
            //     var reg = "(\/files.+?(\.jpg|\.png))";
            //     var result = jQuery(this).html().match(reg);
            //     var imgurl = result[0];
            //     $zoom.show();
            //     $zoom.html('<div id="zoom" style="position: fixed; top:0; left:0; width:auto; height:100%;" onclick="this.hide()"><img style="width:auto; height:100%;" src="https:/' + imgurl + '"></div>');
            // });
            id++;
        });
        window.index = 0;
        window.cacheImage = function () {
            jQuery("body").append('<img src="https:/' + imgList[window.index] + '" style="display: none;" onload="cacheImage()">');
            window.index++;
        }
        jQuery("body").append('<img src="https:/' + imgList[window.index] + '" style="display: none;" onload="cacheImage()">');
    }
    addZoomPreview();
    appendCSS();
    function appendCSS() {
        var cssText = "";

        //底部信息css
        cssText += '.tag-type-circle:after {';
        cssText += '	content: "社团";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '.tag-type-copyright:after {';
        cssText += '	content: "版权";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '.tag-type-artist:after {';
        cssText += '	content: "画师";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '.tag-type-character:after {';
        cssText += '	content: "角色";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '.tag-type-faults:after {';
        cssText += '	content: "错误";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '.tag-type-style:after {';
        cssText += '	content: "类型";';
        cssText += '	color: #aa4';
        cssText += '}';

        cssText += '#highres {';
        cssText += '	color: red;';
        cssText += '	border: 1px dashed white;';
        cssText += '	padding: 4px 0 4px 4px;';
        cssText += '	margin: 4px 0 4px -4px;';
        cssText += '	display: inline-block;';
        cssText += '	width: 220px';
        cssText += '}';

        cssText += '#highres:hover {';
        cssText += '	color: yellow!important;';
        cssText += '	border-color: red';
        cssText += '}';

        cssText += '.sidebar {';
        cssText += '	margin: 0!important;';
        cssText += '	max-width: 230px!important';
        cssText += '}';

        cssText += '.action-post-index .content {';
        cssText += '	width: 80%!important';
        cssText += '}';

        cssText += '#content {';
        cssText += '	width: 100%!important';
        cssText += '}';

        cssText += 'div.content div[align=center] {';
        cssText += '	display: none!important';
        cssText += '}';

        cssText += 'span.directlink-info {';
        cssText += '	display: none!important';
        cssText += '}';

        cssText += 'span.plid {';
        cssText += '	display: none!important';
        cssText += '}';

        cssText += 'span.directlink-res {';
        cssText += '	display: block!important';
        cssText += '}';

        cssText += '.directlink.smallimg {';
        cssText += '	background: black!important';
        cssText += '}';

        cssText += '#post-list-posts li {';
        cssText += '	width: 310px!important;';
        cssText += '	visibility: visible!important;';
        cssText += '	display: inline-block!important';
        cssText += '}';

        cssText += 'div.inner {';
        cssText += '	width: 310px!important;';
        cssText += '	height: 300px!important';
        cssText += '}';

        cssText += 'div.content {';
        cssText += '    float: right;';
        cssText += '}';

        cssText += 'img.preview {';
        cssText += '	width: auto!important;';
        cssText += '	max-width: 300px!important;';
        cssText += '	height: auto!important;';
        cssText += '	max-height: 300px!important;';
        cssText += '	border: none!important';
        cssText += '}';

        cssText += '#lsidebar {';
        cssText += '	display: none!important';
        cssText += '}';

        cssText += 'iframe {';
        cssText += '	display: none!important';
        cssText += '}';
        console.log('CSS创建完成');

        var element = document.createElement('link');
        element.rel = "stylesheet";
        element.type = "text/css";
        element.href = 'data:text/css,' + cssText;

        document.documentElement.appendChild(element);

        var modStyle = document.querySelector('#modCSS');
        if (modStyle === null) {
            modStyle = document.createElement('style');
            modStyle.id = 'modCSS';
            document.body.appendChild(modStyle);
            modStyle.innerHTML = cssText;
        }
        console.log('CSS已添加');
    }
    
    window.addEventListener('keyup', function (e) {
        var imgurl = $zoom.find("img").attr("src");
        var index = 0;
        for (var i = 0; i < imgList.length; i++) {
            if ('https:/' + imgList[i] == imgurl) {
                index = i;
                break;
            }
        }
        switch (e.keyCode) {
            case 37:
                if (index != 0) {
                    imgurl = imgList[index - 1];
                    $zoom.html('<div id="zoom" style="position: fixed; top:0; left:0; width:auto; height:100%;" onclick="this.hide()"><img style="width:auto; height:100%;" src="https:/' + imgurl + '"></div>');
                } else {
                    document.querySelector('a.previous_page').click();
                }
                break;
            case 39:
                if (index != imgList.length - 1) {
                    imgurl = imgList[index + 1];
                    $zoom.html('<div id="zoom" style="position: fixed; top:0; left:0; width:auto; height:100%;" onclick="this.hide()"><img style="width:auto; height:100%;" src="https:/' + imgurl + '"></div>');
                } else {
                    document.querySelector('a.next_page').click();
                }
                break;
            case 38:
                imgurl = imgList[0];
                if ($zoom.css("display") == "none") {
                    $zoom.show();
                } else {
                    $zoom.hide();
                }
                $zoom.html('<div id="zoom" style="position: fixed; top:0; left:0; width:auto; height:100%;" onclick="this.hide()"><img style="width:auto; height:100%;" src="https:/' + imgurl + '"></div>');
                break;
            case 40:
                imgurl = imgList[imgList.length - 1];
                if ($zoom.css("display") == "none") {
                    $zoom.show();
                } else {
                    $zoom.hide();
                }
                $zoom.html('<div id="zoom" style="position: fixed; top:0; left:0; width:auto; height:100%;" onclick="this.hide()"><img style="width:auto; height:100%;" src="https:/' + imgurl + '"></div>');
                break;
        }
    });
})();