UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

139 lines (118 loc) 3.73 kB
"use strict"; 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;