mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Split out async and layout taglibs into separate modules
This commit is contained in:
parent
b65d1a3205
commit
6f147786c6
@ -1,39 +0,0 @@
|
|||||||
var raptorDust = require('raptor-dust');
|
|
||||||
|
|
||||||
exports.registerHelpers = function(dust) {
|
|
||||||
raptorDust.registerHelpers({
|
|
||||||
'async-fragment': {
|
|
||||||
buildInput: function(chunk, context, bodies, params, renderContext) {
|
|
||||||
var arg = params.arg = {};
|
|
||||||
|
|
||||||
for (var k in params) {
|
|
||||||
if (params.hasOwnProperty(k)) {
|
|
||||||
if (k.startsWith('arg-')) {
|
|
||||||
arg[k.substring(4)] = params[k];
|
|
||||||
delete params[k];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var dataProvider = params.dataProvider;
|
|
||||||
if (typeof dataProvider === 'string') {
|
|
||||||
var dataProviderFunc = context.get(dataProvider);
|
|
||||||
if (dataProviderFunc) {
|
|
||||||
params.dataProvider = dataProviderFunc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
params.invokeBody = function(asyncContext, data) {
|
|
||||||
var varName = params['var'];
|
|
||||||
var newContextObj = {};
|
|
||||||
newContextObj[varName] = data;
|
|
||||||
var newContext = context.push(newContextObj);
|
|
||||||
asyncContext.renderDustBody(bodies.block, newContext);
|
|
||||||
};
|
|
||||||
|
|
||||||
return params;
|
|
||||||
},
|
|
||||||
render: require('../taglibs/async/async-fragment-tag')
|
|
||||||
}
|
|
||||||
}, dust);
|
|
||||||
};
|
|
||||||
@ -12,7 +12,7 @@
|
|||||||
"url": "https://github.com/raptorjs3/raptor-templates.git"
|
"url": "https://github.com/raptorjs3/raptor-templates.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "node_modules/.bin/mocha --ui bdd --reporter spec ./test && node_modules/.bin/jshint compiler/ runtime/ taglibs/ dust/"
|
"test": "node_modules/.bin/mocha --ui bdd --reporter spec ./test && node_modules/.bin/jshint compiler/ runtime/ taglibs/"
|
||||||
},
|
},
|
||||||
"author": "Patrick Steele-Idem <pnidem@gmail.com>",
|
"author": "Patrick Steele-Idem <pnidem@gmail.com>",
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
@ -26,7 +26,6 @@
|
|||||||
"raptor-json": "^0.2.0-beta",
|
"raptor-json": "^0.2.0-beta",
|
||||||
"raptor-modules": "^0.2.0-beta",
|
"raptor-modules": "^0.2.0-beta",
|
||||||
"raptor-render-context": "^0.2.0-beta",
|
"raptor-render-context": "^0.2.0-beta",
|
||||||
"raptor-data-providers": "^0.2.0-beta",
|
|
||||||
"raptor-ecma": "^0.2.0-beta",
|
"raptor-ecma": "^0.2.0-beta",
|
||||||
"htmlparser2": "~3.5.1",
|
"htmlparser2": "~3.5.1",
|
||||||
"char-props": "~0.1.5",
|
"char-props": "~0.1.5",
|
||||||
@ -34,8 +33,9 @@
|
|||||||
"raptor-args": "^0.1.9-beta",
|
"raptor-args": "^0.1.9-beta",
|
||||||
"minimatch": "^0.2.14",
|
"minimatch": "^0.2.14",
|
||||||
"property-handlers": "^0.2.1-beta",
|
"property-handlers": "^0.2.1-beta",
|
||||||
"raptor-dust": "^0.3.6-beta",
|
"sax": "^0.6.0",
|
||||||
"sax": "^0.6.0"
|
"raptor-taglib-async": "^0.1.0-beta",
|
||||||
|
"raptor-taglib-layout": "^0.1.0-beta"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mocha": "~1.15.1",
|
"mocha": "~1.15.1",
|
||||||
|
|||||||
@ -1,40 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var varNameRegExp = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
||||||
module.exports = function transform(node, compiler, template) {
|
|
||||||
var varName = node.getAttribute('var') || node.getAttribute('data-provider') || node.getAttribute('dependency');
|
|
||||||
if (varName) {
|
|
||||||
if (!varNameRegExp.test(varName)) {
|
|
||||||
node.addError('Invalid variable name of "' + varName + '"');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
node.addError('Either "var" or "data-provider" is required');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var argProps = [];
|
|
||||||
var propsToRemove = [];
|
|
||||||
node.forEachProperty(function (name, value) {
|
|
||||||
if (name.startsWith('arg-')) {
|
|
||||||
var argName = name.substring('arg-'.length);
|
|
||||||
argProps.push(JSON.stringify(argName) + ': ' + value);
|
|
||||||
propsToRemove.push(name);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
propsToRemove.forEach(function (propName) {
|
|
||||||
node.removeProperty(propName);
|
|
||||||
});
|
|
||||||
var argString;
|
|
||||||
if (argProps.length) {
|
|
||||||
argString = '{' + argProps.join(', ') + '}';
|
|
||||||
}
|
|
||||||
var arg = node.getProperty('arg');
|
|
||||||
if (arg) {
|
|
||||||
var extendFuncName = template.getStaticHelperFunction('extend', 'xt');
|
|
||||||
argString = extendFuncName + '(' + arg + ', ' + argString + ')';
|
|
||||||
}
|
|
||||||
if (argString) {
|
|
||||||
node.setProperty('arg', template.makeExpression(argString));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var raptorDataProviders = require('raptor-data-providers');
|
|
||||||
|
|
||||||
module.exports = function render(input, context) {
|
|
||||||
var dataProvider = input.dataProvider;
|
|
||||||
|
|
||||||
var dataProviders = raptorDataProviders.forContext(context, false /* don't create if missing */);
|
|
||||||
|
|
||||||
var arg = input.arg || {};
|
|
||||||
|
|
||||||
arg.context = context;
|
|
||||||
var asyncContext = context.beginAsync(input.timeout);
|
|
||||||
|
|
||||||
function onError(e) {
|
|
||||||
asyncContext.error(e || 'Async fragment failed');
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderBody(data) {
|
|
||||||
try {
|
|
||||||
if (input.invokeBody) {
|
|
||||||
input.invokeBody(asyncContext, data);
|
|
||||||
}
|
|
||||||
asyncContext.end();
|
|
||||||
} catch (e) {
|
|
||||||
onError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var method = input.method;
|
|
||||||
if (method) {
|
|
||||||
dataProvider = dataProvider[method].bind(dataProvider);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
dataProviders.requestData(dataProvider, arg, function(err, data) {
|
|
||||||
if (err) {
|
|
||||||
return onError(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
renderBody(data);
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
onError(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": [
|
|
||||||
{
|
|
||||||
"package": "raptor/render-context/async"
|
|
||||||
},
|
|
||||||
"AsyncFragmentTag.js"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"tags": {
|
|
||||||
"async-fragment": {
|
|
||||||
"renderer": "./async-fragment-tag",
|
|
||||||
"attributes": {
|
|
||||||
"data-provider": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"arg": {
|
|
||||||
"type": "expression",
|
|
||||||
"preserve-name": true
|
|
||||||
},
|
|
||||||
"arg-*": {
|
|
||||||
"pattern": true,
|
|
||||||
"type": "string",
|
|
||||||
"preserve-name": true
|
|
||||||
},
|
|
||||||
"var": {
|
|
||||||
"type": "identifier"
|
|
||||||
},
|
|
||||||
"timeout": {
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"method": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"vars": [
|
|
||||||
"context",
|
|
||||||
{
|
|
||||||
"name-from-attribute": "var OR dependency OR data-provider|keep"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"transformer": "./async-fragment-tag-transformer"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
module.exports = function render(input, context) {
|
|
||||||
var content = input.content[input.name];
|
|
||||||
if (content) {
|
|
||||||
if (content.value) {
|
|
||||||
context.write(content.value);
|
|
||||||
} else if (content.invokeBody) {
|
|
||||||
content.invokeBody();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (input.invokeBody) {
|
|
||||||
input.invokeBody();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = function render(input, context) {
|
|
||||||
input._layout.handlePutTag(input);
|
|
||||||
};
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"tags": {
|
|
||||||
"layout-use": {
|
|
||||||
"renderer": "./use-tag",
|
|
||||||
"attributes": {
|
|
||||||
"template": {
|
|
||||||
"type": "template"
|
|
||||||
},
|
|
||||||
"*": {
|
|
||||||
"remove-dashes": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"var": "_layout"
|
|
||||||
},
|
|
||||||
"layout-put": {
|
|
||||||
"renderer": "./put-tag",
|
|
||||||
"attributes": {
|
|
||||||
"into": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"value": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"import-var": {
|
|
||||||
"_layout": "_layout"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"layout-placeholder": {
|
|
||||||
"renderer": "./placeholder-tag",
|
|
||||||
"attributes": {
|
|
||||||
"name": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"import-var": {
|
|
||||||
"content": "data.layoutContent"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
var extend = require('raptor-util').extend;
|
|
||||||
module.exports = function render(input, context) {
|
|
||||||
var content = {};
|
|
||||||
|
|
||||||
input.invokeBody({
|
|
||||||
handlePutTag: function (putTag) {
|
|
||||||
content[putTag.into] = putTag;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var viewModel = extend(input['*'] || {}, { layoutContent: content });
|
|
||||||
input.template.render(viewModel, context);
|
|
||||||
};
|
|
||||||
Loading…
x
Reference in New Issue
Block a user