Remove duplication between global and the regular label partials

parent 1c73d302
......@@ -4,9 +4,8 @@ module LabelsHelper
# Link to a Label
#
# label - Label object to link to
# project - Project object which will be used as the context for the label's
# link. If omitted, defaults to `@project`, or the label's own
# project.
# subject - Project/Group object which will be used as the context for the
# label's link. If omitted, defaults to the label's own group/project.
# type - The type of item the link will point to (:issue or
# :merge_request). If omitted, defaults to :issue.
# block - An optional block that will be passed to `link_to`, forming the
......@@ -18,12 +17,11 @@ module LabelsHelper
# # Allow the generated link to use the label's own project
# link_to_label(label)
#
# # Force the generated link to use @project
# @project = Project.first
# link_to_label(label)
# # Force the generated link to use a provided group
# link_to_label(label, subject: Group.last)
#
# # Force the generated link to use a provided project
# link_to_label(label, project: Project.last)
# link_to_label(label, subject: Project.last)
#
# # Force the generated link to point to merge requests instead of issues
# link_to_label(label, type: :merge_request)
......@@ -32,9 +30,8 @@ module LabelsHelper
# link_to_label(label) { "My Custom Label Text" }
#
# Returns a String
def link_to_label(label, project: nil, type: :issue, tooltip: true, css_class: nil, &block)
project ||= @project || label.project
link = label_filter_path(project, label, type: type)
def link_to_label(label, subject: nil, type: :issue, tooltip: true, css_class: nil, &block)
link = label_filter_path(label, type: type)
if block_given?
link_to link, class: css_class, &block
......@@ -43,27 +40,16 @@ module LabelsHelper
end
end
def link_to_group_label(label, group: nil, type: :issue, tooltip: true, css_class: nil, &block)
group ||= @group || label.group
link = label_filter_path(group, label, type: type)
if block_given?
link_to link, class: css_class, &block
def label_filter_path(label, type: issue)
case label
when GroupLabel
send("#{type.to_s.pluralize}_group_path",
label.group,
label_name: [label.name])
else
link_to render_colored_label(label, tooltip: tooltip), link, class: css_class
end
end
def label_filter_path(subject, label, type: issue)
case subject
when Project
send("namespace_project_#{type.to_s.pluralize}_path",
subject.namespace,
subject,
label_name: [label.name])
when Group
send("#{type.to_s.pluralize}_group_path",
subject,
label.project.namespace,
label.project,
label_name: [label.name])
end
end
......@@ -92,6 +78,13 @@ module LabelsHelper
end
end
def toggle_subscription_label_path(label)
case label
when GroupLabel then toggle_subscription_group_label_path(label.group, label)
else toggle_subscription_namespace_project_label_path(label.project.namespace, label.project, label)
end
end
def label_type_icon(label, options = {})
title, icon =
case label
......@@ -101,6 +94,7 @@ module LabelsHelper
options[:class] ||= ''
options[:class] << ' has-tooltip js-label-type'
options[:class] << ' hidden' if options.fetch(:hidden, false)
content_tag :span,
class: options[:class],
......
- label_css_id = dom_id(label)
- open_issues_count = label.open_issues_count(current_user)
- open_merge_requests_count = label.open_merge_requests_count(current_user)
%li{id: label_css_id, data: { id: label.id } }
= render 'label_row', label: label
.visible-xs.visible-sm-inline-block.visible-md-inline-block.dropdown
%button.btn.btn-default.label-options-toggle{ data: { toggle: 'dropdown' } }
Options
%span.caret
.dropdown-menu.dropdown-menu-align-right
%ul
%li
= link_to_group_label(label, type: :merge_request) do
= pluralize open_merge_requests_count, 'merge request'
%li
= link_to_group_label(label) do
= pluralize open_issues_count, 'open issue'
- if current_user
%li.label-subscription{ data: { url: toggle_subscription_group_label_path(@group, label) } }
%a.js-subscribe-button.label-subscribe-button.subscription-status{ role: "button", href: "#", data: { toggle: "tooltip", status: label_subscription_status(label) } }
%span= label_subscription_toggle_button_text(label)
- if can? current_user, :admin_label, @group
%li
= link_to 'Edit', edit_group_label_path(@group, label)
%li
= link_to 'Delete', group_label_path(@group, label), title: 'Delete', method: :delete, remote: true, data: {confirm: "Remove this label? Are you sure?"}
.pull-right.hidden-xs.hidden-sm.hidden-md
= link_to_group_label(label, type: :merge_request, css_class: 'btn btn-transparent btn-action') do
= pluralize open_merge_requests_count, 'merge request'
= link_to_group_label(label, css_class: 'btn btn-transparent btn-action') do
= pluralize open_issues_count, 'open issue'
- if current_user
.label-subscription.inline{ data: { url: toggle_subscription_group_label_path(@group, label) } }
%button.js-subscribe-button.label-subscribe-button.btn.btn-transparent.btn-action.subscription-status{ type: "button", title: label_subscription_toggle_button_text(label), data: { toggle: "tooltip", status: label_subscription_status(label) } }
%span.sr-only= label_subscription_toggle_button_text(label)
= icon('eye', class: 'label-subscribe-button-icon')
= icon('spinner spin', class: 'label-subscribe-button-loading')
- if can? current_user, :admin_label, @group
= link_to edit_group_label_path(@group, label), title: 'Edit', class: 'btn btn-transparent btn-action', data: {toggle: 'tooltip'} do
%span.sr-only Edit
= icon('pencil-square-o')
= link_to group_label_path(@group, label), title: 'Delete', class: 'btn btn-transparent btn-action remove-row', method: :delete, remote: true, data: {confirm: 'Remove this label? Are you sure?', toggle: 'tooltip'} do
%span.sr-only Delete
= icon('trash-o')
- if current_user
:javascript
new Subscription('##{dom_id(label)} .label-subscription');
%span.label-row
%span.label-name
= link_to_group_label(label, tooltip: false)
- if label.description
%span.label-description
= markdown(label.description, pipeline: :single_line)
......@@ -17,7 +17,7 @@
Group Labels
- if @labels.present?
%ul.content-list.manage-labels-list.js-group-labels
= render partial: 'label', collection: @labels, as: :label
= render partial: 'shared/label', collection: @labels, as: :label
= paginate @labels, theme: 'gitlab'
- else
.nothing-here-block
......
......@@ -50,7 +50,7 @@
- if issue.labels.any?
&nbsp;
- issue.labels.each do |label|
= link_to_label(label, project: issue.project)
= link_to_label(label, subject: issue.project)
- if issue.tasks?
&nbsp;
%span.task-status
......
......@@ -23,7 +23,7 @@
%ul.content-list.manage-labels-list.js-prioritized-labels{ "data-url" => set_priorities_namespace_project_labels_path(@project.namespace, @project) }
%p.empty-message{ class: ('hidden' unless @prioritized_labels.empty?) } No prioritized labels yet
- if @prioritized_labels.present?
= render partial: 'label', collection: @prioritized_labels, as: :label
= render partial: 'shared/label', collection: @prioritized_labels, as: :label
.group-labels{ class: ('hide' if hide || @project.group.blank?) }
%h5
......@@ -32,7 +32,7 @@
%ul.content-list.manage-labels-list.js-group-labels
%p.empty-message{ class: ('hidden' unless @group_labels.empty?) } No group labels
- if @group_labels.present?
= render partial: 'label', collection: @group_labels, as: :label
= render partial: 'shared/label', collection: @group_labels, as: :label
.project-labels
%h5{ class: ('hide' if hide) }
......@@ -41,7 +41,7 @@
%ul.content-list.manage-labels-list.js-project-labels
%p.empty-message{ class: ('hidden' unless @project_labels.empty?) } No project labels
- if @project_labels.present?
= render @project_labels
= render partial: 'shared/label', collection: @project_labels, as: :label
= paginate @project_labels, theme: 'gitlab'
- else
.nothing-here-block
......
......@@ -62,7 +62,7 @@
- if merge_request.labels.any?
&nbsp;
- merge_request.labels.each do |label|
= link_to_label(label, project: merge_request.project, type: 'merge_request')
= link_to_label(label, subject: merge_request.project, type: 'merge_request')
- if merge_request.tasks?
&nbsp;
%span.task-status
......
......@@ -18,7 +18,7 @@
= link_to_label(label) do
= pluralize open_issues_count, 'open issue'
- if current_user
%li.label-subscription{ data: { url: toggle_subscription_namespace_project_label_path(@project.namespace, @project, label) } }
%li.label-subscription{ data: { url: toggle_subscription_label_path(label) } }
%a.js-subscribe-button.label-subscribe-button.subscription-status{ role: "button", href: "#", data: { toggle: "tooltip", status: label_subscription_status(label) } }
%span= label_subscription_toggle_button_text(label)
- if can_admin_label(label)
......@@ -34,7 +34,7 @@
= pluralize open_issues_count, 'open issue'
- if current_user
.label-subscription.inline{ data: { url: toggle_subscription_namespace_project_label_path(@project.namespace, @project, label) } }
.label-subscription.inline{ data: { url: toggle_subscription_label_path(label) } }
%button.js-subscribe-button.label-subscribe-button.btn.btn-transparent.btn-action.subscription-status{ type: "button", title: label_subscription_toggle_button_text(label), data: { toggle: "tooltip", status: label_subscription_status(label) } }
%span.sr-only= label_subscription_toggle_button_text(label)
= icon('eye', class: 'label-subscribe-button-icon')
......
......@@ -10,7 +10,8 @@
= icon('star')
%span.label-name
= link_to_label(label, tooltip: false)
= label_type_icon(label, class: "#{'hidden' if label.priority.blank?}" )
- if can?(current_user, :admin_label, @project)
= label_type_icon(label, hidden: label.priority.blank?)
- if label.description
%span.label-description
= markdown_field(label, :description)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment