Skip to content

Commit 5ea28c4

Browse files
authored
Merge pull request #1102 from tschaible/bugfix/multiple-embeds
fix: updated the insertion of embedded tokens for async returns (fixes #970)
2 parents bd9e24b + ea17dcc commit 5ea28c4

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/core/render/embed.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,27 @@ export function prerenderEmbed({ compiler, raw = '', fetch }, done) {
124124
}
125125
});
126126

127-
let moveIndex = 0;
127+
// keep track of which tokens have been embedded so far
128+
// so that we know where to insert the embedded tokens as they
129+
// are returned
130+
const moves = [];
128131
walkFetchEmbed({ compile, embedTokens, fetch }, ({ embedToken, token }) => {
129132
if (token) {
130-
const index = token.index + moveIndex;
133+
// iterate through the array of previously inserted tokens
134+
// to determine where the current embedded tokens should be inserted
135+
let index = token.index;
136+
moves.forEach(pos => {
137+
if (index > pos.start) {
138+
index += pos.length;
139+
}
140+
});
131141

132142
merge(links, embedToken.links);
133143

134144
tokens = tokens
135145
.slice(0, index)
136146
.concat(embedToken, tokens.slice(index + 1));
137-
moveIndex += embedToken.length - 1;
147+
moves.push({ start: index, length: embedToken.length - 1 });
138148
} else {
139149
cached[raw] = tokens.concat();
140150
tokens.links = cached[raw].links = links;

0 commit comments

Comments
 (0)