Nyaa.si - Load More Thumbnail

Load image from cover/screenshot links.

Tính đến 16-04-2022. Xem phiên bản mới nhất.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

Bạn sẽ cần cài đặt một tiện ích mở rộng như Tampermonkey hoặc Violentmonkey để cài đặt kịch bản này.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(Tôi đã có Trình quản lý tập lệnh người dùng, hãy cài đặt nó!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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.3
// @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://uvonahaze.xyz/*
// @match        https://trans.firm.in/*
// @match        https://imagetwist.com/*
// @match        https://imgair.net/*
// @match        http://imgair.net/*
// @match        http://imgfrost.net/*
// @match        http://imgblaze.net/*
// @match        https://hentai4free.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)(\/\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|imgfrost\.net|imgblaze\.net)(\/\w+)+/, callback => {
        unsafeWindow.wuLu && unsafeWindow.wuLu()
        const img = document.querySelector('#newImgE')
        if(img) {
            callback(img.src)
        }
    }, 3)
    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
                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.pop()

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