appmake 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/appmake.rb +69 -2
- metadata +1 -1
data/lib/appmake.rb
CHANGED
@@ -23,7 +23,7 @@ class Appmake
|
|
23
23
|
def self.watch
|
24
24
|
tpl_callback = Proc.new do |modified, added, removed|
|
25
25
|
puts "=> rebuilding TPL"
|
26
|
-
system("node
|
26
|
+
system("node -e #{COMPILE_TEMPLATES_JS}")
|
27
27
|
end
|
28
28
|
|
29
29
|
tpl_listener = Listen.to "tpl", :filter => /\.html$/
|
@@ -48,4 +48,71 @@ class Appmake
|
|
48
48
|
js_listener.change(&js_callback)
|
49
49
|
js_listener.start
|
50
50
|
end
|
51
|
-
end
|
51
|
+
end
|
52
|
+
|
53
|
+
COMPILE_TEMPLATES_JS = <<EOS
|
54
|
+
var app_dir = __dirname + '/../',
|
55
|
+
tpl_dir = app_dir + 'tpl/',
|
56
|
+
js_dir = app_dir + 'js/',
|
57
|
+
|
58
|
+
fs = require('fs'),
|
59
|
+
dot = require('../js/lib/doT.js'),
|
60
|
+
|
61
|
+
templates = {};
|
62
|
+
|
63
|
+
walk();
|
64
|
+
fs.writeFile(js_dir + 'templates.js', buildModule(templates));
|
65
|
+
|
66
|
+
|
67
|
+
function walk(subdir) {
|
68
|
+
var dir = tpl_dir,
|
69
|
+
files;
|
70
|
+
|
71
|
+
if (subdir)
|
72
|
+
dir += subdir;
|
73
|
+
|
74
|
+
files = fs.readdirSync(dir);
|
75
|
+
files.forEach(function (filename) {
|
76
|
+
var stats = fs.statSync(dir + filename);
|
77
|
+
|
78
|
+
if (stats.isDirectory()) {
|
79
|
+
if (subdir) filename = subdir + filename;
|
80
|
+
filename += '/';
|
81
|
+
|
82
|
+
walk(filename);
|
83
|
+
}
|
84
|
+
|
85
|
+
if (!isHTML(filename))
|
86
|
+
return;
|
87
|
+
|
88
|
+
readFile(filename, subdir, fs.readFileSync(dir + filename));
|
89
|
+
});
|
90
|
+
}
|
91
|
+
|
92
|
+
function readFile (filename, dir, data) {
|
93
|
+
var name = filename.split('.').slice(0, -1).join('.'),
|
94
|
+
compiled = dot.template(data).toString().replace(/^function anonymous/, 'function ');
|
95
|
+
|
96
|
+
if (dir)
|
97
|
+
name = dir + name;
|
98
|
+
|
99
|
+
templates[name] = compiled;
|
100
|
+
}
|
101
|
+
|
102
|
+
function isHTML(name) {
|
103
|
+
if (!~name.indexOf('.'))
|
104
|
+
return false;
|
105
|
+
|
106
|
+
return name.split('.').slice(-1)[0].toLowerCase() === 'html';
|
107
|
+
}
|
108
|
+
|
109
|
+
function buildModule() {
|
110
|
+
var content = [],
|
111
|
+
n;
|
112
|
+
|
113
|
+
for (n in templates)
|
114
|
+
content.push('"' + n + '": ' + templates[n]);
|
115
|
+
|
116
|
+
return ['module.exports = {', content.join(','), '};'].join('').replace(/(\n|\r|\r\n)/, '');
|
117
|
+
}
|
118
|
+
EOS
|