'use strict';
var HtmlElement = require('./HtmlElement');
var path = require('path');
var removeDashes = require('../util/removeDashes');
function removeExt(filename) {
var ext = path.extname(filename);
if (ext) {
return filename.slice(0, 0 - ext.length);
} else {
return filename;
}
}
function buildInputProps(node, builder) {
var inputProps = {};
node.forEachAttribute((attr) => {
var attrName = attr.name;
var propName = removeDashes(attrName);
inputProps[propName] = attr.value;
});
return builder.literal(inputProps);
}
class CustomTag extends HtmlElement {
constructor(el, tagDef) {
super(el);
this.type = 'CustomTag';
this.tagDef = tagDef;
}
generateCode(generator) {
var loadRendererVar = generator.addStaticVar('__renderer', '__helpers.r');
var tagVar = generator.addStaticVar('__tag', '__helpers.t');
var builder = generator.builder;
var context = generator.context;
var tagDef = this.tagDef;
var rendererPath = tagDef.renderer;
if (rendererPath) {
let rendererRequirePath = context.getRequirePath(rendererPath);
let requireRendererFunctionCall = builder.require(JSON.stringify(rendererRequirePath));
let loadRendererFunctionCall = builder.functionCall(loadRendererVar, [ requireRendererFunctionCall ]);
let rendererVar = generator.addStaticVar(removeExt(rendererPath), loadRendererFunctionCall);
var inputProps = buildInputProps(this, builder);
var tagArgs = [ 'out', rendererVar, inputProps ];
var tagFunctionCall = builder.functionCall(tagVar, tagArgs);
return tagFunctionCall;
}
}
}
module.exports = CustomTag;