いまのhelloworldプラグインは、Webブラウザのアドレス欄に /helloworld を入力することで動作させることができた。このページへのリンクを追加してみよう。
trac画面の右上の metanav や mainnav という領域にアイテムを追加するには、INavigationContributor という拡張ポイントを実装すればいい。やってみる:
HelloWorldPluginクラスの定義の冒頭にある implements に INavigationContributor を追加する。こんな感じで:
implements(IRequestHandler, INavigationContributor)import文は例によって Ctrl-1 で追加してやる。
いま追加した INavigationContributor をクリックすると、class INavigationContributor(Interface): の定義にジャンプできる。残念ながら implements の仕掛けは trac独自なので PyDEVでは認識できず*1、拡張するためのウィザードなどの機能がないので、そのクラスの def 文をコピペで持ってくる。
このクラスで実装すべきは以下の二つ:
*1 これはこれでEclipseプラグインのネタになりそう
こんな感じで:
# INavigationContributor methods def get_active_navigation_item(self, req): return 'helloworld' def get_navigation_items(self, req): yield ('metanav', 'helloworld', tag.a('Hello world', href= req.href.helloworld()))例によって、赤い線が出たら ctrl-1 で import を追加する。 実装できたら、tracを再起動すると、ナビゲーションバーに helloworld が追加されている。 metanav を mainnav に変更すると、表示される場所が変わるよ。
ほかにどんな拡張ができるかをざっくりつかむために、39コある拡張ポイントを簡単に見てみる気になる拡張ポイントがあったら、HelloWorldPlugin にちょろっと実装して動作を確認してみるといい。あるいは、DeveloperPlugin を利用して、実装しているクラスを探してソースを読んでみるとか。