2016-11-02 16:12:13 -06:00

55 lines
1.6 KiB
JavaScript

var template = require('marko').load(require.resolve('./template.marko'));
exports.render = function(input, out) {
var rootAttrs = {};
// The logic to determine the class names to apply to the root
// element is relatively complex since it is based on the 'variant'
// and the 'size' input so we are going to build the class names
// in JavaScript instead of in the template.
var classParts = ['app-extend-button'];
var type = 'button';
var variant = input.variant;
if (variant && variant !== 'primary') {
classParts.push('app-extend-button-' + variant);
}
var size = input.size;
if (size && size !== 'normal') {
classParts.push('app-extend-button-' + size);
}
var splatAttrs = input['*'];
if (splatAttrs) {
var className = splatAttrs['class'];
if (className) {
delete splatAttrs['class'];
classParts.push(className);
}
for (var splatAttr in splatAttrs) {
if (splatAttrs.hasOwnProperty(splatAttr)) {
rootAttrs[splatAttr] = splatAttrs[splatAttr];
}
}
}
rootAttrs['class'] = classParts.join(' ');
template.render({
widgetConfig: {
name: input.name,
label: input.label
},
type: type,
renderBody: input.renderBody, // renderBody is a function we can use to render nested
// content. will be undefined if no nested content.
label: input.label, // The button label can come from nested content or the label attribute
rootAttrs: rootAttrs
}, out);
};