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 |