-
Notifications
You must be signed in to change notification settings - Fork 1
/
doT.js
61 lines (50 loc) · 1.85 KB
/
doT.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// requirejs-doT
// --------------
// This extremly simple requirejs plugin fetches doT templates
// using the requirejs-text plugin and makes them ready to use.
define(['doTCompiler', 'text'], function(doT, text) {
'use strict';
var buildMap = {};
// ### [load](http://requirejs.org/docs/plugins.html#apiload)
// loads the given module using requirejs-text.
function load(name, req, onload, requireConfig, isBuild) {
// if we've already compiled a version of that function, use that.
if (isBuild && buildMap.hasOwnProperty(name)) {
return onload(buildMap[name]);
}
var config = requireConfig.doT || {};
var fileName = name + (config.ext || '.dot');
// pass in the settings
if (config.templateSettings) {
for (var option in config.templateSettings) {
doT.templateSettings[option] = config.templateSettings[option];
}
}
// get the template with [requirejs-text](https://github.com/requirejs/text)
text.get(req.toUrl(fileName), function(tmplData) {
// compile the template with doT.
var template = doT.template(tmplData);
// store it in the build map.
buildMap[name] = template;
// and provide it to the onLoad function.
onload(template);
});
}
// ### [write](http://requirejs.org/docs/plugins.html#apiwrite)
// write is only used by the optimizer, and it only needs to be
// implemented if the plugin can output something that would belong in an
// optimized layer. It is called with the following arguments
function write(pluginName, moduleName, writeFile) {
if (buildMap.hasOwnProperty(moduleName)) {
writeFile(
"define('" + pluginName + "!" + moduleName + "',function(){return " +
buildMap[moduleName].toString() + ";});\n"
);
}
}
// expose public functions
return {
load: load,
write: write
};
});