RE: Hierarchy in project jump box » backport-r198610-to-4_1.diff
| app/helpers/application_helper.rb (作業コピー) | ||
|---|---|---|
| 470 | 470 |
end |
| 471 | 471 |
end |
| 472 | 472 | |
| 473 |
def render_projects_for_jump_box(projects, selected=nil) |
|
| 474 |
jump_box = Redmine::ProjectJumpBox.new User.current |
|
| 475 |
query = params[:q] if request.format.js? |
|
| 476 |
bookmarked = jump_box.bookmarked_projects(query) |
|
| 477 |
recents = jump_box.recently_used_projects(query) |
|
| 478 |
projects = projects - (recents + bookmarked) |
|
| 479 |
projects_label = (bookmarked.any? || recents.any?) ? :label_optgroup_others : :label_project_plural |
|
| 473 |
def render_projects_for_jump_box(projects, selected: nil, query: nil) |
|
| 474 |
if query.blank? |
|
| 475 |
jump_box = Redmine::ProjectJumpBox.new User.current |
|
| 476 |
bookmarked = jump_box.bookmarked_projects |
|
| 477 |
recents = jump_box.recently_used_projects |
|
| 478 |
projects_label = :label_project_all |
|
| 479 |
else |
|
| 480 |
projects_label = :label_result_plural |
|
| 481 |
end |
|
| 480 | 482 |
jump = params[:jump].presence || current_menu_item |
| 481 | 483 |
s = (+'').html_safe |
| 482 | 484 |
build_project_link = ->(project, level = 0){
|
| ... | ... | |
| 522 | 524 |
content = |
| 523 | 525 |
content_tag('div',
|
| 524 | 526 |
content_tag('div', q, :class => 'quick-search') +
|
| 525 |
content_tag('div', render_projects_for_jump_box(projects, @project),
|
|
| 527 |
content_tag('div', render_projects_for_jump_box(projects, selected: @project),
|
|
| 526 | 528 |
:class => 'drdn-items projects selection') + |
| 527 | 529 |
content_tag('div', all, :class => 'drdn-items all-projects selection'),
|
| 528 | 530 |
:class => 'drdn-content' |
| app/views/projects/autocomplete.js.erb (作業コピー) | ||
|---|---|---|
| 1 | 1 |
<% |
| 2 | 2 |
s = '' |
| 3 | 3 |
if @projects.any? |
| 4 |
s = render_projects_for_jump_box(@projects) |
|
| 4 |
s = render_projects_for_jump_box(@projects, query: params[:q])
|
|
| 5 | 5 |
elsif params[:q].present? |
| 6 | 6 |
s = content_tag('span', l(:label_no_data))
|
| 7 | 7 |
end |
| app/views/projects/bookmark.js.erb (作業コピー) | ||
|---|---|---|
| 1 |
$('#project-jump div.drdn-items.projects').html('<%= j render_projects_for_jump_box(projects_for_jump_box(User.current), @project) %>');
|
|
| 1 |
$('#project-jump div.drdn-items.projects').html('<%= j render_projects_for_jump_box(projects_for_jump_box(User.current), selected: @project) %>');
|
|
| 2 | 2 |
$('.contextual a.icon.bookmark').replaceWith('<%= j bookmark_link @project %>');
|
| lib/redmine/project_jump_box.rb (作業コピー) | ||
|---|---|---|
| 28 | 28 |
@user.pref.recently_used_projects |
| 29 | 29 |
end |
| 30 | 30 | |
| 31 |
def recently_used_projects(query = nil)
|
|
| 31 |
def recently_used_projects |
|
| 32 | 32 |
project_ids = recently_used_project_ids |
| 33 |
projects = Project.where(id: project_ids) |
|
| 34 |
if query |
|
| 35 |
projects = projects.like(query) |
|
| 36 |
end |
|
| 37 |
projects. |
|
| 33 |
Project.where(id: project_ids). |
|
| 38 | 34 |
index_by(&:id). |
| 39 | 35 |
values_at(*project_ids). # sort according to stored order |
| 40 | 36 |
compact |
| 41 | 37 |
end |
| 42 | 38 | |
| 43 |
def bookmarked_projects(query = nil) |
|
| 44 |
projects = Project.where(id: bookmarked_project_ids).visible |
|
| 45 |
if query |
|
| 46 |
projects = projects.like(query) |
|
| 47 |
end |
|
| 48 |
projects.to_a |
|
| 39 |
def bookmarked_projects |
|
| 40 |
Project.where(id: bookmarked_project_ids).visible.to_a |
|
| 49 | 41 |
end |
| 50 | 42 | |
| 51 | 43 |
def project_used(project) |
| test/unit/lib/redmine/project_jump_box_test.rb (作業コピー) | ||
|---|---|---|
| 28 | 28 |
@onlinestore = Project.find 'onlinestore' |
| 29 | 29 |
end |
| 30 | 30 | |
| 31 |
def test_should_filter_bookmarked_projects
|
|
| 31 |
def test_should_find_bookmarked_projects
|
|
| 32 | 32 |
pjb = Redmine::ProjectJumpBox.new @user |
| 33 | 33 |
pjb.bookmark_project @ecookbook |
| 34 | ||
| 35 | 34 |
assert_equal 1, pjb.bookmarked_projects.size |
| 36 |
assert_equal 0, pjb.bookmarked_projects('online').size
|
|
| 37 |
assert_equal 1, pjb.bookmarked_projects('ecook').size
|
|
| 38 | 35 |
end |
| 39 | 36 | |
| 40 | 37 |
def test_should_not_include_bookmark_in_recently_used_list |
| ... | ... | |
| 47 | 44 |
assert_equal 0, pjb.recently_used_projects.size |
| 48 | 45 |
end |
| 49 | 46 | |
| 50 |
def test_should_filter_recently_used_projects
|
|
| 47 |
def test_should_find_recently_used_projects
|
|
| 51 | 48 |
pjb = Redmine::ProjectJumpBox.new @user |
| 52 | 49 |
pjb.project_used @ecookbook |
| 53 | ||
| 54 | 50 |
assert_equal 1, pjb.recently_used_projects.size |
| 55 |
assert_equal 0, pjb.recently_used_projects('online').size
|
|
| 56 |
assert_equal 1, pjb.recently_used_projects('ecook').size
|
|
| 57 | 51 |
end |
| 58 | 52 | |
| 59 | 53 |
def test_should_limit_recently_used_projects |
| ... | ... | |
| 64 | 58 |
@user.pref.recently_used_projects = 1 |
| 65 | 59 | |
| 66 | 60 |
assert_equal 1, pjb.recently_used_projects.size |
| 67 |
assert_equal 1, pjb.recently_used_projects('online').size
|
|
| 68 |
assert_equal 0, pjb.recently_used_projects('ecook').size
|
|
| 69 | 61 |
end |
| 70 | 62 | |
| 71 | 63 |
def test_should_record_recently_used_projects_order |