Commit bb367689413a29eadb511f971b26363a913cb1f2
Exists in
spb-stable
and in
2 other branches
Merge branch 'milestone-issues-dragging' into 'master'
Milestone issues dragging This is part of #1207. I will submit this feature with small but finished merge requests.
Showing
11 changed files
with
81 additions
and
19 deletions
Show diff stats
app/assets/javascripts/dispatcher.js.coffee
... | ... | @@ -21,6 +21,8 @@ class Dispatcher |
21 | 21 | Issues.init() |
22 | 22 | when 'projects:issues:show' |
23 | 23 | new Issue() |
24 | + when 'projects:milestones:show' | |
25 | + new Milestone() | |
24 | 26 | when 'projects:issues:new', 'projects:merge_requests:new' |
25 | 27 | GitLab.GfmAutoComplete.setup() |
26 | 28 | when 'dashboard:show' | ... | ... |
... | ... | @@ -0,0 +1,41 @@ |
1 | +class Milestone | |
2 | + @updateIssue: (li, issue_url, data) -> | |
3 | + $.ajax | |
4 | + type: "PUT" | |
5 | + url: issue_url | |
6 | + data: data | |
7 | + success: (data) -> | |
8 | + if data.saved == true | |
9 | + $(li).effect 'highlight' | |
10 | + else | |
11 | + new Flash("Issue update failed", 'alert') | |
12 | + dataType: "json" | |
13 | + | |
14 | + constructor: -> | |
15 | + @bindSorting() | |
16 | + | |
17 | + bindSorting: -> | |
18 | + $("#issues-list-unassigned, #issues-list-ongoing, #issues-list-closed").sortable( | |
19 | + connectWith: ".issues-sortable-list", | |
20 | + dropOnEmpty: true, | |
21 | + receive: (event, ui) -> | |
22 | + new_state = $(this).data('state') | |
23 | + issue_id = ui.item.data('iid') | |
24 | + issue_url = ui.item.data('url') | |
25 | + | |
26 | + data = switch new_state | |
27 | + when 'ongoing' | |
28 | + "issue[assignee_id]=" + gon.current_user_id | |
29 | + when 'unassigned' | |
30 | + "issue[assignee_id]=" | |
31 | + when 'closed' | |
32 | + "issue[state_event]=close" | |
33 | + | |
34 | + if $(ui.sender).data('state') == "closed" | |
35 | + data += "&issue[state_event]=reopen" | |
36 | + | |
37 | + Milestone.updateIssue(ui.item, issue_url, data) | |
38 | + | |
39 | + ).disableSelection() | |
40 | + | |
41 | +@Milestone = Milestone | ... | ... |
app/assets/stylesheets/main/mixins.scss
app/controllers/application_controller.rb
... | ... | @@ -174,10 +174,14 @@ class ApplicationController < ActionController::Base |
174 | 174 | def add_gon_variables |
175 | 175 | gon.default_issues_tracker = Project.issues_tracker.default_value |
176 | 176 | gon.api_version = API::API.version |
177 | - gon.api_token = current_user.private_token if current_user | |
178 | 177 | gon.gravatar_url = request.ssl? || Gitlab.config.gitlab.https ? Gitlab.config.gravatar.ssl_url : Gitlab.config.gravatar.plain_url |
179 | 178 | gon.relative_url_root = Gitlab.config.gitlab.relative_url_root |
180 | 179 | gon.gravatar_enabled = Gitlab.config.gravatar.enabled |
180 | + | |
181 | + if current_user | |
182 | + gon.current_user_id = current_user.id | |
183 | + gon.api_token = current_user.private_token | |
184 | + end | |
181 | 185 | end |
182 | 186 | |
183 | 187 | def check_password_expiration | ... | ... |
app/controllers/projects/issues_controller.rb
app/models/concerns/issuable.rb
... | ... | @@ -24,6 +24,8 @@ module Issuable |
24 | 24 | scope :unassigned, -> { where("assignee_id IS NULL") } |
25 | 25 | scope :of_projects, ->(ids) { where(project_id: ids) } |
26 | 26 | scope :opened, -> { with_state(:opened, :reopened) } |
27 | + scope :only_opened, -> { with_state(:opened) } | |
28 | + scope :only_reopened, -> { with_state(:reopened) } | |
27 | 29 | scope :closed, -> { with_state(:closed) } |
28 | 30 | |
29 | 31 | delegate :name, | ... | ... |
... | ... | @@ -0,0 +1,9 @@ |
1 | +%li{ class: 'issue-row', 'data-iid' => issue.iid, 'data-url' => project_issue_path(@project, issue) } | |
2 | + %span.str-truncated | |
3 | + = link_to [@project, issue] do | |
4 | + %span.cgray ##{issue.iid} | |
5 | + = link_to_gfm issue.title, [@project, issue] | |
6 | + - if issue.assignee | |
7 | + .pull-right | |
8 | + = image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16" | |
9 | + | ... | ... |
app/views/projects/milestones/_issues.html.haml
1 | 1 | .panel.panel-default |
2 | 2 | .panel-heading= title |
3 | - %ul.well-list | |
3 | + %ul{ class: "well-list issues-sortable-list", id: "issues-list-#{id}", "data-state" => id } | |
4 | 4 | - issues.each do |issue| |
5 | - %li | |
6 | - = link_to [@project, issue] do | |
7 | - %span.label{class: issue.closed? ? 'label-danger' : 'label-info'} ##{issue.iid} | |
8 | - = link_to_gfm truncate(issue.title, length: 40), [@project, issue] | |
9 | - - if issue.assignee | |
10 | - .pull-right | |
11 | - = image_tag avatar_icon(issue.assignee.email, 16), class: "avatar s16" | |
5 | + = render 'issue', issue: issue | |
6 | + %li.light Drag and drop available | ... | ... |
app/views/projects/milestones/show.html.haml
... | ... | @@ -35,6 +35,12 @@ |
35 | 35 | %h4.title |
36 | 36 | = gfm escape_once(@milestone.title) |
37 | 37 | |
38 | + - if @milestone.description.present? | |
39 | + .description | |
40 | + .wiki | |
41 | + = preserve do | |
42 | + = markdown @milestone.description | |
43 | + | |
38 | 44 | .context |
39 | 45 | %p |
40 | 46 | Progress: |
... | ... | @@ -45,11 +51,6 @@ |
45 | 51 | .progress.progress-info |
46 | 52 | .progress-bar{style: "width: #{@milestone.percent_complete}%;"} |
47 | 53 | |
48 | - - if @milestone.description.present? | |
49 | - .description | |
50 | - .wiki | |
51 | - = preserve do | |
52 | - = markdown @milestone.description | |
53 | 54 | |
54 | 55 | %ul.nav.nav-tabs |
55 | 56 | %li.active |
... | ... | @@ -75,11 +76,11 @@ |
75 | 76 | .tab-pane.active#tab-issues |
76 | 77 | .row |
77 | 78 | .col-md-4 |
78 | - = render('issues', title: 'Unstarted Issues (open and unassigned)', issues: @issues.opened.unassigned) | |
79 | + = render('issues', title: 'Unstarted Issues (open and unassigned)', issues: @issues.opened.unassigned, id: 'unassigned') | |
79 | 80 | .col-md-4 |
80 | - = render('issues', title: 'Ongoing Issues (open and assigned)', issues: @issues.opened.assigned) | |
81 | + = render('issues', title: 'Ongoing Issues (open and assigned)', issues: @issues.opened.assigned, id: 'ongoing') | |
81 | 82 | .col-md-4 |
82 | - = render('issues', title: 'Completed Issues (closed)', issues: @issues.closed) | |
83 | + = render('issues', title: 'Completed Issues (closed)', issues: @issues.closed, id: 'closed') | |
83 | 84 | |
84 | 85 | .tab-pane#tab-merge-requests |
85 | 86 | .row | ... | ... |
features/steps/project/milestones.rb