Pixiv Replace With Original

Replace Pixiv image with original image

От 25.06.2018. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Pixiv Replace With Original
// @namespace    https://blog.maple3142.net/
// @version      0.2
// @description  Replace Pixiv image with original image
// @author       maple3142
// @match        https://www.pixiv.net/member_illust.php?mode=medium&illust_id=*
// @match        https://www.pixiv.net/member_illust.php?mode=manga&illust_id=*
// @run-at       document-start
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict'
    const $=s=>document.querySelector(s)
    const $$=s=>[...document.querySelectorAll(s)]
    const params=new URLSearchParams(location.search)
    const mode=params.get('mode')
    function createSafeReadonlyProperty(obj,prop,value){
        let x={value}
        Object.defineProperty(obj,prop,{
            get: ()=>x.value,
            set: ()=>{}
        })
        return {value,update:nval=>x.value=nval}
    }
    if(mode==='medium'){
        const PREFIX=Math.random().toString(36)
        Object.defineProperty(Object.prototype,'props',{
            set(v){
                this[PREFIX+'_props']=v
                if(v.urls)onTarget(this)
            },
            get(v){
                return this[PREFIX+'_props']
            }
        })
        function onTarget(target){
            const url=target.props.urls.original
            target.props.urls=new Proxy({},{
                get: ()=>url
            })
        }
    }
    else if(mode==='manga'){
        const id=params.get('illust_id')
        const p=fetch(`/ajax/illust/${id}`,{ credentials: 'same-origin' }).then(r=>r.json()).then(r=>r.body).then(data=>{
            const url=data.urls.original
            const ar=[]
            for(let i=0;i<data.pageCount;i++){
                ar.push(url.replace('p0',`p${i}`))
            }
            return ar
        })
        addEventListener('load',()=>{
            p.then(ar=>{
                const imgs=$$('img.image')
                console.log(imgs,ar)
                for(let i=0;i<ar.length;i++){
                    imgs[i].src=imgs[i].dataset.src=ar[i]
                }
            })
        })
    }
})()