devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
139 lines (118 loc) • 3.73 kB
JavaScript
var $ = require("../../core/renderer"),
errors = require("../../core/errors"),
typeUtils = require("../../core/utils/type"),
TemplateBase = require("./ui.template_base"),
domUtils = require("../../core/utils/dom");
var templateEngines = {};
var registerTemplateEngine = function registerTemplateEngine(name, templateEngine) {
templateEngines[name] = templateEngine;
};
var outerHtml = function outerHtml(element) {
element = $(element);
var templateTag = element.length && element[0].nodeName.toLowerCase();
if (templateTag === "script") {
return element.html();
} else {
element = $("<div>").append(element);
return element.html();
}
};
registerTemplateEngine("default", {
compile: function compile(element) {
return domUtils.normalizeTemplateElement(element);
},
render: function render(template) {
return template.clone();
}
});
registerTemplateEngine("jquery-tmpl", {
compile: function compile(element) {
return outerHtml(element);
},
render: function render(template, data) {
/* global jQuery */
return jQuery.tmpl(template, data);
}
});
registerTemplateEngine("jsrender", {
compile: function compile(element) {
/* global jQuery */
/* global jsrender */
return (jQuery ? jQuery : jsrender).templates(outerHtml(element));
},
render: function render(template, data) {
return template.render(data);
}
});
registerTemplateEngine("mustache", {
compile: function compile(element) {
/* global Mustache */
return outerHtml(element);
},
render: function render(template, data) {
return Mustache.render(template, data);
}
});
registerTemplateEngine("hogan", {
compile: function compile(element) {
/* global Hogan */
return Hogan.compile(outerHtml(element));
},
render: function render(template, data) {
return template.render(data);
}
});
registerTemplateEngine("underscore", {
compile: function compile(element) {
/* global _ */
return _.template(outerHtml(element));
},
render: function render(template, data) {
return template(data);
}
});
registerTemplateEngine("handlebars", {
compile: function compile(element) {
/* global Handlebars */
return Handlebars.compile(outerHtml(element));
},
render: function render(template, data) {
return template(data);
}
});
registerTemplateEngine("doT", {
compile: function compile(element) {
/* global doT */
return doT.template(outerHtml(element));
},
render: function render(template, data) {
return template(data);
}
});
var currentTemplateEngine;
var setTemplateEngine = function setTemplateEngine(templateEngine) {
if (typeUtils.isString(templateEngine)) {
currentTemplateEngine = templateEngines[templateEngine];
if (!currentTemplateEngine) {
throw errors.Error("E0020", templateEngine);
}
} else {
currentTemplateEngine = templateEngine;
}
};
setTemplateEngine("default");
var Template = TemplateBase.inherit({
ctor: function ctor(element) {
this._element = element;
this._compiledTemplate = currentTemplateEngine.compile(element);
},
_renderCore: function _renderCore(options) {
return $("<div>").append(currentTemplateEngine.render(this._compiledTemplate, options.model, options.index)).contents();
},
source: function source() {
return $(this._element).clone();
}
});
module.exports = Template;
module.exports.setTemplateEngine = setTemplateEngine;
;