Redmine”版本庫“頁面顯示評審連結

來源:互聯網
上載者:User

    安裝Code Review外掛程式後,在Redmine的“版本庫”頁面中,已經評審過的代碼會有一個標記,顯示有幾條評審。但是這隻能知道評審的數量,而不能快速跳轉的已經評審過的頁面。因此,我需要更改Code Review外掛程式的原始碼,在頁面上顯示這個連結。沒有連結的“版本庫”頁面如所示:

    很快就發現更改“版本庫”頁面的代碼位於/vendor/plugins/redmine_code_review/apps/views/_update_revisions.html.erb。其中,顯示已評審資訊的代碼如下:

<script type="text/javascript"><% @changesets.each do |changeset| %>  <%  if changeset.review_count > 0    progress = '<span style="white-space: nowrap">' + progress_bar([changeset.closed_review_pourcent, changeset.completed_review_pourcent],      :width => '60px',      :legend => "#{sprintf("%0.1f", changeset.completed_review_pourcent)}%") + '</span>' +  '<p class="progress-info">' + "#{changeset.closed_review_count} #{l(:label_closed_issues)}" +      "   #{changeset.open_review_count} #{l(:label_open_issues)}" + '</p>'  elsif changeset.assignment_count > 0    if (changeset.open_assignment_count > 0)      progress = '<p class="progress-info">' + l(:code_review_assigned) + '</p>'    else      progress = '<p class="progress-info">' + l(:code_review_reviewed) + '</p>'    end      else    progress = '<p class="progress-info">' + l(:lable_no_code_reviews) + '</p>'  end%>    var count = new ReviewCount(<%=  changeset.review_count %>, <%=  changeset.open_review_count %>, '<%=  progress %>');    review_counts['revision_<%=changeset.identifier %>'] = count;<% end %>

    從代碼中可以看出,當 changeset.review_count > 0 時,即有這段代碼有評審時,需要顯示下面的資訊,而 changeset.review_count 也就是評審的數量。如果沒有評審,就顯示 :label_no_code_reviews。對應代碼為:

 else    progress = '<p class="progress-info">' + l(:lable_no_code_reviews) + '</p>' end

    我們需要關注的有評審時的情況,也就是:

progress = '<span style="white-space: nowrap">' + progress_bar([changeset.closed_review_pourcent, changeset.completed_review_pourcent],      :width => '60px',      :legend => "#{sprintf("%0.1f", changeset.completed_review_pourcent)}%") + '</span>' +  '<p class="progress-info">' + "#{changeset.closed_review_count} #{l(:label_closed_issues)}" +      "   #{changeset.open_review_count} #{l(:label_open_issues)}" + '</p>'

    progress是一個string類型,記錄了需要顯示的html代碼,用於最終顯示到頁面上。我們這裡要把它改成一個連結,通過查看其它地方的代碼,可以發現產生連結的Ruby代碼是這樣的:

link_to(codepath, {:controller => 'code_review', :action => 'show', :id => @project, :review_id => review.id}, :title => review.path)

    其中 codepath 是顯示出來的連結地址,為了照顧頁面的長度,把過長的連結欄位進行了縮短,review.id 和 review.path 是評審的編號和對應代碼路徑,經過轉化之後,這段代碼會產生一個HTML形式的連結,當點這個連結的時候,會調用 code_review 的 show 方法,跳轉到對應的路徑,以下就一段路徑的例子:

<a href="/code_review/show/gg?review_id=12" title="/trunk/tmstable/tmstable-console/src/main/webapp/consoes/screen/process.vm">/trunk/tmstable...console/templates/screen/process.vm</a>

    顯示一條連結的路徑很容易,但是要顯示多條路徑就比較麻煩了,涉及到資訊的儲存和table顯示。試了好多種方法,最後,終於用如下的代碼搞定:

<script type="text/javascript"><% @changesets.each do |changeset| %><%if changeset.review_count > 0codepath_show = Array.newreviewpath_show = Array.newreviewid_show = Array.newfor review in @reviewsif (changeset.id == review.changeset.id)puts "review id:"+review.changeset.id.to_s    codepath = review.path                if (review.path.length > 55)                    codepath = review.path[0, 15] + '...' + review.path[review.path.length - 35, 35]endcodepath_show << codepathreviewpath_show << review.pathreviewid_show << review.id            endendi = 0progress = Array.newprogress<<'<table>'while i<changeset.review_count doprogress<<'<tr><td>'progress<<link_to(codepath_show[i], {:controller => 'code_review', :action => 'show', :id => @project, :review_id => reviewid_show[i]}, :title => reviewpath_show[i])progress<<'</td></tr>'i += 1endprogress<<'</table>'  elsif changeset.assignment_count > 0    if (changeset.open_assignment_count > 0)      progress = '<p class="progress-info">' + l(:code_review_assigned) + '</p>'    else      progress = '<p class="progress-info">' + l(:code_review_reviewed) + '</p>'    end      else    progress = '<p class="progress-info">' + l(:lable_no_code_reviews) + '</p>'  end%>    var count = new ReviewCount(<%=  changeset.review_count %>, <%=  changeset.open_review_count %>, '<%=  progress %>');    review_counts['revision_<%=changeset.identifier %>'] = count;<% end %>

    最後顯示效果如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.