Commit 9da4d06a87a302f3f37ca95ba5b6e89cc66c0a82

Authored by Dmitriy Zaporozhets
1 parent c66bc99f

per line comments display

app/assets/stylesheets/projects.css.scss
@@ -693,3 +693,31 @@ a.project-update.titled { @@ -693,3 +693,31 @@ a.project-update.titled {
693 top: 0; 693 top: 0;
694 } 694 }
695 } 695 }
  696 +
  697 +tr.line_notes_row {
  698 + &:hover {
  699 + background:none;
  700 + }
  701 + td {
  702 + margin:0px;
  703 + padding:0px;
  704 + border-bottom:1px solid #DEE2E3;
  705 +
  706 +
  707 + ul {
  708 + display:block;
  709 + list-style:none;
  710 + margin:0px;
  711 + padding:0px;
  712 +
  713 + li {
  714 + border-top:1px solid #DEE2E3;
  715 + padding:10px;
  716 +
  717 + .delete-note {
  718 + display:none;
  719 + }
  720 + }
  721 + }
  722 + }
  723 +}
app/controllers/commits_controller.rb
@@ -27,6 +27,8 @@ class CommitsController < ApplicationController @@ -27,6 +27,8 @@ class CommitsController < ApplicationController
27 @notes = project.commit_notes(@commit).fresh.limit(20) 27 @notes = project.commit_notes(@commit).fresh.limit(20)
28 @note = @project.build_commit_note(@commit) 28 @note = @project.build_commit_note(@commit)
29 29
  30 + @line_notes = project.commit_line_notes(@commit)
  31 +
30 respond_to do |format| 32 respond_to do |format|
31 format.html 33 format.html
32 format.js { respond_with_notes } 34 format.js { respond_with_notes }
app/models/note.rb
@@ -53,6 +53,23 @@ class Note < ActiveRecord::Base @@ -53,6 +53,23 @@ class Note < ActiveRecord::Base
53 noteable 53 noteable
54 end 54 end
55 end 55 end
  56 +
  57 + def line_file_id
  58 + @line_file_id ||= line_code.split("_")[1].to_i if line_code
  59 + end
  60 +
  61 + def line_type_id
  62 + @line_type_id ||= line_code.split("_").first if line_code
  63 + end
  64 +
  65 + def line_number
  66 + @line_number ||= line_code.split("_").last.to_i if line_code
  67 + end
  68 +
  69 + def for_line?(file_id, old_line, new_line)
  70 + line_file_id == file_id &&
  71 + ((line_type_id == "NEW" && line_number == new_line) || (line_type_id == "OLD" && line_number == old_line ))
  72 + end
56 end 73 end
57 # == Schema Information 74 # == Schema Information
58 # 75 #
app/models/project.rb
@@ -166,7 +166,11 @@ class Project < ActiveRecord::Base @@ -166,7 +166,11 @@ class Project < ActiveRecord::Base
166 end 166 end
167 167
168 def commit_notes(commit) 168 def commit_notes(commit)
169 - notes.where(:noteable_id => commit.id, :noteable_type => "Commit") 169 + notes.where(:noteable_id => commit.id, :noteable_type => "Commit", :line_code => nil)
  170 + end
  171 +
  172 + def commit_line_notes(commit)
  173 + notes.where(:noteable_id => commit.id, :noteable_type => "Commit").where("line_code not null")
170 end 174 end
171 175
172 def has_commits? 176 def has_commits?
app/views/commits/_text_file.html.haml
@@ -19,6 +19,13 @@ @@ -19,6 +19,13 @@
19 %td.new_line 19 %td.new_line
20 = link_to raw(diff_line_class(line) == "old" ? " " : line_new) , "#NEW#{index}-#{line_new}", :id => "NEW#{index}-#{line_new}" 20 = link_to raw(diff_line_class(line) == "old" ? " " : line_new) , "#NEW#{index}-#{line_new}", :id => "NEW#{index}-#{line_new}"
21 %td.line_content{:class => diff_line_class(full_line)}= raw "#{full_line}  " 21 %td.line_content{:class => diff_line_class(full_line)}= raw "#{full_line}  "
  22 + - comments = @line_notes.select { |n| n.for_line?(index, line_old, line_new) }.sort_by(&:created_at).reverse
  23 + - unless comments.empty?
  24 + %tr.line_notes_row
  25 + %td{:colspan => 3}
  26 + %ul
  27 + - comments.each do |note|
  28 + = render :partial => "notes/show", :locals => {:note => note}
22 - if line[0] == "+" 29 - if line[0] == "+"
23 - line_new += 1 30 - line_new += 1
24 - elsif line[0] == "-" 31 - elsif line[0] == "-"
db/migrate/20120110180749_add_line_number_to_note.rb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +class AddLineNumberToNote < ActiveRecord::Migration
  2 + def change
  3 + add_column :notes, :line_code, :string, :null => true
  4 + end
  5 +end
@@ -11,7 +11,19 @@ @@ -11,7 +11,19 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20111220190817) do 14 +ActiveRecord::Schema.define(:version => 20120110180749) do
  15 +
  16 + create_table "features", :force => true do |t|
  17 + t.string "name"
  18 + t.string "branch_name"
  19 + t.integer "assignee_id"
  20 + t.integer "author_id"
  21 + t.integer "project_id"
  22 + t.datetime "created_at"
  23 + t.datetime "updated_at"
  24 + t.string "version"
  25 + t.integer "status", :default => 0, :null => false
  26 + end
15 27
16 create_table "issues", :force => true do |t| 28 create_table "issues", :force => true do |t|
17 t.string "title" 29 t.string "title"
@@ -56,6 +68,7 @@ ActiveRecord::Schema.define(:version =&gt; 20111220190817) do @@ -56,6 +68,7 @@ ActiveRecord::Schema.define(:version =&gt; 20111220190817) do
56 t.datetime "updated_at" 68 t.datetime "updated_at"
57 t.integer "project_id" 69 t.integer "project_id"
58 t.string "attachment" 70 t.string "attachment"
  71 + t.string "line_code"
59 end 72 end
60 73
61 create_table "projects", :force => true do |t| 74 create_table "projects", :force => true do |t|