supported <element>
diff --git a/weex-loader/index.js b/weex-loader/index.js
index 45e884f..a4b96d7 100644
--- a/weex-loader/index.js
+++ b/weex-loader/index.js
@@ -16,16 +16,18 @@
var MODULE_EXPORTS_REG = /module\.exports/g;
var REQUIRE_REG = /require\((["'])(\@weex\-module\/[^\)\1]+)\1\)/g;
-function parseScript(loader, params, source, config, data) {
+function parseScript(loader, params, source, config, data, elementName, elements) {
+ elements = elements || []
+
if (!scripter) {
return Promise.reject('please use a script parser. e.g. weex-scripter');
}
var target = scripter.fix(source);
- var name = params.resourceQuery.name ||
+ var name = elementName || params.resourceQuery.name ||
path.basename(params.resourcePath).replace(/\..*$/, '');
- if (params.resourceQuery.entry === true) {
+ if (!elementName && params.resourceQuery.entry === true) {
name = md5(source);
}
@@ -36,12 +38,14 @@
'function(__weex_require__, __weex_exports__, __weex_module__)' +
'{\n' + target + '\n})';
- if (params.resourceQuery.entry === true) {
+ if (!elementName && params.resourceQuery.entry === true) {
target += '\n;__weex_bootstrap__("@weex-component/' + name + '", ' +
String(config) + ',' +
String(data) + ')';
}
+ target = elements.concat(target).join(';\n\n')
+
return Promise.resolve(target);
}
@@ -122,9 +126,9 @@
});
}
-function parseWeexFile(loader, params, source) {
+function parseWeexFile(loader, params, source, deps, elementName) {
var results;
- var deps = [];
+ deps = deps || [];
return new Promise(function(resolve, reject) {
blocker.format(source, function(err, ret) {
@@ -136,24 +140,32 @@
}
});
}).then(function() {
- var promises = [Promise.resolve(), Promise.resolve()];
+ var promises = [Promise.resolve(), Promise.resolve(), Promise.resolve()];
var content;
-
+ if (results.elements) {
+ var elPromises = []
+ Object.keys(results.elements).forEach(function (key) {
+ var el = results.elements[key];
+ elPromises.push(parseWeexFile(loader, params, el.content, deps, el.name));
+ });
+ promises[0] = Promise.all(elPromises);
+ }
if (results.template) {
content = results.template.content;
- promises[0] = parseTemplate(loader, params, content, deps);
+ promises[1] = parseTemplate(loader, params, content, deps);
}
if (results.styles) {
content = results.styles.reduce(function(pre, cur) {
return pre + '\n' + cur.content;
}, '');
- promises[1] = parseStyle(loader, params, content);
+ promises[2] = parseStyle(loader, params, content);
}
return Promise.all(promises);
}).then(function(ret) {
- var template = ret[0];
- var style = ret[1];
+ var elements = ret[0] || [];
+ var template = ret[1];
+ var style = ret[2];
var content = '';
var config = {};
@@ -174,7 +186,6 @@
return '';
}
}).join('\n');
-
content = requireContent + '\n' + content;
}
@@ -198,8 +209,7 @@
data = new Function('return ' + results.data.content.replace(/\n/g, ''))();
data = JSON.stringify(data, null, ' ');
}
-
- return parseScript(loader, params, content, config, data);
+ return parseScript(loader, params, content, config, data, elementName, elements);
});
}
@@ -248,7 +258,6 @@
type === 'html' || type === 'tpl' || type === 'template') {
result = 'module.exports=' + result;
}
- // console.log('\n[' + type + ', ' + params.resourcePath + ']\n', source, '\n=========>\n', result + '\n');
callback(null, result);
}).catch(function(err) {
self.emitError(err.toString());