ebay-list-watch

By moopet Last update Jan 18, 2009 — Installed 697 times.

There are 5 previous versions of this script.

// ==UserScript==
// @name            ebay-list-watch
// @namespace       http://userscripts.org/scripts/show/40092
// @description     adds a watch-list button to ebay list views
// @include         http://*.ebay.co.uk/*
// @include         http://*.ebay.com/*
// @exclude         http://my.ebay.co*

// ==/UserScript==

// allow automatic change of .co.uk, .com etc.
tld = window.location.hostname.split('ebay')[1];

myEbayURL = 'http://my.ebay' + tld + '/ws/eBayISAPI.dll?MyEbayBeta&CurrentPage=MyeBayNextWatching';
myAddURL = 'http://cgi1.ebay' + tld + '/ws/eBayISAPI.dll?MakeTrack&item=';
myEbayURL = 'http://my.ebay' + tld + '/ws/eBayISAPI.dll?MyEbay&gbh=1&CurrentPage=MyeBaySummary&ssPageName=STRK:ME:LNLK';
placeholderImg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAMAAAAHtrtKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXRQTFRF5+fn0tLSxMTEoqKimZmZAAAAWVhYjIyMlpaW09PTtra2ioqKhYSEAwMDgH9/d3d3nZ2dk5OTkpKSu7u7YmFhhIODj46OkJCQxcXFmpmZnJycr6+viIiIoaGhlZWVqKiopaSkSUlJe3t7YWBgc3JycXBwaWlpzs7OhoWFfHx8YF9fuLe3SkpK7OzsjY2NdnZ2pqWlmJeXbm5uWVlZfn19fX19rKysr66u2traYGBgi4uL29vbenl5urq6RUVFpKSk19fXfXx84uLivb29oKCgbGxscnJyVVVV5OTkZmVlWlpaT09P9PT0rq6uQkJCiYmJZmZmgICAh4aGgoKCZGNjbGtrX15emJiYdXV1e3p6Y2JiZWRkv7+/Ozs7iomJcG9vkZGRkI+PcXFxeHd3s7OzTExMgYGBXVxcZ2Zmo6Ojp6enqqmpq6urtbW12dnZ4ODg8fHxlJSUh4WFj4+POjo6dHR06enp7e3t9/f3h4eHf39/zMzMGuZN2wAAAb1JREFUeNqk0ldz3CAUBtALaFHbbO9r73qrY8e99957S++9CZSeSPz5SHEm0kSPnBkuXGC+FwC9rn2WpL3XgWR/SMsSKA7/kjZchIW9o0+SjvYWwJn7KW3OgUsdIPYPhPTcAujzR5+3vgdwTOlt6oP/6ZcwLTbs2Je/YnbIeK9t3xz3xit7LUfXbLvgbfQW7IgNMQ3J0iIPYnjImMp5Lsd5+xE/bt8f41xNcZ5SecRiKQk7WR0FMShkuYM+djrLiCL0rFx+g9BpGaHyKYrQszuwbfSLIEaE4JYoaAWNPRWixVhLiAtNCO1CRPQb23A2U8JBDA57Z0zMbq1vrePZQYwHP+B8BuNMHkeUZs5gfnWTBTEs7GXxIaveMfPM9N8nz6ZMxswpFrG5Og8HFcMKYqww98q1rO6VaXXjlvW8ay15U3zJijAqB7Bbq5IghoTF6RNCEjSdomlCvDKa8NpRQu7SBHnwwjtOX9+r1nbhcKSu3PD9+X5KmPrWL7Tm7vvdfpPSHqXZVpQibSq5CcWl6vW9+sghDDnkqyTiDMHKecWRVDlfgZOBjCspM3ACjcnv0iYbkHz9+JusRvK3AAMA99rMxAbU0C8AAAAASUVORK5CYII=";
unwatchedImg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAMAAAAHtrtKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYBQTFRFxMTEmZmZtbW1zMzM4ODg5+fngoKCYWFhd3d309PTe3t7Dg4OAwMDqKioKysrenp6tra2bW1tcHBwi4uLYmJiaWlpTU1NW1tbnZ2du7u7PDw8o6OjnJycxcXFHx8flZWVKSkpl5eXVlZW0dHRbGxsUlJSXFxcjIyMcnJySUlJkJCQKioqIiIiFxcXT09PjY2N29vbZ2dn5OTkrKysDQ0Ng4ODS0tLwsLCVFRUkpKSvb294uLiGhoaDw8PgICAQkJClpaWqqqqRkZG9PT0X19f2NjYpKSkfX19dnZ2MDAwZmZmUFBQ7OzsvLy82traSkpKRUVFWlpaPj4+kZGRQUFBJycnVVVVDAwMWVlZzs7OfHx8LS0tYGBgLi4umpqar6+vCgoKHR0dGxsbsbGxGBgYfn5+hYWFV1dXhoaGiIiINDQ0vr6+TExMODg4qampyMjI0tLSoqKi2dnZq6ur8fHxf39/lJSUj4+P6enp7e3t9/f3Ojo6h4eHdHR0////AAAA6+SfEAAAAglJREFUeNqkkOVzGzEQxdfH56sdY8wQQ8zhNMzUMMfBugwpWac2aRu7+tcj6Tq9fr/fjHZX7+08zQh0z+KdQxYTOqDYT8fEEFR3fjtmpwrBkZXvDlkZCUJn75dj9jqg6LJM/iEzep/LspsdN51v5G/cca/1EnK0xjT5KGjtEWINugIb4oxE/vyFSIywJklPw/RkpPwcyVOFTEjS1VVeik9o1JPiH/heXMrMsT4jboCWGjLtGJOhvDdNwzBNb8s89j4oVCG7pvKSe90uLVxj7BqsDqU0KMf0th3TZnhq7VKt5mnTWygQWKYK8bWXQ9wLBGj58rZtEeKiHitDwXch2jEi45MhrvpX/YmsKBqJhEEV8lp81cM9P/8oaxY/Znm78BVgazQFdgxwZpdOo+Mn4ycQHQMYqwKQJZh9xq1wmJZba4bTKG+p0S24Xp8W7BiBE/e/Eb421UlBZU9PCgKJCpsqt1TWNv3WXvOYt+n1azhM+rAdgznbjW2M641hXI9gXK5jTO5wpMGtCFXwzTD+H1/yEM4yLWTHII5KCgjliNJHFIRYISXU1/Qi5C3lctT3qtZe2uqtzBkMDHpcTxj871ycnheskPv+NLuliy7yjt7ThNy6ikWqZPutvbTVPYMDsN9B9w5BnX04mE92HJKcP4CFy6kfDpm6XIDKedcx5xXQPscfnFLRHgUYADv550RpakVnAAAAAElFTkSuQmCC";
watchedImg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAUCAMAAAAHtrtKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYBQTFRFx9t2pMMoOkIYR0dHS1MrlZWR1/dUVGMUNjRJKTELqamkqMgpIioINTU1iaIhk64jlrIkOjo6WWoVgZkf5uSce5EeN0ENpaSdTVsTjouTPj4+LTIaf5UerKqTUVFRbYIbND0MCwwDXW4WdYocan0aiISGmbUludssGBwGoL4nHiMIjacimpmVQU0QSFUSZHcYDRAECwoURFAR1fZMzfMyv+Qun7smsdErx+ww3fht/fyc5fmPeoVMzvQzstMrgJQuLjcLt9ksUF8TwOUuXm8Xd44drMwqPUImeI4diZVWdoQ6n70mZ3Qzzudmc4kc8/zM6vumj6kjmaZff5gf4vmAcoMpVWIeorZQQEwP1uiFYHEXZnoZcIQbhZVB3/h36Oaeye8wwNlaERAaW1plqLdputhA3+LOnLQ4wL6nf4OBqsU94OTQREFcmpiAkaU+2eSxgoxrhIt1j5V+zd6Mp8Yo8Py+6/ur9/3afZMekawjOUMOjKYi5/qYcoYchJ0gAAAADbCt0QAAAoZJREFUeNqkkmlT2lAUhi8RhaiEEAERUEAiIipEspAQQZaIC67FfdfW1m7a2qjVtpy/3pPUGacfHZ6ZPGfyvjc3y4SUHN7HDvE2S0Sp/u6YqkImNx7+43Pv+4fXsjFJmK31uxduBoc83XevZH2LIe2e+xdupnwez+39a+lpk1ZJ1+GZmS8+38fbH843uj5rHbO67ozoxO5m950AC/tWpi8s6QsYvVtCRZZ0vdQiAfVEg6LN6VTY951o2sqypjlX8LjWVgVY1TQNzjUtElnVqPNl7DTqWKN2cR5TuBh2T9QASdZ7xOdthsO+b+eiKM7tiKIgiCL9SbymqTlM4FKcy4gW29sozKgP1kIKtUP11JPkqFqS/m3j7w67LyXEQUsMTTskkKSDWCyPCZSl/IFVSbEYKhiQgizOQBDFCqXqEeHLZ+rF1ZW/6J8Ke9yqxbigjvKjfJNWVaHZFDCBhppetDve/lDzahzdmI9j0oCzMk9yfXX57cjIoB9faWxGtqinTTrV2mvtySlBloVJWQaznl6zu8NDVHxNjmMqr8VRJtT7csSYGC9c9I50dQ/5PF+hYPPEpwuOhOEqGNatXYUCpAoVw64Ma1T4QmUAJ19BJRPjEwbhUmUTTge7wj7PmB9Mm1A6ZJr96ZzZz5nmUb9pwqPJpe2Kw8Ss5MxKAGeuggrmyymOuLwNBYr+YethiqDYGMAriguiXogqiiVgFG+CVhSacbmwpw2FTlrrMIonmIbXRUKMg7V/Pbd7BoC1WUxYgl9cxjrL1FgYwPMMQJyt1TChOZbGS2ocih5gHUyIZNvKrw5R2lmSj6baHZKK5sl0YPNnh2wGpkmW+9MxXJYks08dk03+FWAAeWjdJPfRficAAAAASUVORK5CYII=";

