Commit 46daf01a155b68fb1cda270881aa1f6c8307e830

Authored by Dmitriy Zaporozhets
1 parent 634cbd71

Search for blobs by default inside project. Added pagination for blobs search

app/contexts/search_context.rb
@@ -14,10 +14,17 @@ class SearchContext @@ -14,10 +14,17 @@ class SearchContext
14 result[:projects] = projects.search(query).limit(10) 14 result[:projects] = projects.search(query).limit(10)
15 15
16 # Search inside singe project 16 # Search inside singe project
17 - result[:project] = project = projects.first if projects.length == 1 17 + project = projects.first if projects.length == 1
18 18
19 if params[:search_code].present? 19 if params[:search_code].present?
20 - result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo? 20 + blobs = []
  21 +
  22 + unless project.empty_repo?
  23 + blobs = project.repository.search_files(query, params[:repository_ref])
  24 + blobs = Kaminari.paginate_array(blobs).page(params[:page]).per(20)
  25 + end
  26 +
  27 + result[:blobs] = blobs
21 else 28 else
22 result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10) 29 result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
23 result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10) 30 result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10)
app/controllers/search_controller.rb
@@ -10,13 +10,13 @@ class SearchController < ApplicationController @@ -10,13 +10,13 @@ class SearchController < ApplicationController
10 group_project_ids = @group.projects.map(&:id) 10 group_project_ids = @group.projects.map(&:id)
11 project_ids.select! { |id| group_project_ids.include?(id)} 11 project_ids.select! { |id| group_project_ids.include?(id)}
12 elsif project_id.present? 12 elsif project_id.present?
  13 + @project = Project.find(params[:project_id])
13 project_ids.select! { |id| id == project_id.to_i} 14 project_ids.select! { |id| id == project_id.to_i}
14 end 15 end
15 16
16 result = SearchContext.new(project_ids, params).execute 17 result = SearchContext.new(project_ids, params).execute
17 18
18 @projects = result[:projects] 19 @projects = result[:projects]
19 - @project = result[:project]  
20 @merge_requests = result[:merge_requests] 20 @merge_requests = result[:merge_requests]
21 @issues = result[:issues] 21 @issues = result[:issues]
22 @wiki_pages = result[:wiki_pages] 22 @wiki_pages = result[:wiki_pages]
app/views/layouts/_search.html.haml
@@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
2 = form_tag search_path, method: :get, class: 'navbar-form pull-left' do |f| 2 = form_tag search_path, method: :get, class: 'navbar-form pull-left' do |f|
3 = text_field_tag "search", nil, placeholder: "Search", class: "search-input" 3 = text_field_tag "search", nil, placeholder: "Search", class: "search-input"
4 = hidden_field_tag :group_id, @group.try(:id) 4 = hidden_field_tag :group_id, @group.try(:id)
5 - = hidden_field_tag :project_id, @project.try(:id) 5 + - if @project && @project.persisted?
  6 + = hidden_field_tag :project_id, @project.id
  7 + = hidden_field_tag :search_code, true
6 = hidden_field_tag :repository_ref, @ref 8 = hidden_field_tag :repository_ref, @ref
7 = submit_tag 'Go' if ENV['RAILS_ENV'] == 'test' 9 = submit_tag 'Go' if ENV['RAILS_ENV'] == 'test'
8 .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source } 10 .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source }
app/views/search/_blob.html.haml 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +%li
  2 + .file_holder
  3 + .file_title
  4 + = link_to project_blob_path(@project, tree_join(blob.ref, blob.filename), :anchor => "L" + blob.startline.to_s) do
  5 + %i.icon-file
  6 + %strong
  7 + = blob.filename
  8 + .file_content.code.term
  9 + %div{class: user_color_scheme_class}
  10 + = raw blob.colorize( formatter: :gitlab, options: { first_line_number: blob.startline } )
app/views/search/_result.html.haml
1 %fieldset 1 %fieldset
2 %legend 2 %legend
3 Search results 3 Search results
4 - %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.count}) 4 + %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.total_count})
5 5
6 - if @project 6 - if @project
7 %ul.nav.nav-pills 7 %ul.nav.nav-pills
@@ -43,17 +43,11 @@ @@ -43,17 +43,11 @@
43 %strong.term 43 %strong.term
44 = truncate wiki_page.title, length: 50 44 = truncate wiki_page.title, length: 50
45 %span.light (#{wiki_page.project.name_with_namespace}) 45 %span.light (#{wiki_page.project.name_with_namespace})
46 - - @blobs.each do |file|  
47 - %li  
48 - .file_holder  
49 - .file_title  
50 - = link_to project_blob_path(@project, tree_join(file.ref, file.filename), :anchor => "L" + file.startline.to_s) do  
51 - %i.icon-file  
52 - %strong  
53 - = file.filename  
54 - .file_content.code.term  
55 - %div{class: user_color_scheme_class}  
56 - = raw file.colorize( formatter: :gitlab, options: { first_line_number: file.startline } ) 46 +
  47 + - @blobs.each do |blob|
  48 + = render 'blob', blob: blob
  49 +
  50 + = paginate @blobs, theme: 'gitlab'
57 51
58 :javascript 52 :javascript
59 $(function() { 53 $(function() {
app/views/search/show.html.haml
@@ -4,6 +4,8 @@ @@ -4,6 +4,8 @@
4 %span Looking for 4 %span Looking for
5 .input 5 .input
6 = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search" 6 = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search"
  7 + = hidden_field_tag :project_id, params[:project_id]
  8 + = hidden_field_tag :group_id, params[:group_id]
7 = hidden_field_tag :search_code, params[:search_code] 9 = hidden_field_tag :search_code, params[:search_code]
8 = submit_tag 'Search', class: "btn btn-primary wide" 10 = submit_tag 'Search', class: "btn btn-primary wide"
9 .prepend-top-10 11 .prepend-top-10