RichComponentHelper#tab_links
trac が落ちていて忘れそうなのでこちらにメモ。
以前から地味に存在していたメソッドだけれども。Widget の周りに配置可能なタブボタン用のヘルパーで、クリックするとウィジェットの内容設定したURIからロードしたコンテンツに書き換えるやつ。
コントローラー内で @tab_links というインスタンス変数に[ラベル名, URI(, html_options)]の配列を入れておくと、自動的にタブが現れる。
def load_tab_links @tab_links = [] if login? @tab_links << [_("My subscriptions"), feed_subscriptions_path(:user_id => current_user.login_name)] @tab_links << [_("Recent Items"), recents_feed_subscriptions_path(:user_id => current_user.login_name)] @tab_links << [_("Add my new subscription"), new_feed_subscription_path(:user_id => current_user.login_name)] end end
現時点では、ウィジェットのboxの下側にタブボタンが配置されるけれども、将来的には上下左右のいずれかから選べるようにしたい、とか。
仕組みは簡単で、あらかじめtab用のplaceholderを用意しておき、@tab_links が設定されている場合にJavaScriptをはき出してボタンを生成させているだけ(なので上述の例の場合は、ログインしていないとタブは表示されない)。request.path とリンクするURIのパスが一致する場合は class="current" が自動付与されるようにもしています。
SpinelzのtabBox のlazyLoadでもいいんだけれど、too match だったので(画像とかをあわせるのが面倒だった、とも)さくっとのJavaScriptと少々のスタイルシートで実装。
という準備運動をしてから実装を再開しました。GW中にがんばりたい。