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 14 result[:projects] = projects.search(query).limit(10)
15 15  
16 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 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 28 else
22 29 result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10)
23 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 10 group_project_ids = @group.projects.map(&:id)
11 11 project_ids.select! { |id| group_project_ids.include?(id)}
12 12 elsif project_id.present?
  13 + @project = Project.find(params[:project_id])
13 14 project_ids.select! { |id| id == project_id.to_i}
14 15 end
15 16  
16 17 result = SearchContext.new(project_ids, params).execute
17 18  
18 19 @projects = result[:projects]
19   - @project = result[:project]
20 20 @merge_requests = result[:merge_requests]
21 21 @issues = result[:issues]
22 22 @wiki_pages = result[:wiki_pages]
... ...
app/views/layouts/_search.html.haml
... ... @@ -2,7 +2,9 @@
2 2 = form_tag search_path, method: :get, class: 'navbar-form pull-left' do |f|
3 3 = text_field_tag "search", nil, placeholder: "Search", class: "search-input"
4 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 8 = hidden_field_tag :repository_ref, @ref
7 9 = submit_tag 'Go' if ENV['RAILS_ENV'] == 'test'
8 10 .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source }
... ...
app/views/search/_blob.html.haml 0 → 100644
... ... @@ -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 1 %fieldset
2 2 %legend
3 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 6 - if @project
7 7 %ul.nav.nav-pills
... ... @@ -43,17 +43,11 @@
43 43 %strong.term
44 44 = truncate wiki_page.title, length: 50
45 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 52 :javascript
59 53 $(function() {
... ...
app/views/search/show.html.haml
... ... @@ -4,6 +4,8 @@
4 4 %span Looking for
5 5 .input
6 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 9 = hidden_field_tag :search_code, params[:search_code]
8 10 = submit_tag 'Search', class: "btn btn-primary wide"
9 11 .prepend-top-10
... ...