Skip to content

Commit bbf74a3

Browse files
committed
Fix out of order embedding of files
Signed-off-by: Martin Mihálek <[email protected]>
1 parent 676f84c commit bbf74a3

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

src/core/render/embed.js

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import {get} from '../fetch/ajax'
22
import {merge} from '../util/core'
33

4+
const INCLUDE_COMPONENT = '__include__'
45
const cached = {}
56

67
function walkFetchEmbed({embedTokens, compile, fetch}, cb) {
78
let token
89
let step = 0
9-
let count = 1
10+
let count = 0
1011

1112
if (!embedTokens.length) {
1213
return cb({})
@@ -43,7 +44,7 @@ function walkFetchEmbed({embedTokens, compile, fetch}, cb) {
4344
}
4445
}
4546
cb({token, embedToken})
46-
if (++count >= step) {
47+
if (++count >= embedTokens.length) {
4748
cb({})
4849
}
4950
}
@@ -61,6 +62,23 @@ function walkFetchEmbed({embedTokens, compile, fetch}, cb) {
6162
}
6263
}
6364

65+
function expandInclude(tokens) {
66+
if (!tokens) {
67+
return tokens
68+
}
69+
70+
const expandedTokens = []
71+
tokens.forEach(e => {
72+
if (e.type === INCLUDE_COMPONENT && e.components) {
73+
e.components.forEach(c => expandedTokens.push(c))
74+
} else {
75+
expandedTokens.push(e)
76+
}
77+
})
78+
79+
return expandedTokens
80+
}
81+
6482
export function prerenderEmbed({compiler, raw = '', fetch}, done) {
6583
let hit = cached[raw]
6684
if (hit) {
@@ -95,18 +113,19 @@ export function prerenderEmbed({compiler, raw = '', fetch}, done) {
95113
}
96114
})
97115

98-
let moveIndex = 0
99116
walkFetchEmbed({compile, embedTokens, fetch}, ({embedToken, token}) => {
100117
if (token) {
101-
const index = token.index + moveIndex
102-
103118
merge(links, embedToken.links)
104119

105-
tokens = tokens
106-
.slice(0, index)
107-
.concat(embedToken, tokens.slice(index + 1))
108-
moveIndex += embedToken.length - 1
120+
tokens = tokens.slice(0, token.index).concat(
121+
{
122+
type: INCLUDE_COMPONENT,
123+
components: embedToken
124+
},
125+
tokens.slice(token.index + 1)
126+
)
109127
} else {
128+
tokens = expandInclude(tokens)
110129
cached[raw] = tokens.concat()
111130
tokens.links = cached[raw].links = links
112131
done(tokens)

0 commit comments

Comments
 (0)