From 512409be402c51d82c15546357840a7ca0c5c135 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Wed, 1 Jul 2020 08:30:23 +0800 Subject: [PATCH] project jump box usability enhancements - always render all projects in third segment of jump box - regardless of their recently used or favorites status - do not render recently used and favorites when a query is present --- app/helpers/application_helper.rb | 18 ++++++++++-------- app/views/projects/autocomplete.js.erb | 2 +- app/views/projects/bookmark.js.erb | 2 +- lib/redmine/project_jump_box.rb | 16 ++++------------ test/unit/lib/redmine/project_jump_box_test.rb | 12 ++---------- 5 files changed, 18 insertions(+), 32 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 28186124a..c9869d3d8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -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') diff --git a/app/views/projects/autocomplete.js.erb b/app/views/projects/autocomplete.js.erb index 03f7fa640..02c8952d4 100644 --- a/app/views/projects/autocomplete.js.erb +++ b/app/views/projects/autocomplete.js.erb @@ -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 diff --git a/app/views/projects/bookmark.js.erb b/app/views/projects/bookmark.js.erb index 559585c16..f2d515604 100644 --- a/app/views/projects/bookmark.js.erb +++ b/app/views/projects/bookmark.js.erb @@ -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 %>'); diff --git a/lib/redmine/project_jump_box.rb b/lib/redmine/project_jump_box.rb index f37d78ac9..d62ed684d 100644 --- a/lib/redmine/project_jump_box.rb +++ b/lib/redmine/project_jump_box.rb @@ -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) diff --git a/test/unit/lib/redmine/project_jump_box_test.rb b/test/unit/lib/redmine/project_jump_box_test.rb index a9a7e284d..5842354c5 100644 --- a/test/unit/lib/redmine/project_jump_box_test.rb +++ b/test/unit/lib/redmine/project_jump_box_test.rb @@ -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 -- 2.20.1