Patch by Jens Krämer. git-svn-id: http://svn.redmine.org/redmine/trunk@19861 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/4.2.0
@@ -499,13 +499,15 @@ module ApplicationHelper | |||
end | |||
end | |||
def render_projects_for_jump_box(projects, selected=nil) | |||
jump_box = Redmine::ProjectJumpBox.new User.current | |||
query = params[:q] if request.format.js? | |||
bookmarked = jump_box.bookmarked_projects(query) | |||
recents = jump_box.recently_used_projects(query) | |||
projects = projects - (recents + bookmarked) | |||
projects_label = (bookmarked.any? || recents.any?) ? :label_optgroup_others : :label_project_plural | |||
def render_projects_for_jump_box(projects, selected: nil, query: nil) | |||
if query.blank? | |||
jump_box = Redmine::ProjectJumpBox.new User.current | |||
bookmarked = jump_box.bookmarked_projects | |||
recents = jump_box.recently_used_projects | |||
projects_label = :label_project_all | |||
else | |||
projects_label = :label_result_plural | |||
end | |||
jump = params[:jump].presence || current_menu_item | |||
s = (+'').html_safe | |||
build_project_link = ->(project, level = 0){ | |||
@@ -551,7 +553,7 @@ module ApplicationHelper | |||
content = | |||
content_tag('div', | |||
content_tag('div', q, :class => 'quick-search') + | |||
content_tag('div', render_projects_for_jump_box(projects, @project), | |||
content_tag('div', render_projects_for_jump_box(projects, selected: @project), | |||
:class => 'drdn-items projects selection') + | |||
content_tag('div', all, :class => 'drdn-items all-projects selection'), | |||
:class => 'drdn-content') |
@@ -1,7 +1,7 @@ | |||
<% | |||
s = '' | |||
if @projects.any? | |||
s = render_projects_for_jump_box(@projects) | |||
s = render_projects_for_jump_box(@projects, query: params[:q]) | |||
elsif params[:q].present? | |||
s = content_tag('span', l(:label_no_data)) | |||
end |
@@ -1,2 +1,2 @@ | |||
$('#project-jump div.drdn-items.projects').html('<%= j render_projects_for_jump_box(projects_for_jump_box(User.current), @project) %>'); | |||
$('#project-jump div.drdn-items.projects').html('<%= j render_projects_for_jump_box(projects_for_jump_box(User.current), selected: @project) %>'); | |||
$('.contextual a.icon.bookmark').replaceWith('<%= j bookmark_link @project %>'); |
@@ -28,24 +28,16 @@ module Redmine | |||
@user.pref.recently_used_projects | |||
end | |||
def recently_used_projects(query = nil) | |||
def recently_used_projects | |||
project_ids = recently_used_project_ids | |||
projects = Project.where(id: project_ids) | |||
if query | |||
projects = projects.like(query) | |||
end | |||
projects. | |||
Project.where(id: project_ids). | |||
index_by(&:id). | |||
values_at(*project_ids). # sort according to stored order | |||
compact | |||
end | |||
def bookmarked_projects(query = nil) | |||
projects = Project.where(id: bookmarked_project_ids).visible | |||
if query | |||
projects = projects.like(query) | |||
end | |||
projects.to_a | |||
def bookmarked_projects | |||
Project.where(id: bookmarked_project_ids).visible.to_a | |||
end | |||
def project_used(project) |
@@ -28,13 +28,10 @@ class Redmine::ProjectJumpBoxTest < ActiveSupport::TestCase | |||
@onlinestore = Project.find 'onlinestore' | |||
end | |||
def test_should_filter_bookmarked_projects | |||
def test_should_find_bookmarked_projects | |||
pjb = Redmine::ProjectJumpBox.new @user | |||
pjb.bookmark_project @ecookbook | |||
assert_equal 1, pjb.bookmarked_projects.size | |||
assert_equal 0, pjb.bookmarked_projects('online').size | |||
assert_equal 1, pjb.bookmarked_projects('ecook').size | |||
end | |||
def test_should_not_include_bookmark_in_recently_used_list | |||
@@ -47,13 +44,10 @@ class Redmine::ProjectJumpBoxTest < ActiveSupport::TestCase | |||
assert_equal 0, pjb.recently_used_projects.size | |||
end | |||
def test_should_filter_recently_used_projects | |||
def test_should_find_recently_used_projects | |||
pjb = Redmine::ProjectJumpBox.new @user | |||
pjb.project_used @ecookbook | |||
assert_equal 1, pjb.recently_used_projects.size | |||
assert_equal 0, pjb.recently_used_projects('online').size | |||
assert_equal 1, pjb.recently_used_projects('ecook').size | |||
end | |||
def test_should_limit_recently_used_projects | |||
@@ -64,8 +58,6 @@ class Redmine::ProjectJumpBoxTest < ActiveSupport::TestCase | |||
@user.pref.recently_used_projects = 1 | |||
assert_equal 1, pjb.recently_used_projects.size | |||
assert_equal 1, pjb.recently_used_projects('online').size | |||
assert_equal 0, pjb.recently_used_projects('ecook').size | |||
end | |||
def test_should_record_recently_used_projects_order |