]> source.dussan.org Git - redmine.git/commitdiff
Always preserve the tree structure in the project jump box (#32944).
authorGo MAEDA <maeda@farend.jp>
Mon, 6 Jul 2020 14:06:52 +0000 (14:06 +0000)
committerGo MAEDA <maeda@farend.jp>
Mon, 6 Jul 2020 14:06:52 +0000 (14:06 +0000)
Patch by Jens Krämer.

git-svn-id: http://svn.redmine.org/redmine/trunk@19861 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/application_helper.rb
app/views/projects/autocomplete.js.erb
app/views/projects/bookmark.js.erb
lib/redmine/project_jump_box.rb
test/unit/lib/redmine/project_jump_box_test.rb

index 28186124a905bd72acdc92dcbf3b0396ef89188a..c9869d3d8f4f78dd753900508b043c79eb8d7b32 100644 (file)
@@ -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')
index 03f7fa640dfe96d3337169a1388acbc040ef6e31..02c8952d4c9c7d35e1dd749ed8648ef33a65f049 100644 (file)
@@ -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
index 559585c16e7ca1421c0c1e798fb101e7c026a6e1..f2d515604b5cfefb58134ba69232f1eddf346f89 100644 (file)
@@ -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 %>');
index f37d78ac9827f2e395ee433a71633dae318627eb..d62ed684dbe9249db5c902a3da8b2ade3f01ba39 100644 (file)
@@ -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)
index a9a7e284d3fd668a4837a4695e5baa2d045023e3..5842354c5a7688c699e2f2bbe5a6d1068209c496 100644 (file)
@@ -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