Feature #3058 » 0007-user-preference-for-issue-history-default-tab.patch
| app/helpers/issues_helper.rb | ||
|---|---|---|
| 559 | 559 |
tabs |
| 560 | 560 |
end |
| 561 | 561 | |
| 562 |
def issue_history_default_tab |
|
| 563 |
# tab params overrides user default tab preference |
|
| 564 |
return params[:tab] if params[:tab].present? |
|
| 565 |
user_default_tab = User.current.pref.history_default_tab |
|
| 566 | ||
| 567 |
case user_default_tab |
|
| 568 |
when 'last_tab_visited' |
|
| 569 |
cookies['history_last_tab'].present? ? cookies['history_last_tab'] : 'notes' |
|
| 570 |
when '' |
|
| 571 |
'notes' |
|
| 572 |
else |
|
| 573 |
user_default_tab |
|
| 574 |
end |
|
| 575 |
end |
|
| 576 | ||
| 562 | 577 |
end |
| app/helpers/users_helper.rb | ||
|---|---|---|
| 33 | 33 |
[[l(:label_font_default), '']] + UserPreference::TEXTAREA_FONT_OPTIONS.map {|o| [l("label_font_#{o}"), o]}
|
| 34 | 34 |
end |
| 35 | 35 | |
| 36 |
def history_default_tab_options |
|
| 37 |
[[l('label_issue_history_notes'), 'notes'],
|
|
| 38 |
[l('label_history'), 'history'],
|
|
| 39 |
[l('label_issue_history_properties'), 'properties'],
|
|
| 40 |
[l('label_time_entry_plural'), 'time_entries'],
|
|
| 41 |
[l('label_associated_revisions'), 'changesets'],
|
|
| 42 |
[l('label_last_tab_visited'), 'last_tab_visited']]
|
|
| 43 |
end |
|
| 44 | ||
| 36 | 45 |
def change_status_link(user) |
| 37 | 46 |
url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
|
| 38 | 47 | |
| app/models/user_preference.rb | ||
|---|---|---|
| 30 | 30 |
'comments_sorting', |
| 31 | 31 |
'warn_on_leaving_unsaved', |
| 32 | 32 |
'no_self_notified', |
| 33 |
'textarea_font' |
|
| 33 |
'textarea_font', |
|
| 34 |
'history_default_tab' |
|
| 34 | 35 | |
| 35 | 36 |
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional'] |
| 36 | 37 | |
| ... | ... | |
| 88 | 89 |
def textarea_font; self[:textarea_font] end |
| 89 | 90 |
def textarea_font=(value); self[:textarea_font]=value; end |
| 90 | 91 | |
| 92 |
def history_default_tab; self[:history_default_tab]; end |
|
| 93 |
def history_default_tab=(value); self[:history_default_tab]=value; end |
|
| 94 | ||
| 91 | 95 |
# Returns the names of groups that are displayed on user's page |
| 92 | 96 |
# Example: |
| 93 | 97 |
# preferences.my_page_groups |
| app/views/issues/show.html.erb | ||
|---|---|---|
| 124 | 124 | |
| 125 | 125 |
<div id="history"> |
| 126 | 126 |
<h3><%=l(:label_history)%></h3> |
| 127 |
<%= render_tabs issue_history_tabs, params[:tab] ? params[:tab] : 'notes' %>
|
|
| 127 |
<%= render_tabs issue_history_tabs, issue_history_default_tab %>
|
|
| 128 | 128 |
</div> |
| 129 | 129 | |
| 130 | 130 |
<%= render partial: 'action_menu_edit' unless User.current.wants_comments_in_reverse_order? %> |
| app/views/users/_preferences.html.erb | ||
|---|---|---|
| 4 | 4 |
<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> |
| 5 | 5 |
<p><%= pref_fields.check_box :warn_on_leaving_unsaved %></p> |
| 6 | 6 |
<p><%= pref_fields.select :textarea_font, textarea_font_options %></p> |
| 7 |
<p><%= pref_fields.select :history_default_tab, history_default_tab_options %></p> |
|
| 7 | 8 |
<% end %> |
| config/locales/en.yml | ||
|---|---|---|
| 380 | 380 |
field_full_width_layout: Full width layout |
| 381 | 381 |
field_digest: Checksum |
| 382 | 382 |
field_default_assigned_to: Default assignee |
| 383 |
field_history_default_tab: Issue's history default tab |
|
| 383 | 384 | |
| 384 | 385 |
setting_app_title: Application title |
| 385 | 386 |
setting_welcome_text: Welcome text |
| ... | ... | |
| 1037 | 1038 |
label_nothing_to_preview: Nothing to preview |
| 1038 | 1039 |
label_issue_history_properties: Property changes |
| 1039 | 1040 |
label_issue_history_notes: Notes |
| 1041 |
label_last_tab_visited: Last visited tab |
|
| 1040 | 1042 | |
| 1041 | 1043 |
button_login: Login |
| 1042 | 1044 |
button_submit: Submit |
| public/javascripts/application.js | ||
|---|---|---|
| 918 | 918 |
$(document).ready(function(){
|
| 919 | 919 |
$('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange);
|
| 920 | 920 |
toggleDisabledInit(); |
| 921 | ||
| 922 |
$('#history .tabs').on('click', 'a', function(e){
|
|
| 923 |
var tab = $(e.target).attr('id').replace('tab-','');
|
|
| 924 |
document.cookie = 'history_last_tab=' + tab |
|
| 925 |
}); |
|
| 921 | 926 |
}); |
| 922 | 927 | |
| 923 | 928 |
$(document).ready(function(){
|
| test/functional/users_controller_test.rb | ||
|---|---|---|
| 244 | 244 |
'time_zone' => 'Paris', |
| 245 | 245 |
'comments_sorting' => 'desc', |
| 246 | 246 |
'warn_on_leaving_unsaved' => '0', |
| 247 |
'textarea_font' => 'proportional' |
|
| 247 |
'textarea_font' => 'proportional', |
|
| 248 |
'history_default_tab' => 'history' |
|
| 248 | 249 |
} |
| 249 | 250 |
} |
| 250 | 251 |
end |
| ... | ... | |
| 255 | 256 |
assert_equal 'desc', user.pref[:comments_sorting] |
| 256 | 257 |
assert_equal '0', user.pref[:warn_on_leaving_unsaved] |
| 257 | 258 |
assert_equal 'proportional', user.pref[:textarea_font] |
| 259 |
assert_equal 'history', user.pref[:history_default_tab] |
|
| 258 | 260 |
end |
| 259 | 261 | |
| 260 | 262 |
def test_create_with_generate_password_should_email_the_password |
| test/helpers/issues_helper_test.rb | ||
|---|---|---|
| 329 | 329 |
def test_find_name_by_reflection_should_return_nil_for_missing_record |
| 330 | 330 |
assert_nil find_name_by_reflection('status', 99)
|
| 331 | 331 |
end |
| 332 | ||
| 332 | 333 |
end |