From 5a59712b8ac29450dfef0af0dd381529f0d9d7ae Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@gitlab.com>
Date: Wed, 2 Dec 2015 14:02:12 +0100
Subject: [PATCH] Add "New X" buttons to dashboard and group issue, MR and
 milestone indexes

---
 app/views/dashboard/issues.html.haml          | 31 +++++++++++----
 app/views/dashboard/merge_requests.html.haml  | 23 ++++++++++-
 .../dashboard/milestones/index.html.haml      | 21 ++++++++--
 app/views/groups/issues.html.haml             | 38 +++++++++++++------
 app/views/groups/merge_requests.html.haml     | 30 +++++++++++----
 app/views/groups/milestones/index.html.haml   | 24 +++++++-----
 app/views/projects/milestones/index.html.haml | 15 +++++---
 7 files changed, 134 insertions(+), 48 deletions(-)

diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml
index cd602e897b7..829c3c83769 100644
--- a/app/views/dashboard/issues.html.haml
+++ b/app/views/dashboard/issues.html.haml
@@ -4,14 +4,31 @@
   - if current_user
     = auto_discovery_link_tag(:atom, issues_dashboard_url(format: :atom, private_token: current_user.private_token), title: "#{current_user.name} issues")
 
+.project-issuable-filter
+  .controls
+    .pull-left
+      - if current_user
+        .hidden-xs.pull-left
+          = link_to issues_dashboard_url(format: :atom, private_token: current_user.private_token), class: 'btn' do
+            %i.fa.fa-rss
 
-.append-bottom-20
-  .pull-right
-    - if current_user
-      .hidden-xs.pull-left.prepend-top-20
-        = link_to issues_dashboard_url(format: :atom, private_token: current_user.private_token), class: '' do
-          %i.fa.fa-rss
+    - if @projects.any? { |project| can?(current_user, :create_issue, project) }
+      .dropdown.inline.prepend-left-10
+        %button.dropdown-toggle.btn.btn-new{type: 'button', 'data-toggle' => 'dropdown'}
+          %i.fa.fa-plus
+          New Issue
+          %b.caret
+        %ul.dropdown-menu.dropdown-menu-align-right
+          - @projects.each do |project|
+            - if can?(current_user, :create_issue, project)
+              %li
+                = link_to new_namespace_project_issue_path(project.namespace, project) do
+                  = project.name_with_namespace
 
   = render 'shared/issuable/filter', type: :issues
 
-= render 'shared/issues'
+.gray-content-block.second-block
+  List all issues from all projects you have access to.
+
+.prepend-top-default
+  = render 'shared/issues'
diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml
index d1f332fa0d3..2e91c8dec8a 100644
--- a/app/views/dashboard/merge_requests.html.haml
+++ b/app/views/dashboard/merge_requests.html.haml
@@ -1,6 +1,25 @@
 - page_title "Merge Requests"
 - header_title  "Merge Requests", merge_requests_dashboard_path(assignee_id: current_user.id)
 
-.append-bottom-20
+.project-issuable-filter
+  .controls
+    - if @projects.any? { |project| can?(current_user, :create_merge_request, project) }
+      .dropdown.inline
+        %button.dropdown-toggle.btn.btn-new{type: 'button', 'data-toggle' => 'dropdown'}
+          %i.fa.fa-plus
+          New Merge Request
+          %b.caret
+        %ul.dropdown-menu.dropdown-menu-align-right
+          - @projects.each do |project|
+            - if can?(current_user, :create_merge_request, project)
+              %li
+                = link_to new_namespace_project_merge_request_path(project.namespace, project) do
+                  = project.name_with_namespace
+
   = render 'shared/issuable/filter', type: :merge_requests
-= render 'shared/merge_requests'
+
+.gray-content-block.second-block
+  List all merge requests from all projects you have access to.
+
+.prepend-top-default
+  = render 'shared/merge_requests'
diff --git a/app/views/dashboard/milestones/index.html.haml b/app/views/dashboard/milestones/index.html.haml
index 635251e2374..9aea75e50db 100644
--- a/app/views/dashboard/milestones/index.html.haml
+++ b/app/views/dashboard/milestones/index.html.haml
@@ -1,12 +1,25 @@
 - page_title "Milestones"
-- header_title  "Milestones", dashboard_milestones_path
+- header_title "Milestones", dashboard_milestones_path
 
+.project-issuable-filter
+  .controls
+    - if @projects.any? { |project| can?(current_user, :admin_milestone, project) }
+      .dropdown.inline
+        %button.dropdown-toggle.btn.btn-new{type: 'button', 'data-toggle' => 'dropdown'}
+          %i.fa.fa-plus
+          New Milestone
+          %b.caret
+        %ul.dropdown-menu.dropdown-menu-align-right
+          - @projects.each do |project|
+            - if can?(current_user, :admin_milestone, project)
+              %li
+                = link_to new_namespace_project_milestone_path(project.namespace, project) do
+                  = project.name_with_namespace
 
-= render 'shared/milestones_filter'
+  = render 'shared/milestones_filter'
 
 .gray-content-block
-  .oneline
-    List all milestones from all projects you have access to.
+  List all milestones from all projects you have access to.
 
 .milestones
   %ul.content-list
diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml
index 08d97e418a3..5a9739a0cda 100644
--- a/app/views/groups/issues.html.haml
+++ b/app/views/groups/issues.html.haml
@@ -4,21 +4,35 @@
   - if current_user
     = auto_discovery_link_tag(:atom, issues_group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} issues")
 
