Completed merge of marko-widgets and other cleanup

This commit is contained in:
Patrick Steele-Idem 2016-11-02 16:12:13 -06:00
parent 1b8770df35
commit 3010570502
637 changed files with 1154 additions and 1607 deletions

3
.gitignore vendored
View File

@ -9,4 +9,5 @@
.vscode .vscode
coverage coverage
.nvmrc .nvmrc
~* ~*
/.cache

View File

@ -55,7 +55,7 @@ function relPath(path) {
} }
} }
var args = require('raptor-args').createParser({ var args = require('argly').createParser({
'--help': { '--help': {
type: 'boolean', type: 'boolean',
description: 'Show this help message' description: 'Show this help message'

View File

@ -204,6 +204,7 @@ taglibLookup.registerTaglib(require.resolve('../taglibs/layout/marko.json'));
taglibLookup.registerTaglib(require.resolve('../taglibs/html/marko.json')); taglibLookup.registerTaglib(require.resolve('../taglibs/html/marko.json'));
taglibLookup.registerTaglib(require.resolve('../taglibs/async/marko.json')); taglibLookup.registerTaglib(require.resolve('../taglibs/async/marko.json'));
taglibLookup.registerTaglib(require.resolve('../taglibs/cache/marko.json')); taglibLookup.registerTaglib(require.resolve('../taglibs/cache/marko.json'));
taglibLookup.registerTaglib(require.resolve('../widgets/taglib/marko.json'));
exports.registerTaglib = function(path) { exports.registerTaglib = function(path) {
taglibLookup.registerTaglib(path); taglibLookup.registerTaglib(path);

View File

@ -1,13 +1,21 @@
var marko = require('./'); var marko = require('./');
var createRenderFunc = require('raptor-renderer').createRenderFunc;
function defineRenderer(def) { function defineRenderer(def) {
var template = def.template; var template = def.template;
var getTemplateData = def.getTemplateData; var getTemplateData = def.getTemplateData;
var renderer = def.renderer; var renderer = def.renderer;
var loadedTemplate; if (typeof template === 'string') {
template = marko.load(template);
}
var createOut;
if (template) {
createOut = template.createOut;
} else {
createOut = def.createOut || marko.createOut;
}
if (!renderer) { if (!renderer) {
// Create a renderer function that takes care of translating // Create a renderer function that takes care of translating
@ -21,12 +29,6 @@ function defineRenderer(def) {
newProps = {}; newProps = {};
} }
if (!loadedTemplate) {
// Lazily load the template on first render to avoid potential problems
// with circular dependencies
loadedTemplate = template.render ? template : marko.load(template);
}
// Use getTemplateData(state, props, out) to get the template // Use getTemplateData(state, props, out) to get the template
// data. If that method is not provided then just use the // data. If that method is not provided then just use the
// the state (if provided) or the input data. // the state (if provided) or the input data.
@ -36,11 +38,15 @@ function defineRenderer(def) {
// Render the template associated with the component using the final template // Render the template associated with the component using the final template
// data that we constructed // data that we constructed
loadedTemplate.render(templateData, out); template.render(templateData, out);
}; };
} }
renderer.render = createRenderFunc(renderer); renderer.render = function(input) {
var out = createOut();
renderer(input, out);
return out.end();
};
return renderer; return renderer;
} }

View File

@ -12,14 +12,19 @@
"url": "https://github.com/marko-js/marko.git" "url": "https://github.com/marko-js/marko.git"
}, },
"scripts": { "scripts": {
"test": "npm run mocha && npm run jshint", "test": "npm run mocha -s && npm run test-widgets -s && npm run jshint -s",
"mocha": "mocha --ui bdd --reporter spec ./test/", "mocha": "mocha --ui bdd --reporter spec ./test/",
"test-coverage": "istanbul cover _mocha --include-all-sources -- --ui bdd --reporter spec ./test && npm run jshint", "test-coverage": "istanbul cover _mocha --include-all-sources -- --ui bdd --reporter spec ./test && npm run jshint",
"test-fast": "mocha --ui bdd --reporter spec ./test/render-test", "test-fast": "mocha --ui bdd --reporter spec ./test/render-test",
"test-async": "mocha --ui bdd --reporter spec ./test/async-render-test", "test-async": "mocha --ui bdd --reporter spec ./test/async-render-test",
"test-taglib-loader": "mocha --ui bdd --reporter spec ./test/taglib-loader-test", "test-taglib-loader": "mocha --ui bdd --reporter spec ./test/taglib-loader-test",
"test-express": "mocha --ui bdd --reporter spec ./test/express-test", "test-express": "mocha --ui bdd --reporter spec ./test/express-test",
"jshint": "jshint compiler/ runtime/ taglibs/", "test-widgets": "npm run test-widgets-browser -s && npm run jshint --silent",
"test-widgets-browser": "node test/browser-tests-runner/cli.js test/widgets-browser-tests.js --automated && npm run test-widgets-browser-pages",
"test-widgets-browser-pages": "node test/browser-tests-runner/cli.js --pages --automated",
"test-widgets-browser-dev": "browser-refresh test/browser-tests-runner/cli.js test/widgets-browser-tests.js --server",
"test-widgets-page": "browser-refresh test/browser-tests-runner/cli.js test/widgets-browser-tests.js --server --page",
"jshint": "jshint compiler/ runtime/ taglibs/ widgets/",
"coveralls": "cat ./coverage/lcov.info | coveralls" "coveralls": "cat ./coverage/lcov.info | coveralls"
}, },
"author": "Patrick Steele-Idem <pnidem@gmail.com>", "author": "Patrick Steele-Idem <pnidem@gmail.com>",
@ -30,6 +35,7 @@
"Martin Aberer" "Martin Aberer"
], ],
"dependencies": { "dependencies": {
"argly": "^1.0.0",
"app-module-path": "^1.0.5", "app-module-path": "^1.0.5",
"async-vdom-builder": "^1.0.0", "async-vdom-builder": "^1.0.0",
"async-writer": "^3.0.0", "async-writer": "^3.0.0",
@ -40,36 +46,49 @@
"events": "^1.0.2", "events": "^1.0.2",
"he": "^1.1.0", "he": "^1.1.0",
"htmljs-parser": "^1.5.3", "htmljs-parser": "^1.5.3",
"lasso-modules-client": "^1.0.0",
"lasso-package-root": "^1.0.0", "lasso-package-root": "^1.0.0",
"listener-tracker": "^1.0.2",
"marko-dom": "^1.1.1",
"marko-html-util": "^1.0.0", "marko-html-util": "^1.0.0",
"marko-vdom": "^1.0.0", "marko-vdom": "^1.0.0",
"minimatch": "^3.0.2", "minimatch": "^3.0.2",
"morphdom": "^2.2.0",
"object-assign": "^4.1.0", "object-assign": "^4.1.0",
"property-handlers": "^1.0.0", "property-handlers": "^1.0.0",
"raptor-args": "^1.0.0",
"raptor-async": "^1.1.2", "raptor-async": "^1.1.2",
"raptor-json": "^1.0.1", "raptor-json": "^1.0.1",
"raptor-logging": "^1.0.1", "raptor-logging": "^1.0.1",
"raptor-polyfill": "^1.0.0", "raptor-polyfill": "^1.0.0",
"raptor-promises": "^1.0.1", "raptor-promises": "^1.0.1",
"raptor-regexp": "^1.0.0", "raptor-regexp": "^1.0.0",
"raptor-renderer": "^1.4.4",
"raptor-strings": "^1.0.0",
"raptor-util": "^3.0.0", "raptor-util": "^3.0.0",
"resolve-from": "^1.0.0", "resolve-from": "^1.0.0",
"strip-json-comments": "^2.0.1", "strip-json-comments": "^2.0.1",
"try-require": "^1.2.1" "try-require": "^1.2.1",
"warp10": "^1.0.0"
}, },
"devDependencies": { "devDependencies": {
"async": "^0.9.0",
"bluebird": "^2.9.30", "bluebird": "^2.9.30",
"browser-refresh": "^1.6.0",
"browser-refresh-taglib": "^1.1.0",
"chai": "^3.3.0", "chai": "^3.3.0",
"child-process-promise": "^2.0.3",
"coveralls": "^2.11.9", "coveralls": "^2.11.9",
"express": "^4.13.4", "express": "^4.13.4",
"fs-extra": "^0.30.0", "fs-extra": "^0.30.0",
"ignoring-watcher": "^1.0.2",
"istanbul": "^0.4.3", "istanbul": "^0.4.3",
"jquery": "^2.1.3",
"jsdom": "^9.6.0", "jsdom": "^9.6.0",
"jshint": "^2.5.0", "jshint": "^2.5.0",
"lasso": "^2.4.1",
"lasso-marko": "^2.0.4",
"mkdirp": "^0.5.1",
"mocha": "^2.3.3", "mocha": "^2.3.3",
"mocha-phantomjs": "^4.1.0",
"phantomjs-prebuilt": "^2.1.13",
"request": "^2.72.0", "request": "^2.72.0",
"require-self-ref": "^2.0.1", "require-self-ref": "^2.0.1",
"through": "^2.3.4" "through": "^2.3.4"

8
test/.gitignore vendored
View File

@ -1,3 +1,9 @@
/node_modules /node_modules
/scratch.js /scratch.js
*.generated.js *.generated.js
actual.js
actual.html
*.actual.js
*.actual.html
/generated

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('./patch-module'); require('./util/patch-module');
var chai = require('chai'); var chai = require('chai');
chai.config.includeStack = true; chai.config.includeStack = true;

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('./patch-module'); require('./util/patch-module');
require('marko/node-require').install(); require('marko/node-require').install();
var chai = require('chai'); var chai = require('chai');

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('./patch-module'); require('./util/patch-module');
require('marko/node-require').install(); require('marko/node-require').install();
require('require-self-ref'); require('require-self-ref');

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('./patch-module'); require('./util/patch-module');
var chai = require('chai'); var chai = require('chai');
chai.config.includeStack = true; chai.config.includeStack = true;

View File

@ -1,5 +1,5 @@
'use strict'; 'use strict';
require('./patch-module'); require('./util/patch-module');
require('../node-require').install(); require('../node-require').install();
var chai = require('chai'); var chai = require('chai');

View File

@ -11,6 +11,6 @@ exports.check = function(marko, markoCompiler, expect, done) {
}); });
var renderResult = renderer.render({ firstName: 'John', lastName: 'Doe' }); var renderResult = renderer.render({ firstName: 'John', lastName: 'Doe' });
expect(renderResult.html).to.equal('<div>Hello John Doe!</div>'); expect(renderResult.getOutput()).to.equal('<div>Hello John Doe!</div>');
done(); done();
}; };

