OSDN Git Service

Search for blobs by default inside project. Added pagination for blobs search
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 14 May 2013 17:11:48 +0000 (20:11 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 14 May 2013 17:11:48 +0000 (20:11 +0300)
app/contexts/search_context.rb
app/controllers/search_controller.rb
app/views/layouts/_search.html.haml
app/views/search/_blob.html.haml [new file with mode: 0644]
app/views/search/_result.html.haml
app/views/search/show.html.haml

index 938429d..1f28c7f 100644 (file)
@@ -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)
index 132658c..0a92d64 100644 (file)
@@ -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]
index b7f89e3..a43a46b 100644 (file)
@@ -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 (file)
index 0000000..39e7117
--- /dev/null
@@ -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 } )
index 9824ea1..23f6646 100644 (file)
@@ -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
           %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() {
index 6e343b2..f964737 100644 (file)
@@ -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