eBay Forum Signature Switch

By thorbenhauer Last update Feb 8, 2008 — Installed 507 times.
// eBay Forum Signature Switch user script
// version 0.2.3
// 2008-02-08
// Copyright 2006-2008, thorbenhauer
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// -----------------------------------------------------------------------------
//
// Icon: Humility Icon Set
// by Andrew Fitzsimon and Chad 'gonZo' Rodrigue
// http://art.gnome.org/themes/icon/1136
// Released under the GPL license
//
// -----------------------------------------------------------------------------
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
// -----------------------------------------------------------------------------
//
// ==UserScript==
// @name          eBay Forum Signature Switch
// @namespace     http://userscripts.org/users/9022
// @description   http://userscripts.org/scripts/show/6280
// @include       http://forums*.ebay.tld/*thread.jspa?*
// ==/UserScript==
//
// -----------------------------------------------------------------------------
(function () {

const ONPNG = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAWBAMAAAAyb6E1AAAAElBMVEXU0Mj39/fu7u6AgIBAQEAA' +
'AAAUIDs2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAR0lEQVQImWMQhAERBgEGKDBhEFCCAlKZoaFK' +
'qkGqICaQCoIxlZSCVEPBzFAQUxUhqhoKV6sUCjdBSZVki7ExhY2hwITBBQ4AD7Mg5fEmz48AAAAA' +
'SUVORK5CYII=';

const OFFPNG = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAIAAABPIytRAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA' +
'kElEQVQ4jdWUoRLDIBBEl8x9wcqKyH4Hln+tiOQ3KivyC2exFclcCSHpgGMVC/fYg2FwKSV0KYQg' +
'ANbPu5V8LRGAbOYxPxvxCGBqzcw1KCy5IQlAVXNrM4U9wCStyJZtULWVtlXVQu7158wk840KK1Xg' +
'qs/CVi7sXHSlH3wG7mMx7AsbFBbsf0rsgJ33vjv5C+MsNsw0IKCAAAAAAElFTkSuQmCC';

const EDIPNG =  'data:image/png;base64,' +
'R0lGODdhFAAWAOeZAAAAAAEBAQICAgcHBwkJCQoKCg8PDxERDxMTExQUFBcXFxoXFBgYGBoaGhsb' +
'Gx0dHR4eHh8fHyAgICIiIiMiISMjIyUlJScnJygoKDomBCkpKSoqKisrKywsLDIyMjMzMzQ0NDU1' +
'NVE1Bjo5Njk5OT09PVk6B049G0BAQEFBQUJCQk9BK11DG0dHR1tMLWpKFk5OTmBQKlFRUVhRRlJS' +
'UlZWVldXV3lWCVlZWWJZR3pYC3tZDHtZDXxaD3dbJHtZJXxcHF9fX3lcLYFgGGNjY2RkZHlkO4Zn' +
'IWlpaX9qQYprKG1tbXZuX3BwcI1vLpBuLI5wMZR1NHh4eJZ4OpZ6PZd6PoV9bX9+fJF9XoCAgJuC' +
'SJqBV52DSoeHh4iIiKSEUpyIaJGKfY2NjZePfqiRX5uSf6iQaKqTYpWVlZeXl5iYmKWXga2Yaq6Z' +
'a5ubm7Ccbq6bfrWedranibS0tL22qLe3t8W2mb23rcC4pb29vb6+vsDAwNDAp9HHs8vLy87Lxs7O' +
'ztHPy9TQyNjRxdbW1tra2uDZ0Nvb29zc3OLe1t/f3+Dg4OHh4ePi4eTk5OXl5ebm5ufn5+np6erq' +
'6uvr6+zs7O3t7e7u7vf39///////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'/////////////////////////////////////////////////////ywAAAAAFAAWAAAI/gAxCRxI' +
'sCBBFJgEKVzIsKHCLAgFXZpIsaLFSxATXtxIMaNEi4hkILE00U6VKBgjWiQ0YY8YFZfOaCHzJKVG' +
'ioc+zImUaU8SLW169LH58dIhD17S6Ckkh8ubIVMmepyIaEOKIg+a5KDy5siORFJVIsLwAIKECRSg' +
'vFFyw0iNsAkdWcAggUEDByfYONHhIwgRHERlVAixIUICJnhi8ACCoUUREIo8TrJRYsKFEYEINXKx' +
'QAEHDR8WTb3EqMYAOoQelTlgAAEKNI+IThQTwUrqMQQGFKgDiRIl2Zf4fFlxJwwCAQACdGBEo4js' +
'OGa2CMkwowUJDDAAufFD0qOhHy9MMYhgcUXKki6SKFWy1D3iIDhgsKz5U0gNmjzpScItytFixiwA' +
'BijggAGiYOCBCCaoYEAAOw==';

const LOAPNG =  'data:image/png;base64,' +
'R0lGODdhFAAWAMIFANTQyPf39+7u7oCAgEBAQP///////////ywAAAAAFAAWAAADWhi63EwByEmr' +
'HBCIzbsXWPSNXKiRo9kRbMt2KkecG0DA2SrV9BbLhIHwhhN9Xp9fbXBJ5mCUgUc5q0yfm6BwS/Rh' +
'BS5XsYcqfcteI9qsXoPO6NB2Tq+H7/hWAgA7';

const ERRPNG =  'data:image/png;base64,' +
'R0lGODdhFAAWAOeHACsICEwBAToLCzkODjwODmcAAGgAAFALCx0kJDMbG3YAAHEDAyYqKiQrK5EA' +
'AFkbGy4uLpoAAJwAADgrK50AAIANDYENDYINDYMNDXgSEpgFBaYAAD4vL6wAAK4AAK8AAFEpKVIp' +
'KbABAVMpKacFBbMAALQAALMBAaoFBbcAALkAALoAALgBAbYCArUDA1wqKj04OLEJCboHB6sPD64P' +
'D6sREX0lJbwKCkBAQLYTE6wYGGk1Na0YGLQZGZ4jI2c7O09GRr8ZGaArK7ohIaMrK74jI7MpKbom' +
'JrYoKIg8PLsoKMInJ7krK7ctLaE3N74rK8QwMMIxMbk1Nbw1NcgyMl1lZXdaWsY5OcQ8PLJERF5q' +
'asU/P29kZMZFRXZxccxOTnt1ddZQUMxVVc9UVH9/f8hhYYCAgMthYctkZNBiYoGEhMxlZdJjY9Bk' +
'ZMloaN1jY32Ojs5ubtNubtdvb9twcM52dpuOjoKZmdN8fJ6enrSzs7K0tLfAwMDHx9TQyNfX1+3t' +
'7e7u7u3z8+/4+Pf39/T///r/////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'////////////////////////////////////////////////////////////////////////////' +
'/////////////////////////////////////////////////////ywAAAAAFAAWAAAI/gAJCRxI' +
'sCBBHIT8KFzIsKFCMwj9BJpIsaLFQBATVvxjx8qPH1bs/KmYUWIgQHlARFgSJsySCCDyAJpY8iSX' +
'CjLk4KlTB48cGRW4zKyZx0ILOmvalDnDBs2cExbyYIz4J0SKKzsQOBnz5QWELFhMhPhT0o4EEUng' +
'HILh40GfQwzEdJBgp6SVEjS2JCh0aMKeQ2psdJlRwkrJHyp4TCkCQNChQ14yPJGiQ8WPwypqIAkS' +
'QM9jDhqGGKlh2a4JFDkO8DkEZtAhIA56kDBhOKIdCh4W3DlExoAAQ4caxOhAoS7VESs+ENBSoMOG' +
'AVUUeEgxgmzEQHkwsIAiREkTJkeIQ0RxgUFqTUBcLtxIE8eNmzhpblwQOlXjyZQSqLx5Q0VCzJn1' +
'mTQRRx6BJBJJ112kIE0ImeHggxBG+CAOFFZo4YUYBgQAOw==';

var anchor = document.evaluate("//td[@class='ebayWelcome']//b", document, null,
    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
if (anchor == null) {
    return;
}
var userID = anchor.innerHTML;
var baseURL = document.location.href.split("thread.jspa?")[0];
var spellcheck = document.evaluate("//a[@name='spellcheck']/ancestor::td[1]",
    document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null).snapshotItem(0);
if (spellcheck == null) {
    return;
}
var node = spellcheck.childNodes[0];
if (node.nodeType == 3) {
    spellcheck.removeChild(node);
}
var tarea = document.getElementById("body01");
var tr = document.evaluate("//table[@class='jive-font-buttons']//tr",
    document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null).snapshotItem(0);
var status = getStatus(baseURL);
var elem = document.createElement('td');
elem.id = "status";
if (status != null && status == "on") {
    elem.appendChild(createImg("on"));
} else {
    elem.appendChild(createImg("off"));
}
tr.appendChild(elem);
elem = document.createElement('td');
elem.id = "edit";
elem.appendChild(createImg("edit"));
tr.appendChild(elem);
var text, backup;
var edit = false;
var errorMsg = null;

function createImg(type) {
    var img =  document.createElement("img");
    switch (type) {
        case "on":
            img.src = ONPNG;
            img.title = "Signature is active";
            img.alt = "Signature is active";
            img.width = "20";
            img.height = "22";
            img.border = "0";
            img.style.cursor = "pointer";
            img.addEventListener('click',
                function(event) {
                    hideSig(event);
                }, true
            );
            return img;
        case "off":
            img.src = OFFPNG;
            img.title = "Signature is hidden";
            img.alt = "Signature is hidden";
            img.width = "20";
            img.height = "22";
            img.border = "0";
            img.style.cursor = "pointer";
            img.addEventListener('click',
                function(event) {
                    showSig(event);
                }, true
            );
            return img;
        case "edit":
            img.src = EDIPNG;
            img.title = "Edit signature";
            img.alt = "Edit signature";
            img.width = "20";
            img.height = "22";
            img.border = "0";
            img.style.cursor = "pointer";
            img.addEventListener('click',
                function(event) {
                    editSig(event);
                }, true
            );
            return img;
        case "load":
            img.src = LOAPNG;
            img.title = "Sync in Progress";
            img.alt = "Sync in Progress";
            img.width = "20";
            img.height = "22";
            img.border = "0";
            return img;
        case "fail":
            img.src = ERRPNG;
            img.title = "Error";
            img.alt = "Error";
            img.width = "20";
            img.height = "22";
            img.border = "0";
            img.style.cursor = "pointer";
            img.addEventListener('click',
                function(event) {
                    error(event);
                }, true
            );
            return img;
        default:
            return null;
    }
}

function hideSig(event) {
    var td = document.getElementById("status");
    td.replaceChild(createImg("load"), td.firstChild);
    syncSig("");
    setStatus(baseURL, "off");
}

function showSig(event) {
    var sig = getSig(baseURL);
    if (sig != null) {
        var td = document.getElementById("status");
        td.replaceChild(createImg("load"), td.firstChild);
        syncSig(sig);
        setStatus(baseURL, "on");
    }
}

function editSig(event) {
    if (edit) {
        if (tarea.value.length > 0) {
            if (backup != tarea.value) {
                setSig(baseURL, tarea.value);
                var status = getStatus(baseURL);
                if (status == "on") {
                    showSig(null);
                }
            }
        } else {
            var status = getStatus(baseURL);
            if (status != null && status == "on") {
                hideSig(null);
            }
            removeData(baseURL);           
        }
        tarea.style.background = "";
        tarea.value = text;
        edit = false;
    } else {
        text = tarea.value;
        tarea.style.background = "lightsteelblue";
        backup = getSig(baseURL);
        tarea.value = backup;
        edit = true;
    }
}

function getData(baseURL) {
    var data = GM_getValue("data");
    if (data != undefined && data.length > 0) {
        var strings = data.split("||");
        var temp;
        for (var i = 0; i < strings.length; i++) {
            temp = strings[i].split("|");
            if (temp[0] == baseURL) {
                temp[2] = temp[2].replace(/\/&\//g, "|");
                return temp;
            }
        }
        return null;
    } else {
        return null;
    }
}

function getStatus(baseURL) {
    var data = getData(baseURL);
    if (data != null) {
        return data[1];
    } else {
        return null;
    }
}

function getSig(baseURL) {
    var data = getData(baseURL);
    if (data != null) {
        return data[2];
    } else {
        return null;
    }
}

function setData(baseURL, newStatus, newSig) {
    if (baseURL != undefined && baseURL.length > 0) {
        var data = GM_getValue("data");
        if (data != undefined && data.length > 0) {
            var strings = data.split("||");
            var temp;
            for (var i = 0; i < strings.length; i++) {
                temp = strings[i].split("|");
                if (temp[0] == baseURL) {
                    if (newStatus != undefined && newStatus.length > 0 &&
                        newSig == undefined) {
                        temp[1] = newStatus;
                        strings[i] = temp.join("|");
                        data = strings.join("||");
                        GM_setValue("data", data);
                        return;
                    }
                    if (newStatus == undefined && newSig != undefined &&
                        newSig.length > 0) {
                        newSig = newSig.replace(/\|/g, "/&/");
                        temp[2] = newSig;
                        strings[i] = temp.join("|");
                        data = strings.join("||");
                        GM_setValue("data", data);
                        return;
                    }
                    return;
                }
            }
            if (newSig != undefined && newSig.length > 0) {
                GM_setValue("data", data + "||" + baseURL + "|off|" +
                    newSig.replace(/\|/g, "/&/"));
            }
        } else {
            if (newSig != undefined && newSig.length > 0) {
                GM_setValue("data", baseURL + "|off|" +
                    newSig.replace(/\|/g, "/&/"));
            }
        }
    }
}

function setStatus(baseURL, newStatus) {
    setData(baseURL, newStatus, null);
}

function setSig(baseURL, newSig) {
    setData(baseURL, null, newSig);
}

function removeData(baseURL) {
    if (baseURL != undefined && baseURL.length > 0) {
        var data = GM_getValue("data");
        if (data != undefined && data.length > 0) {
            var strings = data.split("||");
            var temp;
            for (var i = 0; i < strings.length; i++) {
                temp = strings[i].split("|");
                if (temp[0] == baseURL) {
                    strings.splice(i, 1);
                    data = strings.join("||");
                    GM_setValue("data", data);
                    return;
                }
            }
        }
    }
}

function syncSig(sig) {
    GM_xmlhttpRequest({
        method: 'Post',
        url: baseURL + 'usersettings.jspa',
        headers:{
            "Content-Type": 'application/x-www-form-urlencoded'
        },
        data: "name=" + userID + "&signature=" + sig,
        onload: function(responseDetails) {
            if (responseDetails.status == "200") {
                aftermath(null, sig);
            } else {
                aftermath(new Array(responseDetails.statusText,
                    responseDetails.status, responseDetails.responseHeaders),
                    sig);
            }
        }
    });
}

function error(event) {
    alert(errorMsg[0] + "\n" + errorMsg[1] + "\n" + errorMsg[2]);
    var td = document.getElementById("status");
    var status = getStatus(baseURL);
    if (status != null && status == "on") {
        td.replaceChild(createImg("on"), td.firstChild);
    } else {
        td.replaceChild(createImg("off"), td.firstChild);
    }
}

function aftermath(result, sig) {
    var td = document.getElementById("status");
    if (result != null) {
        errorMsg = result;
        td.replaceChild(createImg("fail"), td.firstChild);
        if (sig.length > 0) {
            setStatus(baseURL, "off");
        } else {
            setStatus(baseURL, "on");
        }
        return;
    }
    if (sig.length > 0) {
        td.replaceChild(createImg("on"), td.firstChild);
    } else {
        td.replaceChild(createImg("off"), td.firstChild);
    }
}

})();