From dd833d28ad91498070b4c72243c57022f4513544 Mon Sep 17 00:00:00 2001 From: VSizov <fk@sphere.com> Date: Sat, 15 Oct 2011 19:56:53 +0300 Subject: [PATCH] Sortable issues --- Gemfile | 1 + Gemfile.lock | 2 ++ app/assets/javascripts/dashboard.js.coffee | 3 --- app/assets/javascripts/issues.js.coffee | 3 --- app/assets/javascripts/profile.js.coffee | 3 --- app/assets/javascripts/projects.js | 1 + app/assets/stylesheets/projects.css.scss | 4 ++++ app/controllers/issues_controller.rb | 10 +++++++++ app/models/issue.rb | 2 ++ app/models/project.rb | 2 +- app/views/issues/_show.html.haml | 2 +- app/views/issues/index.html.haml | 26 ++++++++++++++++++++++ app/views/issues/index.js.haml | 1 + config/initializers/rails_footnotes.rb | 6 ++--- config/routes.rb | 6 ++++- db/schema.rb | 3 ++- 16 files changed, 59 insertions(+), 16 deletions(-) delete mode 100644 app/assets/javascripts/dashboard.js.coffee delete mode 100644 app/assets/javascripts/issues.js.coffee delete mode 100644 app/assets/javascripts/profile.js.coffee diff --git a/Gemfile b/Gemfile index 374b50318..523793e7c 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ gem "albino", :git => "git://github.com/gitlabhq/albino.git" gem "kaminari" gem "thin" gem "git" +gem "acts_as_list" group :assets do gem 'sass-rails', " ~> 3.1.0" diff --git a/Gemfile.lock b/Gemfile.lock index c02ad3cdc..2aa894aa8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,6 +61,7 @@ GEM activesupport (= 3.1.0) activesupport (3.1.0) multi_json (~> 1.0) + acts_as_list (0.1.4) addressable (2.2.6) ansi (1.3.0) archive-tar-minitar (0.5.2) @@ -240,6 +241,7 @@ PLATFORMS ruby DEPENDENCIES + acts_as_list albino! annotate! autotest diff --git a/app/assets/javascripts/dashboard.js.coffee b/app/assets/javascripts/dashboard.js.coffee deleted file mode 100644 index 761567942..000000000 --- a/app/assets/javascripts/dashboard.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/issues.js.coffee b/app/assets/javascripts/issues.js.coffee deleted file mode 100644 index 761567942..000000000 --- a/app/assets/javascripts/issues.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee deleted file mode 100644 index 761567942..000000000 --- a/app/assets/javascripts/profile.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js index dc13d0060..74f0e643c 100644 --- a/app/assets/javascripts/projects.js +++ b/app/assets/javascripts/projects.js @@ -34,6 +34,7 @@ $(document).ready(function(){ e.preventDefault(); } }); + }); function focusSearch() { diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss index 0ee40f512..fdfd2b865 100644 --- a/app/assets/stylesheets/projects.css.scss +++ b/app/assets/stylesheets/projects.css.scss @@ -539,3 +539,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td { float:left; } } + +.handle:hover{ + cursor: move; +} diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index f8b471980..3e5f28982 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -69,4 +69,14 @@ class IssuesController < ApplicationController format.js { render :nothing => true } end end + + def sort + @issues = @project.issues.all + @issues.each do |issue| + issue.position = params['issue'].index(issue.id.to_s) + 1 + issue.save + end + + render :nothing => true + end end diff --git a/app/models/issue.rb b/app/models/issue.rb index 0399607ef..9b1b923ea 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -21,6 +21,8 @@ class Issue < ActiveRecord::Base scope :opened, where(:closed => false) scope :closed, where(:closed => true) scope :assigned, lambda { |u| where(:assignee_id => u.id)} + + acts_as_list end # == Schema Information # diff --git a/app/models/project.rb b/app/models/project.rb index 17b556c34..06a36a275 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -3,7 +3,7 @@ require "grit" class Project < ActiveRecord::Base belongs_to :owner, :class_name => "User" - has_many :issues, :dependent => :destroy + has_many :issues, :dependent => :destroy, :order => "position" has_many :users_projects, :dependent => :destroy has_many :users, :through => :users_projects has_many :notes, :dependent => :destroy diff --git a/app/views/issues/_show.html.haml b/app/views/issues/_show.html.haml index 131d0d4c8..cf0102080 100644 --- a/app/views/issues/_show.html.haml +++ b/app/views/issues/_show.html.haml @@ -1,6 +1,6 @@ %tr{ :id => dom_id(issue), :class => "issue", :url => project_issue_path(@project, issue) } %td - = image_tag gravatar_icon(issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;" + = image_tag gravatar_icon(issue.assignee.email), :class => ["left", "handle"], :width => 40, :style => "padding:0 5px;" = truncate issue.assignee.name, :lenght => 20 %td ##{issue.id} %td= html_escape issue.title diff --git a/app/views/issues/index.html.haml b/app/views/issues/index.html.haml index 7157d2c38..6f4548a80 100644 --- a/app/views/issues/index.html.haml +++ b/app/views/issues/index.html.haml @@ -22,3 +22,29 @@ :javascript $('.delete-issue').live('ajax:success', function() { $(this).closest('tr').fadeOut(); }); + + function setSortable(){ + $('#issues-table>tbody').sortable({ + axis: 'y', + dropOnEmpty: false, + handle: '.handle', + cursor: 'crosshair', + items: 'tr', + opacity: 0.4, + scroll: true, + update: function(){ + $.ajax({ + type: 'post', + data: $('#issues-table>tbody').sortable('serialize'), + dataType: 'script', + complete: function(request){ + $('#issues-table>tbody').effect('highlight'); + }, + url: "#{sort_project_issues_path(@project)}"}) + } + }); + } + + $(function(){ + setSortable(); + }); diff --git a/app/views/issues/index.js.haml b/app/views/issues/index.js.haml index 1f0513092..bc18ac151 100644 --- a/app/views/issues/index.js.haml +++ b/app/views/issues/index.js.haml @@ -1,2 +1,3 @@ :plain $('#issues-table-holder').html("#{escape_javascript(render('issues'))}"); + setSortable(); diff --git a/config/initializers/rails_footnotes.rb b/config/initializers/rails_footnotes.rb index da9d58e4a..db71e39c6 100644 --- a/config/initializers/rails_footnotes.rb +++ b/config/initializers/rails_footnotes.rb @@ -1,5 +1,5 @@ -if defined?(Footnotes) && Rails.env.development? - Footnotes.run! # first of all +#if defined?(Footnotes) && Rails.env.development? + #Footnotes.run! # first of all # ... other init code -end +#end diff --git a/config/routes.rb b/config/routes.rb index 00106b119..bdfdff5ff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -40,7 +40,11 @@ Gitlab::Application.routes.draw do end resources :commits resources :team_members - resources :issues + resources :issues do + collection do + post :sort + end + end resources :notes, :only => [:create, :destroy] end root :to => "projects#index" diff --git a/db/schema.rb b/db/schema.rb index befe0b2a5..ed37dbbb9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20111009111204) do +ActiveRecord::Schema.define(:version => 20111015154310) do create_table "issues", :force => true do |t| t.string "title" @@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version => 20111009111204) do t.datetime "created_at" t.datetime "updated_at" t.boolean "closed", :default => false, :null => false + t.integer "position", :default => 0 end create_table "keys", :force => true do |t| -- 2.30.9