Greasy Fork

Greasy Fork is available in English.

Pixiv Display All Images

Display all manga images automatically: no need to click the medium image.

当前为 2018-06-13 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Pixiv Display All Images
// @namespace    superschwul
// @version      0.7
// @description  Display all manga images automatically: no need to click the medium image.
// @homepageURL  http://greasyfork.icu/en/scripts/36886-pixiv-display-all-images
// @author       Superschwul
// @match        https://www.pixiv.net/stacc*
// @match        https://www.pixiv.net/member_illust.php*
// @grant        window.close
// @run-at       document-end
// ==/UserScript==

// ===============================================================================

// changelog
// 0.7 2018-06-13 added link to works page at illustration page
// 0.6 2018-06-12 updated to work with the new pixiv layout
// 0.5 2018-01-07 hide buttons over thumbnails at works page
// 0.4 2018-01-04 enlarge thumbnails at works page
// 0.3 2018-01-03 replaced gm_xmlhttprequest by xmlhttprequest
// 0.2 2017-12-30 added support for rtl manga pages
// 0.1 2017-12-30 initial code

function addLinkToWorksPageAtStaccPage() {
    // override css
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = `
        a.stacc_unify_comment_count {
            text-align: left !important;
        }
        .stacc_timeline_bottom {
            font-size: 200%;
        }
    `;
    document.getElementsByTagName('head')[0].appendChild(style);
    // add link
    var intervalCount = 0;
    var interval = setInterval(function() {
        intervalCount++;
        if(intervalCount >= 600) {
            clearInterval(interval);
            return;
        }
        var usernames = document.getElementsByClassName('stacc_ref_illust_user_name');
        if(usernames != undefined) {
            clearInterval(interval);
            var i = 0;
            for(i=0; i < usernames.length; i++) {
                usernames[i].style.display = 'block';
                var a = document.createElement('a');
                var linkText = document.createTextNode("Go to Works page");
                var userUrl = usernames[i].getElementsByTagName('a')[0].href;
                a.appendChild(linkText);
                a.href = userUrl.replace('member', 'member_illust');
                a.target = '_blank';
                usernames[i].appendChild(a);
                a.style.display = 'block';
            }
        }
    }, 200);
}

function displayGalleryAtIllustrationPage() {
    // override css
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = `
        body {
            background: #f5f5f5 !important;
        }
        #pil_gallery {
            padding: 3em;
            font-size: 130%;
            text-align: center;
        }
        #pil_gallery img {
            display: block;
            margin: 0 auto 3em auto;
            max-width: 100%;
            height: auto;
            background: #dcdbdb;
        }
        figure .sticky {
            position: unset !important;
        }
        #pil_works {
            width: 93%;
            padding: 0.5em;
            background: white;
            text-align: center;
            display: block;
            border-radius: 1em;
            margin-top: 1em;
            font-weight: bold;
            text-decoration: none;
            font-size: 80%;
        }
    `;
    document.getElementsByTagName('head')[0].appendChild(style);
    //is it a single image, multiple vertical, or multiple rtl?
    var type = 'single';
    var intervalCount = 0;
    var interval = setInterval(function() {
        intervalCount++;
        if(intervalCount >= 600) {
            clearInterval(interval);
            return;
        }
        var article = document.getElementsByTagName('article')[0];
        var thumb;
        if(article != undefined) {
            thumb = article.getElementsByTagName('a')[0];
        }
        if(thumb != undefined) {
            clearInterval(interval);
            if(thumb.pathname == '/member_illust.php') {
                type = 'vertical';
            }
            //add link to works page
            var aside = document.getElementsByTagName('aside')[1].children[0].children[0];
            var link = document.createElement('a');
            link.id = 'pil_works';
            link.href = aside.children[0].href.replace('member', 'member_illust');
            link.appendChild(document.createTextNode('More works'));
            aside.parentNode.insertBefore(link, aside.nextSibling);
            //get original images and fill gallery
            if(type == 'single') {
                getSingleOriginalImage(thumb);
            } else {
                getMultipleVerticalOriginalImages();
            }
        }
    }, 200);
}

function getSingleOriginalImage(thumb) {
    var images = [];
    var image = document.createElement('img');
    image.src = thumb.href;
    images[0] = image;
    fillGallery(images);
}

function getMultipleVerticalOriginalImages() {
    var url = unsafeWindow.location.href.replace('medium', 'manga');
    var req = new XMLHttpRequest();
    req.addEventListener("load", function() {
        var images = [];
        var parser = new DOMParser();
        var responseDoc = parser.parseFromString(this.responseText, "text/html");
        var imageContainers = responseDoc.getElementsByClassName('item-container');
        if(imageContainers.length == 0) {
            getMultipleRtlOriginalImages(responseDoc);
            return;
        }
        var i = 0;
        for(i=0; i < imageContainers.length; i++) {
            var image = imageContainers[i].getElementsByTagName('img')[0];
            image.src = image.dataset.src; //master
            images.push(image);
        }
        fillGallery(images);
    });
    req.open('GET', url);
    req.send();
}

function getMultipleRtlOriginalImages(responseDoc) {
    var images = [];
    var scriptTags = responseDoc.getElementsByTagName('script');
    var i = 0;
    for(i=0; i < scriptTags.length; i++) {
        if(scriptTags[i].textContent.search('pixiv.context.images\\[') != -1) {
            var imageVar = scriptTags[i].textContent.split(';')[0];
            var imageUrl = imageVar.split('"')[1].replace(/\\/g, '');
            var image = document.createElement('img');
            image.src = imageUrl; //master
            images.push(image);
        }
    }
    fillGallery(images);
}

function fillGallery(images) {
    var gallery = document.createElement('div');
    gallery.id = 'pil_gallery';
    var i = 0;
    for(i=0; i < images.length; i++) {
        var p = document.createElement('p');
        i++;
        var pText = document.createTextNode('Image ' + i + ' of ' + images.length);
        i--;
        p.appendChild(pText);
        gallery.appendChild(p);
        //images[i].onclick = function(){ window.close(); }; // OPTIONAL
        gallery.appendChild(images[i]);
    }
    var header = document.getElementsByTagName('header')[0];
    header.parentNode.insertBefore(gallery, header.nextSibling);
}

function enlargeThumbsAtWorksPage() {
    // override css
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = `
        .manage-unit .image-item {
            width: 220px;
        }
        ._work.work {
            width: 220px;
            height: 220px;
        }
        .image-item img {
            object-fit: contain;
            width: 220px;
            height: 220px;
        }
        ._one-click-bookmark,
        .thumbnail-menu {
            display: none; /* OPTIONAL */
        }
    `;
    document.getElementsByTagName('head')[0].appendChild(style);
}

(function() {
    'use strict';
    if (window.top != window.self) {
        return;
    }
    // run on stacc page
    if(unsafeWindow.location.href.search('stacc') != -1) {
        addLinkToWorksPageAtStaccPage();
    }
    // run on works page
    if(unsafeWindow.location.href.search('member_illust') != -1 &&
    unsafeWindow.location.href.search('mode') == -1) {
        enlargeThumbsAtWorksPage();
    }
    // run on illustration page
    if(unsafeWindow.location.href.search('medium') != -1) {
        displayGalleryAtIllustrationPage();
    }
})();