OSDN Git Service

Add sorting to public projects page
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 26 Dec 2013 09:16:30 +0000 (11:16 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 26 Dec 2013 09:16:30 +0000 (11:16 +0200)
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/assets/stylesheets/gitlab_bootstrap/forms.scss
app/contexts/issues/list_context.rb
app/controllers/public/projects_controller.rb
app/views/public/projects/index.html.haml

index 1a310a7..39dd1f6 100644 (file)
@@ -21,6 +21,10 @@ form {
       text-align: left;
     }
   }
+
+  &.form-tiny {
+    margin: 0;
+  }
 }
 
 input.input-xpadding,
index fd27356..b256fd4 100644 (file)
@@ -29,7 +29,7 @@ module Issues
       if params[:milestone_id].present?
         @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id]))
       end
-      
+
       # Sort by :sort param
       @issues = sort(@issues, params[:sort])
 
@@ -49,6 +49,5 @@ module Issues
       else issues
       end
     end
-
   end
 end
index 8d66250..34425db 100644 (file)
@@ -8,6 +8,13 @@ class Public::ProjectsController < ApplicationController
   def index
     @projects = Project.public_or_internal_only(current_user)
     @projects = @projects.search(params[:search]) if params[:search].present?
-    @projects = @projects.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page]).per(20)
+    @projects = case params[:sort]
+                when 'newest' then @projects.order('created_at DESC')
+                when 'oldest' then @projects.order('created_at ASC')
+                when 'recently_updated' then @projects.order('updated_at DESC')
+                when 'last_updated' then @projects.order('updated_at ASC')
+                else @projects.order("namespaces.path, projects.name ASC")
+                end
+    @projects = @projects.includes(:namespace).page(params[:page]).per(20)
   end
 end
index b88169a..193d5c0 100644 (file)
@@ -1,16 +1,35 @@
-.row
-  .span6
-    %h3.page-title
-      Projects (#{@projects.total_count})
-    .light
-      You can browse public projects in read-only mode until signed in.
+%h3.page-title
+  Projects (#{@projects.total_count})
+.light
+  You can browse public projects in read-only mode until signed in.
+%hr
+.clearfix
+  .pull-left
+    = form_tag public_projects_path, method: :get, class: 'form-inline form-tiny' do |f|
+      .search-holder
+        = search_field_tag :search, params[:search], placeholder: "Filter by name", class: "span4 search-text-input", id: "projects_search"
+        = submit_tag 'Search', class: "btn btn-primary wide"
+
+  .pull-right
+    .dropdown.inline
+      %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
+        %span.light sort:
+        - if @sort.present?
+          = @sort
+        - else
+          Newest
+        %b.caret
+      %ul.dropdown-menu
+        %li
+          = link_to public_projects_path(sort: 'newest') do
+            Newest
+          = link_to public_projects_path(sort: 'oldest') do
+            Oldest
+          = link_to public_projects_path(sort: 'recently_updated') do
+            Recently updated
+          = link_to public_projects_path(sort: 'last_updated') do
+            Last updated
 
-  .span6
-    .pull-right
-      = form_tag public_projects_path, method: :get, class: 'form-inline' do |f|
-        .search-holder
-          = search_field_tag :search, params[:search], placeholder: "Filter by name", class: "span3 search-text-input", id: "projects_search"
-          = submit_tag 'Search', class: "btn btn-primary wide"
 %hr
 .public-projects
   %ul.bordered-list.top-list