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"
|
||||
},
|
||||
"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>",
|
||||
"maintainers": [
|
||||
@ -26,7 +26,6 @@
|
||||
"raptor-json": "^0.2.0-beta",
|
||||
"raptor-modules": "^0.2.0-beta",
|
||||
"raptor-render-context": "^0.2.0-beta",
|
||||
"raptor-data-providers": "^0.2.0-beta",
|
||||
"raptor-ecma": "^0.2.0-beta",
|
||||
"htmlparser2": "~3.5.1",
|
||||
"char-props": "~0.1.5",
|
||||
@ -34,8 +33,9 @@
|
||||
"raptor-args": "^0.1.9-beta",
|
||||
"minimatch": "^0.2.14",
|
||||
"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": {
|
||||
"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