Feature #41294 » 0002-Implement-and-use-JS-function-to-handle-quote-reply.patch
app/assets/javascripts/application.js | ||
---|---|---|
1262 | 1262 |
tribute.attach(element); |
1263 | 1263 |
} |
1264 | 1264 | |
1265 |
function quoteReply(path) { |
|
1266 |
$.ajax({ |
|
1267 |
url: path, |
|
1268 |
type: 'post' |
|
1269 |
}); |
|
1270 |
} |
|
1265 | 1271 | |
1266 | 1272 |
$(document).ready(setupAjaxIndicator); |
1267 | 1273 |
$(document).ready(hideOnLoad); |
app/helpers/journals_helper.rb | ||
---|---|---|
40 | 40 | |
41 | 41 |
if journal.notes.present? |
42 | 42 |
if options[:reply_links] |
43 |
links << link_to(icon_with_label('comment', l(:button_quote)), |
|
44 |
quoted_issue_path(issue, :journal_id => journal, :journal_indice => indice), |
|
45 |
:remote => true, |
|
46 |
:method => 'post', |
|
47 |
:title => l(:button_quote), |
|
48 |
:class => 'icon-only icon-comment' |
|
49 |
) |
|
43 |
links << link_to_function(icon_with_label('comment', l(:button_quote)), |
|
44 |
"quoteReply('#{j quoted_issue_path(issue, :journal_id => journal, :journal_indice => indice)}')", |
|
45 |
:title => l(:button_quote), |
|
46 |
:class => 'icon-only icon-comment' |
|
47 |
) |
|
50 | 48 |
end |
51 | 49 |
if journal.editable_by?(User.current) |
52 | 50 |
links << link_to(icon_with_label('edit', l(:button_edit)), |
app/views/issues/show.html.erb | ||
---|---|---|
84 | 84 |
<hr /> |
85 | 85 |
<div class="description"> |
86 | 86 |
<div class="contextual"> |
87 |
<%= link_to icon_with_label('comment', l(:button_quote)), quoted_issue_path(@issue), :remote => true, :method => 'post', :class => 'icon icon-comment ' if @issue.notes_addable? %>
|
|
87 |
<%= link_to_function icon_with_label('comment', l(:button_quote)), "quoteReply('#{j quoted_issue_path(@issue)}')",:class => 'icon icon-comment ' if @issue.notes_addable? %>
|
|
88 | 88 |
</div> |
89 | 89 | |
90 | 90 |
<p><strong><%=l(:field_description)%></strong></p> |
app/views/messages/show.html.erb | ||
---|---|---|
2 | 2 | |
3 | 3 |
<div class="contextual"> |
4 | 4 |
<%= watcher_link(@topic, User.current) %> |
5 |
<%= link_to( |
|
5 |
<%= link_to_function(
|
|
6 | 6 |
icon_with_label('comment', l(:button_quote)), |
7 |
{:action => 'quote', :id => @topic}, |
|
8 |
:method => 'get', |
|
9 |
:class => 'icon icon-comment', |
|
10 |
:remote => true) if !@topic.locked? && authorize_for('messages', 'reply') %> |
|
7 |
"quoteReply('#{j url_for(:action => 'quote', :id => @topic, :format => 'js')}')", |
|
8 |
:class => 'icon icon-comment') if !@topic.locked? && authorize_for('messages', 'reply') %> |
|
11 | 9 |
<%= link_to( |
12 | 10 |
icon_with_label('edit', l(:button_edit)), |
13 | 11 |
{:action => 'edit', :id => @topic}, |
... | ... | |
42 | 40 |
<% @replies.each do |message| %> |
43 | 41 |
<div class="message reply" id="<%= "message-#{message.id}" %>"> |
44 | 42 |
<div class="contextual"> |
45 |
<%= link_to( |
|
43 |
<%= link_to_function(
|
|
46 | 44 |
icon_with_label('comment', l(:button_quote), icon_only: true), |
47 |
{:action => 'quote', :id => message}, |
|
48 |
:remote => true, |
|
49 |
:method => 'get', |
|
45 |
"quoteReply('#{j url_for(:action => 'quote', :id => message, :format => 'js')}')", |
|
50 | 46 |
:title => l(:button_quote), |
51 | 47 |
:class => 'icon icon-comment' |
52 | 48 |
) if !@topic.locked? && authorize_for('messages', 'reply') %> |
test/functional/journals_controller_test.rb | ||
---|---|---|
168 | 168 | |
169 | 169 |
def test_reply_to_issue |
170 | 170 |
@request.session[:user_id] = 2 |
171 |
get(:new, :params => {:id => 6}, :xhr => true)
|
|
171 |
post(:new, :params => {:id => 6}, :xhr => true)
|
|
172 | 172 |
assert_response :success |
173 | 173 | |
174 | 174 |
assert_equal 'text/javascript', response.media_type |
... | ... | |
177 | 177 | |
178 | 178 |
def test_reply_to_issue_without_permission |
179 | 179 |
@request.session[:user_id] = 7 |
180 |
get(:new, :params => {:id => 6}, :xhr => true)
|
|
180 |
post(:new, :params => {:id => 6}, :xhr => true)
|
|
181 | 181 |
assert_response :forbidden |
182 | 182 |
end |
183 | 183 | |
184 | 184 |
def test_reply_to_note |
185 | 185 |
@request.session[:user_id] = 2 |
186 |
get(
|
|
186 |
post(
|
|
187 | 187 |
:new, |
188 | 188 |
:params => { |
189 | 189 |
:id => 6, |
... | ... | |
202 | 202 |
journal = Journal.create!(:journalized => Issue.find(2), :notes => 'Privates notes', :private_notes => true) |
203 | 203 |
@request.session[:user_id] = 2 |
204 | 204 | |
205 |
get(
|
|
205 |
post(
|
|
206 | 206 |
:new, |
207 | 207 |
:params => { |
208 | 208 |
:id => 2, |
... | ... | |
215 | 215 |
assert_include '> Privates notes', response.body |
216 | 216 | |
217 | 217 |
Role.find(1).remove_permission! :view_private_notes |
218 |
get(
|
|
218 |
post(
|
|
219 | 219 |
:new, |
220 | 220 |
:params => { |
221 | 221 |
:id => 2, |
test/functional/messages_controller_test.rb | ||
---|---|---|
288 | 288 | |
289 | 289 |
def test_quote_if_message_is_root |
290 | 290 |
@request.session[:user_id] = 2 |
291 |
get(
|
|
291 |
post(
|
|
292 | 292 |
:quote, |
293 | 293 |
:params => { |
294 | 294 |
:board_id => 1, |
... | ... | |
306 | 306 | |
307 | 307 |
def test_quote_if_message_is_not_root |
308 | 308 |
@request.session[:user_id] = 2 |
309 |
get(
|
|
309 |
post(
|
|
310 | 310 |
:quote, |
311 | 311 |
:params => { |
312 | 312 |
:board_id => 1, |
... | ... | |
324 | 324 | |
325 | 325 |
def test_quote_as_html_should_respond_with_404 |
326 | 326 |
@request.session[:user_id] = 2 |
327 |
get(
|
|
327 |
post(
|
|
328 | 328 |
:quote, |
329 | 329 |
:params => { |
330 | 330 |
:board_id => 1, |