Skip to content

Commit 7cca1ed

Browse files
committed
Fix out of order embedding of files
- added double quote as attribute marker - fixed inject order of embedded files Signed-off-by: Martin Mihálek <[email protected]>
1 parent 9e62be9 commit 7cca1ed

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

src/core/render/embed.js

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

5+
const INCLUDE_COMPONENT = '__include__';
56
const cached = {};
67

78
function walkFetchEmbed({ embedTokens, compile, fetch }, cb) {
89
let token;
910
let step = 0;
10-
let count = 1;
11+
let count = 0;
1112

1213
if (!embedTokens.length) {
1314
return cb({});
@@ -65,7 +66,7 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) {
6566
}
6667

6768
cb({ token, embedToken });
68-
if (++count >= step) {
69+
if (++count >= embedTokens.length) {
6970
cb({});
7071
}
7172
};
@@ -83,6 +84,23 @@ function walkFetchEmbed({ embedTokens, compile, fetch }, cb) {
8384
}
8485
}
8586

87+
function expandInclude(tokens) {
88+
if (!tokens) {
89+
return tokens;
90+
}
91+
92+
const expandedTokens = [];
93+
tokens.forEach(e => {
94+
if (e.type === INCLUDE_COMPONENT && e.components) {
95+
e.components.forEach(c => expandedTokens.push(c));
96+
} else {
97+
expandedTokens.push(e);
98+
}
99+
});
100+
101+
return expandedTokens;
102+
}
103+
86104
export function prerenderEmbed({ compiler, raw = '', fetch }, done) {
87105
let hit = cached[raw];
88106
if (hit) {
@@ -117,18 +135,19 @@ export function prerenderEmbed({ compiler, raw = '', fetch }, done) {
117135
}
118136
});
119137

120-
let moveIndex = 0;
121138
walkFetchEmbed({ compile, embedTokens, fetch }, ({ embedToken, token }) => {
122139
if (token) {
123-
const index = token.index + moveIndex;
124-
125140
merge(links, embedToken.links);
126141

127-
tokens = tokens
128-
.slice(0, index)
129-
.concat(embedToken, tokens.slice(index + 1));
130-
moveIndex += embedToken.length - 1;
142+
tokens = tokens.slice(0, token.index).concat(
143+
{
144+
type: INCLUDE_COMPONENT,
145+
components: embedToken,
146+
},
147+
tokens.slice(token.index + 1)
148+
);
131149
} else {
150+
tokens = expandInclude(tokens);
132151
cached[raw] = tokens.concat();
133152
tokens.links = cached[raw].links = links;
134153
done(tokens);

src/core/render/utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ export function getAndRemoveConfig(str = '') {
33

44
if (str) {
55
str = str
6-
.replace(/^'/, '')
7-
.replace(/'$/, '')
6+
.replace(/^("|')/, '')
7+
.replace(/("|')$/, '')
88
.replace(/(?:^|\s):([\w-]+:?)=?([\w-]+)?/g, (m, key, value) => {
99
if (key.indexOf(':') === -1) {
1010
config[key] = (value && value.replace(/&quot;/g, '')) || true;

0 commit comments

Comments
 (0)