Greasy Fork

Greasy Fork is available in English.

Pixiv Display Original Images

Display original images straight from the illustration page. No need to open the "manga" page.

目前为 2018-01-07 提交的版本。查看 最新版本

// ==UserScript==
// @name         Pixiv Display Original Images
// @namespace    superschwul
// @version      0.5
// @description  Display original images straight from the illustration page. No need to open the "manga" page.
// @author       Superschwul
// @match        https://www.pixiv.net/stacc*
// @match        https://www.pixiv.net/member_illust.php*
// @grant        window.close
// ==/UserScript==

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

// this script is deprecated
// i'm working on a new one called "Pixiv Makeover"
// please check it at:
// http://greasyfork.icu/en/scripts/37145-pixiv-makeover

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

// posted on http://greasyfork.icu/en/scripts/36886-pixiv-display-original-images
// changelog
// 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;
        }
    `;
    document.getElementsByTagName('head')[0].appendChild(style);
    // add link
    var usernames = document.getElementsByClassName('stacc_ref_illust_user_name');
    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';
    }
}

function displayGalleryAtIllustrationPage() {
    // override css
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = `
        body {
            background: #e4e7ee !important;
        }
        #wrapper {
            /* force recommendation box to fit available width */
            margin: 10px 0 0 calc((100vw - 970px - 182px) / 2); /* OPTIONAL */
        }
        #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;
        }
    `;
    document.getElementsByTagName('head')[0].appendChild(style);
    //is it a single image, multiple vertical, or multiple rtl?
    var type = 'single';
    var thumb = document.getElementsByClassName('works_display')[0].children[0];
    if(thumb.tagName == 'A') {
        type = 'vertical';
        if(thumb.className.includes('rtl')) {
            type = 'rtl';
        }
    }
    //get original images and fill gallery
    if(type == 'single') {
        getSingleOriginalImage();
    } else if(type == 'rtl') {
        getMultipleRtlOriginalImages();
    } else {
        getMultipleVerticalOriginalImages();
    }
}

function getSingleOriginalImage() {
    var modal = document.getElementsByClassName('_illust_modal')[0].children[0];
    var images = modal.getElementsByTagName('img');
    images[0].src = images[0].dataset.src;
    fillGallery(images);
}

function getMultipleVerticalOriginalImages() {
    var url = window.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');
            for(i=0; i < imageContainers.length; i++) {
                var image = imageContainers[i].getElementsByTagName('img')[0];
                image.src = image.dataset.src;
                images.push(image);
            }
            fillGallery(images);
    });
    req.open('GET', url);
    req.send();
}

function getMultipleRtlOriginalImages() {
    var url = window.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 scriptTags = responseDoc.getElementsByTagName('script');
            for(i=0; i < scriptTags.length; i++) {
                if(scriptTags[i].textContent.includes('pixiv.context.images[')) {
                    var imageVar = scriptTags[i].textContent.split(';')[0];
                    var imageUrl = imageVar.split('"')[1].replace('\\', '');
                    var image = document.createElement('img');
                    image.src = imageUrl;
                    images.push(image);
                }
            }
            fillGallery(images);
    });
    req.open('GET', url);
    req.send();
}

function fillGallery(images) {
    var gallery = document.createElement('div');
    gallery.id = 'pil_gallery';
    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.getElementsByClassName('_global-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';
    // run on stacc page
    if(window.location.href.includes('stacc')) {
        addLinkToWorksPageAtStaccPage();
    }
    // run on works page
    if(window.location.href.includes('member_illust') && !window.location.href.includes('mode')) {
        enlargeThumbsAtWorksPage(); // OPTIONAL
    }
    // run on illustration page
    if(window.location.href.includes('medium')) {
        displayGalleryAtIllustrationPage();
    }
})();