summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/milestone.js.coffee16
-rw-r--r--app/controllers/projects/milestones_controller.rb12
-rw-r--r--app/views/projects/milestones/_merge_request.html.haml2
-rw-r--r--app/views/projects/milestones/_merge_requests.html.haml2
-rw-r--r--config/routes.rb1
-rw-r--r--db/migrate/20140611135229_add_position_to_merge_request.rb5
-rw-r--r--db/schema.rb11
7 files changed, 41 insertions, 8 deletions
diff --git a/app/assets/javascripts/milestone.js.coffee b/app/assets/javascripts/milestone.js.coffee
index 3418832a9cc..97a71b9d33f 100644
--- a/app/assets/javascripts/milestone.js.coffee
+++ b/app/assets/javascripts/milestone.js.coffee
@@ -23,6 +23,18 @@ class Milestone
new Flash("Issues update failed", 'alert')
dataType: "json"
+ @sortMergeRequests: (data) ->
+ sort_mr_url = location.href + "/sort_merge_requests"
+
+ $.ajax
+ type: "PUT"
+ url: sort_mr_url
+ data: data
+ success: (data) ->
+ if data.saved != true
+ new Flash("MR update failed", 'alert')
+ dataType: "json"
+
@updateMergeRequest: (li, merge_request_url, data) ->
$.ajax
type: "PUT"
@@ -71,6 +83,10 @@ class Milestone
$("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable(
connectWith: ".merge_requests-sortable-list",
dropOnEmpty: true,
+ update: (event, ui) ->
+ data = $(this).sortable("serialize")
+ Milestone.sortMergeRequests(data)
+
receive: (event, ui) ->
new_state = $(this).data('state')
merge_request_id = ui.item.data('iid')
diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb
index 139470237d2..c38c77d6b85 100644
--- a/app/controllers/projects/milestones_controller.rb
+++ b/app/controllers/projects/milestones_controller.rb
@@ -1,6 +1,6 @@
class Projects::MilestonesController < Projects::ApplicationController
before_filter :module_enabled
- before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues]
+ before_filter :milestone, only: [:edit, :update, :destroy, :show, :sort_issues, :sort_merge_requests]
# Allow read any milestone
before_filter :authorize_read_milestone!
@@ -82,6 +82,16 @@ class Projects::MilestonesController < Projects::ApplicationController
render json: { saved: true }
end
+ def sort_merge_requests
+ @merge_requests = @milestone.merge_requests.where(id: params['sortable_merge_request'])
+ @merge_requests.each do |merge_request|
+ merge_request.position = params['sortable_merge_request'].index(merge_request.id.to_s) + 1
+ merge_request.save
+ end
+
+ render json: { saved: true }
+ end
+
protected
def milestone
diff --git a/app/views/projects/milestones/_merge_request.html.haml b/app/views/projects/milestones/_merge_request.html.haml
index 4787da51e6d..d630c4518dd 100644
--- a/app/views/projects/milestones/_merge_request.html.haml
+++ b/app/views/projects/milestones/_merge_request.html.haml
@@ -1,4 +1,4 @@
-%li{ class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
+%li{ id: dom_id(merge_request, 'sortable'), class: 'mr-row', 'data-iid' => merge_request.iid, 'data-url' => project_merge_request_path(@project, merge_request) }
%span.str-truncated
= link_to [@project, merge_request] do
%span.cgray ##{merge_request.iid}
diff --git a/app/views/projects/milestones/_merge_requests.html.haml b/app/views/projects/milestones/_merge_requests.html.haml
index 18c46601834..521bfa7850e 100644
--- a/app/views/projects/milestones/_merge_requests.html.haml
+++ b/app/views/projects/milestones/_merge_requests.html.haml
@@ -1,6 +1,6 @@
.panel.panel-default
.panel-heading= title
%ul{ class: "well-list merge_requests-sortable-list", id: "merge_requests-list-#{id}", "data-state" => id }
- - merge_requests.each do |merge_request|
+ - merge_requests.sort_by(&:position).each do |merge_request|
= render 'merge_request', merge_request: merge_request
%li.light Drag and drop available
diff --git a/config/routes.rb b/config/routes.rb
index c38b5c42a7b..34ee8d2d798 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -281,6 +281,7 @@ Gitlab::Application.routes.draw do
resources :milestones, except: [:destroy], constraints: {id: /\d+/} do
member do
put :sort_issues
+ put :sort_merge_requests
end
end
diff --git a/db/migrate/20140611135229_add_position_to_merge_request.rb b/db/migrate/20140611135229_add_position_to_merge_request.rb
new file mode 100644
index 00000000000..d5fdecd0c39
--- /dev/null
+++ b/db/migrate/20140611135229_add_position_to_merge_request.rb
@@ -0,0 +1,5 @@
+class AddPositionToMergeRequest < ActiveRecord::Migration
+ def change
+ add_column :merge_requests, :position, :integer, default: 0
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 93837337afc..345b6fd3b68 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20140502125220) do
+ActiveRecord::Schema.define(version: 20140611135229) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -121,9 +121,9 @@ ActiveRecord::Schema.define(version: 20140502125220) do
add_index "merge_request_diffs", ["merge_request_id"], name: "index_merge_request_diffs_on_merge_request_id", unique: true, using: :btree
create_table "merge_requests", force: true do |t|
- t.string "target_branch", null: false
- t.string "source_branch", null: false
- t.integer "source_project_id", null: false
+ t.string "target_branch", null: false
+ t.string "source_branch", null: false
+ t.integer "source_project_id", null: false
t.integer "author_id"
t.integer "assignee_id"
t.string "title"
@@ -132,9 +132,10 @@ ActiveRecord::Schema.define(version: 20140502125220) do
t.integer "milestone_id"
t.string "state"
t.string "merge_status"
- t.integer "target_project_id", null: false
+ t.integer "target_project_id", null: false
t.integer "iid"
t.text "description"
+ t.integer "position", default: 0
end
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree