TryToLoadBigImageAutomatically

Automatically try to show big image instead of original preview.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        TryToLoadBigImageAutomatically
// @namespace   mnts
// @description Automatically try to show big image instead of original preview.
// @include     http://anime-pictures.net?*
// @include     *://*anime-pictures.*/*
// @include     http?://anime.reactor.cc/tag/?*
// @include     *://*anime.reactor.*/tag/*
// @include     http?://zerochan.net/?*
// @include     *://*zerochan.*/*
// @include     http?://otakumode.com/?*/post/?*
// @include     *://*otakumode.*/*/post/*
// @include     http?://?*.?*/?*
// @include     *://*.*/*
// @version     1.4
// @grant       none
// allow pasting
// ==/UserScript==

function tryAnimePictures()
{ //anime-pictures.net
    var asPreview = document.getElementById('big_preview_cont');
    if (asPreview === undefined || asPreview === null) return false;
    var aPreview = asPreview.getElementsByTagName('a')[0];
    if (aPreview === undefined || asPreview === null) return false;
    var bigImgUrl = aPreview.getAttribute('href');
    if (bigImgUrl !== undefined && bigImgUrl !== "") {
        var imgPreview = aPreview.getElementsByTagName('img')[0];
        if (imgPreview === undefined || imgPreview === null) return false;
        imgPreview.setAttribute('width', imgPreview.width);
        imgPreview.removeAttribute('height');
        imgPreview.setAttribute('src', '');
        imgPreview.setAttribute('src', bigImgUrl);
    }
    return true;
}

function tryAnimeReactorCC()
{ //anime.reactor.cc
    var asPreview = document.getElementsByClassName('prettyPhotoLink');
    var result = false;
    for (var i = 0; i < asPreview.length; i++) {
        result = true;
        var a = asPreview[i];
        var urlBigImg = a.getAttribute('href');
        var img = a.getElementsByTagName('img')[0];
        img.setAttribute('width', img.width);
        img.removeAttribute('height');
        img.setAttribute('src', '');
        img.setAttribute('src', urlBigImg);
    }
    return result;
}

function tryZerochan()
{ //zerochan.net
    var divPreview = document.getElementById('large');
    if (divPreview === undefined || divPreview === null) return false;
    var aPreview = divPreview.getElementsByTagName('a')[0];
    if (aPreview === undefined || aPreview === null) return false;
    var imgPreview = aPreview.getElementsByTagName('img')[0];
    if (imgPreview === undefined || imgPreview === null) return false;
    var urlFull = aPreview.getAttribute('href');
    if (urlFull.length <= 0) return false;
    imgPreview.setAttribute('width', imgPreview.width);
    imgPreview.removeAttribute('height');
    imgPreview.setAttribute('src', '');
    imgPreview.setAttribute('src', urlFull);
    return true;
}

function tryOtakumode()
{ //otakumode.com
    var className = 'first nomenu nodraggable';
    var imgsPreview = document.getElementsByClassName(className);
    if (imgsPreview === undefined || imgsPreview === null) return false;

    var countPreview = 0;
    var divContents = document.getElementById('contents');
    if (divContents === undefined || divContents === null) return false;

    divContents.addEventListener('DOMSubtreeModified', function() {
        var imgsPreview = document.getElementsByClassName(className);
        if (imgsPreview === undefined || imgsPreview === null) return;
        if (countPreview === imgsPreview.length) return;
        countPreview = imgsPreview.length;

        var exprPass = ".*x\.jpg$";
        for (var i = 0; i < imgsPreview.length; i++) {
            var imgPreview = imgsPreview[i];
            var urlImage = imgPreview.getAttribute('src');
            if (urlImage.match(exprPass) === null) {
                var ext = '.jpg';
                var urlImageBig = urlImage.substring(0, urlImage.length - ext.length) + 'x' + urlImage.substring(urlImage.length - ext.length);
                imgPreview.setAttribute('width', imgPreview.width);
                imgPreview.removeAttribute('height');
                imgPreview.setAttribute('src', '');
                imgPreview.setAttribute('src', urlImageBig);
            }
        }
    });

    return true;
}

function allHrefToSrc()
{
    console.log('window.onload');
    var imgs = document.getElementsByTagName('img');
    var expr = '.*\.(jpg|jpeg|png)$';

    for (var i = 0; i < imgs.length; i++) {
        var img = imgs[i];
        var nodeParent = img.parentNode;
        if (nodeParent.tagName !== 'A') continue;

        var src = img.getAttribute('src');
        var href = nodeParent.getAttribute('href');
        if (src === href) continue;

        if (href.match(expr) !== null) {
            img.setAttribute('width', img.width);
            img.removeAttribute('height');
            img.setAttribute('src', '');
            img.setAttribute('src', href);
        }
    }
}

function tryCommon()
{ //*.*
    var body = document.getElementsByTagName('body')[0];
    if (body === undefined || body == null) return false;

    var countImg = 0;
    window.onload = function() {
        allHrefToSrc();
    };
    body.addEventListener('DOMSubtreeModified', function() {
        var imgs = document.getElementsByTagName('img');
        if (countImg === imgs.length) return;
        countImg = imgs.length;

        console.log('DOMSubtreeModified');
        allHrefToSrc();
    });
    return true;
}

if (tryAnimePictures()) {
    console.log('type: anime-pictures.net');
} else if (tryAnimeReactorCC()) {
    console.log('type: anime.reactor.cc');
} else if (tryZerochan()) {
    console.log('type: zerochan.net');
} else if (tryOtakumode()) {
    console.log('type: otakumode.com');
} else {
    console.log('type: http?://.*\..*/.*');
    tryCommon();
}