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) 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 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} in #{escape_once(object.project.name_with_namespace)}". html_safe end end def milestone_params(iid, name) if name { name: name.tr('"', '') } else { iid: iid } end end end end end