Get Picasaweb Image URL

By dofy Last update Jul 18, 2009 — Installed 2,394 times. Daily Installs: 2, 0, 2, 1, 3, 4, 3, 2, 3, 1, 3, 1, 1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 10, 2, 1, 1, 11, 3, 4, 3, 3, 10

There are 5 previous versions of this script.

// ==UserScript==
// @name           Get Picasaweb Image URL
// @namespace      http://phpz.org/
// @version        2.2
// @include        http://picasaweb.google.com/*
// ==/UserScript==

var __suj_picasaweb_isinit = false;
var __suj_parent_input;
var __suj_imgurl_input = [];
var __suj_sizes = [32,48,64,72,104,144,160,200,220,288,320,400,512,576,640,720,800,912,1024,1152,1280,1440,1600];
var __suj_default_size_id = 12;  // default 512px;
window.addEventListener('load', init, false);
function init()
{
    var imglinks = document.getElementsByClassName('goog-icon-list-icon-link');
    if(imglinks.length > 0)
    {
        for(var i=0, l=imglinks.length; i<l; i++)
        {
            imglinks[i].addEventListener(
                'mouseup', 
                function()
                {
                    setTimeout(bindEvent, 1500);
                }, false);
        }
    }
    else
        bindEvent();
}

function bindEvent()
{
    var ind, l;
    var buttons   = document.getElementsByClassName('goog-button');
    for(ind=0, l=buttons.length; ind<l; ind++)
    {
        buttons[ind].addEventListener(
            'click', 
            function()
            {
                var selecter = document.getElementById('lhid_snippet_size');
                __suj_default_size_id = selecter.options.length < 10 ? __suj_default_size_id : selecter.options.selectedIndex;
                setTimeout(rebuildSizeList, 1500);
            }, false);
    }
    var hakelinks = document.getElementsByClassName('gphoto-embedLinks-header');
    for(ind=0, l=hakelinks.length; ind<l; ind++)
        hakelinks[ind].addEventListener(
            'click',
            function()
            {
                !__suj_picasaweb_isinit && createUI();
            }, false);
}

function createUI()
{
    if(rebuildSizeList())
    {
        __suj_picasaweb_isinit = true;
        var appendin = document.getElementsByClassName('gphoto-embed-options')[0].parentNode;
        var mylabel  = document.createElement('label');
        __suj_imgurl_input.push(document.createElement('input'));
        __suj_imgurl_input.push(document.createElement('input'));
        __suj_imgurl_input.push(document.createElement('input'));

        mylabel.innerHTML = '图片地址';

        var myp = appendin.appendChild(document.createElement('p'));
        myp.appendChild(mylabel);
        for(var ind in __suj_imgurl_input)
        {
            __suj_imgurl_input[ind].className = 'gphoto-sidebar-inputbox';
            __suj_imgurl_input[ind].addEventListener('mouseover',  function(){getImageUrl();this.select();}, false);
            __suj_imgurl_input[ind].addEventListener('click',  function(){getImageUrl();this.select();}, false);
            myp.appendChild(document.createElement('br'));
            myp.appendChild(__suj_imgurl_input[ind]);
        }
        setTimeout(getImageUrl, 500);
    }
}

function rebuildSizeList()
{
    var selecter = document.getElementById('lhid_snippet_size');
    if(selecter)
    {
        __suj_parent_input = document.getElementById('lhid_snippet_embed');
        __suj_parent_input.value = __suj_parent_input.value.replace(/\/s\d+\//i, '/s' + __suj_sizes[__suj_default_size_id] + '/');
        selecter.options.length = 0;
        var op;
        for(var s in __suj_sizes)
        {
            op = new Option();
            op.text  = __suj_sizes[s] + 'px';
            op.value = __suj_sizes[s];
            selecter.options.add(op);
        }
        selecter.selectedIndex = __suj_default_size_id;
    }
    return selecter;
}

function getImageUrl()
{
    var str = __suj_parent_input.value;
    str.match(/<img\s+src\s*\=\s*\"([^\"]+?)\"/i);
    __suj_imgurl_input[0].value = RegExp['$1'];
    __suj_imgurl_input[1].value = '<img src="'+RegExp['$1']+'" />';
    __suj_imgurl_input[2].value = '[img]'+RegExp['$1']+'[/img]';
}