mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
remove and rename references to <async-fragment> in the code (except deprecated events, tests, and transforms)
This commit is contained in:
parent
22e81c92bb
commit
4c9ceb0aa8
@ -5,22 +5,22 @@ module.exports = function(input, out) {
|
||||
|
||||
out.flush();
|
||||
|
||||
var asyncOut = out.beginAsync({ last: true, timeout: -1, name: 'async-fragments' });
|
||||
var asyncOut = out.beginAsync({ last: true, timeout: -1, name: 'await-reorderer' });
|
||||
out.onLast(function(next) {
|
||||
var asyncFragmentsContext = global.__asyncFragments;
|
||||
var awaitContext = global.__awaitContext;
|
||||
|
||||
if (!asyncFragmentsContext || !asyncFragmentsContext.fragments.length) {
|
||||
if (!awaitContext || !awaitContext.instances.length) {
|
||||
asyncOut.end();
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
var remaining = asyncFragmentsContext.fragments.length;
|
||||
var remaining = awaitContext.instances.length;
|
||||
|
||||
var done = false;
|
||||
|
||||
function handleAsyncFragment(fragmentInfo) {
|
||||
fragmentInfo.asyncValue.done(function(err, html) {
|
||||
function handleAwait(awaitInfo) {
|
||||
awaitInfo.asyncValue.done(function(err, html) {
|
||||
if (done) {
|
||||
return;
|
||||
}
|
||||
@ -35,17 +35,18 @@ module.exports = function(input, out) {
|
||||
global._afRuntime = true;
|
||||
}
|
||||
|
||||
asyncOut.write('<div id="af' + fragmentInfo.id + '" style="display:none">' +
|
||||
asyncOut.write('<div id="af' + awaitInfo.id + '" style="display:none">' +
|
||||
html +
|
||||
'</div>' +
|
||||
'<script type="text/javascript">$af(' +
|
||||
(typeof fragmentInfo.id === 'number' ? fragmentInfo.id : '"' + fragmentInfo.id + '"') +
|
||||
(fragmentInfo.after ? (',"' + fragmentInfo.after + '"') : '' ) +
|
||||
(typeof awaitInfo.id === 'number' ? awaitInfo.id : '"' + awaitInfo.id + '"') +
|
||||
(awaitInfo.after ? (',"' + awaitInfo.after + '"') : '' ) +
|
||||
')</script>');
|
||||
|
||||
fragmentInfo.out.writer = asyncOut.writer;
|
||||
awaitInfo.out.writer = asyncOut.writer;
|
||||
|
||||
out.emit('asyncFragmentFinish', fragmentInfo);
|
||||
out.emit('await:finish', awaitInfo);
|
||||
out.emit('asyncFragmentFinish', awaitInfo); // TODO: remove deprecated event
|
||||
|
||||
out.flush();
|
||||
|
||||
@ -57,15 +58,15 @@ module.exports = function(input, out) {
|
||||
});
|
||||
}
|
||||
|
||||
asyncFragmentsContext.fragments.forEach(handleAsyncFragment);
|
||||
awaitContext.instances.forEach(handleAwait);
|
||||
|
||||
out.on('asyncFragmentClientReorder', function(fragmentInfo) {
|
||||
out.on('await:clientReorder', function(awaitInfo) {
|
||||
remaining++;
|
||||
handleAsyncFragment(fragmentInfo);
|
||||
handleAwait(awaitInfo);
|
||||
});
|
||||
|
||||
// Now that we have a listener attached, we want to receive any additional
|
||||
// out-of-sync fragments via an event
|
||||
delete asyncFragmentsContext.fragments;
|
||||
// out-of-sync instances via an event
|
||||
delete awaitContext.instances;
|
||||
});
|
||||
};
|
||||
@ -78,7 +78,7 @@ module.exports = function render(input, out) {
|
||||
dataProvider = dataProvider[method].bind(dataProvider);
|
||||
}
|
||||
|
||||
var fragmentInfo = {
|
||||
var awaitInfo = {
|
||||
name: name,
|
||||
clientReorder: clientReorder,
|
||||
dataProvider: dataProvider
|
||||
@ -86,26 +86,28 @@ module.exports = function render(input, out) {
|
||||
|
||||
var beforeRenderEmitted = false;
|
||||
|
||||
out.emit('asyncFragmentBegin', fragmentInfo);
|
||||
out.emit('await:begin', awaitInfo);
|
||||
out.emit('asyncFragmentBegin', awaitInfo); // TODO: remove deprecated event
|
||||
|
||||
function renderBody(err, data, renderTimeout) {
|
||||
if (fragmentInfo.finished) return;
|
||||
if (awaitInfo.finished) return;
|
||||
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = null;
|
||||
}
|
||||
|
||||
var targetOut = fragmentInfo.out = asyncOut || out;
|
||||
var targetOut = awaitInfo.out = asyncOut || out;
|
||||
|
||||
if (!beforeRenderEmitted) {
|
||||
beforeRenderEmitted = true;
|
||||
out.emit('asyncFragmentBeforeRender', fragmentInfo);
|
||||
out.emit('await:beforeRender', awaitInfo);
|
||||
out.emit('asyncFragmentBeforeRender', awaitInfo); // TODO: remove deprecated event
|
||||
}
|
||||
|
||||
if (err) {
|
||||
if (input.renderError) {
|
||||
console.error('Async fragment (' + name + ') failed. Error:', (err.stack || err));
|
||||
console.error('Await (' + name + ') failed. Error:', (err.stack || err));
|
||||
input.renderError(targetOut);
|
||||
} else {
|
||||
targetOut.error(err);
|
||||
@ -118,10 +120,11 @@ module.exports = function render(input, out) {
|
||||
}
|
||||
}
|
||||
|
||||
fragmentInfo.finished = true;
|
||||
awaitInfo.finished = true;
|
||||
|
||||
if (!clientReorder) {
|
||||
out.emit('asyncFragmentFinish', fragmentInfo);
|
||||
out.emit('await:finish', awaitInfo);
|
||||
out.emit('asyncFragmentFinish', awaitInfo); // TODO: remove deprecated event
|
||||
}
|
||||
|
||||
if (asyncOut) {
|
||||
@ -137,7 +140,7 @@ module.exports = function render(input, out) {
|
||||
|
||||
requestData(dataProvider, arg, renderBody, scope);
|
||||
|
||||
if (!fragmentInfo.finished) {
|
||||
if (!awaitInfo.finished) {
|
||||
var timeout = input.timeout;
|
||||
var renderTimeout = input.renderTimeout;
|
||||
var renderPlaceholder = input.renderPlaceholder;
|
||||
@ -150,9 +153,9 @@ module.exports = function render(input, out) {
|
||||
|
||||
if (timeout != null) {
|
||||
timeoutId = setTimeout(function() {
|
||||
var message = 'Async fragment (' + name + ') timed out after ' + timeout + 'ms';
|
||||
var message = 'Await (' + name + ') timed out after ' + timeout + 'ms';
|
||||
|
||||
fragmentInfo.timedout = true;
|
||||
awaitInfo.timedout = true;
|
||||
|
||||
if (renderTimeout) {
|
||||
logger.error(message);
|
||||
@ -164,12 +167,12 @@ module.exports = function render(input, out) {
|
||||
}
|
||||
|
||||
if (clientReorder) {
|
||||
var asyncFragmentContext = out.global.__asyncFragments || (asyncFragmentContext = out.global.__asyncFragments = {
|
||||
fragments: [],
|
||||
var awaitContext = out.global.__awaitContext || (awaitContext = out.global.__awaitContext = {
|
||||
instances: [],
|
||||
nextId: 0
|
||||
});
|
||||
|
||||
var id = fragmentInfo.id = input.name || (asyncFragmentContext.nextId++);
|
||||
var id = awaitInfo.id = input.name || (awaitContext.nextId++);
|
||||
|
||||
if (renderPlaceholder) {
|
||||
out.write('<span id="afph' + id + '">');
|
||||
@ -179,28 +182,28 @@ module.exports = function render(input, out) {
|
||||
out.write('<noscript id="afph' + id + '"></noscript>');
|
||||
}
|
||||
|
||||
var asyncValue = fragmentInfo.asyncValue = new AsyncValue();
|
||||
var asyncValue = awaitInfo.asyncValue = new AsyncValue();
|
||||
|
||||
// If `client-reorder` is enabled then we asynchronously render the async fragment to a new
|
||||
// If `client-reorder` is enabled then we asynchronously render the await instance to a new
|
||||
// AsyncWriter instance so that we can Write to a temporary in-memory buffer.
|
||||
asyncOut = fragmentInfo.out = asyncWriter.create(null, {global: out.global});
|
||||
asyncOut = awaitInfo.out = asyncWriter.create(null, {global: out.global});
|
||||
|
||||
fragmentInfo.after = input.showAfter;
|
||||
awaitInfo.after = input.showAfter;
|
||||
|
||||
var oldEmit = asyncOut.emit;
|
||||
|
||||
// Since we are rendering the async fragment to a new and separate AsyncWriter instance,
|
||||
// Since we are rendering the await instance to a new and separate AsyncWriter instance,
|
||||
// we want to proxy any child events to the main AsyncWriter in case anyone is interested
|
||||
// in those events. This is also needed for the following events to be handled correctly:
|
||||
//
|
||||
// - asyncFragmentBegin
|
||||
// - asyncFragmentBeforeRender
|
||||
// - asyncFragmentFinish
|
||||
// - await:begin
|
||||
// - await:beforeRender
|
||||
// - await:finish
|
||||
//
|
||||
asyncOut.emit = function(event) {
|
||||
if (event !== 'finish' && event !== 'error') {
|
||||
// We don't want to proxy the finish and error events since those are
|
||||
// very specific to the AsyncWriter associated with the async fragment
|
||||
// very specific to the AsyncWriter associated with the await instance
|
||||
out.emit.apply(out, arguments);
|
||||
}
|
||||
|
||||
@ -215,14 +218,15 @@ module.exports = function render(input, out) {
|
||||
asyncValue.reject(err);
|
||||
});
|
||||
|
||||
if (asyncFragmentContext.fragments) {
|
||||
asyncFragmentContext.fragments.push(fragmentInfo);
|
||||
if (awaitContext.instances) {
|
||||
awaitContext.instances.push(awaitInfo);
|
||||
}
|
||||
|
||||
out.emit('asyncFragmentClientReorder', fragmentInfo);
|
||||
out.emit('await:clientReorder', awaitInfo);
|
||||
out.emit('asyncFragmentClientReorder', awaitInfo); // TODO: remove deprecated event
|
||||
} else {
|
||||
out.flush(); // Flush everything up to this async fragment
|
||||
asyncOut = fragmentInfo.out = out.beginAsync({
|
||||
out.flush(); // Flush everything up to this await instance
|
||||
asyncOut = awaitInfo.out = out.beginAsync({
|
||||
timeout: 0, // We will use our code for controlling timeout
|
||||
name: name
|
||||
});
|
||||
|
||||
@ -11,7 +11,7 @@ var fs = require('fs');
|
||||
|
||||
require('../node-require').install();
|
||||
|
||||
describe('render', function() {
|
||||
describe('async-fragments (deprecated)', function() {
|
||||
var autoTestDir = path.join(__dirname, 'autotests/async-fragments-deprecated');
|
||||
|
||||
autotest.scanDir(
|
||||
|
||||
@ -11,7 +11,7 @@ var fs = require('fs');
|
||||
|
||||
require('../node-require').install();
|
||||
|
||||
describe('render', function() {
|
||||
describe('async render', function() {
|
||||
var autoTestDir = path.join(__dirname, 'autotests/async-render');
|
||||
|
||||
autotest.scanDir(
|
||||
@ -43,17 +43,17 @@ describe('render', function() {
|
||||
var templateData = main.templateData || {};
|
||||
var out = marko.createWriter();
|
||||
var events = [];
|
||||
var eventsByFragmentName = {};
|
||||
var eventsByAwaitInstance = {};
|
||||
|
||||
var addEventListener = function(event) {
|
||||
out.on(event, function(arg) {
|
||||
var name = arg.name;
|
||||
|
||||
if (!eventsByFragmentName[name]) {
|
||||
eventsByFragmentName[name] = [];
|
||||
if (!eventsByAwaitInstance[name]) {
|
||||
eventsByAwaitInstance[name] = [];
|
||||
}
|
||||
|
||||
eventsByFragmentName[name].push(event);
|
||||
eventsByAwaitInstance[name].push(event);
|
||||
|
||||
events.push({
|
||||
event: event,
|
||||
@ -62,9 +62,9 @@ describe('render', function() {
|
||||
});
|
||||
};
|
||||
|
||||
addEventListener('asyncFragmentBegin');
|
||||
addEventListener('asyncFragmentBeforeRender');
|
||||
addEventListener('asyncFragmentFinish');
|
||||
addEventListener('await:begin');
|
||||
addEventListener('await:beforeRender');
|
||||
addEventListener('await:finish');
|
||||
|
||||
template.render(templateData, out, function(err, html) {
|
||||
if (err) {
|
||||
@ -81,13 +81,13 @@ describe('render', function() {
|
||||
main.checkEvents(events, helpers);
|
||||
}
|
||||
|
||||
// Make sure all of the async fragments were correctly ended
|
||||
Object.keys(eventsByFragmentName).forEach(function(fragmentName) {
|
||||
var events = eventsByFragmentName[fragmentName];
|
||||
// Make sure all of the await instances were correctly ended
|
||||
Object.keys(eventsByAwaitInstance).forEach(function(name) {
|
||||
var events = eventsByAwaitInstance[name];
|
||||
expect(events).to.deep.equal([
|
||||
'asyncFragmentBegin',
|
||||
'asyncFragmentBeforeRender',
|
||||
'asyncFragmentFinish'
|
||||
'await:begin',
|
||||
'await:beforeRender',
|
||||
'await:finish'
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
<async-fragment data-provider=data.nameDataProvider var="name">
|
||||
<await(name from data.nameDataProvider)>
|
||||
Hello ${name}!
|
||||
</async-fragment>
|
||||
</await>
|
||||
@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -9,7 +9,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -18,7 +18,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -26,7 +26,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -34,7 +34,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -42,7 +42,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -9,7 +9,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -18,7 +18,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -27,7 +27,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.inner2",
|
||||
"finished":true,
|
||||
@ -36,7 +36,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -45,7 +45,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -54,7 +54,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.inner1",
|
||||
"finished":true,
|
||||
@ -63,7 +63,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.inner2",
|
||||
"finished":true,
|
||||
@ -72,7 +72,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.inner2",
|
||||
"finished":true,
|
||||
|
||||
@ -19,7 +19,7 @@ exports.templateData = {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
exports.checkHtml = function() {}
|
||||
exports.checkEvents = function(events, helpers) {
|
||||
events = events.map(function(eventInfo) {
|
||||
var arg = extend({}, eventInfo.arg);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -9,7 +9,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
@ -18,7 +18,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "data.outer",
|
||||
"finished":true,
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "userInfo1",
|
||||
"clientReorder": false,
|
||||
@ -9,7 +9,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "userInfo2",
|
||||
"clientReorder": false,
|
||||
@ -18,7 +18,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "userInfo3",
|
||||
"clientReorder": false,
|
||||
@ -27,7 +27,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBegin",
|
||||
"event": "await:begin",
|
||||
"arg": {
|
||||
"name": "userInfo4",
|
||||
"clientReorder": false,
|
||||
@ -36,7 +36,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "userInfo1",
|
||||
"clientReorder": false,
|
||||
@ -45,7 +45,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "userInfo1",
|
||||
"clientReorder": false,
|
||||
@ -54,7 +54,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "userInfo2",
|
||||
"clientReorder": false,
|
||||
@ -63,7 +63,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "userInfo2",
|
||||
"clientReorder": false,
|
||||
@ -72,7 +72,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "userInfo3",
|
||||
"clientReorder": false,
|
||||
@ -81,7 +81,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "userInfo3",
|
||||
"clientReorder": false,
|
||||
@ -90,7 +90,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentBeforeRender",
|
||||
"event": "await:beforeRender",
|
||||
"arg": {
|
||||
"name": "userInfo4",
|
||||
"clientReorder": false,
|
||||
@ -99,7 +99,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"event": "asyncFragmentFinish",
|
||||
"event": "await:finish",
|
||||
"arg": {
|
||||
"name": "userInfo4",
|
||||
"clientReorder": false,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user