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ですよ。