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 でタブを云々、ってあたりはとりあえずスルーしていいかなぁ。

ということで

今日はこれでおしまい。