Skip to content

Commit

Permalink
FIX: When mutating a string to build a diff. Duplicate it first
Browse files Browse the repository at this point in the history
Co-authored-by: Roman Rizzi <[email protected]>
  • Loading branch information
2 people authored and tgxworld committed May 13, 2019
1 parent 982c449 commit 888e68a
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions lib/discourse_diff.rb
Original file line number Diff line number Diff line change
Expand Up @@ -178,24 +178,25 @@ def tokenize_html(html)
end

def add_class_or_wrap_in_tags(html_or_text, klass)
index_of_next_chevron = html_or_text.index(">")
if html_or_text.length > 0 && html_or_text[0] == '<' && index_of_next_chevron
index_of_class = html_or_text.index("class=")
result = html_or_text.dup
index_of_next_chevron = result.index(">")
if result.length > 0 && result[0] == '<' && index_of_next_chevron
index_of_class = result.index("class=")
if index_of_class.nil? || index_of_class > index_of_next_chevron
# we do not have a class for the current tag
# add it right before the ">"
html_or_text.insert(index_of_next_chevron, " class=\"diff-#{klass}\"")
result.insert(index_of_next_chevron, " class=\"diff-#{klass}\"")
else
# we have a class, insert it at the beginning if not already present
classes = html_or_text[/class=(["'])([^\1]*)\1/, 2]
classes = result[/class=(["'])([^\1]*)\1/, 2]
if classes.include?("diff-#{klass}")
html_or_text
result
else
html_or_text.insert(index_of_class + "class=".length + 1, "diff-#{klass} ")
result.insert(index_of_class + "class=".length + 1, "diff-#{klass} ")
end
end
else
"<#{klass}>#{html_or_text}</#{klass}>"
"<#{klass}>#{result}</#{klass}>"
end
end

Expand Down

0 comments on commit 888e68a

Please sign in to comment.