Skip to content

Commit f886b81

Browse files
committed
fix(text): extend text blocks properly before replacing
1 parent 10564e4 commit f886b81

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

src/helper/text-replace-helper.ts

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -140,40 +140,52 @@ export default class TextReplaceHelper {
140140
const textBlock = textBlocks[i];
141141

142142
replaceTexts.forEach((item) => {
143-
this.applyReplacement(item, textBlock);
143+
this.applyReplacement(item, textBlock, i);
144144
});
145145
}
146146
}
147147

148-
applyReplacement(replaceText: ReplaceText, textBlock: Element): void {
149-
const replace =
150-
this.options.openingTag + replaceText.replace + this.options.closingTag;
148+
applyReplacement(replaceText: ReplaceText, textBlock: Element, currentIndex:number): void {
149+
const replace = this.options.openingTag
150+
+ replaceText.replace
151+
+ this.options.closingTag;
151152
let textNode = this.getTextElement(textBlock);
152153
const sourceText = textNode.firstChild.textContent;
153154

154155
if (sourceText.includes(replace)) {
155156
const bys = GeneralHelper.arrayify(replaceText.by);
156-
bys.forEach((by, i) => {
157-
const replacedText = sourceText.replace(replace, by.text);
158-
textNode = this.assertTextNode(i, textBlock, textNode);
159-
ModifyTextHelper.content(replacedText)(textNode)
160-
161-
if (by.style) {
162-
const styleParent = textNode.parentNode as Element;
163-
const styleElement = styleParent.getElementsByTagName('a:rPr')[0];
164-
ModifyTextHelper.style(by.style)(styleElement)
165-
}
157+
const modifyBlocks = this.assertTextBlocks(bys.length, textBlock)
158+
159+
bys.forEach((by, blockIndex) => {
160+
const textNode = modifyBlocks[blockIndex].getElementsByTagName('a:t')[0]
161+
this.updateTextNode(textNode, sourceText, replace, by)
166162
});
167163
}
168164
}
169165

170-
assertTextNode(i: number, textBlock: Element, textNode: Element): Element {
171-
if (i >= 1) {
172-
const addedTextBlock = textBlock.cloneNode(true) as Element;
173-
XmlHelper.insertAfter(addedTextBlock, textBlock);
174-
return this.getTextElement(addedTextBlock);
166+
assertTextBlocks(length: number, textBlock:any): Element[] {
167+
const modifyBlocks = []
168+
if(length > 1) {
169+
for(let i=1; i<length; i++) {
170+
const addedTextBlock = textBlock.cloneNode(true) as Element;
171+
XmlHelper.insertAfter(addedTextBlock, textBlock);
172+
modifyBlocks.push(addedTextBlock)
173+
}
174+
}
175+
modifyBlocks.push(textBlock)
176+
modifyBlocks.reverse()
177+
return modifyBlocks
178+
}
179+
180+
updateTextNode(textNode: Element, sourceText, replace, by): void {
181+
const replacedText = sourceText.replace(replace, by.text);
182+
ModifyTextHelper.content(replacedText)(textNode)
183+
184+
if (by.style) {
185+
const styleParent = textNode.parentNode as Element;
186+
const styleElement = styleParent.getElementsByTagName('a:rPr')[0];
187+
ModifyTextHelper.style(by.style)(styleElement)
175188
}
176-
return textNode;
177189
}
178190

179191
getTextElement(block: Element): Element {

0 commit comments

Comments
 (0)