Enhanced Viewer for Wretch Album

By 晴悠君 Last update Dec 17, 2008 — Installed 1,174 times.

There are 15 previous versions of this script.

// ==UserScript==
// @name          Enhanced Viewer for Wretch Album
// @namespace     http://www.wretch.cc/blog/sunday777
// @description   Dynamically show large pictures when viewing Wretch Album.
// @include       http://www.wretch.cc/album/album.php*
// ==/UserScript==
// Author: Andro Lee
// email: andro.lee (at) gmail.com
// History:
// V2.31 2008 Dec 18
//      Show "Downaloding..." text in big pic if it is still downloading.
// V2.3 2008 Dec 18
//      Solved problem that can't show snapshot of video items.
// V2.2 2008 Dec 17
//      Again fine tune position calculation of floating window.
// V2.1 2008 Dec 16
//      Fine tune position calculation of floating window.
// V2.0 2008 Dec 15
//     Use a floating window to show enlarged picture.
// V1.0 2008 Dec 12

//var mode;
//GM_registerMenuCommand("View Wretch Album with floating window", function (event) {GM_setValue("mode", "floating");});
//GM_registerMenuCommand("View Wretch Album in slide mode", function (event){GM_setValue("mode", "slide");});
//GM_registerMenuCommand("View Wretch Album with floating window", function (event) {mode = 1;window.location.reload();});
//GM_registerMenuCommand("View Wretch Album in slide mode", function (event){mode = 2;window.location.reload();});



//show_mode = GM_getValue("mode");
//alert(mode);

//if (show_mode == "floating")
//{
    var border_px = 5;
    var offset_px = 60;
    var pic_stat;

    // create a image element
    pic = document.createElement("img");
    pic.border = border_px;
    pic.alt = "Downloading...";
    pic.style.position = "fixed";
    pic.style.zIndex = 1;
    pic.style.display = "none";

    pic.addEventListener("mouseout", function (event) {
        this.style.display = "none";
        pic_stat = "onbig";
    }, false);

    pic.addEventListener("click", function (event) {
        this.style.display = "none";
        pic_stat = "onbig";
    }, false);

    // put the img as first node in HTML body.
    body_node = document.getElementsByTagName("body")[0];
    body_node.insertBefore(pic, body_node.firstChild);

    // loop all images in an album
    album = document.getElementById("ad_square");
    img_all = album.getElementsByTagName("img");
    for (var i = 0; i < img_all.length; i++) {

        img_node = img_all[i];

        isrc = img_node.src;

        idx = isrc.indexOf("thumbs/t");

        if (idx != -1) {

            // load original picture
            img_hidden = document.createElement("img");
            img_hidden.src = isrc.slice(0, idx) + isrc.substr(idx+8);
            img_hidden.style.display = "none";
            img_node.appendChild(img_hidden);

            //img_node.src = isrc.slice(0, idx) + isrc.substr(idx+8);

            // create mimic thunbnails
            //if (img_node.width > img_node.height)
              //  img_node.width = 90;
            //else
              //  img_node.height = 90;

            img_node.addEventListener("mouseover", function (event)
            {
                if (pic.src == this.firstChild.src && pic_stat == "onbig")
                {
                    pic_stat = "in";
                    return;
                }
                pic.src = this.firstChild.src;

                big_width = pic.width + border_px*2;

                if (event.clientX >= big_width + offset_px)
                    pic.style.left = event.clientX - big_width - offset_px;
                else if(window.innerWidth - event.clientX >= big_width + offset_px)
                    pic.style.left = event.clientX + offset_px;
                else if (event.clientX > window.innerWidth / 2)
                    pic.style.left = 0;
                else
                    pic.style.left = window.innerWidth - big_width;

                big_height = pic.height + border_px*2;
                if (event.clientY >= big_height + offset_px)
                    pic.style.top = event.clientY - big_height - offset_px;
                else if(window.innerHeight - event.clientY >= big_height + offset_px)
                    pic.style.top = event.clientY + offset_px;
                else if (event.clientY > window.innerHeight / 2)
                    pic.style.top = 0;
                else
                    pic.style.top = window.innerHeight - big_height;

                pic.style.display = "block";

                if (event.clientX < pic.offsetLeft ||
                    event.clientX > pic.offsetLeft + pic.width + border_px*2 ||
                    event.clientY < pic.offsetTop ||
                    event.clientY > pic.offsetTop + pic.height + border_px*2)
                    pic_stat = "out";
                else
                    pic_stat = "in";

            }, false);

            img_node.addEventListener("mousemove", function (event)
            {
                big_width = pic.width + border_px*2;

                if (event.clientX >= big_width + offset_px)
                    pic.style.left = event.clientX - big_width - offset_px;
                else if(window.innerWidth - event.clientX >= big_width + offset_px)
                    pic.style.left = event.clientX + offset_px;

                big_height = pic.height + border_px*2;

                if (event.clientY >= big_height + offset_px)
                    pic.style.top = event.clientY - big_height - offset_px;
                else if(window.innerHeight - event.clientY >= big_height + offset_px)
                    pic.style.top = event.clientY + offset_px;

                if (pic_stat == "out")
                    pic.style.display = "block";

            }, false);

            img_node.addEventListener("mouseout", function (event) {
                if (pic_stat == "out")
                    pic.style.display = "none";
            }, false);
        }
    }
//}
//Else
/*
{

    // create new band-style album
    new_album = document.createElement("table");

    album_table = document.getElementById("ad_square");

    album_rows = album_table.getElementsByTagName("tr");

    for (var i = 0; i < album_rows.length; i+=2) {

        thumbs = album_rows[i].getElementsByTagName("td");
        titles = album_rows[i+1].getElementsByTagName("td");

        for (var j = 0; j < titles.length; j++) {
            tr_new = document.createElement("tr");

            td_new = thumbs[j].cloneNode(true);
            td_new.removeAttribute("class");
            td_new.removeAttribute("width");
            td_new.removeAttribute("height");
            tr_new.appendChild(td_new);

            td_new = titles[j].cloneNode(true);
            td_new.setAttribute("valign", "middle");
            td_new.setAttribute("aligh", "left");
            tr_new.appendChild(td_new);

            new_album.appendChild(tr_new);
        }
    }

    album_table.parentNode.setAttribute("align", "left");
    tr_node = album_table.parentNode.parentNode;
    album_table.parentNode.replaceChild(new_album, album_table);

    td_new = document.createElement("td");
    big_img = document.createElement("img");
    big_img.style.position = "fixed";
    big_img.style.right = 20;
    big_img.style.top = 20;
    big_img.addEventListener("click", function (event) {big_img.style.display = "none";}, false);
    td_new.appendChild(big_img);
    tr_node.appendChild(td_new);

    img_all = new_album.getElementsByTagName("img");

    for (var i = 0; i < img_all.length; i++) {

        var isrc, idx;

        img_node = img_all[i];
        isrc = img_node.src;
        idx = isrc.indexOf("thumbs/t");

        if (idx != -1) {
            img_node.src = isrc.slice(0, idx) + isrc.substr(idx+8);

            if (img_node.width > img_node.height)
                img_node.width = 120;
            else
                img_node.height = 120;

            img_node.addEventListener("mouseover", function (event) {
                big_img.src = this.src;
                big_img.style.display = "block";
            }, false);
        }
    }

    big_img.src = img_node.src;
}
*/