File tree Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -37,7 +37,8 @@ def update
37
37
def replace ( selector )
38
38
update do |source |
39
39
source . css ( selector ) . each do |node |
40
- node . replace ( yield ( node ) . to_s )
40
+ replacement_node = yield ( node )
41
+ node . replace ( replacement_node . to_s ) if node != replacement_node
41
42
end
42
43
end
43
44
end
Original file line number Diff line number Diff line change @@ -134,6 +134,33 @@ class ActionText::ContentTest < ActiveSupport::TestCase
134
134
assert_match %r/\A #{ Regexp . escape '<div class="trix-content">' } / , rendered
135
135
end
136
136
137
+ test "replace certain nodes" do
138
+ html = <<~HTML
139
+ < div >
140
+ < p > replace me</ p >
141
+ < p > ignore me</ p >
142
+ </ div >
143
+ HTML
144
+
145
+ expected_html = <<~HTML
146
+ < div >
147
+ < p > replaced</ p >
148
+ < p > ignore me</ p >
149
+ </ div >
150
+ HTML
151
+
152
+ content = content_from_html ( html )
153
+ replaced_fragment = content . fragment . replace ( "p" ) do |node |
154
+ if node . text =~ /replace me/
155
+ "<p>replaced</p>"
156
+ else
157
+ node
158
+ end
159
+ end
160
+
161
+ assert_equal expected_html . strip , replaced_fragment . to_html
162
+ end
163
+
137
164
private
138
165
def content_from_html ( html )
139
166
ActionText ::Content . new ( html ) . tap do |content |
You can’t perform that action at this time.
0 commit comments