Commit 9da4d06a87a302f3f37ca95ba5b6e89cc66c0a82
1 parent
c66bc99f
Exists in
master
and in
4 other branches
per line comments display
Showing
7 changed files
with
78 additions
and
2 deletions
Show diff stats
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/schema.rb
@@ -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 => 20111220190817) do | @@ -56,6 +68,7 @@ ActiveRecord::Schema.define(:version => 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| |