data-provider attr is now always an expression

This commit is contained in:
Patrick Steele-Idem 2014-09-22 11:46:18 -06:00
parent 0cfd079479
commit 96205fc607
16 changed files with 116 additions and 147 deletions

View File

@ -1011,7 +1011,7 @@ template.render({
``` ```
```html ```html
<async-fragment data-providers="${data.userProfileDataProvider}" <async-fragment data-provider="data.userProfileDataProvider"
var="userProfile" var="userProfile"
arg-userId="${data.userId}"> arg-userId="${data.userId}">

View File

@ -23,19 +23,19 @@
"events": "^1.0.2", "events": "^1.0.2",
"htmlparser2": "^3.7.2", "htmlparser2": "^3.7.2",
"minimatch": "^0.2.14", "minimatch": "^0.2.14",
"property-handlers": "^0.2.1-beta", "property-handlers": "^0.2.1",
"raptor-args": "^1.0.0-beta", "raptor-args": "^1.0.0",
"raptor-json": "^1.0.0-beta", "raptor-json": "^1.0.0",
"raptor-logging": "^1.0.0-beta", "raptor-logging": "^1.0.0",
"raptor-modules": "^1.0.0-beta", "raptor-modules": "^1.0.0",
"raptor-polyfill": "^1.0.0-beta", "raptor-polyfill": "^1.0.0",
"raptor-promises": "^1.0.0-beta", "raptor-promises": "^1.0.0",
"raptor-regexp": "^1.0.0-beta", "raptor-regexp": "^1.0.0",
"async-writer": "^1.0.0-beta", "async-writer": "^1.0.0",
"raptor-strings": "^1.0.0-beta", "raptor-strings": "^1.0.0",
"marko-async": "^1.1.0", "marko-async": "^1.1.0",
"marko-layout": "^1.1.0", "marko-layout": "^1.1.0",
"raptor-util": "^1.0.0-beta", "raptor-util": "^1.0.0",
"sax": "^0.6.0" "sax": "^0.6.0"
}, },
"devDependencies": { "devDependencies": {
@ -43,8 +43,8 @@
"dustjs-linkedin": "^2.3.4", "dustjs-linkedin": "^2.3.4",
"jshint": "^2.5.0", "jshint": "^2.5.0",
"mocha": "~1.15.1", "mocha": "~1.15.1",
"raptor-cache": "^1.0.0-beta", "raptor-cache": "^1.0.0",
"raptor-data-providers": "^1.0.0-beta", "raptor-data-providers": "^1.0.0",
"through": "^2.3.4" "through": "^2.3.4"
}, },
"license": "Apache License v2.0", "license": "Apache License v2.0",

View File

