TLMerge用

TLMerge
FirefoxのuserChrome.js用スクリプト。ツイートへのリンク(Favstar上のツイートでもOK)を右クリックすると、メニューに「TLMerge で表示」が追加される。
(追記)リンクだけでなくツイート自体からも、またユーザーページからも使えるようにした。下が古いの。

(function (){

function getLinkStatusId(){
    var re = /(twitter\.com|favstar\.fm\/users)\/(\w+)(\/status(es)?\/(\d+))?/;
    var url;
    if (gContextMenu.onLink){
        url = gContextMenu.getLinkURL();
        if (re.test(url)) return [RegExp.$2, RegExp.$5];
        return null;
    }
    if (!gContextMenu.onImage){
        url = content.location.href;
        if (re.test(url)) return [RegExp.$2, RegExp.$5];
        return null;
    }
    return null;
}

var parent = document.getElementById("contentAreaContextMenu");
var ref = document.getElementById("context-sep-open");
var menu = document.createElement("menuitem");

parent.insertBefore(menu, ref);
menu.setAttribute("label", "TLMerge \u3067\u8868\u793A");
menu.setAttribute("accesskey", "M");
menu.addEventListener("command", function (){
    var a = getLinkStatusId();
    if (!a) return;
    var url = "http://tlmerge.info/tlmerge.html#targets=";
    if (a[1]) url += a[1]; else url += a[0];
    gBrowser.addTab(url, {relatedToCurrent: true});
}, false);

parent.addEventListener("popupshowing", function (){
    menu.hidden = !getLinkStatusId();
}, false);

})();
(function (){

function getLinkStatusId(){
    if (!gContextMenu.onLink) return "";
    var url = gContextMenu.getLinkURL();
    if (!/status\/(\d+)$/.test(url)) return "";
    return RegExp.$1;
}

var parent = document.getElementById("contentAreaContextMenu");
var ref = document.getElementById("context-sep-open");
var menu = document.createElement("menuitem");

parent.insertBefore(menu, ref);
menu.setAttribute("label", "TLMerge \u3067\u8868\u793A");
menu.setAttribute("accesskey", "M");
menu.addEventListener("command", function (){
    gBrowser.addTab("http://tlmerge.info/tlmerge.html#targets=" + getLinkStatusId());
}, false);

parent.addEventListener("popupshowing", function (){
    menu.hidden = !getLinkStatusId();
}, false);

})();