the_comments 2.2.2 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +104 -20
- data/app/assets/javascripts/the_comments.js.coffee +7 -6
- data/app/assets/stylesheets/the_comments.css.scss +11 -8
- data/app/controllers/concerns/{controller.rb → the_comments/controller.rb} +29 -48
- data/app/controllers/concerns/the_comments/view_token.rb +20 -0
- data/app/models/concerns/{comment.rb → the_comments/comment.rb} +22 -9
- data/app/models/concerns/{comment_states.rb → the_comments/comment_states.rb} +2 -8
- data/app/models/concerns/{commentable.rb → the_comments/commentable.rb} +0 -0
- data/app/models/concerns/{user.rb → the_comments/user.rb} +6 -2
- data/app/views/the_comments/haml/_additional_info.html.haml +1 -1
- data/app/views/the_comments/haml/_comment_body.html.haml +7 -2
- data/app/views/the_comments/haml/_comment_edit.html.haml +1 -1
- data/app/views/the_comments/haml/_form.html.haml +4 -23
- data/app/views/the_comments/haml/_guest_form.html.haml +22 -0
- data/app/views/the_comments/haml/_logined_form.html.haml +18 -0
- data/app/views/the_comments/haml/_manage_controls.html.haml +20 -17
- data/app/views/the_comments/haml/_sidebar.html.haml +6 -25
- data/app/views/the_comments/haml/_sidebar_admin.html.haml +12 -0
- data/app/views/the_comments/haml/_sidebar_backlink.html.haml +3 -0
- data/app/views/the_comments/haml/_sidebar_user.html.haml +29 -0
- data/app/views/the_comments/haml/_tree.html.haml +13 -1
- data/app/views/the_comments/haml/manage.html.haml +8 -7
- data/app/views/the_comments/slim/_comment_body.html.slim +5 -1
- data/app/views/the_comments/slim/_form.html.slim +4 -23
- data/app/views/the_comments/slim/_guest_form.html.slim +22 -0
- data/app/views/the_comments/slim/_logined_form.html.slim +18 -0
- data/app/views/the_comments/slim/_manage_controls.html.slim +19 -16
- data/app/views/the_comments/slim/_sidebar.html.slim +6 -25
- data/app/views/the_comments/slim/_sidebar_admin.html.slim +12 -0
- data/app/views/the_comments/slim/_sidebar_backlink.html.slim +3 -0
- data/app/views/the_comments/slim/_sidebar_user.html.slim +29 -0
- data/app/views/the_comments/slim/_tree.html.slim +13 -1
- data/app/views/the_comments/slim/index.html.slim +2 -2
- data/app/views/the_comments/slim/manage.html.slim +7 -6
- data/config/initializers/the_comments.rb +0 -1
- data/config/locales/ru.yml +14 -10
- data/config/routes.rb +4 -2
- data/docs/whats_wrong_with_other_gems.md +13 -13
- data/docs/where_is_example_application.md +3 -3
- data/gem_version.rb +2 -2
- data/lib/the_comments.rb +26 -7
- data/lib/the_comments/config.rb +1 -4
- data/spec/dummy_app/Gemfile +2 -2
- data/spec/dummy_app/config/routes.rb +1 -0
- data/spec/dummy_app/spec/models/user_counters_spec.rb +5 -5
- data/the_comments.gemspec +3 -2
- data/views_converter.rb +2 -2
- metadata +49 -26
- data/app/views/the_comments/haml/index.html.haml +0 -18
- data/app/views/the_comments/haml/my_comments.html.haml +0 -28
@@ -0,0 +1,20 @@
|
|
1
|
+
module TheComments
|
2
|
+
# Cookies and View token for spam protection
|
3
|
+
# include TheComments::ViewToken
|
4
|
+
module ViewToken
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included { before_action :set_the_comments_cookies }
|
8
|
+
|
9
|
+
def comments_view_token
|
10
|
+
cookies[:comments_view_token]
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def set_the_comments_cookies
|
16
|
+
cookies[:the_comment_cookies] = { value: TheComments::COMMENTS_COOKIES_TOKEN, expires: 1.year.from_now }
|
17
|
+
cookies[:comments_view_token] = { value: SecureRandom.hex, expires: 7.days.from_now } unless cookies[:comments_view_token]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,16 +4,19 @@ module TheComments
|
|
4
4
|
|
5
5
|
included do
|
6
6
|
scope :active, -> { with_state [:draft, :published] }
|
7
|
-
scope :
|
7
|
+
scope :with_users, -> { includes(:user) }
|
8
8
|
|
9
9
|
# Nested Set
|
10
10
|
acts_as_nested_set scope: [:commentable_type, :commentable_id]
|
11
11
|
|
12
|
-
#
|
13
|
-
include
|
12
|
+
# simple sort scopes
|
13
|
+
include ::TheSimpleSort::Base
|
14
14
|
|
15
15
|
# TheSortableTree
|
16
|
-
include TheSortableTree::Scopes
|
16
|
+
include ::TheSortableTree::Scopes
|
17
|
+
|
18
|
+
# Comments State Machine
|
19
|
+
include TheComments::CommentStates
|
17
20
|
|
18
21
|
validates :raw_content, presence: true
|
19
22
|
|
@@ -28,6 +31,14 @@ module TheComments
|
|
28
31
|
before_save :prepare_content
|
29
32
|
end
|
30
33
|
|
34
|
+
def header_title
|
35
|
+
title.present? ? title : I18n.t('the_comments.guest_name')
|
36
|
+
end
|
37
|
+
|
38
|
+
def user_name
|
39
|
+
user.try(:username) || user.try(:login) || header_title
|
40
|
+
end
|
41
|
+
|
31
42
|
def avatar_url
|
32
43
|
src = id.to_s
|
33
44
|
src = title unless title.blank?
|
@@ -35,7 +46,7 @@ module TheComments
|
|
35
46
|
hash = Digest::MD5.hexdigest(src)
|
36
47
|
"https://2.gravatar.com/avatar/#{hash}?s=42&d=https://identicons.github.com/#{hash}.png"
|
37
48
|
end
|
38
|
-
|
49
|
+
|
39
50
|
def mark_as_spam
|
40
51
|
count = self_and_descendants.update_all({spam: true})
|
41
52
|
update_spam_counter
|
@@ -86,18 +97,20 @@ module TheComments
|
|
86
97
|
# We have few unuseful requests
|
87
98
|
# I impressed that I found it and reduce DB requests
|
88
99
|
# Awesome logic pazzl! I'm really pedant :D
|
89
|
-
def update_cache_counters
|
100
|
+
def update_cache_counters
|
90
101
|
user.try :recalculate_my_comments_counter!
|
91
102
|
|
92
103
|
if holder
|
93
104
|
holder.send :try, :define_denormalize_flags
|
94
|
-
holder.increment! "#{state}_comcoms_count"
|
105
|
+
holder.increment! "#{ state }_comcoms_count"
|
106
|
+
# holder.class.increment_counter("#{ state }_comcoms_count", holder.id)
|
95
107
|
end
|
96
108
|
|
97
109
|
if commentable
|
98
110
|
commentable.send :define_denormalize_flags
|
99
|
-
commentable.increment! "#{state}_comments_count"
|
111
|
+
commentable.increment! "#{ state }_comments_count"
|
112
|
+
# holder.class.increment_counter("#{ state }_comments_count", holder.id)
|
100
113
|
end
|
101
114
|
end
|
102
115
|
end
|
103
|
-
end
|
116
|
+
end
|
@@ -47,14 +47,8 @@ module TheComments
|
|
47
47
|
|
48
48
|
# to deleted (cascade like query)
|
49
49
|
after_transition [:draft, :published] => :deleted do |comment|
|
50
|
-
|
51
|
-
|
52
|
-
ids = comment.self_and_descendants.map(&:id)
|
53
|
-
::Comment.where(id: ids).update_all(state: :deleted)
|
54
|
-
else
|
55
|
-
id = comment.id
|
56
|
-
::Comment.where(id: id).update_all(state: :deleted)
|
57
|
-
end
|
50
|
+
ids = comment.self_and_descendants.map(&:id)
|
51
|
+
::Comment.where(id: ids).update_all(state: :deleted)
|
58
52
|
|
59
53
|
@owner.try :recalculate_my_comments_counter!
|
60
54
|
@holder.try :recalculate_comcoms_counters!
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module TheComments
|
2
2
|
module User
|
3
3
|
extend ActiveSupport::Concern
|
4
|
-
|
4
|
+
|
5
5
|
included do
|
6
6
|
has_many :comcoms, class_name: :Comment, foreign_key: :holder_id
|
7
7
|
end
|
@@ -18,6 +18,10 @@ module TheComments
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
def my_spam_comments
|
22
|
+
my_comments.where(spam: true)
|
23
|
+
end
|
24
|
+
|
21
25
|
# I think we shouldn't to have my_deleted_comments cache counter
|
22
26
|
def recalculate_my_comments_counter!
|
23
27
|
dcount = my_draft_comments.count
|
@@ -49,4 +53,4 @@ module TheComments
|
|
49
53
|
published_comcoms_count + draft_comcoms_count
|
50
54
|
end
|
51
55
|
end
|
52
|
-
end
|
56
|
+
end
|
@@ -9,7 +9,11 @@
|
|
9
9
|
%tr
|
10
10
|
%td
|
11
11
|
%b= t('the_comments.title')
|
12
|
-
%td
|
12
|
+
%td
|
13
|
+
- if comment.try(:user)
|
14
|
+
= link_to comment.user_name, comment.user
|
15
|
+
- else
|
16
|
+
= comment.header_title
|
13
17
|
%tr
|
14
18
|
%td
|
15
19
|
%b= t('the_comments.contacts')
|
@@ -17,4 +21,5 @@
|
|
17
21
|
%tr.success
|
18
22
|
%td
|
19
23
|
%b= t('the_comments.content')
|
20
|
-
%td= comment.content
|
24
|
+
%td{ style: 'word-break: break-all;' }= raw comment.content
|
25
|
+
|
@@ -2,26 +2,7 @@
|
|
2
2
|
= link_to t('the_comments.new'), '#', id: :new_root_comment
|
3
3
|
|
4
4
|
= form_for Comment.new, remote: true, authenticity_token: true do |f|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
%label= t('the_comments.form.contacts')
|
10
|
-
%p= f.text_field :contacts
|
11
|
-
|
12
|
-
%label= t('the_comments.form.content')
|
13
|
-
%p= f.text_area :raw_content
|
14
|
-
|
15
|
-
%p.trap
|
16
|
-
- TheComments.config.empty_inputs.each do |name|
|
17
|
-
= text_field_tag name, nil, autocomplete: :off, tabindex: -1, id: nil
|
18
|
-
|
19
|
-
= hidden_field_tag :tolerance_time, 0, id: nil, class: :tolerance_time
|
20
|
-
|
21
|
-
= f.hidden_field :commentable_type, value: commentable.class
|
22
|
-
= f.hidden_field :commentable_id, value: commentable.id
|
23
|
-
= f.hidden_field :parent_id, class: :parent_id
|
24
|
-
|
25
|
-
%p
|
26
|
-
= f.submit t('the_comments.form.create'), class: :btn
|
27
|
-
= t('the_comments.form.thank_you')
|
5
|
+
- if current_user
|
6
|
+
= render partial: 'the_comments/haml/logined_form', locals: { f: f, commentable: commentable }
|
7
|
+
- else
|
8
|
+
= render partial: 'the_comments/haml/guest_form', locals: { f: f, commentable: commentable }
|
@@ -0,0 +1,22 @@
|
|
1
|
+
%label= t('the_comments.form.title')
|
2
|
+
%p= f.text_field :title, class: 'form-control'
|
3
|
+
|
4
|
+
%label= t('the_comments.form.contacts')
|
5
|
+
%p= f.text_field :contacts, class: 'form-control'
|
6
|
+
|
7
|
+
%label= t('the_comments.form.content')
|
8
|
+
%p= f.text_area :raw_content, class: 'form-control'
|
9
|
+
|
10
|
+
%p.trap
|
11
|
+
- TheComments.config.empty_inputs.each do |name|
|
12
|
+
= text_field_tag name, nil, autocomplete: :off, tabindex: -1, id: nil
|
13
|
+
|
14
|
+
= hidden_field_tag :tolerance_time, 0, id: nil, class: :tolerance_time
|
15
|
+
|
16
|
+
= f.hidden_field :commentable_type, value: commentable.class
|
17
|
+
= f.hidden_field :commentable_id, value: commentable.id
|
18
|
+
= f.hidden_field :parent_id, class: :parent_id
|
19
|
+
|
20
|
+
%p
|
21
|
+
= f.submit t('the_comments.form.create'), class: :btn
|
22
|
+
= t('the_comments.form.thank_you')
|
@@ -0,0 +1,18 @@
|
|
1
|
+
.logined_comment_form
|
2
|
+
.user_data
|
3
|
+
= link_to user_path(current_user), nopin: :nopin do
|
4
|
+
= image_tag current_user.try(:avatar).try(:url, :thumb)
|
5
|
+
.comment_data
|
6
|
+
= hidden_field_tag :tolerance_time, 0, id: nil, class: :tolerance_time
|
7
|
+
= f.hidden_field :commentable_type, value: commentable.class
|
8
|
+
= f.hidden_field :commentable_id, value: commentable.id
|
9
|
+
= f.hidden_field :parent_id, class: :parent_id
|
10
|
+
|
11
|
+
.user_name
|
12
|
+
%b= current_user.username.present? ? current_user.username : current_user.login
|
13
|
+
%label= t('the_comments.form.content')
|
14
|
+
%p= f.text_area :raw_content
|
15
|
+
|
16
|
+
%p
|
17
|
+
= f.submit t('the_comments.form.create'), class: :btn
|
18
|
+
= t('the_comments.form.thank_you')
|
@@ -1,27 +1,30 @@
|
|
1
1
|
- hidden = "display:none"
|
2
2
|
|
3
3
|
.row.controls
|
4
|
-
.col-md-9
|
5
|
-
= link_to
|
6
|
-
|
4
|
+
.col-md-9.action_btns
|
5
|
+
= link_to '#', class: "edit btn btn-success" do
|
6
|
+
= t('the_comments.edit')
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
= link_to [:to_published, comment], opts.merge(class: "btn btn-primary to_published") do
|
11
|
-
= t('the_comments.to_published')
|
12
|
-
|
13
|
-
- to_hide = comment.draft? ? hidden : nil
|
14
|
-
- opts = { remote: true, style: to_hide, method: :post }
|
15
|
-
= link_to [:to_draft, comment], opts.merge(class: "btn btn-warning to_draft") do
|
16
|
-
= t('the_comments.to_draft')
|
8
|
+
= link_to '#', class: "btn btn-warning edit", style: "display:none" do
|
9
|
+
= t('the_comments.cancel')
|
17
10
|
|
18
|
-
- to_hide = comment.
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
- unless to_hide = comment.published? ? hidden : nil
|
12
|
+
- opts = { remote: true, style: to_hide, method: :post }
|
13
|
+
= link_to [:to_published, comment], opts.merge(class: "btn btn-primary to_published") do
|
14
|
+
= t('the_comments.to_published')
|
15
|
+
|
16
|
+
- unless to_hide = comment.draft? ? hidden : nil
|
17
|
+
- opts = { remote: true, style: to_hide, method: :post }
|
18
|
+
= link_to [:to_draft, comment], opts.merge(class: "btn btn-warning to_draft") do
|
19
|
+
= t('the_comments.to_draft')
|
20
|
+
|
21
|
+
- unless to_hide = comment.deleted? ? hidden : nil
|
22
|
+
- opts = { remote: true, style: to_hide, method: :delete, data: { confirm: t('the_comments.delete_confirm') } }
|
23
|
+
= link_to [:to_deleted, comment], opts.merge(class: "btn btn-danger to_deleted") do
|
24
|
+
= t('the_comments.to_deleted')
|
22
25
|
|
23
26
|
- opts = { remote: true, method: :post}
|
24
27
|
= link_to [:to_spam, comment], opts.merge(class: "btn btn-danger to_spam") do
|
25
28
|
= t('the_comments.to_spam')
|
26
29
|
.col-md-3.text-right
|
27
|
-
= link_to t('the_comments.additional_info'), "#", class: "additional_info btn btn-info"
|
30
|
+
= link_to t('the_comments.additional_info'), "#", class: "additional_info btn btn-info"
|
@@ -1,28 +1,9 @@
|
|
1
|
-
-
|
2
|
-
|
3
|
-
.panel.panel-primary
|
1
|
+
.panel.panel-default
|
4
2
|
.panel-heading= t "the_comments.nav.header"
|
5
3
|
.panel-body
|
6
|
-
|
7
|
-
%hr
|
8
|
-
|
9
|
-
%h5= t 'the_comments.incoming'
|
10
|
-
%ul
|
11
|
-
%li= link_to t("the_comments.draft_comments", num: cuser.draft_comcoms_count), [:draft, :comments]
|
12
|
-
%li= link_to t("the_comments.published_comments", num: cuser.published_comcoms_count), [:published, :comments]
|
13
|
-
%li= link_to t("the_comments.deleted_comments", num: cuser.deleted_comcoms_count), [:deleted, :comments]
|
14
|
-
%li= link_to t("the_comments.spam_comments", num: cuser.spam_comcoms_count), [:spam, :comments]
|
15
|
-
|
16
|
-
%h5= t 'the_comments.written_by_me'
|
17
|
-
%ul
|
18
|
-
%li= link_to t("the_comments.draft_comments", num: cuser.my_draft_comments.count), [:my_draft, :comments]
|
19
|
-
%li= link_to t("the_comments.published_comments", num: cuser.my_published_comments.count), [:my_published, :comments]
|
20
|
-
%li= link_to t("the_comments.my_comments", num: cuser.my_comments_count), [:my_comments, :comments]
|
4
|
+
= render partial: 'the_comments/haml/sidebar_backlink'
|
21
5
|
|
22
|
-
- if
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
%li= link_to t("the_comments.published_comments", num: Comment.with_state(:published).count), [:total_published, :comments]
|
27
|
-
%li= link_to t("the_comments.deleted_comments", num: Comment.with_state(:deleted).count), [:total_deleted, :comments]
|
28
|
-
%li= link_to t("the_comments.spam_comments", num: Comment.where(spam: true).count), [:total_spam, :comments]
|
6
|
+
- if current_user.comments_admin?
|
7
|
+
= render partial: 'the_comments/haml/sidebar_admin'
|
8
|
+
- else
|
9
|
+
= render partial: 'the_comments/haml/sidebar_user'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- cuser = current_user
|
2
|
+
|
3
|
+
= render partial: 'the_comments/haml/sidebar_user'
|
4
|
+
|
5
|
+
- if cuser.comments_admin?
|
6
|
+
%br
|
7
|
+
%h5= t 'the_comments.in_system', num: Comment.count
|
8
|
+
%p= link_to t("the_comments.published_comments", num: Comment.with_state(:published).count), [:total_published, :comments], class: 'btn btn-success btn-sm'
|
9
|
+
%p= link_to t("the_comments.draft_comments", num: Comment.with_state(:draft).count), [:total_draft, :comments], class: 'btn btn-info btn-sm'
|
10
|
+
%p
|
11
|
+
= link_to t("the_comments.deleted_comments", num: Comment.with_state(:deleted).count), [:total_deleted, :comments], class: 'btn btn-default btn-sm'
|
12
|
+
= link_to t("the_comments.spam_comments", num: Comment.where(spam: true).count), [:total_spam, :comments], class: 'btn btn-default btn-sm'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
- cuser = current_user
|
2
|
+
|
3
|
+
%h5=t 'the_comments.written_by_me', num: cuser.my_comments.count
|
4
|
+
|
5
|
+
%p= link_to t("the_comments.published_comments", num: cuser.my_published_comments.count), [:my_published, :comments], class: 'btn btn-success btn-sm'
|
6
|
+
%p= link_to t("the_comments.draft_comments", num: cuser.my_draft_comments.count), [:my_draft, :comments], class: 'btn btn-info btn-sm'
|
7
|
+
|
8
|
+
%p
|
9
|
+
- if cuser.comments_admin?
|
10
|
+
= link_to t("the_comments.deleted_comments", num: cuser.my_deleted_comments.count), [:my_deleted, :comments], class: 'btn btn-default btn-sm'
|
11
|
+
= link_to t("the_comments.spam_comments", num: cuser.my_spam_comments.count), [:my_spam, :comments], class: 'btn btn-default btn-sm'
|
12
|
+
- else
|
13
|
+
%span.btn.btn-default.btn-sm= t("the_comments.deleted_comments", num: cuser.my_deleted_comments.count)
|
14
|
+
%span.btn.btn-default.btn-sm= t("the_comments.spam_comments", num: cuser.my_spam_comments.count)
|
15
|
+
|
16
|
+
%br
|
17
|
+
%h5= t 'the_comments.for_my_posts', num: cuser.comcoms.count
|
18
|
+
|
19
|
+
%p= link_to t("the_comments.published_comments", num: cuser.published_comcoms_count), [:published, :comments], class: 'btn btn-success btn-sm'
|
20
|
+
%p= link_to t("the_comments.draft_comments", num: cuser.draft_comcoms_count), [:draft, :comments], class: 'btn btn-info btn-sm'
|
21
|
+
%p
|
22
|
+
- if cuser.comments_admin?
|
23
|
+
= link_to t("the_comments.deleted_comments", num: cuser.deleted_comcoms_count), [:deleted, :comments], class: 'btn btn-default btn-sm'
|
24
|
+
= link_to t("the_comments.spam_comments", num: cuser.spam_comcoms_count), [:spam, :comments], class: 'btn btn-default btn-sm'
|
25
|
+
- else
|
26
|
+
%span.btn.btn-default.btn-sm= t("the_comments.deleted_comments", num: cuser.deleted_comcoms_count)
|
27
|
+
%span.btn.btn-default.btn-sm= t("the_comments.spam_comments", num: cuser.spam_comcoms_count)
|
28
|
+
|
29
|
+
|
@@ -1,4 +1,16 @@
|
|
1
|
+
- if commentable.try(:comments_on?) || true
|
2
|
+
%h4.comments_sum
|
3
|
+
- if commentable.comments_sum.zero?
|
4
|
+
Вы можете стать первым, кто оставит комментарий!
|
5
|
+
- else
|
6
|
+
Комментариев: #{ commentable.comments_sum }
|
7
|
+
|
8
|
+
- unless current_user
|
9
|
+
.comments_description
|
10
|
+
%p — Комментарий можно оставить <b>без регистрации</b>, для этого достаточно заполнить одно обязательное поле <b class='nobr'>Текст комментария</b>. Анонимные комментарии проходят модерацию и до момента одобрения видны только в браузере автора
|
11
|
+
%p — Комментарии зарегистрированных пользователей публикуются сразу после создания
|
12
|
+
|
1
13
|
.comments#comments
|
2
14
|
%ol.comments_tree{ data: { comments: { tolarance_time: TheComments.config.tolerance_time } } }
|
3
15
|
= render partial: 'the_comments/haml/comment', locals: { tree: comments_tree }
|
4
|
-
= render partial: 'the_comments/haml/form', locals: { commentable: commentable }
|
16
|
+
= render partial: 'the_comments/haml/form', locals: { commentable: commentable }
|
@@ -12,14 +12,15 @@
|
|
12
12
|
|
13
13
|
.comments
|
14
14
|
- @comments.each do |comment|
|
15
|
-
- klass = { published: :
|
15
|
+
- klass = { published: :success, draft: :info, deleted: :danger }[comment.state.to_sym]
|
16
16
|
.panel{ class: "panel-#{klass}" }
|
17
|
-
.panel-heading= comment.
|
17
|
+
.panel-heading= comment.header_title
|
18
18
|
.panel-body
|
19
|
-
= render partial: 'the_comments/haml/comment_edit', locals: { comment: comment }
|
20
19
|
= render partial: 'the_comments/haml/comment_body', locals: { comment: comment }
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
- if current_user.comments_admin?
|
22
|
+
= render partial: 'the_comments/haml/comment_edit', locals: { comment: comment }
|
23
|
+
= render partial: 'the_comments/haml/manage_controls', locals: { comment: comment }
|
24
|
+
= render partial: 'the_comments/haml/additional_info', locals: { comment: comment }
|
25
|
+
|
26
|
+
= paginate @comments
|
@@ -9,7 +9,11 @@ table.comment_body.table.table-striped.table-hover
|
|
9
9
|
tr
|
10
10
|
td
|
11
11
|
b= t('the_comments.title')
|
12
|
-
td
|
12
|
+
td
|
13
|
+
- if comment.try(:user)
|
14
|
+
= link_to comment.user_name, comment.user
|
15
|
+
- else
|
16
|
+
= comment.header_title
|
13
17
|
tr
|
14
18
|
td
|
15
19
|
b= t('the_comments.contacts')
|
@@ -2,26 +2,7 @@ h3
|
|
2
2
|
= link_to t('the_comments.new'), '#', id: :new_root_comment
|
3
3
|
|
4
4
|
= form_for Comment.new, remote: true, authenticity_token: true do |f|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
label= t('the_comments.form.contacts')
|
10
|
-
p= f.text_field :contacts
|
11
|
-
|
12
|
-
label= t('the_comments.form.content')
|
13
|
-
p= f.text_area :raw_content
|
14
|
-
|
15
|
-
p.trap
|
16
|
-
- TheComments.config.empty_inputs.each do |name|
|
17
|
-
= text_field_tag name, nil, autocomplete: :off, tabindex: -1, id: nil
|
18
|
-
|
19
|
-
= hidden_field_tag :tolerance_time, 0, id: nil, class: :tolerance_time
|
20
|
-
|
21
|
-
= f.hidden_field :commentable_type, value: commentable.class
|
22
|
-
= f.hidden_field :commentable_id, value: commentable.id
|
23
|
-
= f.hidden_field :parent_id, class: :parent_id
|
24
|
-
|
25
|
-
p
|
26
|
-
= f.submit t('the_comments.form.create'), class: :btn
|
27
|
-
= t('the_comments.form.thank_you')
|
5
|
+
- if current_user
|
6
|
+
= render partial: 'the_comments/slim/logined_form', locals: { f: f, commentable: commentable }
|
7
|
+
- else
|
8
|
+
= render partial: 'the_comments/slim/guest_form', locals: { f: f, commentable: commentable }
|