diff options
Diffstat (limited to 'lib/banzai/filter/references/snippet_reference_filter.rb')
-rw-r--r-- | lib/banzai/filter/references/snippet_reference_filter.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/banzai/filter/references/snippet_reference_filter.rb b/lib/banzai/filter/references/snippet_reference_filter.rb new file mode 100644 index 00000000000..bf7e0f78609 --- /dev/null +++ b/lib/banzai/filter/references/snippet_reference_filter.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Banzai + module Filter + module References + # HTML filter that replaces snippet references with links. References to + # snippets that do not exist are ignored. + # + # This filter supports cross-project references. + class SnippetReferenceFilter < AbstractReferenceFilter + self.reference_type = :snippet + + def self.object_class + Snippet + end + + def find_object(project, id) + return unless project.is_a?(Project) + + project.snippets.find_by(id: id) + end + + def url_for_object(snippet, project) + h = Gitlab::Routing.url_helpers + h.project_snippet_url(project, snippet, + only_path: context[:only_path]) + end + end + end + end +end |