@ -2,7 +2,6 @@
var chai = require('chai'); var chai = require('chai');
chai.Assertion.includeStack = true; chai.Assertion.includeStack = true;
require('chai').should(); require('chai').should();
var expect = require('chai').expect;
var nodePath = require('path'); var nodePath = require('path');
var fs = require('fs'); var fs = require('fs');
@ -42,11 +41,6 @@ function testRender(path, data, done, options) {
require('../compiler').defaultOptions.checkUpToDate = false; require('../compiler').defaultOptions.checkUpToDate = false;
if (options.dataProviders) {
var dataProviders = require('raptor-data-providers').forContext(out);
dataProviders.register(options.dataProviders);
}
marko.render(inputPath, data, out) marko.render(inputPath, data, out)
.on('end', function() { .on('end', function() {
var output = out.getOutput(); var output = out.getOutput();
@ -92,101 +86,85 @@ describe('marko/marko-async' , function() {
}); });
it('should render a simple template with async fragments correctly (1)', function(done) { it('should render a simple template with async fragments correctly (1)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering.marko', {
dataProviders: { 'D1': delayedDataProvider(100),
'D1': delayedDataProvider(100), 'D2': delayedDataProvider(300),
'D2': delayedDataProvider(300), 'D3': delayedDataProvider(200),
'D3': delayedDataProvider(200), 'D4': delayedDataProvider(800)
'D4': delayedDataProvider(800) }, done);
}
});
}); });
it('should render a simple template with async fragments correctly (2)', function(done) { it('should render a simple template with async fragments correctly (2)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering.marko', {
dataProviders: { 'D1': delayedDataProvider(100),
'D1': delayedDataProvider(100), 'D2': delayedDataProvider(200),
'D2': delayedDataProvider(200), 'D3': delayedDataProvider(300),
'D3': delayedDataProvider(300), 'D4': delayedDataProvider(150)
'D4': delayedDataProvider(150) }, done);
}
});
}); });
it('should render a simple template with async fragments correctly (3)', function(done) { it('should render a simple template with async fragments correctly (3)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering.marko', {
dataProviders: { 'D1': delayedDataProvider(800),
'D1': delayedDataProvider(800), 'D2': delayedDataProvider(200),
'D2': delayedDataProvider(200), 'D3': delayedDataProvider(300),
'D3': delayedDataProvider(300), 'D4': delayedDataProvider(100)
'D4': delayedDataProvider(100) }, done);
}
});
}); });
it('should render a simple template with async fragments correctly (4)', function(done) { it('should render a simple template with async fragments correctly (4)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering.marko', {
dataProviders: { 'D1': delayedDataProvider(800),
'D1': delayedDataProvider(800), 'D2': delayedDataProvider(300),
'D2': delayedDataProvider(300), 'D3': delayedDataProvider(200),
'D3': delayedDataProvider(200), 'D4': delayedDataProvider(100)
'D4': delayedDataProvider(100) }, done);
}
});
}); });
it('should render a less simple template with async fragments correctly (1)', function(done) { it('should render a less simple template with async fragments correctly (1)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering2.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering2.marko', {
dataProviders: { 'D1': delayedDataProvider(100),
'D1': delayedDataProvider(100), 'D2': delayedDataProvider(300),
'D2': delayedDataProvider(300), 'D3': delayedDataProvider(200),
'D3': delayedDataProvider(200), 'D4': delayedDataProvider(800),
'D4': delayedDataProvider(800), 'D5': delayedDataProvider(900),
'D5': delayedDataProvider(900), 'D6': delayedDataProvider(100),
'D6': delayedDataProvider(100), 'D7': delayedDataProvider(50)
'D7': delayedDataProvider(50) }, done);
}
});
}); });
it('should render a less simple template with async fragments correctly (2)', function(done) { it('should render a less simple template with async fragments correctly (2)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering2.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering2.marko', {
dataProviders: { 'D1': delayedDataProvider(100),
'D1': delayedDataProvider(100), 'D2': delayedDataProvider(300),
'D2': delayedDataProvider(300), 'D3': delayedDataProvider(200),
'D3': delayedDataProvider(200), 'D4': delayedDataProvider(800),
'D4': delayedDataProvider(800), 'D5': delayedDataProvider(900),
'D5': delayedDataProvider(900), 'D6': delayedDataProvider(100),
'D6': delayedDataProvider(100), 'D7': delayedDataProvider(200)
'D7': delayedDataProvider(200) }, done);
}
});
}); });
it('should render a less simple template with async fragments correctly (3)', function(done) { it('should render a less simple template with async fragments correctly (3)', function(done) {
testRender('test-project/html-templates/async-fragment-ordering2.marko', {}, done, { testRender('test-project/html-templates/async-fragment-ordering2.marko', {
dataProviders: { 'D1': delayedDataProvider(900),
'D1': delayedDataProvider(900), 'D2': delayedDataProvider(300),
'D2': delayedDataProvider(300), 'D3': delayedDataProvider(200),
'D3': delayedDataProvider(200), 'D4': delayedDataProvider(800),
'D4': delayedDataProvider(800), 'D5': delayedDataProvider(100),
'D5': delayedDataProvider(100), 'D6': delayedDataProvider(100),
'D6': delayedDataProvider(100), 'D7': delayedDataProvider(200)
'D7': delayedDataProvider(200) }, done);
}
});
}); });
it("should allow for using macros inside async fragments", function(done) { it("should allow for using macros inside async fragments", function(done) {
testRender('test-project/html-templates/async-fragment-macros.marko', {}, done, { testRender('test-project/html-templates/async-fragment-macros.marko', {
dataProviders: { 'D1': delayedDataProvider(100)
'D1': delayedDataProvider(100) }, done);
}
});
}); });
it("should allow for global data providers", function(done) { it("should allow for global data providers", function(done) {
require('raptor-data-providers').register({ testRender('test-project/html-templates/async-fragment-data-providers.marko', {
'sharedData': function(args, done) { 'sharedData': function(args, done) {
var deferred = require('raptor-promises').defer(); var deferred = require('raptor-promises').defer();
@ -197,14 +175,9 @@ describe('marko/marko-async' , function() {
}, 100); }, 100);
return deferred.promise; return deferred.promise;
} },
}); 'contextData': delayedDataProvider(100, {name: "testContextData"})
}, done);
testRender('test-project/html-templates/async-fragment-data-providers.marko', {}, done, {
dataProviders: {
'contextData': delayedDataProvider(100, {name: "testContextData"})
}
});
}); });
it("should allow for data args", function(done) { it("should allow for data args", function(done) {
@ -233,15 +206,13 @@ describe('marko/marko-async' , function() {
}; };
testRender('test-project/html-templates/async-fragment-args.marko', {}, done, { testRender('test-project/html-templates/async-fragment-args.marko', {
dataProviders: { 'userInfo': function(arg, done) {
'userInfo': function(arg, done) { setTimeout(function() {
setTimeout(function() { done(null, users[arg.userId]);
done(null, users[arg.userId]); }, 100);
}, 100);
}
} }
}); }, done);
}); });
it("should allow a data provider to be a promise", function(done) { it("should allow a data provider to be a promise", function(done) {
@ -251,13 +222,11 @@ describe('marko/marko-async' , function() {
deferred.resolve('Test promise'); deferred.resolve('Test promise');
}, 200); }, 200);
testRender('test-project/html-templates/async-fragment-promise.marko', {}, done, { testRender('test-project/html-templates/async-fragment-promise.marko', {
dataProviders: { 'promiseData': function(arg, done) {
'promiseData': function(arg, done) { return deferred.promise;
return deferred.promise;
}
} }
}); }, done);
}); });
it("should allow functions that return promises as data providers", function(done) { it("should allow functions that return promises as data providers", function(done) {

View File

@ -1,3 +1,3 @@
<async-fragment data-provider="$data.nameDataProvider" var="name"> <async-fragment data-provider="data.nameDataProvider" var="name">
Hello $name! Hello $name!
</async-fragment> </async-fragment>

View File

@ -1,6 +1,6 @@
<ul> <ul>
<li for="userId in [0, 1, 2, 3]"> <li for="userId in [0, 1, 2, 3]">
<async-fragment data-provider="userInfo" var="userInfo" arg-userId="$userId"> <async-fragment data-provider="data.userInfo" var="userInfo" arg-userId="$userId">
<ul> <ul>
<li> <li>
<b>Name:</b> $userInfo.name <b>Name:</b> $userInfo.name
@ -14,4 +14,4 @@
</ul> </ul>
</async-fragment> </async-fragment>
</li> </li>
</ul> </ul>

View File

@ -1,7 +1,7 @@
<async-fragment data-provider="contextData" var="d1"> <async-fragment data-provider="data.contextData" var="d1">
$d1.name $d1.name
</async-fragment> </async-fragment>
<async-fragment data-provider="sharedData" var="d2"> <async-fragment data-provider="data.sharedData" var="d2">
$d2.name $d2.name
</async-fragment> </async-fragment>

View File

@ -1,3 +1,3 @@
<async-fragment data-provider="${data.userInfo}" var="userInfo"> <async-fragment data-provider="data.userInfo" var="userInfo">
Hello $userInfo.name Hello $userInfo.name
</async-fragment> </async-fragment>

View File

@ -1,7 +1,7 @@
<def function="asyncMacro(num)"> <def function="asyncMacro(num)">
$num $num
</def>1 </def>1
<async-fragment data-provider="D1"> <async-fragment data-provider="data.D1" var="D1">
<invoke function="asyncMacro" num="2"/> <invoke function="asyncMacro" num="2"/>
</async-fragment> </async-fragment>
3 3

View File

@ -1,17 +1,17 @@
1 1
<async-fragment data-provider="D1" var="d1"> <async-fragment data-provider="data.D1" var="d1">
2 2
<async-fragment data-provider="D2" var="d2"> <async-fragment data-provider="data.D2" var="d2">
3 3
</async-fragment> </async-fragment>
4 4
<async-fragment data-provider="D3" var="d3"> <async-fragment data-provider="data.D3" var="d3">
5 5
</async-fragment> </async-fragment>
6 6
</async-fragment> </async-fragment>
7 7
<async-fragment data-provider="D4" var="d4"> <async-fragment data-provider="data.D4" var="d4">
8 8
</async-fragment> </async-fragment>
9 9

View File

@ -1,13 +1,13 @@
1 1
<async-fragment data-provider="D1"> <async-fragment data-provider="data.D1" var="d1">
2 2
<async-fragment data-provider="D2" var="d2"> <async-fragment data-provider="data.D2" var="d2">
3 3
</async-fragment> </async-fragment>
4 4
<async-fragment data-provider="D3" var="d3"> <async-fragment data-provider="data.D3" var="d3">
5 5
<async-fragment data-provider="D4" var="d4"> <async-fragment data-provider="data.D4" var="d4">
6 6
</async-fragment> </async-fragment>
7 7
@ -15,19 +15,19 @@
8 8
</async-fragment> </async-fragment>
9 9
<async-fragment data-provider="D5" var="d5"> <async-fragment data-provider="data.D5" var="d5">
10 10
<async-fragment data-provider="D6" var="d6"> <async-fragment data-provider="data.D6" var="d6">
11 11
</async-fragment> </async-fragment>
12 12
<async-fragment data-provider="D7" var="d7"> <async-fragment data-provider="data.D7" var="d7">
13 13
</async-fragment> </async-fragment>
14 14
<async-fragment data-provider="D7" var="d7"> <async-fragment data-provider="data.D7" var="d7">
15 15
</async-fragment> </async-fragment>
16 16
</async-fragment> </async-fragment>
17 17

View File

@ -1,3 +1,3 @@
<async-fragment data-provider="promiseData" var="promiseData"> <async-fragment data-provider="data.promiseData" var="promiseData">
$promiseData $promiseData
</async-fragment> </async-fragment>

View File

@ -1,3 +1,3 @@
<async-fragment data-provider="${data.userInfo}" var="userInfo" timeout="100" timeout-message="Server is busy!"> <async-fragment data-provider="data.userInfo" var="userInfo" timeout="100" timeout-message="Server is busy!">
Hello World Hello World
</async-fragment> </async-fragment>

View File

@ -2,7 +2,7 @@
<ul> <ul>
<li for="userId in [0, 1, 2, 3]"> <li for="userId in [0, 1, 2, 3]">
<async-fragment dependency="userInfo" var="userInfo" arg-userId="$userId"> <async-fragment data-provider="data.userInfo" var="userInfo" arg-userId="$userId">
<ul> <ul>
<li> <li>
<b>Name:</b> $userInfo.name <b>Name:</b> $userInfo.name
@ -18,4 +18,4 @@
</li> </li>
</ul> </ul>
</c-template> </c-template>

View File

@ -1,7 +1,7 @@
<c-template> <c-template>
<async-fragment data-provider="${data.userInfo}" var="userInfo"> <async-fragment data-provider="data.userInfo" var="userInfo">
Hello $userInfo.name Hello $userInfo.name
</async-fragment> </async-fragment>
</c-template> </c-template>