mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
merge + fixes
This commit is contained in:
commit
769c572e35
@ -5,6 +5,7 @@ var removeDashes = require('../util/removeDashes');
|
||||
var safeVarName = require('../util/safeVarName');
|
||||
var ok = require('assert').ok;
|
||||
var tagLoader;
|
||||
var Node = require('./Node');
|
||||
|
||||
var CUSTOM_TAG_KEY = Symbol('CustomTag');
|
||||
|
||||
@ -156,6 +157,51 @@ function processDirectlyNestedTags(node, codegen) {
|
||||
});
|
||||
}
|
||||
|
||||
function merge(props1, props2, context) {
|
||||
if (!props2) {
|
||||
return props1;
|
||||
}
|
||||
|
||||
if (!(props2 instanceof Node)) {
|
||||
if (Object.keys(props2).length === 0) {
|
||||
return props1;
|
||||
}
|
||||
}
|
||||
|
||||
if (props1 instanceof Node) {
|
||||
let mergeVar = context.helper('merge');
|
||||
if (!(props2 instanceof Node)) {
|
||||
props2 = context.builder.literal(props2);
|
||||
}
|
||||
|
||||
return context.builder.functionCall(mergeVar, [
|
||||
props2, // Input props from the attributes take precedence
|
||||
props1
|
||||
]);
|
||||
} else {
|
||||
if (props2 instanceof Node) {
|
||||
let mergeVar = context.helper('merge');
|
||||
|
||||
return context.builder.functionCall(mergeVar, [
|
||||
props2, // Input props from the attributes take precedence
|
||||
props1
|
||||
|
||||
]);
|
||||
} else {
|
||||
if (props1._arg) {
|
||||
let mergeVar = context.helper('merge');
|
||||
props1._arg = context.builder.functionCall(mergeVar, [
|
||||
context.builder.literal(props2), // Input props from the attributes take precedence
|
||||
props1._arg
|
||||
]);
|
||||
return props1;
|
||||
} else {
|
||||
return Object.assign(props1, props2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CustomTag extends HtmlElement {
|
||||
constructor(el, tagDef) {
|
||||
super(el);
|
||||
@ -168,6 +214,8 @@ class CustomTag extends HtmlElement {
|
||||
this._condition = null;
|
||||
this._foundNestedTagsByName = {};
|
||||
this._hasDynamicNestedTags = false;
|
||||
this._additionalProps = null;
|
||||
this._rendererPath = null;
|
||||
}
|
||||
|
||||
buildInputProps(codegen) {
|
||||
@ -342,6 +390,26 @@ class CustomTag extends HtmlElement {
|
||||
byNameArray.push(nestedTag);
|
||||
}
|
||||
|
||||
addProps(additionalProps) {
|
||||
if (!this._additionalProps) {
|
||||
this._additionalProps = {};
|
||||
}
|
||||
|
||||
Object.assign(this._additionalProps, additionalProps);
|
||||
}
|
||||
|
||||
addProp(name, value) {
|
||||
if (!this._additionalProps) {
|
||||
this._additionalProps = {};
|
||||
}
|
||||
this._additionalProps[name] = value;
|
||||
}
|
||||
|
||||
setRendererPath(path) {
|
||||
ok(typeof path === 'string', '"path" should be a string');
|
||||
this._rendererPath = path;
|
||||
}
|
||||
|
||||
getNestedTagVar(context) {
|
||||
if (!this._nestedTagVar) {
|
||||
var tagDef = this.tagDef;
|
||||
@ -364,25 +432,22 @@ class CustomTag extends HtmlElement {
|
||||
|
||||
var tagDef = this.resolveTagDef(codegen);
|
||||
|
||||
if (!tagDef) {
|
||||
// The tag def was not able to be resolved and an error should have already
|
||||
// been added to the context
|
||||
return null;
|
||||
}
|
||||
|
||||
var parentCustomTag;
|
||||
|
||||
// console.log('BEGIN:', JSON.stringify(this, null, 2));
|
||||
|
||||
// console.log(module.id, 'generateCode BEGIN:', this.tagName, new Error().stack);
|
||||
|
||||
context.pushData(CUSTOM_TAG_KEY, this);
|
||||
processDirectlyNestedTags(this, codegen);
|
||||
var body = codegen.generateCode(this.body);
|
||||
context.popData(CUSTOM_TAG_KEY);
|
||||
|
||||
// console.log(module.id, 'generateCode END:', this.tagName);
|
||||
|
||||
var isNestedTag = tagDef.isNestedTag === true;
|
||||
if (isNestedTag) {
|
||||
parentCustomTag = context.getData(CUSTOM_TAG_KEY);
|
||||
|
||||
// console.log('parentCustomTag:', parentCustomTag.tagName, 'child:', tagDef.name);
|
||||
|
||||
if (!parentCustomTag) {
|
||||
if (tagDef.parentTagName) {
|
||||
codegen.addError(`Invalid usage of the <${this.tagName}> nested tag. Tag not nested within a <${tagDef.parentTagName}> tag.`);
|
||||
@ -435,12 +500,6 @@ class CustomTag extends HtmlElement {
|
||||
|
||||
var inputProps = this.buildInputProps(codegen);
|
||||
|
||||
// if (isNestedTag) {
|
||||
// isRepeated = tagDef.isRepeated === true;
|
||||
// targetProperty = tagDef.targetProperty;
|
||||
// parentTagVar = parentCustomTag.getNestedTagVar(context);
|
||||
// }
|
||||
|
||||
var renderBodyFunction;
|
||||
|
||||
if (body && body.length) {
|
||||
@ -481,29 +540,31 @@ class CustomTag extends HtmlElement {
|
||||
bodyOnlyIf = null;
|
||||
}
|
||||
|
||||
inputProps = builder.literal(inputProps);
|
||||
var argExpression;
|
||||
|
||||
var argument = this.argument;
|
||||
if (this.argument) {
|
||||
argExpression = builder.parseExpression(this.argument);
|
||||
}
|
||||
|
||||
if (argument) {
|
||||
argument = builder.parseExpression(argument);
|
||||
var additionalProps = this._additionalProps;
|
||||
|
||||
if (Object.keys(inputProps.value).length === 0) {
|
||||
inputProps = argument;
|
||||
} else {
|
||||
var mergeVar = context.helper('merge');
|
||||
inputProps = builder.functionCall(mergeVar, [
|
||||
inputProps, // Input props from the attributes take precedence
|
||||
argument
|
||||
]);
|
||||
}
|
||||
if (additionalProps) {
|
||||
inputProps = merge(additionalProps, inputProps, context);
|
||||
}
|
||||
|
||||
if (argExpression) {
|
||||
inputProps = merge(argExpression, inputProps, context);
|
||||
}
|
||||
|
||||
if (!(inputProps instanceof Node)) {
|
||||
inputProps = builder.literal(inputProps);
|
||||
}
|
||||
|
||||
if (hasDynamicNestedTags) {
|
||||
inputProps = builder.functionCall(context.helper('mergeNestedTagsHelper'), [ inputProps ]);
|
||||
}
|
||||
|
||||
var rendererPath = tagDef.renderer;
|
||||
var rendererPath = this._rendererPath || tagDef.renderer;
|
||||
var rendererRequirePath;
|
||||
var requireRendererFunctionCall;
|
||||
|
||||
|
||||
@ -88,6 +88,17 @@ class HtmlElement extends Node {
|
||||
this._attributes.addAttribute(attr);
|
||||
}
|
||||
|
||||
setAttributeValues(attrs) {
|
||||
if (!attrs) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(var attrName in attrs) {
|
||||
var attrValue = attrs[attrName];
|
||||
this.setAttributeValue(attrName, attrValue);
|
||||
}
|
||||
}
|
||||
|
||||
setAttributeValue(name, value) {
|
||||
this._attributes.setAttributeValue(name, value);
|
||||
}
|
||||
|
||||
@ -1,30 +1,15 @@
|
||||
/*
|
||||
* Copyright 2011 eBay Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
require('raptor-polyfill/string/endsWith');
|
||||
|
||||
const extend = require('raptor-util/extend');
|
||||
const compiler = require('../compiler');
|
||||
const nodePath = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
var compiler;
|
||||
var marko;
|
||||
|
||||
var modifiedId = 1;
|
||||
var nextTemplateId = 0;
|
||||
var runtime;
|
||||
var loadMarkoTemplate = require('../').load;
|
||||
|
||||
/**
|
||||
* Lazily require the Marko runtime because there is a circular dependency.
|
||||
@ -37,7 +22,7 @@ function _getMarkoRuntime() {
|
||||
|
||||
function tryReload(path, runtime) {
|
||||
try {
|
||||
return loadMarkoTemplate(path);
|
||||
return marko.load(path);
|
||||
} catch(e) {
|
||||
return undefined;
|
||||
}
|
||||
@ -159,3 +144,6 @@ exports.handleFileModified = function(path) {
|
||||
modifiedId++;
|
||||
}
|
||||
};
|
||||
|
||||
compiler = require('../compiler');
|
||||
marko = require('../');
|
||||
@ -30,7 +30,7 @@
|
||||
"test-express": "mocha --ui bdd --reporter spec ./test/express-test",
|
||||
"test-widgets": "npm run test-widgets-browser -s && npm run test-widgets-browser-deprecated -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-deprecated": "node test/browser-tests-runner/cli.js test/widgets-browser-deprecated-tests.js --automated && npm run test-widgets-browser-pages",
|
||||
"test-widgets-browser-deprecated": "node test/browser-tests-runner/cli.js test/deprecated-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",
|
||||
|
||||
@ -20,7 +20,7 @@ var RenderResult = module.exports = function RenderResult(out) {
|
||||
this.out = out;
|
||||
};
|
||||
|
||||
RenderResult.prototype = {
|
||||
var proto = RenderResult.prototype = {
|
||||
getWidget: function() {
|
||||
checkAddedToDOM(this, 'getWidget');
|
||||
|
||||
@ -75,39 +75,8 @@ RenderResult.prototype = {
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
appendTo: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.appendTo(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
replace: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.replace(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
replaceChildrenOf: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.replaceChildrenOf(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
insertBefore: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.insertBefore(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
insertAfter: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.insertAfter(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
prependTo: function(referenceEl) {
|
||||
var newNode = this.getNode(referenceEl.ownerDocument);
|
||||
dom.prependTo(newNode, referenceEl);
|
||||
return this.afterInsert(newNode);
|
||||
},
|
||||
getNode: function() {
|
||||
return this.out.getNode();
|
||||
getNode: function(doc) {
|
||||
return this.out.getNode(doc);
|
||||
},
|
||||
getOutput: function() {
|
||||
return this.out.getOutput();
|
||||
@ -119,4 +88,25 @@ RenderResult.prototype = {
|
||||
return this.getOutput();
|
||||
},
|
||||
document: typeof document !== 'undefined' && document
|
||||
};
|
||||
};
|
||||
|
||||
// Add all of the following DOM methods to RenderResult.prototype:
|
||||
// - forEachChildEl(referenceEl)
|
||||
// - forEachChild(referenceEl)
|
||||
// - detach(referenceEl)
|
||||
// - appendTo(referenceEl)
|
||||
// - remove(referenceEl)
|
||||
// - removeChildren(referenceEl)
|
||||
// - replace(referenceEl)
|
||||
// - replaceChildrenOf(referenceEl)
|
||||
// - insertBefore(referenceEl)
|
||||
// - insertAfter(referenceEl)
|
||||
// - prependTo(referenceEl)
|
||||
dom.mixin(
|
||||
proto,
|
||||
function getNode() {
|
||||
return this.getNode();
|
||||
},
|
||||
function afterInsert(newNode) {
|
||||
this.afterInsert(newNode);
|
||||
});
|
||||
@ -116,4 +116,18 @@ exports.replaceChildrenOf = replaceChildrenOf;
|
||||
exports.insertBefore = insertBefore;
|
||||
exports.insertAfter = insertAfter;
|
||||
exports.prependTo = prependTo;
|
||||
exports.ready = require('./ready');
|
||||
|
||||
exports.mixin = function(target, getNode, afterInsert) {
|
||||
Object.keys(exports).forEach(function(methodName) {
|
||||
var func = exports[methodName];
|
||||
|
||||
target[methodName] = function(referenceEl) {
|
||||
var newNode = getNode.call(this, referenceEl.ownerDocument);
|
||||
func.call(exports, newNode, referenceEl);
|
||||
if (afterInsert) {
|
||||
afterInsert.call(this, newNode);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
});
|
||||
};
|
||||
@ -7,7 +7,7 @@ function classListHelper(arg, classNames) {
|
||||
if (arg) {
|
||||
if (typeof arg === 'string') {
|
||||
if (arg) {
|
||||
classNames.push(arg);
|
||||
classNames.push(arg);
|
||||
}
|
||||
} else if (typeof (len = arg.length) === 'number') {
|
||||
for (var i=0; i<len; i++) {
|
||||
@ -250,5 +250,4 @@ exports.cl = function classListHelper() {
|
||||
/**
|
||||
* Loads a template (__helpers.l --> marko_loadTemplate(path))
|
||||
*/
|
||||
exports.l = require('./loader');
|
||||
exports.i = require('./include');
|
||||
exports.l = require('./loader');
|
||||
@ -107,7 +107,7 @@ exports.xa = escapeXmlAttr;
|
||||
* prematurely ended and a new script tag could then be started that could then execute
|
||||
* arbitrary code.
|
||||
*/
|
||||
exports.xs = function(val) {
|
||||
exports.xs = function escapeScriptHelper(val) {
|
||||
return (typeof val === 'string') ? val.replace(escapeEndingScriptTagRegExp, '\\u003C/') : val;
|
||||
};
|
||||
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
module.exports = function include(target, out, data) {
|
||||
if (target) {
|
||||
if (typeof target === 'function') {
|
||||
target(out, data);
|
||||
} else if (typeof target === 'object') {
|
||||
if (target.renderBody) {
|
||||
target.renderBody(out, data);
|
||||
} else if (target.renderer) {
|
||||
target.renderer(data, out);
|
||||
} else if (target.render) {
|
||||
target.render(data, out);
|
||||
}
|
||||
} else {
|
||||
throw new Error('Invalid include target: ' + target);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -13,18 +13,19 @@ module.exports = function(target, renderer) {
|
||||
var render = renderFunc || this._;
|
||||
var out = createOut(localData.$global);
|
||||
|
||||
if(!callback) {
|
||||
out.sync();
|
||||
} else {
|
||||
if (callback) {
|
||||
out.on('finish', function() {
|
||||
callback(null, out.toString(), out);
|
||||
})
|
||||
.once('error', callback);
|
||||
|
||||
render(localData, out);
|
||||
return out.end();
|
||||
} else {
|
||||
out.sync();
|
||||
render(localData, out);
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
render(localData, out);
|
||||
|
||||
return callback ? out.end() : out.toString();
|
||||
},
|
||||
|
||||
renderSync: function(data) {
|
||||
@ -72,7 +73,7 @@ module.exports = function(target, renderer) {
|
||||
finalData = {};
|
||||
}
|
||||
|
||||
if(out && out.isAsyncOut){
|
||||
if (out && out.isAsyncOut){
|
||||
finalOut = out;
|
||||
shouldEnd = false;
|
||||
extend(out.global, globalData);
|
||||
|
||||
34
taglibs/core/include-tag-transformer.js
Normal file
34
taglibs/core/include-tag-transformer.js
Normal file
@ -0,0 +1,34 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = function codeGenerator(el, context) {
|
||||
let builder = context.builder;
|
||||
|
||||
let target;
|
||||
let arg;
|
||||
|
||||
if (el.argument) {
|
||||
let args = el.argument && builder.parseJavaScriptArgs(el.argument);
|
||||
el.argument = null;
|
||||
|
||||
target = args[0];
|
||||
arg = args[1];
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.type === 'Literal') {
|
||||
target = context.importTemplate(target.value);
|
||||
}
|
||||
|
||||
var includeProps = {
|
||||
_target: target
|
||||
};
|
||||
|
||||
if (arg) {
|
||||
includeProps._arg = arg;
|
||||
}
|
||||
|
||||
el.data.includeTarget = target;
|
||||
|
||||
el.addProps(includeProps);
|
||||
};
|
||||
@ -1,87 +1,20 @@
|
||||
'use strict';
|
||||
var removeHyphens = require('../../compiler/util/removeDashes');
|
||||
|
||||
module.exports = function codeGenerator(el, codegen) {
|
||||
let builder = codegen.builder;
|
||||
|
||||
let target;
|
||||
let data;
|
||||
|
||||
if (el.argument) {
|
||||
let args = el.argument && builder.parseJavaScriptArgs(el.argument);
|
||||
target = args[0];
|
||||
data = args[1];
|
||||
}
|
||||
|
||||
var isTemplate = false;
|
||||
module.exports = function include(input, out) {
|
||||
var target = input._target;
|
||||
var arg = input._arg || input;
|
||||
|
||||
if (target) {
|
||||
if (target.type === 'Literal') {
|
||||
target = codegen.context.importTemplate(target.value);
|
||||
isTemplate = true;
|
||||
}
|
||||
}
|
||||
|
||||
let finalData = {};
|
||||
let attrs = el.getAttributes();
|
||||
attrs.forEach((attr) => {
|
||||
var propName = attr.name;
|
||||
if (propName.indexOf('-') !== -1) {
|
||||
propName = removeHyphens(propName); // Convert the property name to camel case
|
||||
}
|
||||
|
||||
finalData[propName] = attr.value;
|
||||
});
|
||||
|
||||
if (el.body && el.body.length) {
|
||||
finalData.renderBody = builder.renderBodyFunction(el.body);
|
||||
}
|
||||
|
||||
if (data) {
|
||||
if (Object.keys(finalData).length === 0) {
|
||||
finalData = data;
|
||||
} else {
|
||||
let mergeVar = codegen.context.helper('merge');
|
||||
finalData = builder.functionCall(mergeVar, [
|
||||
builder.literal(finalData), // Input props from the attributes take precedence
|
||||
data // The template data object is passed as the second argument: <include("./foo.marko", { ... })/>
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
if (Object.keys(finalData).length === 0) {
|
||||
finalData = null;
|
||||
} else {
|
||||
finalData = builder.literal(finalData);
|
||||
}
|
||||
}
|
||||
|
||||
if (isTemplate) {
|
||||
let renderMethod = builder.memberExpression(target, builder.identifier('render'));
|
||||
if (!finalData) {
|
||||
finalData = builder.literal({});
|
||||
}
|
||||
let renderArgs = [ finalData, builder.identifierOut() ];
|
||||
let renderFunctionCall = builder.functionCall(renderMethod, renderArgs);
|
||||
return renderFunctionCall;
|
||||
} else {
|
||||
if (this.generateCodeForDynamicInclude) {
|
||||
return this.generateCodeForDynamicInclude({
|
||||
target: target,
|
||||
data: finalData
|
||||
}, codegen);
|
||||
} else {
|
||||
if (!target) {
|
||||
target = builder.memberExpression(builder.identifier('data'), builder.identifier('renderBody'));
|
||||
if (typeof target === 'function') {
|
||||
target(out, arg);
|
||||
} else if (typeof target === 'object') {
|
||||
if (target.renderBody) {
|
||||
target.renderBody(out, arg);
|
||||
} else if (target.renderer) {
|
||||
target.renderer(arg, out);
|
||||
} else if (target.render) {
|
||||
target.render(arg, out);
|
||||
}
|
||||
|
||||
let includeVar = codegen.context.helper('include');
|
||||
let includeArgs = [ target, builder.identifierOut() ];
|
||||
|
||||
if (finalData) {
|
||||
includeArgs.push(finalData);
|
||||
}
|
||||
|
||||
return builder.functionCall(includeVar, includeArgs);
|
||||
} else {
|
||||
throw new Error('Invalid include target: ' + target);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -79,7 +79,8 @@
|
||||
"code-generator": "./import-tag"
|
||||
},
|
||||
"<include>": {
|
||||
"code-generator": "./include-tag",
|
||||
"renderer": "./include-tag",
|
||||
"transformer": "./include-tag-transformer",
|
||||
"autocomplete": [
|
||||
{
|
||||
"displayText": "include(<template>)",
|
||||
|
||||
@ -6,6 +6,9 @@ module.exports = function transform(el, context) {
|
||||
context.addError(el, 'Invalid <layout-use> tag. Expected: <layout-use(template[, data]) ...>');
|
||||
return;
|
||||
}
|
||||
|
||||
console.warn('The <layout-use> tag is deprecated. Please use <include> instead. See: https://github.com/marko-js/marko/issues/452 (' + (el.pos ? context.getPosInfo(el.pos) : context.filename) + ')');
|
||||
|
||||
var builder = context.builder;
|
||||
|
||||
var args = builder.parseJavaScriptArgs(argument);
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
module.exports = function(input, out) {
|
||||
var asyncOut = out.beginAsync();
|
||||
setTimeout(function() {
|
||||
asyncOut.write('[async]');
|
||||
asyncOut.end();
|
||||
}, 10);
|
||||
};
|
||||
@ -0,0 +1,2 @@
|
||||
- Hello ${data.name}!
|
||||
<test-async/>
|
||||
10
test/autotests/api/renderToString-callback-async/test.js
Normal file
10
test/autotests/api/renderToString-callback-async/test.js
Normal file
@ -0,0 +1,10 @@
|
||||
var nodePath = require('path');
|
||||
|
||||
exports.check = function(marko, markoCompiler, expect, done) {
|
||||
var template = marko.load(nodePath.join(__dirname, 'template.marko'));
|
||||
template.renderToString({ name: 'John' }, function(err, html) {
|
||||
expect(html).to.equal('Hello John! [async]');
|
||||
done();
|
||||
});
|
||||
|
||||
};
|
||||
@ -0,0 +1 @@
|
||||
- Hello ${data.name}!
|
||||
10
test/autotests/api/renderToString-callback-sync/test.js
Normal file
10
test/autotests/api/renderToString-callback-sync/test.js
Normal file
@ -0,0 +1,10 @@
|
||||
var nodePath = require('path');
|
||||
|
||||
exports.check = function(marko, markoCompiler, expect, done) {
|
||||
var template = marko.load(nodePath.join(__dirname, 'template.marko'));
|
||||
template.renderToString({ name: 'John' }, function(err, html) {
|
||||
expect(html).to.equal('Hello John!');
|
||||
done();
|
||||
});
|
||||
|
||||
};
|
||||
@ -0,0 +1,7 @@
|
||||
module.exports = function(input, out) {
|
||||
var asyncOut = out.beginAsync();
|
||||
setTimeout(function() {
|
||||
asyncOut.write('[async]');
|
||||
asyncOut.end();
|
||||
}, 10);
|
||||
};
|
||||
@ -0,0 +1,2 @@
|
||||
- Hello ${data.name}!
|
||||
<test-async/>
|
||||
@ -0,0 +1,9 @@
|
||||
var nodePath = require('path');
|
||||
|
||||
exports.check = function(marko, markoCompiler, expect, done) {
|
||||
var template = marko.load(nodePath.join(__dirname, 'template.marko'));
|
||||
expect(function() {
|
||||
template.renderToString({ name: 'John' });
|
||||
}).to.throw('beginAsync() not allowed when using renderSync()');
|
||||
done();
|
||||
};
|
||||
1
test/autotests/api/renderToString/template.marko
Normal file
1
test/autotests/api/renderToString/template.marko
Normal file
@ -0,0 +1 @@
|
||||
- Hello ${data.name}!
|
||||
8
test/autotests/api/renderToString/test.js
Normal file
8
test/autotests/api/renderToString/test.js
Normal file
@ -0,0 +1,8 @@
|
||||
var nodePath = require('path');
|
||||
|
||||
exports.check = function(marko, markoCompiler, expect, done) {
|
||||
var template = marko.load(nodePath.join(__dirname, 'template.marko'));
|
||||
var result = template.renderToString({ name: 'John' });
|
||||
expect(result).to.equal('Hello John!');
|
||||
done();
|
||||
};
|
||||
@ -4,10 +4,14 @@ module.exports = template;
|
||||
|
||||
var marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_loadTemplate = marko_helpers.l,
|
||||
target_template = marko_loadTemplate(require.resolve("./target.marko"));
|
||||
target_template = marko_loadTemplate(require.resolve("./target.marko")),
|
||||
marko_loadTag = marko_helpers.t,
|
||||
include_tag = marko_loadTag(require("marko/taglibs/core/include-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
target_template.render({}, out);
|
||||
include_tag({
|
||||
_target: target_template
|
||||
}, out);
|
||||
}
|
||||
|
||||
template._ = render;
|
||||
|
||||
@ -0,0 +1 @@
|
||||
<div>BODY CONTENT</div> ---- <h1>DEFAULT TITLE</h1><div>BODY CONTENT</div><h1>FOOTER CONTENT</h1>
|
||||
@ -0,0 +1,19 @@
|
||||
<h1 if(data.showHeader !== false)>
|
||||
<if(data.header)>
|
||||
<include(data.header)/>
|
||||
</if>
|
||||
<else>
|
||||
DEFAULT TITLE
|
||||
</else>
|
||||
</h1>
|
||||
<div>
|
||||
<include(data.body)/>
|
||||
</div>
|
||||
<h1 if(data.showFooter !== false)>
|
||||
<if(data.footer)>
|
||||
<include(data.footer)/>
|
||||
</if>
|
||||
<else>
|
||||
DEFAULT FOOTER
|
||||
</else>
|
||||
</h1>
|
||||
@ -0,0 +1,11 @@
|
||||
-------
|
||||
<include("./layout-default.marko", {showHeader: false}) show-footer=false>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
----
|
||||
<include("./layout-default.marko", {showHeader: false}) show-header=true>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
-------
|
||||
3
test/autotests/render/include-layout-data-attrs/test.js
Normal file
3
test/autotests/render/include-layout-data-attrs/test.js
Normal file
@ -0,0 +1,3 @@
|
||||
exports.templateData = {
|
||||
layoutDynamic: require('./layout-default.marko')
|
||||
};
|
||||
1
test/autotests/render/include-layout-data/expected.html
Normal file
1
test/autotests/render/include-layout-data/expected.html
Normal file
@ -0,0 +1 @@
|
||||
<div>BODY CONTENT</div>FOOTER CONTENT ---- <h1>DEFAULT TITLE</h1><div>BODY CONTENT2</div>FOOTER CONTENT2 ---- <h1>My Title</h1><div>BODY CONTENT2</div>FOOTER CONTENT2
|
||||
@ -0,0 +1,13 @@
|
||||
<h1 if(data.showHeader !== false)>
|
||||
<if(data.header)>
|
||||
<include(data.header)/>
|
||||
</if>
|
||||
<else>
|
||||
DEFAULT TITLE
|
||||
</else>
|
||||
</h1>
|
||||
<div>
|
||||
<include(data.body)/>
|
||||
</div>
|
||||
<include(data.footer)/>
|
||||
<include(data.empty)/>
|
||||
17
test/autotests/render/include-layout-data/template.marko
Normal file
17
test/autotests/render/include-layout-data/template.marko
Normal file
@ -0,0 +1,17 @@
|
||||
---------
|
||||
<include("./layout-default.marko", {showHeader: false})>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
----
|
||||
<include("./layout-default.marko", {showHeader: true})>
|
||||
<@body>BODY CONTENT2</@body>
|
||||
<@footer>FOOTER CONTENT2</@footer>
|
||||
</include>
|
||||
----
|
||||
<include("./layout-default.marko", {showHeader: true})>
|
||||
<@header>My Title</@header>
|
||||
<@body>BODY CONTENT2</@body>
|
||||
<@footer>FOOTER CONTENT2</@footer>
|
||||
</include>
|
||||
---------
|
||||
3
test/autotests/render/include-layout-data/test.js
Normal file
3
test/autotests/render/include-layout-data/test.js
Normal file
@ -0,0 +1,3 @@
|
||||
exports.templateData = {
|
||||
layoutDynamic: require('./layout-default.marko')
|
||||
};
|
||||
1
test/autotests/render/include-layout/expected.html
Normal file
1
test/autotests/render/include-layout/expected.html
Normal file
@ -0,0 +1 @@
|
||||
<div>BODY CONTENT</div>FOOTER CONTENT<h1>HEADER CONTENT</h1><div>BODY CONTENT</div>FOOTER CONTENT<h1>VALUE HEADER</h1><div>BODY CONTENT</div>FOOTER CONTENT<h1>DEFAULT TITLE</h1><div>BODY CONTENT</div>FOOTER CONTENT
|
||||
13
test/autotests/render/include-layout/layout-default.marko
Normal file
13
test/autotests/render/include-layout/layout-default.marko
Normal file
@ -0,0 +1,13 @@
|
||||
<h1 if(data.showHeader !== false)>
|
||||
<if(data.header)>
|
||||
<include(data.header)/>
|
||||
</if>
|
||||
<else>
|
||||
DEFAULT TITLE
|
||||
</else>
|
||||
</h1>
|
||||
<div>
|
||||
<include(data.body)/>
|
||||
</div>
|
||||
<include(data.footer)/>
|
||||
<include(data.empty)/>
|
||||
18
test/autotests/render/include-layout/template.marko
Normal file
18
test/autotests/render/include-layout/template.marko
Normal file
@ -0,0 +1,18 @@
|
||||
<include("./layout-default.marko") show-header=false>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
<include("./layout-default.marko") show-header=true>
|
||||
<@header>HEADER CONTENT</@header>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
<include("./layout-default.marko") show-header=true>
|
||||
<@header>VALUE HEADER</@header>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
<include(data.layoutDynamic) show-header=true>
|
||||
<@body>BODY CONTENT</@body>
|
||||
<@footer>FOOTER CONTENT</@footer>
|
||||
</include>
|
||||
3
test/autotests/render/include-layout/test.js
Normal file
3
test/autotests/render/include-layout/test.js
Normal file
@ -0,0 +1,3 @@
|
||||
exports.templateData = {
|
||||
layoutDynamic: require('./layout-default.marko')
|
||||
};
|
||||
@ -0,0 +1 @@
|
||||
<div>Frank:10</div>
|
||||
@ -0,0 +1 @@
|
||||
<include(data.renderBody, {name: 'Frank'}) age=10/>
|
||||
@ -0,0 +1,7 @@
|
||||
exports.templateData = {
|
||||
renderBody(out, data) {
|
||||
out.beginElement('div');
|
||||
out.text(data.name + ':' + data.age);
|
||||
out.endElement();
|
||||
}
|
||||
};
|
||||
@ -1,5 +0,0 @@
|
||||
<div>
|
||||
<h1>
|
||||
Hello World!
|
||||
</h1>
|
||||
</div>
|
||||
@ -45,7 +45,7 @@
|
||||
"async-fragment-timeout",
|
||||
"async-fragment-error",
|
||||
"cached-fragment",
|
||||
"w-widget",
|
||||
"_widget",
|
||||
"init-widgets",
|
||||
"w-preserve",
|
||||
"no-update",
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
[
|
||||
"_lasso-resources-root",
|
||||
"_widget",
|
||||
"*",
|
||||
"a",
|
||||
"assign",
|
||||
@ -49,7 +50,6 @@
|
||||
"unless",
|
||||
"var",
|
||||
"w-preserve",
|
||||
"w-widget",
|
||||
"while",
|
||||
"widget-types"
|
||||
]
|
||||
@ -0,0 +1,7 @@
|
||||
module.exports = require('marko/widgets').defineComponent({
|
||||
template: require.resolve('./template.marko'),
|
||||
|
||||
handleColorClick: function(event, el) {
|
||||
this.color = el.getAttribute('data-color');
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,7 @@
|
||||
<div w-bind>
|
||||
<ul>
|
||||
<li for(color in data.colors) data-color=color w-onClick="handleColorClick">
|
||||
${color}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -0,0 +1,18 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {
|
||||
colors: [ 'red', 'green', 'blue' ]
|
||||
});
|
||||
|
||||
var liEls = widget.el.querySelectorAll('li');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[0], 'click');
|
||||
expect(widget.color).to.equal('red');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[1], 'click');
|
||||
expect(widget.color).to.equal('green');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[2], 'click');
|
||||
expect(widget.color).to.equal('blue');
|
||||
};
|
||||
@ -0,0 +1,7 @@
|
||||
module.exports = require('marko/widgets').defineComponent({
|
||||
template: require.resolve('./template.marko'),
|
||||
|
||||
handleColorMouseOver: function(event, el) {
|
||||
this.color = el.getAttribute('data-color');
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,7 @@
|
||||
<div w-bind>
|
||||
<ul>
|
||||
<li for(color in data.colors) data-color=color w-onMouseOver="handleColorMouseOver">
|
||||
${color}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -0,0 +1,18 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {
|
||||
colors: [ 'red', 'green', 'blue' ]
|
||||
});
|
||||
|
||||
var liEls = widget.el.querySelectorAll('li');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[0], 'mouseover');
|
||||
expect(widget.color).to.equal('red');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[1], 'mouseover');
|
||||
expect(widget.color).to.equal('green');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[2], 'mouseover');
|
||||
expect(widget.color).to.equal('blue');
|
||||
};
|
||||
@ -2,7 +2,10 @@ var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {});
|
||||
var el = widget.el;
|
||||
|
||||
expect(widget.el.parentNode).to.equal(helpers.targetEl);
|
||||
widget.destroy();
|
||||
expect(widget.el.parentNode == null).to.equal(true);
|
||||
expect(widget.el == null).to.equal(true);
|
||||
expect(el.parentNode == null).to.equal(true);
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name,
|
||||
age: input.age
|
||||
};
|
||||
},
|
||||
setName: function(newName) {
|
||||
this.setState('name', newName);
|
||||
},
|
||||
setAge: function(newAge) {
|
||||
this.setState('age', newAge);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,4 @@
|
||||
<div ref="name">${state.name}</div>
|
||||
<span ref="age">${state.age}</span>
|
||||
<a href="ebay.com">
|
||||
</a>
|
||||
@ -0,0 +1,21 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
|
||||
var widget = helpers.mount(require('./index'), { name: 'Frank', age: 30 });
|
||||
|
||||
var nameEl = widget.getEl('name');
|
||||
var ageEl = widget.getEl('age');
|
||||
var linkEl = widget.els[2];
|
||||
|
||||
|
||||
expect(nameEl.parentNode != null).to.equal(true);
|
||||
expect(ageEl.parentNode != null).to.equal(true);
|
||||
expect(linkEl.parentNode != null).to.equal(true);
|
||||
|
||||
widget.destroy();
|
||||
|
||||
expect(nameEl.parentNode == null).to.equal(true);
|
||||
expect(ageEl.parentNode == null).to.equal(true);
|
||||
expect(linkEl.parentNode == null).to.equal(true);
|
||||
};
|
||||
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
handleColorClick: function(color) {
|
||||
this.color = color;
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,7 @@
|
||||
<div>
|
||||
<ul>
|
||||
<li for(color in data.colors) onClick("handleColorClick", color)>
|
||||
${color}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -0,0 +1,18 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {
|
||||
colors: [ 'red', 'green', 'blue' ]
|
||||
});
|
||||
|
||||
var liEls = widget.el.querySelectorAll('li');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[0], 'click');
|
||||
expect(widget.color).to.equal('red');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[1], 'click');
|
||||
expect(widget.color).to.equal('green');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[2], 'click');
|
||||
expect(widget.color).to.equal('blue');
|
||||
};
|
||||
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
handleColorMouseOver: function(color) {
|
||||
this.color = color;
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,7 @@
|
||||
<div>
|
||||
<ul>
|
||||
<li for(color in data.colors) onMouseOver("handleColorMouseOver", color)>
|
||||
${color}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -0,0 +1,18 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {
|
||||
colors: [ 'red', 'green', 'blue' ]
|
||||
});
|
||||
|
||||
var liEls = widget.el.querySelectorAll('li');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[0], 'mouseover');
|
||||
expect(widget.color).to.equal('red');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[1], 'mouseover');
|
||||
expect(widget.color).to.equal('green');
|
||||
|
||||
helpers.triggerMouseEvent(liEls[2], 'mouseover');
|
||||
expect(widget.color).to.equal('blue');
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name,
|
||||
age: input.age
|
||||
};
|
||||
},
|
||||
setName: function(newName) {
|
||||
this.setState('name', newName);
|
||||
},
|
||||
setAge: function(newAge) {
|
||||
this.setState('age', newAge);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name,
|
||||
age: input.age
|
||||
};
|
||||
},
|
||||
getName: function() {
|
||||
return this.getEl('name').innerHTML;
|
||||
},
|
||||
getAge: function() {
|
||||
return this.getEl('age').innerHTML;
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,4 @@
|
||||
<div ref="name">${state.name}</div>
|
||||
<span ref="age">${state.age}</span>
|
||||
<a href="ebay.com">
|
||||
</a>
|
||||
@ -0,0 +1 @@
|
||||
<multiple-root-els ref="foo" name='Frank' age=30/>
|
||||
@ -0,0 +1,9 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), { name: 'Frank', age: 30 });
|
||||
var fooWidget = widget.getWidget('foo');
|
||||
expect(fooWidget != null).to.equal(true);
|
||||
expect(fooWidget.getName()).to.equal('Frank');
|
||||
expect(fooWidget.getAge()).to.equal('30');
|
||||
};
|
||||
@ -0,0 +1,2 @@
|
||||
module.exports = {
|
||||
};
|
||||
@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name,
|
||||
age: input.age
|
||||
};
|
||||
},
|
||||
getName: function() {
|
||||
return this.els[0].innerHTML;
|
||||
},
|
||||
getAge: function() {
|
||||
return this.els[1].innerHTML;
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,2 @@
|
||||
<div>${state.name}</div>
|
||||
<span>${state.age}</span>
|
||||
@ -0,0 +1 @@
|
||||
<multiple-root-els ref="foo" name='Frank' age=30/>
|
||||
@ -0,0 +1,9 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), { name: 'Frank', age: 30 });
|
||||
var fooWidget = widget.getWidget('foo');
|
||||
expect(fooWidget != null).to.equal(true);
|
||||
expect(fooWidget.getName()).to.equal('Frank');
|
||||
expect(fooWidget.getAge()).to.equal('30');
|
||||
};
|
||||
@ -0,0 +1,10 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name
|
||||
};
|
||||
},
|
||||
setName: function(newName) {
|
||||
this.setState('name', newName);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1 @@
|
||||
<div>${state.name}</div>
|
||||
@ -0,0 +1,14 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
|
||||
var widget = helpers.mount(require('./index'), { name: 'Frank', age: 30 });
|
||||
|
||||
expect(widget.el.innerHTML).to.equal('Frank');
|
||||
|
||||
widget.setName('Jane');
|
||||
|
||||
widget.update();
|
||||
|
||||
expect(widget.el.innerHTML).to.equal('Jane');
|
||||
};
|
||||
@ -0,0 +1,18 @@
|
||||
module.exports = {
|
||||
getInitialState: function(input) {
|
||||
return {
|
||||
name: input.name,
|
||||
age: input.age,
|
||||
url: input.url
|
||||
};
|
||||
},
|
||||
setName: function(newName) {
|
||||
this.setState('name', newName);
|
||||
},
|
||||
setAge: function(newAge) {
|
||||
this.setState('age', newAge);
|
||||
},
|
||||
setUrl: function(newUrl) {
|
||||
this.setState('url', newUrl);
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,3 @@
|
||||
<div ref="name">${state.name}</div>
|
||||
<span ref="age">${state.age}</span>
|
||||
<a href=state.url></a>
|
||||
@ -0,0 +1,20 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
|
||||
var widget = helpers.mount(require('./index'), { name: 'Frank', age: 30, url: 'http://ebay.com/' });
|
||||
|
||||
expect(widget.getEl('name').innerHTML).to.equal('Frank');
|
||||
expect(widget.getEl('age').innerHTML).to.equal('30');
|
||||
expect(widget.els[2].href).to.equal('http://ebay.com/');
|
||||
|
||||
widget.setName('Jane');
|
||||
widget.setAge(50);
|
||||
widget.setUrl('http://ebay.com/search/');
|
||||
|
||||
widget.update();
|
||||
|
||||
expect(widget.getEl('name').innerHTML).to.equal('Jane');
|
||||
expect(widget.getEl('age').innerHTML).to.equal('50');
|
||||
expect(widget.els[2].href).to.equal('http://ebay.com/search/');
|
||||
};
|
||||
@ -0,0 +1,16 @@
|
||||
<script>
|
||||
module.exports = {
|
||||
onInput: function(input) {
|
||||
this.state = {
|
||||
name: input.name
|
||||
};
|
||||
},
|
||||
setName: function(newName) {
|
||||
this.setState('name', newName);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<div>
|
||||
Hello ${data.name}!
|
||||
</div>
|
||||
@ -0,0 +1,13 @@
|
||||
var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
|
||||
var widget = helpers.mount(require('./index.marko'), { name: 'Frank' });
|
||||
|
||||
expect(widget.el.innerHTML).to.contain('Hello Frank!');
|
||||
|
||||
widget.setName('Jane');
|
||||
widget.update();
|
||||
|
||||
expect(widget.el.innerHTML).to.contain('Hello Jane!');
|
||||
};
|
||||
@ -2,7 +2,10 @@ var expect = require('chai').expect;
|
||||
|
||||
module.exports = function(helpers) {
|
||||
var widget = helpers.mount(require('./index'), {});
|
||||
var el = widget.el;
|
||||
|
||||
expect(widget.el.parentNode).to.equal(helpers.targetEl);
|
||||
widget.destroy();
|
||||
expect(widget.el.parentNode == null).to.equal(true);
|
||||
expect(widget.el == null).to.equal(true);
|
||||
expect(el.parentNode == null).to.equal(true);
|
||||
};
|
||||
@ -7,15 +7,13 @@ var marko_widgets = require("marko/widgets/index"),
|
||||
marko_widgetType = marko_registerWidget("/marko-test$1.0.0/autotests/widgets-compilation/bind-component/index", function() {
|
||||
return require("./");
|
||||
}),
|
||||
marko_widgetAttrs = marko_widgets.attrs,
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_attrs = marko_helpers.as,
|
||||
marko_loadTag = marko_helpers.t,
|
||||
w_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
w_widget_tag({
|
||||
_widget_tag({
|
||||
type: marko_widgetType,
|
||||
_cfg: data.widgetConfig,
|
||||
_state: data.widgetState,
|
||||
@ -24,7 +22,6 @@ function render(data, out) {
|
||||
renderBody: function renderBody(out, widget, state) {
|
||||
out.w("<div" +
|
||||
marko_attr("id", widget.id) +
|
||||
marko_attrs(marko_widgetAttrs(widget)) +
|
||||
"></div>");
|
||||
}
|
||||
}, out);
|
||||
|
||||
@ -7,15 +7,13 @@ var marko_widgets = require("marko/widgets/index"),
|
||||
marko_widgetType = marko_registerWidget("/marko-test$1.0.0/autotests/widgets-compilation/bind-widget/widget", function() {
|
||||
return require("./widget");
|
||||
}),
|
||||
marko_widgetAttrs = marko_widgets.attrs,
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_attrs = marko_helpers.as,
|
||||
marko_loadTag = marko_helpers.t,
|
||||
w_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
w_widget_tag({
|
||||
_widget_tag({
|
||||
type: marko_widgetType,
|
||||
_cfg: data.widgetConfig,
|
||||
_state: data.widgetState,
|
||||
@ -24,7 +22,6 @@ function render(data, out) {
|
||||
renderBody: function renderBody(out, widget, state) {
|
||||
out.w("<div" +
|
||||
marko_attr("id", widget.id) +
|
||||
marko_attrs(marko_widgetAttrs(widget)) +
|
||||
"></div>");
|
||||
}
|
||||
}, out);
|
||||
|
||||
@ -7,16 +7,14 @@ var marko_widgets = require("marko/widgets/index"),
|
||||
marko_widgetType = marko_registerWidget("/marko-test$1.0.0/autotests/widgets-compilation/component-include-attr/index", function() {
|
||||
return require("./");
|
||||
}),
|
||||
marko_widgetAttrs = marko_widgets.attrs,
|
||||
marko_widget_include = require("marko/widgets/taglib/helpers/include"),
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_attrs = marko_helpers.as,
|
||||
marko_loadTag = marko_helpers.t,
|
||||
w_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
include_tag = marko_loadTag(require("marko/widgets/taglib/include-tag")),
|
||||
marko_attr = marko_helpers.a,
|
||||
_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
w_widget_tag({
|
||||
_widget_tag({
|
||||
type: marko_widgetType,
|
||||
body: 0,
|
||||
_cfg: data.widgetConfig,
|
||||
@ -26,12 +24,15 @@ function render(data, out) {
|
||||
renderBody: function renderBody(out, widget, state) {
|
||||
out.w("<div" +
|
||||
marko_attr("id", widget.id) +
|
||||
marko_attrs(marko_widgetAttrs(widget)) +
|
||||
"><h1>Header</h1><div" +
|
||||
marko_attr("id", widget.elId(0)) +
|
||||
">");
|
||||
|
||||
marko_widget_include(data.widgetBody, out, null, widget.elId(0), widget);
|
||||
include_tag({
|
||||
_target: data.widgetBody,
|
||||
_widgetId: widget.elId(0),
|
||||
_arg: widget
|
||||
}, out);
|
||||
|
||||
out.w("</div></div>");
|
||||
}
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
var template = require("marko/html").c(__filename);
|
||||
|
||||
var component = (function() {
|
||||
var __component;
|
||||
var marko_component;
|
||||
|
||||
__component = {};
|
||||
marko_component = {};
|
||||
|
||||
return __component;
|
||||
return marko_component;
|
||||
})();
|
||||
|
||||
var marko_widgets = require("marko/widgets/index");
|
||||
@ -17,15 +17,13 @@ var marko_widgets = require("marko/widgets/index"),
|
||||
marko_widgetType = marko_registerWidget("/marko-test$1.0.0/autotests/widgets-compilation/component-inline/index.marko", function() {
|
||||
return module.exports;
|
||||
}),
|
||||
marko_widgetAttrs = marko_widgets.attrs,
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_attrs = marko_helpers.as,
|
||||
marko_loadTag = marko_helpers.t,
|
||||
w_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
w_widget_tag({
|
||||
_widget_tag({
|
||||
type: marko_widgetType,
|
||||
_cfg: data.widgetConfig,
|
||||
_state: data.widgetState,
|
||||
@ -34,7 +32,6 @@ function render(data, out) {
|
||||
renderBody: function renderBody(out, widget, state) {
|
||||
out.w("<div" +
|
||||
marko_attr("id", widget.id) +
|
||||
marko_attrs(marko_widgetAttrs(widget)) +
|
||||
"></div>");
|
||||
}
|
||||
}, out);
|
||||
|
||||
@ -10,15 +10,13 @@ var marko_registerWidget = marko_widgets.registerWidget,
|
||||
marko_widgetType = marko_registerWidget("/marko-test$1.0.0/autotests/widgets-compilation/component-template-entry-split/widget", function() {
|
||||
return require("./widget");
|
||||
}),
|
||||
marko_widgetAttrs = marko_widgets.attrs,
|
||||
marko_helpers = require("marko/runtime/html/helpers"),
|
||||
marko_attr = marko_helpers.a,
|
||||
marko_attrs = marko_helpers.as,
|
||||
marko_loadTag = marko_helpers.t,
|
||||
w_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
_widget_tag = marko_loadTag(require("marko/widgets/taglib/widget-tag"));
|
||||
|
||||
function render(data, out) {
|
||||
w_widget_tag({
|
||||
_widget_tag({
|
||||
type: marko_widgetType,
|
||||
_cfg: data.widgetConfig,
|
||||
_state: data.widgetState,
|
||||
@ -27,7 +25,6 @@ function render(data, out) {
|
||||
renderBody: function renderBody(out, widget, state) {
|
||||
out.w("<div" +
|
||||
marko_attr("id", widget.id) +
|
||||
marko_attrs(marko_widgetAttrs(widget)) +
|
||||
"></div>");
|
||||
}
|
||||
}, out);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user