comparison src/implab/text/template-compile.js @ 0:fc2517695ee1

Initial commit, draft import of existing work
author cin
date Thu, 01 Jun 2017 13:20:03 +0300
parents
children f0035923ff3e
comparison
equal deleted inserted replaced
-1:000000000000 0:fc2517695ee1
1 define(
2 [ "dojo/request", "./format" ],
3 function(request, format) {
4 var compile = function(str) {
5 var code = "var p=[],print=function(){p.push(foramt.apply(null,arguments));};" +
6 // Introduce the data as local variables using with(){}
7 "with(obj){p.push('" +
8 // Convert the template into pure JavaScript
9 str.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(
10 /(^|%>)[^\t]*/g,
11 function(x) {
12 return x.replace(/('|\\)/g, "\\$1");
13 }).replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');")
14 .split("%>").join("p.push('") + "');}return p.join('');";
15 /* jshint -W054 */
16 try {
17 var compiled = new Function("obj, format, nls", code);
18
19 /**
20 * Функция форматирования по шаблону
21 *
22 * @type{Function}
23 * @param{Object} obj объект с параметрами для подстановки
24 */
25 return function(obj) {
26 return compiled(obj || {}, format);
27 };
28 } catch (e) {
29 if (console && console.error) {
30 console.error(code);
31 }
32 }
33 };
34
35 var cache = {};
36
37 compile.load = function(id, require, callback) {
38 var url = require.toUrl(id);
39 if (url in cache) {
40 callback(cache[url]);
41 } else {
42 request(url).then(compile).then(function(tc) {
43 callback(cache[url] = tc);
44 }, function(err) {
45 require.signal("error", [ {
46 error : err,
47 src : 'implab/template-compile'
48 } ]);
49 });
50 }
51 };
52
53 return compile;
54 });