diff --git a/app/controllers/public/content_viewer_controller.rb b/app/controllers/public/content_viewer_controller.rb
index 27723b5..47dec71 100644
--- a/app/controllers/public/content_viewer_controller.rb
+++ b/app/controllers/public/content_viewer_controller.rb
@@ -99,7 +99,7 @@ class ContentViewerController < ApplicationController
@images = @images.paginate(:per_page => per_page, :page => params[:npage]) unless params[:slideshow]
end
- @comments = @page.comments(true)
+ @comments = @page.comments(true).as_thread
if params[:slideshow]
render :action => 'slideshow', :layout => 'slideshow'
end
@@ -116,7 +116,7 @@ class ContentViewerController < ApplicationController
@comment = nil # clear the comment form
redirect_to :action => 'view_page', :profile => params[:profile], :page => @page.explode_path, :view => params[:view]
else
- @form_div = 'opened'
+ @form_div = 'opened' if params[:comment][:reply_of_id].blank?
end
end
diff --git a/app/models/comment.rb b/app/models/comment.rb
index 0bd61d7..0eb87b3 100644
--- a/app/models/comment.rb
+++ b/app/models/comment.rb
@@ -5,6 +5,8 @@ class Comment < ActiveRecord::Base
validates_presence_of :title, :body
belongs_to :article, :counter_cache => true
belongs_to :author, :class_name => 'Person', :foreign_key => 'author_id'
+ has_many :children, :class_name => 'Comment', :foreign_key => 'reply_of_id', :dependent => :destroy
+ belongs_to :reply_of, :class_name => 'Comment', :foreign_key => 'reply_of_id'
# unauthenticated authors:
validates_presence_of :name, :if => (lambda { |record| !record.email.blank? })
@@ -46,7 +48,7 @@ class Comment < ActiveRecord::Base
end
def message
- author_id ? _('(removed user)') : ('
' + _('(unauthenticated user)'))
+ author_id ? _('(removed user)') : _('(unauthenticated user)')
end
def removed_user_image
@@ -73,6 +75,25 @@ class Comment < ActiveRecord::Base
end
end
+ def replies
+ @replies || children
+ end
+
+ def replies=(comments_list)
+ @replies = comments_list
+ end
+
+ def self.as_thread
+ result = {}
+ root = []
+ all.each do |c|
+ c.replies = []
+ result[c.id] ||= c
+ c.reply_of_id.nil? ? root << c : result[c.reply_of_id].replies << c
+ end
+ root
+ end
+
class Notifier < ActionMailer::Base
def mail(comment)
profile = comment.article.profile
diff --git a/app/views/content_viewer/_comment.rhtml b/app/views/content_viewer/_comment.rhtml
index d2cfe1a..240ae7d 100644
--- a/app/views/content_viewer/_comment.rhtml
+++ b/app/views/content_viewer/_comment.rhtml
@@ -1,17 +1,23 @@
-<%= content_tag('a', '', :name => comment.anchor) %>
-