From: Dmitriy Zaporozhets Date: Tue, 14 May 2013 17:11:48 +0000 (+0300) Subject: Search for blobs by default inside project. Added pagination for blobs search X-Git-Tag: v5.2.0~29 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=46daf01a155b68fb1cda270881aa1f6c8307e830;p=wvm%2Fgitlab.git Search for blobs by default inside project. Added pagination for blobs search --- diff --git a/app/contexts/search_context.rb b/app/contexts/search_context.rb index 938429df6..1f28c7f9c 100644 --- a/app/contexts/search_context.rb +++ b/app/contexts/search_context.rb @@ -14,10 +14,17 @@ class SearchContext result[:projects] = projects.search(query).limit(10) # Search inside singe project - result[:project] = project = projects.first if projects.length == 1 + project = projects.first if projects.length == 1 if params[:search_code].present? - result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo? + blobs = [] + + unless project.empty_repo? + blobs = project.repository.search_files(query, params[:repository_ref]) + blobs = Kaminari.paginate_array(blobs).page(params[:page]).per(20) + end + + result[:blobs] = blobs else result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10) result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10) diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 132658c57..0a92d647a 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -10,13 +10,13 @@ class SearchController < ApplicationController group_project_ids = @group.projects.map(&:id) project_ids.select! { |id| group_project_ids.include?(id)} elsif project_id.present? + @project = Project.find(params[:project_id]) project_ids.select! { |id| id == project_id.to_i} end result = SearchContext.new(project_ids, params).execute @projects = result[:projects] - @project = result[:project] @merge_requests = result[:merge_requests] @issues = result[:issues] @wiki_pages = result[:wiki_pages] diff --git a/app/views/layouts/_search.html.haml b/app/views/layouts/_search.html.haml index b7f89e3fe..a43a46b87 100644 --- a/app/views/layouts/_search.html.haml +++ b/app/views/layouts/_search.html.haml @@ -2,7 +2,9 @@ = form_tag search_path, method: :get, class: 'navbar-form pull-left' do |f| = text_field_tag "search", nil, placeholder: "Search", class: "search-input" = hidden_field_tag :group_id, @group.try(:id) - = hidden_field_tag :project_id, @project.try(:id) + - if @project && @project.persisted? + = hidden_field_tag :project_id, @project.id + = hidden_field_tag :search_code, true = hidden_field_tag :repository_ref, @ref = submit_tag 'Go' if ENV['RAILS_ENV'] == 'test' .search-autocomplete-json.hide{:'data-autocomplete-opts' => search_autocomplete_source } diff --git a/app/views/search/_blob.html.haml b/app/views/search/_blob.html.haml new file mode 100644 index 000000000..39e711707 --- /dev/null +++ b/app/views/search/_blob.html.haml @@ -0,0 +1,10 @@ +%li + .file_holder + .file_title + = link_to project_blob_path(@project, tree_join(blob.ref, blob.filename), :anchor => "L" + blob.startline.to_s) do + %i.icon-file + %strong + = blob.filename + .file_content.code.term + %div{class: user_color_scheme_class} + = raw blob.colorize( formatter: :gitlab, options: { first_line_number: blob.startline } ) diff --git a/app/views/search/_result.html.haml b/app/views/search/_result.html.haml index 9824ea1db..23f6646fb 100644 --- a/app/views/search/_result.html.haml +++ b/app/views/search/_result.html.haml @@ -1,7 +1,7 @@ %fieldset %legend Search results - %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.count}) + %span.cgray (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count + @blobs.total_count}) - if @project %ul.nav.nav-pills @@ -43,17 +43,11 @@ %strong.term = truncate wiki_page.title, length: 50 %span.light (#{wiki_page.project.name_with_namespace}) - - @blobs.each do |file| - %li - .file_holder - .file_title - = link_to project_blob_path(@project, tree_join(file.ref, file.filename), :anchor => "L" + file.startline.to_s) do - %i.icon-file - %strong - = file.filename - .file_content.code.term - %div{class: user_color_scheme_class} - = raw file.colorize( formatter: :gitlab, options: { first_line_number: file.startline } ) + + - @blobs.each do |blob| + = render 'blob', blob: blob + + = paginate @blobs, theme: 'gitlab' :javascript $(function() { diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index 6e343b216..f96473779 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -4,6 +4,8 @@ %span Looking for .input = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search" + = hidden_field_tag :project_id, params[:project_id] + = hidden_field_tag :group_id, params[:group_id] = hidden_field_tag :search_code, params[:search_code] = submit_tag 'Search', class: "btn btn-primary wide" .prepend-top-10