+.project-issuable-filter
+  .controls
+    .pull-left
+      - if current_user
+        .hidden-xs.pull-left
+          = link_to issues_group_url(@group, format: :atom, private_token: current_user.private_token), class: 'btn' do
+            %i.fa.fa-rss
 
+    - if @projects.any? { |project| can?(current_user, :create_issue, project) }
+      .dropdown.inline.prepend-left-10
+        %button.dropdown-toggle.btn.btn-new{type: 'button', 'data-toggle' => 'dropdown'}
+          %i.fa.fa-plus
+          New Issue
+          %b.caret
+        %ul.dropdown-menu.dropdown-menu-align-right
+          - @projects.each do |project|
+            - if can?(current_user, :create_issue, project)
+              %li
+                = link_to new_namespace_project_issue_path(project.namespace, project) do
+                  = project.name_with_namespace
+
+  = render 'shared/issuable/filter', type: :issues
 
-= render 'shared/issuable/filter', type: :issues
 .gray-content-block.second-block
-  .pull-right
-    - if current_user
-      .hidden-xs.pull-left
-        = link_to issues_group_url(@group, format: :atom, private_token: current_user.private_token) do
-          %i.fa.fa-rss
-  %div
-    Only issues from
-    %strong #{@group.name}
-    group are listed here.
-    - if current_user
-      To see all issues you should visit #{link_to 'dashboard', issues_dashboard_path} page.
+  Only issues from
+  %strong #{@group.name}
+  group are listed here.
+  - if current_user
+    To see all issues you should visit #{link_to 'dashboard', issues_dashboard_path} page.
 
 .prepend-top-default
   = render 'shared/issues'
diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml
index 425ad8331bf..95c503a3afa 100644
--- a/app/views/groups/merge_requests.html.haml
+++ b/app/views/groups/merge_requests.html.haml
@@ -1,13 +1,29 @@
 - page_title "Merge Requests"
 - header_title group_title(@group, "Merge Requests", merge_requests_group_path(@group))
 
-= render 'shared/issuable/filter', type: :merge_requests
+.project-issuable-filter
+  .controls
+    - if @projects.any? { |project| can?(current_user, :create_merge_request, project) }
+      .dropdown.inline
+        %button.dropdown-toggle.btn.btn-new{type: 'button', 'data-toggle' => 'dropdown'}
+          %i.fa.fa-plus
+          New Merge Request
+          %b.caret
+        %ul.dropdown-menu.dropdown-menu-align-right
+          - @projects.each do |project|
+            - if can?(current_user, :create_merge_request, project)
+              %li
+                = link_to new_namespace_project_merge_request_path(project.namespace, project) do
+                  = project.name_with_namespace
+
+  = render 'shared/issuable/filter', type: :merge_requests
+
 .gray-content-block.second-block
-  %div
-    Only merge requests from
-    %strong #{@group.name}
-    group are listed here.
-    - if current_user
-      To see all merge requests you should visit #{link_to 'dashboard', merge_requests_dashboard_path} page.
+  Only merge requests from
+  %strong #{@group.name}
+  group are listed here.
+  - if current_user
+    To see all merge requests you should visit #{link_to 'dashboard', merge_requests_dashboard_path} page.
+
 .prepend-top-default
   = render 'shared/merge_requests'
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index 84ec77c6188..b221d3a89a4 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -1,18 +1,22 @@
 - page_title "Milestones"
 - header_title group_title(@group, "Milestones", group_milestones_path(@group))
 
-= render 'shared/milestones_filter'
+.project-issuable-filter
+  .controls
+    - if can?(current_user, :admin_milestones, @group)
+      .pull-right
+        %span.pull-right.hidden-xs
+          = link_to new_group_milestone_path(@group), class: "btn btn-new" do
+            = icon('plus')
+            New Milestone
+
+  = render 'shared/milestones_filter'
+
 .gray-content-block
-  - if can?(current_user, :admin_milestones, @group)
-    .pull-right
-      %span.pull-right.hidden-xs
-        = link_to new_group_milestone_path(@group), class: "btn btn-new" do
-          New Milestone
+  Only milestones from
+  %strong #{@group.name}
+  group are listed here.
 
-  .oneline
-    Only milestones from
-    %strong #{@group.name}
-    group are listed here.
 .milestones
   %ul.content-list
     - if @milestones.blank?
diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml
index a207385bd43..114b06457a5 100644
--- a/app/views/projects/milestones/index.html.haml
+++ b/app/views/projects/milestones/index.html.haml
@@ -1,15 +1,18 @@
 - page_title "Milestones"
 = render "header_title"
-= render 'shared/milestones_filter'
 
-.gray-content-block
-  .pull-right
-    - if can? current_user, :admin_milestone, @project
+
+.project-issuable-filter
+  .controls
+    - if can?(current_user, :admin_milestone, @project)
       = link_to new_namespace_project_milestone_path(@project.namespace, @project), class: "pull-right btn btn-new", title: "New Milestone" do
         %i.fa.fa-plus
         New Milestone
-  .oneline
-    Milestone allows you to group issues and set due date for it
+
+  = render 'shared/milestones_filter'
+
+.gray-content-block
+  Milestone allows you to group issues and set due date for it
 
 .milestones
   %ul.content-list
-- 
GitLab