63 lines
1.7 KiB
Ruby
63 lines
1.7 KiB
Ruby
require 'html/pipeline'
|
|
require 'html/pipeline/gitlab'
|
|
|
|
module EmailsHelper
|
|
|
|
# Google Actions
|
|
# https://developers.google.com/gmail/markup/reference/go-to-action
|
|
def email_action(url)
|
|
name = action_title(url)
|
|
if name
|
|
data = {
|
|
"@context" => "http://schema.org",
|
|
"@type" => "EmailMessage",
|
|
"action" => {
|
|
"@type" => "ViewAction",
|
|
"name" => name,
|
|
"url" => url,
|
|
}
|
|
}
|
|
|
|
content_tag :script, type: 'application/ld+json' do
|
|
data.to_json.html_safe
|
|
end
|
|
end
|
|
end
|
|
|
|
def action_title(url)
|
|
return unless url
|
|
["merge_requests", "issues", "commit"].each do |action|
|
|
if url.split("/").include?(action)
|
|
return "View #{action.humanize.singularize}"
|
|
end
|
|
end
|
|
end
|
|
|
|
def color_email_diff(diffcontent)
|
|
formatter = Rugments::Formatters::HTML.new(cssclass: "highlight", inline_theme: :github)
|
|
lexer = Rugments::Lexers::Diff.new
|
|
raw formatter.format(lexer.lex(diffcontent))
|
|
end
|
|
|
|
def replace_image_links_with_base64(text, project)
|
|
# Used pipelines in GitLab:
|
|
# GitlabEmailImageFilter - replaces images that have been uploaded as attachments with inline images in emails.
|
|
#
|
|
# see https://gitlab.com/gitlab-org/html-pipeline-gitlab for more filters
|
|
filters = [
|
|
HTML::Pipeline::Gitlab::GitlabEmailImageFilter
|
|
]
|
|
|
|
context = {
|
|
base_url: File.join(Gitlab.config.gitlab.url, project.path_with_namespace, 'uploads'),
|
|
upload_path: File.join(Rails.root, 'public', 'uploads', project.path_with_namespace),
|
|
}
|
|
|
|
pipeline = HTML::Pipeline::Gitlab.new(filters).pipeline
|
|
|
|
result = pipeline.call(text, context)
|
|
text = result[:output].to_html(save_with: 0)
|
|
|
|
text.html_safe
|
|
end
|
|
end
|