View File

@ -7,7 +7,7 @@ exports.check = function(marko, markoCompiler, expect, done) {
expect(markoCompiler.config.writeToDisk).to.equal(true); expect(markoCompiler.config.writeToDisk).to.equal(true);
expect(markoCompiler.config.preserveWhitespace).to.equal(true); expect(markoCompiler.config.preserveWhitespace).to.equal(true);
require('~/node-require').install({ require('marko/node-require').install({
compilerOptions: { compilerOptions: {
writeToDisk: false, writeToDisk: false,
preserveWhitespace: false preserveWhitespace: false

View File

@ -1,14 +1,10 @@
exports.templateData = { exports.templateData = {
sharedData: function (args, done) { sharedData: function (args, done) {
var deferred = require('raptor-promises').defer(); return new Promise(function(resolve, reject) {
setTimeout(function() {
setTimeout(function() { resolve({ name: 'testSharedData' });
deferred.resolve({ }, 100);
name: 'testSharedData' });
});
}, 100);
return deferred.promise;
}, },
contextData: function (args, done) { contextData: function (args, done) {
setTimeout(function() { setTimeout(function() {

View File

@ -1,11 +1,9 @@
exports.templateData = { exports.templateData = {
userInfo: function() { userInfo: function() {
var deferred = require('raptor-promises').defer(); return new Promise(function(resolve, reject) {
setTimeout(function() { setTimeout(function() {
deferred.resolve({ resolve({ name: 'John' });
name: 'John' }, 100);
}); });
}, 200);
return deferred.promise;
} }
}; };

View File

@ -1,9 +1,9 @@
var deferred = require('raptor-promises').defer(); var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
setTimeout(function() { resolve({});
deferred.resolve({}); }, 100);
}, 200); });
exports.templateData = { exports.templateData = {
promiseData: deferred.promise promiseData: promise
}; };

View File

@ -1,10 +1,9 @@
var deferred = require('raptor-promises').defer();
setTimeout(function() {
deferred.resolve('Test promise');
}, 200);
exports.templateData = { exports.templateData = {
promiseData: function (arg, done) { promiseData: function (arg, done) {
return deferred.promise; return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('Test promise');
}, 100);
});
} }
}; };

View File

@ -1,14 +1,12 @@
exports.templateData = { exports.templateData = {
sharedData: function (args, done) { sharedData: function (args, done) {
var deferred = require('raptor-promises').defer(); return new Promise(function(resolve, reject) {
setTimeout(function() {
setTimeout(function() { resolve({
deferred.resolve({ name: 'testSharedData'
name: 'testSharedData' });
}); }, 100);
}, 100); });
return deferred.promise;
}, },
contextData: function (args, done) { contextData: function (args, done) {
setTimeout(function() { setTimeout(function() {

View File

@ -1,11 +1,11 @@
exports.templateData = { exports.templateData = {
userInfo: function() { userInfo: function() {
var deferred = require('raptor-promises').defer(); return new Promise(function(resolve, reject) {
setTimeout(function() { setTimeout(function() {
deferred.resolve({ resolve({
name: 'John' name: 'John'
}); });
}, 200); }, 100);
return deferred.promise; });
} }
}; };

View File

@ -1,9 +1,9 @@
var deferred = require('raptor-promises').defer(); var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
setTimeout(function() { resolve({});
deferred.resolve({}); }, 100);
}, 200); });
exports.templateData = { exports.templateData = {
promiseData: deferred.promise promiseData: promise
}; };

View File

@ -1,10 +1,9 @@
var deferred = require('raptor-promises').defer();
setTimeout(function() {
deferred.resolve('Test promise');
}, 200);
exports.templateData = { exports.templateData = {
promiseData: function (arg, done) { promiseData: function (arg, done) {
return deferred.promise; return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('Test promise');
}, 100);
});
} }
}; };

View File

@ -2,10 +2,24 @@
"name", "name",
"age", "age",
"foo-on-*", "foo-on-*",
"lasso-nonce",
"body-only-if", "body-only-if",
"if", "if",
"else-if", "else-if",
"else", "else",
"for", "for",
"while" "while",
"w-bind",
"w-scope",
"w-extend",
"w-config",
"w-for",
"w-id",
"w-body",
"w-preserve",
"w-preserve-body",
"w-preserve-if",
"w-preserve-body-if",
"w-preserve-attrs",
"w-on*"
] ]

View File

@ -2,6 +2,14 @@
"*", "*",
"foo", "foo",
"bar", "bar",
"lasso-page",
"lasso-slot",
"lasso-head",
"lasso-body",
"lasso-img",
"_lasso-resources-root",
"lasso-resource",
"browser-refresh",
"assign", "assign",
"else", "else",
"else-if", "else-if",
@ -35,5 +43,9 @@
"async-fragment-placeholder", "async-fragment-placeholder",
"async-fragment-timeout", "async-fragment-timeout",
"async-fragment-error", "async-fragment-error",
"cached-fragment" "cached-fragment",
"w-widget",
"init-widgets",
"w-preserve",
"widget-types"
] ]

View File

@ -1,4 +1,5 @@
[ [
"_lasso-resources-root",
"*", "*",
"a", "a",
"assign", "assign",
@ -13,6 +14,7 @@
"await-reorderer", "await-reorderer",
"await-timeout", "await-timeout",
"bar", "bar",
"browser-refresh",
"cached-fragment", "cached-fragment",
"else", "else",
"else-if", "else-if",
@ -23,7 +25,14 @@
"include", "include",
"include-html", "include-html",
"include-text", "include-text",
"init-widgets",
"invoke", "invoke",
"lasso-body",
"lasso-head",
"lasso-img",
"lasso-page",
"lasso-resource",
"lasso-slot",
"layout-placeholder", "layout-placeholder",
"layout-put", "layout-put",
"layout-use", "layout-use",
@ -36,5 +45,8 @@
"textarea", "textarea",
"unless", "unless",
"var", "var",
"while" "w-preserve",
"w-widget",
"while",
"widget-types"
] ]

View File

@ -7,5 +7,5 @@ exports.check = function(markoCompiler, expect) {
transformers.push(transformer); transformers.push(transformer);
}); });
expect(transformers.length).to.equal(1); expect(transformers.length).to.equal(3);
}; };

