Commit 46daf01a155b68fb1cda270881aa1f6c8307e830
1 parent
634cbd71
Exists in
master
and in
4 other branches
Search for blobs by default inside project. Added pagination for blobs search
Showing
6 changed files
with
31 additions
and
16 deletions
Show diff stats
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 } |
@@ -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 |