2017-03-23 16:53:51 -04:00
|
|
|
- affix_offset = local_assigns.fetch(:affix_offset, "102")
|
2017-03-24 13:13:29 -04:00
|
|
|
- project = local_assigns[:project]
|
2017-03-23 16:53:51 -04:00
|
|
|
|
|
|
|
%aside.right-sidebar.js-right-sidebar{ data: { "offset-top" => affix_offset, "spy" => "affix" }, class: sidebar_gutter_collapsed_class, 'aria-live' => 'polite' }
|
2017-03-24 16:03:06 -04:00
|
|
|
.issuable-sidebar.milestone-sidebar
|
2017-03-24 17:11:15 -04:00
|
|
|
.block.milestone-progress.issuable-sidebar-header
|
2017-03-23 16:53:51 -04:00
|
|
|
%a.gutter-toggle.pull-right.js-sidebar-toggle{ role: "button", href: "#", "aria-label" => "Toggle sidebar" }
|
|
|
|
= sidebar_gutter_toggle_icon
|
2017-03-24 13:04:46 -04:00
|
|
|
|
2017-03-24 17:11:15 -04:00
|
|
|
.sidebar-collapsed-icon
|
|
|
|
%span== #{milestone.percent_complete(current_user)}%
|
|
|
|
= milestone_progress_bar(milestone)
|
|
|
|
.title.hide-collapsed
|
2017-03-27 13:10:30 -04:00
|
|
|
%strong.bold== #{milestone.percent_complete(current_user)}%
|
2017-03-24 17:11:15 -04:00
|
|
|
%span.hide-collapsed
|
|
|
|
complete
|
|
|
|
.value.hide-collapsed
|
|
|
|
= milestone_progress_bar(milestone)
|
2017-03-24 13:04:46 -04:00
|
|
|
|
2017-03-27 14:14:27 -04:00
|
|
|
.block.start_date.hide-collapsed
|
|
|
|
.title
|
2017-03-27 13:20:07 -04:00
|
|
|
Start date
|
|
|
|
- if @project && can?(current_user, :admin_milestone, @project)
|
|
|
|
= link_to 'Edit', edit_namespace_project_milestone_path(@project.namespace, @project, @milestone), class: 'edit-link pull-right'
|
2017-03-27 14:14:27 -04:00
|
|
|
.value
|
2017-03-27 13:20:07 -04:00
|
|
|
%span.value-content
|
|
|
|
- if milestone.start_date
|
|
|
|
%span.bold= milestone.start_date.to_s(:medium)
|
|
|
|
- else
|
|
|
|
%span.no-value No start date
|
|
|
|
|
|
|
|
.block.due_date
|
|
|
|
.sidebar-collapsed-icon
|
|
|
|
= icon('calendar', 'aria-hidden': 'true')
|
2017-03-27 14:14:27 -04:00
|
|
|
%span.collapsed-milestone-date
|
|
|
|
- if milestone.start_date && milestone.due_date
|
|
|
|
- if milestone.start_date.year == milestone.due_date.year
|
|
|
|
.milestone-date= milestone.start_date.strftime('%b %-d')
|
|
|
|
- else
|
|
|
|
.milestone-date= milestone.start_date.strftime('%b %-d %Y')
|
|
|
|
.date-separator -
|
|
|
|
.due_date= milestone.due_date.strftime('%b %-d %Y')
|
|
|
|
- elsif milestone.start_date
|
|
|
|
From
|
|
|
|
.milestone-date= milestone.start_date.strftime('%b %-d %Y')
|
|
|
|
- elsif milestone.due_date
|
|
|
|
Until
|
|
|
|
.milestone-date= milestone.due_date.strftime('%b %-d %Y')
|
|
|
|
- else
|
|
|
|
None
|
2017-03-27 13:20:07 -04:00
|
|
|
.title.hide-collapsed
|
|
|
|
Due date
|
|
|
|
- if @project && can?(current_user, :admin_milestone, @project)
|
|
|
|
= link_to 'Edit', edit_namespace_project_milestone_path(@project.namespace, @project, @milestone), class: 'edit-link pull-right'
|
|
|
|
.value.hide-collapsed
|
|
|
|
%span.value-content
|
|
|
|
- if milestone.due_date
|
|
|
|
%span.bold= milestone.due_date.to_s(:medium)
|
|
|
|
- else
|
|
|
|
%span.no-value No due date
|
|
|
|
- remaining_days = milestone_remaining_days(milestone)
|
|
|
|
- if remaining_days.present?
|
|
|
|
= surround '(', ')' do
|
|
|
|
%span.remaining-days= remaining_days
|
2017-03-24 13:13:29 -04:00
|
|
|
|
2017-03-24 14:39:33 -04:00
|
|
|
- if !project || can?(current_user, :read_issue, project)
|
|
|
|
.block
|
|
|
|
.sidebar-collapsed-icon
|
|
|
|
%strong
|
|
|
|
= icon('hashtag', 'aria-hidden': 'true')
|
|
|
|
%span= milestone.issues_visible_to_user(current_user).size
|
|
|
|
.title.hide-collapsed
|
|
|
|
Issues
|
|
|
|
%span.badge= milestone.issues_visible_to_user(current_user).size
|
|
|
|
- if project && can?(current_user, :create_issue, project)
|
|
|
|
= link_to new_namespace_project_issue_path(project.namespace, project, issue: { milestone_id: milestone.id }), class: "pull-right", title: "New Issue" do
|
|
|
|
New issue
|
2017-03-27 13:10:30 -04:00
|
|
|
.value.hide-collapsed.bold
|
2017-03-27 13:06:48 -04:00
|
|
|
%span.milestone-stat
|
|
|
|
= link_to milestones_browse_issuables_path(milestone, type: :issues) do
|
2017-03-24 15:41:08 -04:00
|
|
|
Open:
|
|
|
|
= milestone.issues_visible_to_user(current_user).opened.size
|
2017-03-27 13:06:48 -04:00
|
|
|
%span.milestone-stat
|
|
|
|
= link_to milestones_browse_issuables_path(milestone, type: :issues, state: 'closed') do
|
2017-03-24 15:41:08 -04:00
|
|
|
Closed:
|
|
|
|
= milestone.issues_visible_to_user(current_user).closed.size
|
2017-03-24 14:39:33 -04:00
|
|
|
|
|
|
|
.block
|
|
|
|
.sidebar-collapsed-icon
|
|
|
|
%strong
|
|
|
|
= icon('exclamation', 'aria-hidden': 'true')
|
|
|
|
%span= milestone.issues_visible_to_user(current_user).size
|
|
|
|
.title.hide-collapsed
|
|
|
|
Merge requests
|
|
|
|
%span.badge= milestone.merge_requests.size
|
2017-03-27 13:10:30 -04:00
|
|
|
.value.hide-collapsed.bold
|
2017-03-27 13:06:48 -04:00
|
|
|
- if !project || can?(current_user, :read_merge_request, project)
|
2017-03-24 15:41:08 -04:00
|
|
|
%span.milestone-stat
|
|
|
|
= link_to milestones_browse_issuables_path(milestone, type: :merge_requests) do
|
|
|
|
Open:
|
|
|
|
= milestone.merge_requests.opened.size
|
|
|
|
%span.milestone-stat
|
|
|
|
= link_to milestones_browse_issuables_path(milestone, type: :merge_requests, state: 'closed') do
|
|
|
|
Closed:
|
|
|
|
= milestone.merge_requests.closed.size
|
|
|
|
%span.milestone-stat
|
|
|
|
= link_to milestones_browse_issuables_path(milestone, type: :merge_requests, state: 'merged') do
|
|
|
|
Merged:
|
|
|
|
= milestone.merge_requests.merged.size
|
|
|
|
- else
|
|
|
|
%span.milestone-stat
|
|
|
|
Open:
|
|
|
|
= milestone.merge_requests.opened.size
|
|
|
|
%span.milestone-stat
|
|
|
|
Closed:
|
|
|
|
= milestone.merge_requests.closed.size
|
|
|
|
%span.milestone-stat
|
|
|
|
Merged:
|
|
|
|
= milestone.merge_requests.merged.size
|
2017-03-24 14:39:33 -04:00
|
|
|
|
2017-03-24 13:04:46 -04:00
|
|
|
- milestone_ref = milestone.try(:to_reference, full: true)
|
|
|
|
- if milestone_ref.present?
|
2017-03-24 16:29:36 -04:00
|
|
|
.block.reference
|
2017-03-24 13:04:46 -04:00
|
|
|
.sidebar-collapsed-icon.dont-change-state
|
|
|
|
= clipboard_button(clipboard_text: milestone_ref, title: "Copy reference to clipboard", placement: "left")
|
|
|
|
.cross-project-reference.hide-collapsed
|
|
|
|
%span
|
|
|
|
Reference:
|
|
|
|
%cite{ title: milestone_ref }
|
|
|
|
= milestone_ref
|
|
|
|
= clipboard_button(clipboard_text: milestone_ref, title: "Copy reference to clipboard", placement: "left")
|