Nyaa.si - Load More Thumbnail

Load image from cover/screenshot links.

Verzia zo dňa 19.12.2021. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==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.1
// @license      MIT
// @author       York Wang
// @include      https://sukebei.nyaa.si/*
// @include      https://imgrock.pw/*
// @include      https://picrok.com/*
// @include      https://picbaron.com/*
// @include      https://imgbaron.com/*
// @include      https://kvador.com/*
// @include      https://kropic.com/*
// @include      https://imgsto.com/*
// @include      https://imgsen.com/*
// @include      https://imgstar.eu/*
// @include      https://picdollar.com/*
// @include      https://pics4you.net/*
// @include      https://silverpic.com/*
// @include      http://imglord.com/*
// @include      https://imgtaxi.com/*
// @include      https://imgadult.com/*
// @include      https://imgdrive.net/*
// @include      https://uvonahaze.xyz/*
// @include      https://trans.firm.in/*
// @include      https://imagetwist.com/*
// @include      http://imgair.net/*
// @include      https://hentai4free.net/*
// @run-at       document-end
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';

    function Handler(pattern, process) {
        this.pattern = pattern
        this.process = process
    }
    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) => handlers.push(new Handler(pattern, process))

    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|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)(\/\w+)+/, callback => {
        unsafeWindow.ctipops = []
        unsafeWindow.adbctipops = []
        const img = document.querySelector('img.centred') || document.querySelector('img.centred_resized')
        if(img) {
            callback(img.src)
        } else {
            const btn = document.querySelector('.overlay_ad_link')
            unsafeWindow.setTimeout(() => {
              if(btn) {
                btn.focus()
                btn.click()
              }
            }, 1000)
        }
    })
    addHandler(/^https?:\/\/uvonahaze\.xyz(\/\w+)+/, callback => {
        const img = document.querySelector('img.centred_resized')
        if(img) {
            callback(img.src)
        } else {
            const btn = document.querySelector('input[name=imgContinue]')
            btn && btn.click()
        }
    })
    addHandler(/^https?:\/\/trans\.firm\.in(\/\w+)+/, callback => {
        const img = 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?:\/\/imgair\.net(\/\w+)+/, callback => {
        unsafeWindow.wuLu && unsafeWindow.wuLu()
        const img = document.querySelector('#newImgE')
        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)
        }
    })

    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
                for(let j in handlers) {
                    if(handlers[j].canHandle(links[i].href)) {
                        list.push(links[i].href)
                        break
                    }
                }
            }

            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()
                }
            })

            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(!LMT_Frame) createWrap()
                if(list.length) {
                    const url = list.pop()
                    LMT_Frame.src = url
                } else {
                    if(LMT_Frame) {
                        LMT_Wrap.removeChild(LMT_Frame)
                        LMT_Wrap.removeChild(LMT_Loading)
                    }
                }
            }
            process()
        }
    } else {
        for(let i in handlers) {
            if(handlers[i].canHandle(href)) handlers[i].handle()
        }
    }
})();