foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Google Bookmarks のエントリ追加時にラベルをクリックで入力する

環境

問題

Google Bookmarks のエントリ追加時に、既存のラベルをキーボードから入力するのが面倒。

解決方法

下記の Firefox Greasemonkey スクリプトを登録しておくと、エントリ追加時に既存ラベルのリンクが表示される。
リンクをクリックするとラベルが入力欄へ追加される。

// ==UserScript==
// @name           Google Bookmarks Add Helper
// @namespace      http://foldrr/google_bookmarks_label_helper
// @include        http://www.google.com/bookmarks/mark?op=add*
// ==/UserScript==

(function(){
    function xpath(query) {
        var results = [];
        var nodes = document.evaluate(query, document, null,
            XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
        for(var i = 0, n = nodes.snapshotLength; i < n; i++){
            results.push(nodes.snapshotItem(i));
        }
        return results;
    }
    
    var nodes = xpath('//tr[@id and @class]//tr/td[1]//a');
    var labels = [];
    for(var i = 0, n = nodes.length - 1; i < n; i++){
        labels.push(nodes[i]);
    }

    var targets = xpath('//input[@id="bkmk_label_1"]');
    for(var i = 0, n = labels.length - 1; i < n; i++){
        for(var ti = 0, tn = targets.length; ti < tn; ti++){
            var t = targets[ti];
            
            var link = document.createElement("a");
            link.innerHTML = labels[i].innerHTML;
            link.setAttribute("href", "#");
            link.addEventListener('click',
                function(e){
                    if(t.value == ""){
                        t.value = this.innerHTML;
                    }else{
                        t.value += ", " + this.innerHTML;
                    }
                },
                true
            );
            targets[ti].parentNode.appendChild(link);
            targets[ti].parentNode.appendChild(document.createTextNode(" "));
        }
    }
})();