Nyaa.si - Load More Thumbnail

Load image from cover/screenshot links.

Versión del día 17/04/2022. Echa un vistazo a la versión más reciente.

// ==UserScript==
// @name         Nyaa.si - Load More Thumbnail
// @name:zh-CN   Nyaa.si - 自动加载更多预览图
// @namespace    none
// @description  Load image from cover/screenshot links.
// @description:zh-CN  从封面/截图链接加载图片并显示。
// @version      0.4
// @license      MIT
// @author       York Wang
// @match        https://sukebei.nyaa.si/*
// @match        https://imgrock.pw/*
// @match        https://picrok.com/*
// @match        https://picbaron.com/*
// @match        https://imgbaron.com/*
// @match        https://kvador.com/*
// @match        https://kropic.com/*
// @match        https://imgsto.com/*
// @match        https://imgsen.com/*
// @match        https://imgstar.eu/*
// @match        https://picdollar.com/*
// @match        https://pics4you.net/*
// @match        https://silverpic.com/*
// @match        https://fotokiz.com/*
// @match        http://imglord.com/*
// @match        https://imgtaxi.com/*
// @match        https://imgadult.com/*
// @match        https://imgdrive.net/*
// @match        https://xxxwebdlxxx.org/*
// @match        https://uvonahaze.xyz/*
// @match        https://trans.firm.in/*
// @match        https://imgdawgknuttz.com/*
// @match        https://imagetwist.com/*
// @match        https://hentai4free.net/*
// @match        https://pixhost.to/*
// @match        https://imgair.net/*
// @match        http://imgair.net/*
// @match        http://imgfrost.net/*
// @match        http://imgblaze.net/*
// @run-at       document-end
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    /**
     * type = 1: both Nyaa and non-Nyaa
     * type = 2: Nyaa only
     * type = 3: non-Nyaa only
     */
    function Handler(pattern, process, type) {
        this.pattern = pattern
        this.process = process
        this.type = type || 1
    }
    Handler.prototype.canHandle = function(url) {
        return this.pattern.test(url)
    }
    Handler.prototype.handle = function() {
        this.process(url => {
            document.location.href = url
            unsafeWindow.top.postMessage({"LMT": url}, '*')
        })
    }
    const handlers = []
    const addHandler = (pattern, process, nyaaOnly) => handlers.push(new Handler(pattern, process, nyaaOnly))

    addHandler(/^https?:\/\/(imgrock\.pw)(\/[\w\-]+)+(\.[\w\-]+)+/, callback => {
        // pause on CAPTCHA
        const iframe = document.querySelector('iframe')
        if(iframe && iframe.src.indexOf('captcha') > -1) return

        const img = document.querySelector('.picview')
        if(img) {
            callback(img.src)
        } else {
            const btns = document.querySelectorAll('input[name=fnext]')
            for(let i=0;i<btns.length;i++) {if(!btns[i].style.display) btns[i].click()}
            const forms = document.querySelectorAll('form')
            for(let i=0;i<forms.length;i++) {if(forms[i].hito) {forms[i].submit()}}
        }
    })
    addHandler(/^https?:\/\/(picrok\.com)(\/[\w\-]+)+\.php/, callback => {
        // pause on CAPTCHA
        const iframe = document.querySelector('iframe')
        if(iframe && iframe.src.indexOf('captcha') > -1) return

        const img = document.querySelector('.picview')
        if(img) {
            callback(img.src)
        } else {
            unsafeWindow.setTimeout(() => {
              const forms = document.querySelectorAll('form')
              const btns = document.querySelectorAll('form>button')
              // for(let i=0;i<btns.length;i++) {if(btns[i].style.display) forms[i-1].submit()}
            }, 5000)
        }
    })
    addHandler(/^https?:\/\/(picbaron\.com|imgbaron\.com|kvador\.com|kropic\.com|imgsto\.com|imgsen\.com|imgstar\.eu|picdollar\.com|pics4you\.net|silverpic\.com|fotokiz\.com|imglord\.com)(\/.+)+(\.[\w\-]+)+/, callback => {
        const img = document.querySelector('.pic')
        if(img) {
            callback(img.src)
        } else {
            const form = document.querySelector('form')
            form && form.submit()
        }
    })
    addHandler(/^https?:\/\/(imgtaxi\.com|imgadult\.com|imgdrive\.net|xxxwebdlxxx\.org)(\/\w+)+/, callback => {
        unsafeWindow.ctipops = []
        unsafeWindow.adbctipops = []
        const img = document.querySelector('img.centred') || document.querySelector('img.centred_resized')
        if(img) {
            callback(img.src)
        } else {
            unsafeWindow.setTimeout(() => {
                const btn = document.querySelector('.overlay_ad_link')
              if(btn) {
                btn.focus()
                btn.click()
              }
            }, 1000)
        }
    })
    addHandler(/^https?:\/\/(uvonahaze\.xyz|trans\.firm\.in||imgdawgknuttz\.com)(\/\w+)+/, callback => {
        const img = document.querySelector('img.centred') || document.querySelector('img.centred_resized')
        if(img) {
            callback(img.src)
        } else {
            const btn = document.querySelector('input[name=imgContinue]')
            btn && btn.click()
        }
    })
    addHandler(/^https?:\/\/imagetwist\.com(\/\w+)+/, callback => {
        const img = document.querySelector('.img-responsive')
        if(img) {
            callback(img.src)
        }
    })
    addHandler(/^https?:\/\/hentai4free\.net(\/\w+)+/, callback => {
        unsafeWindow.wuLu && unsafeWindow.wuLu()
        const img = document.querySelector('#image-viewer-container>img')
        if(img) {
            callback(img.src)
        }
    })
    addHandler(/^https?:\/\/pixhost\.to(\/\w+)+/, callback => {
        const img = document.querySelector('img.image-img')
        if(img) {
            callback(img.src)
        } else {
            const btn = document.querySelector('a.continue')
            btn && btn.click()
        }
    })
    addHandler(/^https?:\/\/(imgair\.net|imgfrost\.net|imgblaze\.net)(\/\w+)+/, callback => {
        unsafeWindow.wuLu && unsafeWindow.wuLu()
        const img = document.querySelector('#newImgE')
        if(img) {
            callback(img.src)
        }
    }, 3)

    const href = document.location.href
    if(/^https?:\/\/(sukebei\.nyaa\.si).+/g.test(href)) {
        if(document.title === '502 Bad Gateway') {
            document.location.href = document.location.href
            return
        }
        if(/^https?:\/\/(sukebei\.nyaa\.si\/view\/).+/g.test(href)) {
            const desc = document.querySelector('#torrent-description')
            const links = desc.querySelectorAll('a')
            if(!desc || !links) return

            const list = []
            for(let i in links) {
                if(!links[i].href) continue
                handlers.filter(h=>h.type!==3).forEach(h=>{h.canHandle(links[i].href) && list.push(links[i].href)})
            }

            let LMT_Wrap, LMT_Frame, LMT_Loading
            function createWrap() {
                desc.parentNode.insertAdjacentHTML('afterend', '<div class="panel panel-default"><div class="panel-body" id="LMT_Wrap"></div></div>')
                LMT_Wrap = document.querySelector('#LMT_Wrap')

                LMT_Loading = document.createElement('div')
                LMT_Loading.textContent = 'Loading Images...'
                LMT_Wrap.appendChild(LMT_Loading)

                LMT_Frame = document.createElement('iframe')
                LMT_Frame.id = 'LMT_Frame'
                LMT_Frame.sandbox = 'allow-forms allow-scripts allow-same-origin'
                LMT_Frame.style.display = 'none'
                LMT_Wrap.appendChild(LMT_Frame)
            }

            function process() {
                if(list.length) {
                    if(!LMT_Frame) createWrap()
                    let url = list.shift()

                    LMT_Frame.src = url
                } else {
                    if(LMT_Frame) {
                        LMT_Wrap.removeChild(LMT_Frame)
                        LMT_Wrap.removeChild(LMT_Loading)
                    }
                }
            }

            unsafeWindow.addEventListener('message', function (e) {
                if(e.data.LMT) {
                    LMT_Frame.src = ''
                    const img = document.createElement('img')
                    img.src = e.data.LMT
                    img.style['max-width'] = '100%'
                    LMT_Wrap.appendChild(img)
                    process()
                }
            })

            process()
        }
    } else {
        handlers.filter(h=>h.type!==2).forEach(h=>{h.canHandle(href) && h.handle()})
    }
})();