gitlab-org--gitlab-foss/lib/banzai/filter/milestone_reference_filter.rb

52 lines
1.4 KiB
Ruby
Raw Normal View History

2015-12-24 13:43:07 +00:00
module Banzai
module Filter
# HTML filter that replaces milestone references with links.
class MilestoneReferenceFilter < AbstractReferenceFilter
def self.object_class
Milestone
end
def find_object(project, id)
project.milestones.find_by(iid: id)
2015-12-24 13:43:07 +00:00
end
def references_in(text, pattern = Milestone.reference_pattern)
text.gsub(pattern) do |match|
project = project_from_ref($~[:project])
params = milestone_params($~[:milestone_iid].to_i, $~[:milestone_name])
milestone = project.milestones.find_by(params)
if milestone
yield match, milestone.iid, $~[:project], $~
else
match
end
end
end
def url_for_object(milestone, project)
h = Gitlab::Routing.url_helpers
2015-12-24 13:43:07 +00:00
h.namespace_project_milestone_url(project.namespace, project, milestone,
only_path: context[:only_path])
end
def object_link_text(object, matches)
if context[:project] == object.project
super
else
"#{super} <i>in #{escape_once(object.project.name_with_namespace)}</i>".
html_safe
end
end
def milestone_params(iid, name)
if name
{ name: name.tr('"', '') }
else
{ iid: iid }
end
end
2015-12-24 13:43:07 +00:00
end
end
end