redmine 読み (4)
news および activities な、と書いたんですがどうしたものやら。
とりあえずトップページから遷移可能な (リンクがある) のは以下。
- /
- /my/page
- /projects
- /guide
- /users/:id
- /my/account
app/controllers 見てみるに my ってコントローラがありますね。もっかい rake routes 見てみようかな。
とりあえず
project な controller が主軸なのかどうか。http://demo.redmine.org/ で云々しつつ中身を確認してみます。
とりあえず、ってことでプロジェクト作ってみたんですがタブがありますね。これは /projects/:id なソレになるのかな。ええと respond_to って何でしたっけ。
によると
respond_to do |format| format.html format.api end
という記述は一つのアクションから複数のフォーマットで戻す、とのこと。むむ。つうか api て何ですか。デフォじゃない MIME type は environment.rb で云々という記述もありますね。
で、api/views/projects の中を見てみたら
- show.api.rsb
- show.html.erb
というファイルの存在が確認できました。rsb て何でしょ。とは言えとりあえずスルーで show.html.erb 見てみます。
ざっくりなカンジですが、デフォルトで overview なタブが表示される形にされているのかどうか。app/views/projects/show.html.erb では以下な記述があります。
<h2><%=l(:label_overview)%></h2>
む、一番上にある contextual という class は右上の New Subproject とか close とかってナニに該当するのかな。どうも close 済みなら reopen て出てくるらしい。あと権限の関係も関連してるのが分かります。これは Subproject の作成も同様なのか。
<div class="contextual"> <% if User.current.allowed_to?(:add_subprojects, @project) %> <%= link_to l(:label_subproject_new), new_project_path(:parent_id => @project), :class => 'icon icon-add' %> <% end %> <% if User.current.allowed_to?(:close_project, @project) %> <% if @project.active? %> <%= link_to l(:button_close), close_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock' %> <% else %> <%= link_to l(:button_reopen), reopen_project_path(@project), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-unlock' %> <% end %> <% end %> </div>
試しに自分に何の権限も無いプロジェクトを開いてみたら contextual な部品は出力されてませんね。当り前ですが。
タブの制御
おそらくは js なのだろうな、と思ってはいるのですが以下で云々らしい。
app/views/layouts/base.html.erb の一部
<% if display_main_menu?(@project) %> <div id="main-menu"> <%= render_main_menu(@project) %> </div> <% end %>
定義を確認してみます。lib/redmine/meu_manager.rb らしい。
$ find|xargs grep render_main_menu|grep def ./lib/redmine/menu_manager.rb: def render_main_menu(project)
定義が以下。
# Renders the application main menu def render_main_menu(project) render_menu((project && !project.new_record?) ? :project_menu : :application_menu, project) end
render_menu という手続きはちょい下で定義されてて以下。
def render_menu(menu, project=nil) links = [] menu_items_for(menu, project) do |node| links << render_menu_node(node, project) end links.empty? ? nil : content_tag('ul', links.join("\n").html_safe) end
吐きだされてる html ソース見てみると確かに ul なリストとして出力されていますね。jquery でタブを云々、ってあたりはとりあえずスルーしていいかなぁ。
ということで
今日はこれでおしまい。