// using img.src to load transactions is a quick hack, but it works, quickly, and from outside GM.
requestImg = document.createElement('img');
requestImg.name = 'requestImg';
document.body.insertBefore(requestImg, document.body.firstChild);

// loop through all the items listed on the page
var cells = document.getElementsByClassName('ttl'); // list view
if (cells.length == 0)
{
// TODO: shop view currently doesn't work - it submits the surrounding form.
//    cells = document.getElementsByClassName('ens fontnormal'); // shop gallery view
}
if (cells.length == 0)
{
    cells = document.getElementsByClassName('ttl g-std'); // gallery view
}
var numCells = cells.length;

// only install if the user is logged in and we've found the elements to change
tmp = document.getElementById('dynamicmenu-hdrCtr');
if (tmp != null && tmp.innerHTML.indexOf('GREETING:SIGNEDIN') > -1 && numCells > 0)
{

    // put placeholder "loading..." elements in while the script does its thing
    newHTML = '<br /><input disabled="disabled" value="wait..." type="image" src="' + placeholderImg + '" />';
    for (var c = 0; c < numCells; c++)
    {
        anchor = cells[c].getElementsByTagName('a')[0];
        cells[c].innerHTML += newHTML;
    }
    
    // request the "my ebay" page
    GM_xmlhttpRequest(
    {
        method: 'GET',
        url: myEbayURL,
        headers:
        {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
            'Accept': 'application/atom+xml,application/xml,text/xml',
        },
        onload: function(responseDetails)
        {
            var myEbayContents = responseDetails.responseText;
            for (var i = 0; i < numCells; i++)
            {
                anchor = cells[i].getElementsByTagName('a')[0];
                id = anchor.href.match(/itemZ\d+/);
                
                if (id)
                {
                    // extract just the numerical part, which is the ID.
                    tmp = '' + id;
                    id = tmp.match(/\d+/);
          
                    // see if that ID exists on the My Ebay page - which means it's being watched already  
                    onWatchPage = (myEbayContents.match(id) == null) ? 0 : 1;
          
                    itemID = 'xyz_item_' + i;
                    statusID = 'xyz_status_' + i;
                    imageID = 'xyz_image_' + i;
                    anchorID = 'xyz_anchor_' + i;
                    title = onWatchPage ? 'this item is being watched in My Ebay' : 'add this item to your watch list';
                    newHTML  = '<a href="javascript:void(0)" id="' + anchorID + '"><img id="' + imageID + '" name="' + imageID + '" src="' + (onWatchPage ? watchedImg : unwatchedImg) + '" title="' + title + '" /><input id="' + statusID + '" name="' + statusID + '" type="hidden" value="' + onWatchPage + '" /><input id="' + itemID + '" name="' + itemID + '" type="hidden" value="' + id + '" /></a>';

                    // hide "loading..." element
                    tmp = cells[i].getElementsByTagName('input');
                    if (tmp)
                    {
                        tmp[0].style.display = 'none';
                    }

                    // add proper button
                    cells[i].innerHTML += newHTML;
                    el = document.getElementById(anchorID);
                    
                    // add event handler
                    el.addEventListener("click", function(e)
                    {
                        var i, anchor, item, status, button;
                        
                        anchor = e.target;
                        i = anchor.id.split('_')[2];
                        item = document.getElementById('xyz_item_' + i);
                        status = document.getElementById('xyz_status_' + i);
                        button = document.getElementById('xyz_image_' + i);
                        
                        if (status.value == '0')
                        {
                            requestURL = myAddURL + '' + item.value;
                            requestImg.src = requestURL;
                            button.src = watchedImg;
                            status.value = 1;
                            anchor.title = "this item is being watched in My Ebay";
                        }
                        else
                        {
                            if (confirm("Cannot remove items from watchlist directly\nGo to My Ebay?"))
                            {
                                window.location.href = myEbayURL;
                            }
                        }
                    }, false);
                }
            }
        }
    });
}