View File

@ -8,6 +8,8 @@ exports.check = function(markoCompiler, expect) {
transformers.push(transformer); transformers.push(transformer);
}); });
expect(transformers.length).to.equal(1); expect(transformers.length).to.equal(3);
expect(transformers[0].path.indexOf('core-transformer')).to.not.equal(-1); expect(transformers[0].path.indexOf('core-transformer')).to.not.equal(-1);
expect(transformers[1].path.indexOf('lasso-nonce-attr-transformer')).to.not.equal(-1);
expect(transformers[2].path.indexOf('widgets-transformer')).to.not.equal(-1);
}; };

View File

@ -18,16 +18,20 @@ exports.check = function(markoCompiler, expect) {
transformers.push(transformer); transformers.push(transformer);
}); });
expect(transformers.length).to.equal(2); expect(transformers.length).to.equal(4);
expect(transformers[0].path.indexOf('foo')).to.not.equal(-1); expect(transformers[0].path.indexOf('foo')).to.not.equal(-1);
expect(transformers[1].path.indexOf('core-transformer')).to.not.equal(-1); expect(transformers[1].path.indexOf('core-transformer')).to.not.equal(-1);
expect(transformers[2].path.indexOf('lasso-nonce-attr-transformer')).to.not.equal(-1);
expect(transformers[3].path.indexOf('widgets-transformer')).to.not.equal(-1);
transformers = []; transformers = [];
lookup.forEachTagTransformer('transform-bar', function(transformer) { lookup.forEachTagTransformer('transform-bar', function(transformer) {
transformers.push(transformer); transformers.push(transformer);
}); });
expect(transformers.length).to.equal(2); expect(transformers.length).to.equal(4);
expect(transformers[0].path.indexOf('core-transformer')).to.not.equal(-1); expect(transformers[0].path.indexOf('core-transformer')).to.not.equal(-1);
expect(transformers[1].path.indexOf('bar')).to.not.equal(-1); expect(transformers[1].path.indexOf('bar')).to.not.equal(-1);
expect(transformers[2].path.indexOf('lasso-nonce-attr-transformer')).to.not.equal(-1);
expect(transformers[3].path.indexOf('widgets-transformer')).to.not.equal(-1);
}; };

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
init: function() { init: function() {

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
init: function() { init: function() {

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
init: function() { init: function() {

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
init: function() { init: function() {

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require.resolve('./template.marko'), template: require.resolve('./template.marko'),
getInitialState: function(input) { getInitialState: function(input) {
return { return {

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require.resolve('./template.marko'), template: require.resolve('./template.marko'),
getInitialState: function(input) { getInitialState: function(input) {
return { return {

View File

@ -8,7 +8,7 @@ module.exports = function(helpers) {
expect(widget.el.className).to.contain('large'); expect(widget.el.className).to.contain('large');
require('marko-widgets').batchUpdate(function() { require('marko/widgets').batchUpdate(function() {
widget.setSize('small'); widget.setSize('small');
}); });

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require.resolve('./template.marko'), template: require.resolve('./template.marko'),
getInitialState: function(input) { getInitialState: function(input) {
return { return {

View File

@ -10,7 +10,7 @@ module.exports = function(helpers, done) {
widget.setSize('small'); widget.setSize('small');
expect(widget.el.className).to.not.contain('small'); expect(widget.el.className).to.not.contain('small');
require('marko-widgets').onAfterUpdate(function() { require('marko/widgets').onAfterUpdate(function() {
expect(widget.el.className).to.contain('small'); expect(widget.el.className).to.contain('small');
done(); done();
}); });

View File

@ -0,0 +1,7 @@
module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'),
init: function() {
}
});

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
getTemplateData: function(state, input) { getTemplateData: function(state, input) {

View File

@ -1,3 +1,3 @@
// Export a render(input, callback) method that can be used // Export a render(input, callback) method that can be used
// to render this UI component on the client or server // to render this UI component on the client or server
require('marko-widgets').renderable(exports, require('./renderer')); require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -1,4 +1,4 @@
module.exports = require('marko-widgets').defineComponent({ module.exports = require('marko/widgets').defineComponent({
template: require('./template.marko'), template: require('./template.marko'),
getWidgetConfig: function(input) { getWidgetConfig: function(input) {

View File

@ -1,3 +1,3 @@
// Export a render(input, callback) method that can be used // Export a render(input, callback) method that can be used
// to render this UI component on the client or server // to render this UI component on the client or server
require('marko-widgets').renderable(exports, require('./renderer')); require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -1,3 +1,3 @@
// Export a render(input, callback) method that can be used // Export a render(input, callback) method that can be used
// to render this UI component on the client or server // to render this UI component on the client or server
require('marko-widgets').renderable(exports, require('./renderer')); require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -1,3 +1,3 @@
// Export a render(input, callback) method that can be used // Export a render(input, callback) method that can be used
// to render this UI component on the client or server // to render this UI component on the client or server
require('marko-widgets').renderable(exports, require('./renderer')); require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -1,3 +1,3 @@
// Export a render(input) method that can be used // Export a render(input) method that can be used
// to render this UI component on the client or server // to render this UI component on the client or server
require('marko-widgets').renderable(exports, require('./renderer')); require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -0,0 +1,3 @@
// Export a render(input, callback) method that can be used
// to render this UI component on the client or server
require('marko/widgets').renderable(exports, require('./renderer'));

View File

@ -0,0 +1,3 @@
// Export a render(input, callback) method that can be used
// to render this UI component on the client or server
require('marko/widgets').renderable(exports, require('./renderer'));

Some files were not shown because too many files have changed in this diff Show More