diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss index 0b43f557..bb942824 100644 --- a/app/assets/stylesheets/projects.css.scss +++ b/app/assets/stylesheets/projects.css.scss @@ -693,3 +693,31 @@ a.project-update.titled { top: 0; } } + +tr.line_notes_row { + &:hover { + background:none; + } + td { + margin:0px; + padding:0px; + border-bottom:1px solid #DEE2E3; + + + ul { + display:block; + list-style:none; + margin:0px; + padding:0px; + + li { + border-top:1px solid #DEE2E3; + padding:10px; + + .delete-note { + display:none; + } + } + } + } +} diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb index f6a19cc7..a938461f 100644 --- a/app/controllers/commits_controller.rb +++ b/app/controllers/commits_controller.rb @@ -27,6 +27,8 @@ class CommitsController < ApplicationController @notes = project.commit_notes(@commit).fresh.limit(20) @note = @project.build_commit_note(@commit) + @line_notes = project.commit_line_notes(@commit) + respond_to do |format| format.html format.js { respond_with_notes } diff --git a/app/models/note.rb b/app/models/note.rb index e95df127..48cc2d80 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -53,6 +53,23 @@ class Note < ActiveRecord::Base noteable end end + + def line_file_id + @line_file_id ||= line_code.split("_")[1].to_i if line_code + end + + def line_type_id + @line_type_id ||= line_code.split("_").first if line_code + end + + def line_number + @line_number ||= line_code.split("_").last.to_i if line_code + end + + def for_line?(file_id, old_line, new_line) + line_file_id == file_id && + ((line_type_id == "NEW" && line_number == new_line) || (line_type_id == "OLD" && line_number == old_line )) + end end # == Schema Information # diff --git a/app/models/project.rb b/app/models/project.rb index 93637822..420b8d1b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -166,7 +166,11 @@ class Project < ActiveRecord::Base end def commit_notes(commit) - notes.where(:noteable_id => commit.id, :noteable_type => "Commit") + notes.where(:noteable_id => commit.id, :noteable_type => "Commit", :line_code => nil) + end + + def commit_line_notes(commit) + notes.where(:noteable_id => commit.id, :noteable_type => "Commit").where("line_code not null") end def has_commits? diff --git a/app/views/commits/_text_file.html.haml b/app/views/commits/_text_file.html.haml index 954722b1..5a6d7e44 100644 --- a/app/views/commits/_text_file.html.haml +++ b/app/views/commits/_text_file.html.haml @@ -19,6 +19,13 @@ %td.new_line = link_to raw(diff_line_class(line) == "old" ? " " : line_new) , "#NEW#{index}-#{line_new}", :id => "NEW#{index}-#{line_new}" %td.line_content{:class => diff_line_class(full_line)}= raw "#{full_line}  " + - comments = @line_notes.select { |n| n.for_line?(index, line_old, line_new) }.sort_by(&:created_at).reverse + - unless comments.empty? + %tr.line_notes_row + %td{:colspan => 3} + %ul + - comments.each do |note| + = render :partial => "notes/show", :locals => {:note => note} - if line[0] == "+" - line_new += 1 - elsif line[0] == "-" diff --git a/db/migrate/20120110180749_add_line_number_to_note.rb b/db/migrate/20120110180749_add_line_number_to_note.rb new file mode 100644 index 00000000..9bdcce3c --- /dev/null +++ b/db/migrate/20120110180749_add_line_number_to_note.rb @@ -0,0 +1,5 @@ +class AddLineNumberToNote < ActiveRecord::Migration + def change + add_column :notes, :line_code, :string, :null => true + end +end diff --git a/db/schema.rb b/db/schema.rb index 3014579c..935f108a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,19 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20111220190817) do +ActiveRecord::Schema.define(:version => 20120110180749) do + + create_table "features", :force => true do |t| + t.string "name" + t.string "branch_name" + t.integer "assignee_id" + t.integer "author_id" + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + t.string "version" + t.integer "status", :default => 0, :null => false + end create_table "issues", :force => true do |t| t.string "title" @@ -56,6 +68,7 @@ ActiveRecord::Schema.define(:version => 20111220190817) do t.datetime "updated_at" t.integer "project_id" t.string "attachment" + t.string "line_code" end create_table "projects", :force => true do |t|