Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-10-13 21:10:20 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-10-13 21:10:20 +0300
commitb1928c08f1642be0f66f6fa2587177b95a1cedc1 (patch)
tree35cc089bc6692db0135437fe7834928fc64052fe /app/helpers/markup_helper.rb
parentbd25f1d9c685039381df23e49bc52cdcf4ec1b4a (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/helpers/markup_helper.rb')
-rw-r--r--app/helpers/markup_helper.rb55
1 files changed, 4 insertions, 51 deletions
diff --git a/app/helpers/markup_helper.rb b/app/helpers/markup_helper.rb
index e05f7dcbf33..866399f3021 100644
--- a/app/helpers/markup_helper.rb
+++ b/app/helpers/markup_helper.rb
@@ -72,8 +72,10 @@ module MarkupHelper
tags = %w(a gl-emoji b strong i em pre code p span)
tags << 'img' if options[:allow_images]
- text = truncate_visible(md, max_chars || md.length)
- text = prepare_for_rendering(text, markdown_field_render_context(object, attribute, options))
+ context = markdown_field_render_context(object, attribute, options)
+ context.reverse_merge!(truncate_visible_max_chars: max_chars || md.length)
+
+ text = prepare_for_rendering(md, context)
text = sanitize(
text,
tags: tags,
@@ -191,55 +193,6 @@ module MarkupHelper
{ project: wiki.container }
end
- # Return +text+, truncated to +max_chars+ characters, excluding any HTML
- # tags.
- def truncate_visible(text, max_chars)
- doc = Nokogiri::HTML.fragment(text)
- content_length = 0
- truncated = false
-
- doc.traverse do |node|
- if node.text? || node.content.empty?
- if truncated
- node.remove
- next
- end
-
- # Handle line breaks within a node
- if node.content.strip.lines.length > 1
- node.content = "#{node.content.lines.first.chomp}..."
- truncated = true
- end
-
- num_remaining = max_chars - content_length
- if node.content.length > num_remaining
- node.content = node.content.truncate(num_remaining)
- truncated = true
- end
-
- content_length += node.content.length
- end
-
- truncated = truncate_if_block(node, truncated)
- end
-
- doc.to_html
- end
-
- # Used by #truncate_visible. If +node+ is the first block element, and the
- # text hasn't already been truncated, then append "..." to the node contents
- # and return true. Otherwise return false.
- def truncate_if_block(node, truncated)
- return true if truncated
-
- if node.element? && (node.description&.block? || node.matches?('pre > code > .line'))
- node.inner_html = "#{node.inner_html}..." if node.next_sibling
- true
- else
- truncated
- end
- end
-
def strip_empty_link_tags(text)
scrubber = Loofah::Scrubber.new do |node|
node.remove if node.name == 'a' && node.children.empty?