blob: 9f26dfb8ae5c375c7166c365a54a85b67f6d9f73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# frozen_string_literal: true
module Banzai
module Filter
# HTML filter for service desk emails.
# Context options:
# :replace_upload_links
class ServiceDeskUploadLinkFilter < BaseRelativeLinkFilter
def call
return doc unless context[:uploads_as_attachments].present?
linkable_attributes.reject! do |attr|
replace_upload_link(attr)
end
doc
end
protected
def replace_upload_link(html_attr)
return unless html_attr.name == 'href'
return unless html_attr.value.start_with?('/uploads/')
secret, filename_in_link = html_attr.value.scan(FileUploader::DYNAMIC_PATH_PATTERN).first
return unless context[:uploads_as_attachments].include?("#{secret}/#{filename_in_link}")
parent = html_attr.parent
filename_in_text = parent.text
final_filename = if filename_in_link != filename_in_text
"#{filename_in_text} (#{filename_in_link})"
else
filename_in_text
end
final_element = Nokogiri::HTML::DocumentFragment.parse("<strong>#{final_filename}</strong>")
parent.replace(final_element)
end
end
end
end
|