Project

General

Profile

Feature #3058 » 0002-show-issue-history-in-tabs.patch

Marius BĂLTEANU, 2019-06-20 08:19

View differences:

app/helpers/issues_helper.rb
545 545
      end
546 546
    end
547 547
  end
548

  
549
  # Issue history tabs
550
  def issue_history_tabs()
551
    tabs = []
552
    if @journals.present?
553
      journals_without_notes = @journals.select{|value| value.notes.blank?}
554
      journals_with_notes = @journals.reject{|value| value.notes.blank?}
555

  
556
      tabs << {:name => 'history', :label => :label_history, :onclick => 'showIssueHistory("history", this.href)', :partial => 'history', :locals => {:issue => @issue, :journals => @journals}}
557
      tabs << {:name => 'notes', :label => :label_issue_history_notes, :onclick => 'showIssueHistory("notes", this.href)'} if journals_with_notes.any?
558
      tabs << {:name => 'properties', :label => :label_issue_history_properties, :onclick => 'showIssueHistory("properties", this.href)'} if journals_without_notes.any?
559
    end
560
    tabs
561
  end
548 562
end
app/views/issues/_history.html.erb
1
<%
2
  issue = tab[:locals][:issue]
3
  journals = tab[:locals][:journals]
4
%>
5

  
1 6
<% reply_links = issue.notes_addable? -%>
2 7
<% for journal in journals %>
3 8
  <div id="change-<%= journal.id %>" class="<%= journal.css_classes %>">
app/views/issues/show.html.erb
129 129
</div>
130 130
<% end %>
131 131

  
132
<% if @journals.present? %>
132
<%= render partial: 'action_menu_edit' if User.current.wants_comments_in_reverse_order? %>
133

  
133 134
<div id="history">
134 135
<h3><%=l(:label_history)%></h3>
135
<%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
136
<%= render_tabs issue_history_tabs, params[:tab] ? params[:tab] : 'notes' %>
136 137
</div>
137
<% end %>
138 138

  
139 139
<%= render partial: 'action_menu_edit' unless User.current.wants_comments_in_reverse_order? %>
140 140

  
config/locales/en.yml
1056 1056
  label_open_trackers_description: View all trackers description
1057 1057
  label_preferred_body_part_text: Text
1058 1058
  label_preferred_body_part_html: HTML (experimental)
1059
  label_issue_history_properties: Property changes
1060
  label_issue_history_notes: Notes
1059 1061

  
1060 1062
  button_login: Login
1061 1063
  button_submit: Submit
public/javascripts/application.js
353 353
  $('#tab-content-' + name).show();
354 354
  $('#tab-' + name).closest('.tabs').find('a').removeClass('selected');
355 355
  $('#tab-' + name).addClass('selected');
356
  //replaces current URL with the "href" attribute of the current link
357
  //(only triggered if supported by browser)
356

  
357
  replaceInHistory(url)
358

  
359
  return false;
360
}
361

  
362
function showIssueHistory(journal, url) {
363
  tab_content = $('#tab-content-history');
364
  tab_content.parent().find('.tab-content').hide();
365
  tab_content.show();
366
  tab_content.parent().find('div.tabs a').removeClass('selected');
367

  
368
  $('#tab-' + journal).addClass('selected');
369

  
370
  replaceInHistory(url)
371

  
372
  switch(journal) {
373
    case 'notes':
374
      tab_content.find('.journal:not(.has-notes)').hide();
375
      tab_content.find('.journal.has-notes').show();
376
      break;
377
    case 'properties':
378
      tab_content.find('.journal.has-notes').hide();
379
      tab_content.find('.journal:not(.has-notes)').show();
380
      break;
381
    default:
382
      tab_content.find('.journal').show();
383
  }
384

  
385
  return false;
386
}
387

  
388
//replaces current URL with the "href" attribute of the current link
389
//(only triggered if supported by browser)
390
function replaceInHistory(url) {
358 391
  if ("replaceState" in window.history) {
359 392
    window.history.replaceState(null, document.title, url);
360 393
  }
361
  return false;
362 394
}
363 395

  
364 396
function moveTabRight(el) {
test/functional/issues_controller_test.rb
2459 2459
    assert_select 'a', :text => 'Delete', :count => 0
2460 2460
  end
2461 2461

  
2462
  def test_show_should_not_display_history_tabs_for_issue_without_journals
2463
    @request.session[:user_id] = 1
2464

  
2465
    get :show, :params => {:id => 5}
2466
    assert_response :success
2467
    assert_select '#history div.tabs', 0
2468
    assert_select '#history p.nodata', :text => 'No data to display'
2469
  end
2470

  
2471
  def test_show_display_only_all_and_notes_tabs_for_issue_with_notes_only
2472
    @request.session[:user_id] = 1
2473

  
2474
    get :show, :params => {:id => 6}
2475
    assert_response :success
2476
    assert_select '#history' do
2477
      assert_select 'div.tabs ul a', 2
2478
      assert_select 'div.tabs a[id=?]', 'tab-history', :text => 'History'
2479
      assert_select 'div.tabs a[id=?]', 'tab-notes', :text => 'Notes'
2480
    end
2481
  end
2482

  
2483
  def test_show_display_only_all_and_history_tabs_for_issue_with_history_changes_only
2484
    journal = Journal.create!(:journalized => Issue.find(5), :user_id => 1)
2485
    detail = JournalDetail.create!(:journal => journal, :property => 'attr', :prop_key => 'description',
2486
      :old_value => 'Foo', :value => 'Bar')
2487

  
2488
    @request.session[:user_id] = 1
2489

  
2490
    get :show, :params => {:id => 5}
2491
    assert_response :success
2492
    assert_select '#history' do
2493
      assert_select 'div.tabs ul a', 2
2494
      assert_select 'div.tabs a[id=?]', 'tab-history', :text => 'History'
2495
      assert_select 'div.tabs a[id=?]', 'tab-properties', :text => 'Property changes'
2496
    end
2497
  end
2498

  
2499
  def test_show_display_all_notes_and_history_tabs_for_issue_with_notes_and_history_changes
2500
    journal = Journal.create!(:journalized => Issue.find(6), :user_id => 1)
2501
    detail = JournalDetail.create!(:journal => journal, :property => 'attr', :prop_key => 'description',
2502
      :old_value => 'Foo', :value => 'Bar')
2503

  
2504
    @request.session[:user_id] = 1
2505

  
2506
    get :show, :params => {:id => 6}
2507
    assert_response :success
2508
    assert_select '#history' do
2509
      assert_select 'div.tabs ul a', 3
2510
      assert_select 'div.tabs a[id=?]', 'tab-history', :text => 'History'
2511
      assert_select 'div.tabs a[id=?]', 'tab-notes', :text => 'Notes'
2512
      assert_select 'div.tabs a[id=?]', 'tab-properties', :text => 'Property changes'
2513
    end
2514
  end
2515

  
2462 2516
  def test_get_new
2463 2517
    @request.session[:user_id] = 2
2464 2518
    get :new, :params => {
(22-22/28)