twicliにプラグイン機能を追加

WebブラウザベースのTwitterクライアントtwicli
twicliをユーザの好みに合わせて機能拡張できるプラグイン機能を追加しました。
といってもまだ追加できるものは余りないのですが、今後に向けて。

仕組み

プラグインJavaScriptで記述し、どこかのWebサーバ上(localhostでもOK)に置いておき、twicli起動時にscriptタグで読み込みます。
その際、プラグインは自分が提供するメソッド(のハッシュ)をtwicli側に登録しておきます。
twicli側には

callPlugin("〜", arg1, arg2, ...)

という文が各所に埋め込んであります。ここでプラグインの"〜"という名前のメソッドが呼び出されます。呼び出し方はこんな感じ。

function callPlugins(name) {
    var args = [].slice.apply(arguments);  // 引数をArrayに変換
    args.shift();                          // 第1引数(name: メソッド名)を除去
    for (var i in plugins)                 // プラグインの配列 plugins の各要素について
    if (typeof plugins[i][name] == "function")       // 指定メソッドがあれば
        plugins[i][name].apply(plugins[i], args);     // 引数を渡して呼び出す
}

プラグインの追加例

1. プラグインをどこかのWebサーバに用意する

例えばMacユーザ必須の通知ソフトGrowlに、新規発言を通知するプラグインの例。
なお、このスクリプトは次のエントリのGrowl用Web APIが入っていることが前提です。gr_cgi部分は自分のGrowl用Web APIのURLに変更してください。

var gr_cgi = "http://localhost/~YOURNAME/growl.cgi";
registerPlugin({
	update_cnt: 0,
	update: function() { this.update_cnt++; },
	gotNewMessage: function(tw) {
		if (this.update_cnt <= 1) return; //初回は通知しない
		var msg = tw.text + " (" + dateFmt(new Date(tw.created_at)) + ")";
		xds.load(gr_cgi+"?title=Twitter+@"+tw.user.screen_name+"&msg="+msg+"&icon="+tw.user.profile_image_url, function(){});
	},
});

xds.loadについてはクロスドメインJavaScript呼び出しをクラス化, クロージャにも対応 - Okiraku Programmingを参照。
registerPlugin に関数オブジェクトのハッシュを渡します。ハッシュのキーは今のところ、

キー(メソッド名) 内容 引数 備考
update TLの更新前に呼び出し なし
gotNewMessage 新しい発言を1つ受信 発言内容のハッシュ(Twitter APIから渡されたもの)
newMessageElement 発言をHTML上に追加 発言のDOM要素, 発言内容のハッシュ プラグインから表示内容を変更可能

のみです。今後増やす予定。
※こんなのが欲しい!というアイデアも募集中です。勝手にCodeReposにコミットしてもOKですよ。

2. プラグインのURLをtwicliに登録

「+」というタブにある Plugins の欄に改行区切りでプラグインのURLを記述し、Registerをクリック。内容はCookieに記録されます。

3. twicliをリロード

リロードすると、twicliプラグインが組み込まれ、発言があるたびにGrowl通知されるように!