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, |