// ==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 // @downloadURL none // ==/UserScript== // =============================================================================== // this script is deprecated // i'm working on a new one called "Pixiv Makeover" // please check it at: // https://greasyfork.org/en/scripts/37145-pixiv-makeover // =============================================================================== // posted on https://greasyfork.org/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(); } })();