Extracting client user commands from application.js
[KiwiIRC.git] / client / build.js
CommitLineData
4c424593
D
1var fs = require('fs'),\r
2 uglifyJS = require('uglify-js'),\r
3 _ = require('lodash'),\r
4 po2json = require('po2json'),\r
5 config = require('../server/configuration.js'),\r
6 package_json = require('../package.json');\r
23533845
D
7\r
8var FILE_ENCODING = 'utf-8',\r
9 EOL = '\n';\r
10\r
11\r
4ab66100
JA
12function concat(file_list, callback) {\r
13 var num_files = file_list.length,\r
14 files = [],\r
15 loaded = 0,\r
16 error = false;\r
17\r
18 file_list.forEach(function (file_path, idx) {\r
19 if (error) {\r
20 return;\r
21 }\r
22 fs.readFile(file_path, { encoding: FILE_ENCODING }, function (err, data) {\r
23 if (error) {\r
24 return;\r
25 } else if (err) {\r
26 error = true;\r
27 return callback(err);\r
28 }\r
29 files[idx] = data + '\n\n';\r
30 if (++loaded === num_files) {\r
31 callback(null, files.join(EOL));\r
32 }\r
33 });\r
23533845 34 });\r
23533845
D
35}\r
36\r
8eb39b80
D
37\r
38\r
39config.loadConfig();\r
40\r
41\r
3ef153aa 42var source_files = [\r
c3511215
JA
43 __dirname + '/src/app.js',\r
44 __dirname + '/src/models/application.js',\r
45 __dirname + '/src/models/gateway.js',\r
46 __dirname + '/src/models/network.js',\r
47 __dirname + '/src/models/member.js',\r
48 __dirname + '/src/models/memberlist.js',\r
49 __dirname + '/src/models/newconnection.js',\r
50 __dirname + '/src/models/panel.js',\r
51 __dirname + '/src/models/panellist.js',\r
52 __dirname + '/src/models/networkpanellist.js',\r
53 __dirname + '/src/models/channel.js',\r
54 __dirname + '/src/models/query.js',\r
55 __dirname + '/src/models/server.js',\r
56 __dirname + '/src/models/applet.js',\r
57 __dirname + '/src/models/pluginmanager.js',\r
58 __dirname + '/src/models/datastore.js',\r
9a82a96e 59 __dirname + '/src/models/channelinfo.js',\r
c3511215 60\r
c3511215
JA
61 __dirname + '/src/views/panel.js',\r
62 __dirname + '/src/views/channel.js',\r
63 __dirname + '/src/views/applet.js',\r
64 __dirname + '/src/views/application.js',\r
65 __dirname + '/src/views/apptoolbar.js',\r
66 __dirname + '/src/views/controlbox.js',\r
67 __dirname + '/src/views/favicon.js',\r
68 __dirname + '/src/views/mediamessage.js',\r
69 __dirname + '/src/views/member.js',\r
70 __dirname + '/src/views/memberlist.js',\r
71 __dirname + '/src/views/menubox.js',\r
72 __dirname + '/src/views/networktabs.js',\r
73 __dirname + '/src/views/nickchangebox.js',\r
74 __dirname + '/src/views/resizehandler.js',\r
75 __dirname + '/src/views/serverselect.js',\r
76 __dirname + '/src/views/statusmessage.js',\r
77 __dirname + '/src/views/tabs.js',\r
78 __dirname + '/src/views/topicbar.js',\r
9a82a96e 79 __dirname + '/src/views/userbox.js',\r
9936359c 80 __dirname + '/src/views/channeltools.js',\r
d2cf53f5 81 __dirname + '/src/views/channelinfo.js',\r
c1279d9a 82 __dirname + '/src/views/rightbar.js',\r
41cba2fd
D
83\r
84 __dirname + '/src/misc/clientuicommands.js',\r
85\r
504dc905
D
86 __dirname + '/src/applets/settings.js',\r
87 __dirname + '/src/applets/chanlist.js',\r
88 __dirname + '/src/applets/scripteditor.js',\r
89 __dirname + '/src/applets/startup.js'\r
3ef153aa 90];\r
9df70c63
D
91\r
92\r
b19d262f
D
93var helpers_path = __dirname + '/src/helpers/';\r
94var helpers_sources = fs.readdirSync(helpers_path)\r
95 .map(function(file){\r
96 return helpers_path + file;\r
97 });\r
98\r
99source_files = source_files.concat(helpers_sources);\r
100\r
101\r
3ef153aa
JA
102/**\r
103 * Build the kiwi.js/kiwi.min.js files\r
104 */\r
4ab66100
JA
105concat(source_files, function (err, src) {\r
106 if (!err) {\r
107 src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r
108\r
c3511215 109 fs.writeFile(__dirname + '/assets/kiwi.js', src, { encoding: FILE_ENCODING }, function (err) {\r
4ab66100
JA
110 if (!err) {\r
111 console.log('Built kiwi.js');\r
112 } else {\r
113 console.error('Error building kiwi.js:', err);\r
114 }\r
115 });\r
116\r
117 // Uglify can take take an array of filenames to produce minified code\r
118 // but it's not wraped in an IIFE and produces a slightly larger file\r
119 //src = uglifyJS.minify(source_files);\r
120\r
121 var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r
122 ast.figure_out_scope();\r
123 ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
124 ast.figure_out_scope();\r
125 ast.compute_char_frequency();\r
126 ast.mangle_names();\r
127 src = ast.print_to_string();\r
128\r
c3511215 129 fs.writeFile(__dirname + '/assets/kiwi.min.js', src, { encoding: FILE_ENCODING }, function (err) {\r
4ab66100
JA
130 if (!err) {\r
131 console.log('Built kiwi.min.js');\r
132 } else {\r
133 console.error('Error building kiwi.min.js:', err);\r
134 }\r
135 });\r
136 } else {\r
137 console.error('Error building kiwi.js and kiwi.min.js:', err);\r
138 }\r
139});\r
8eb39b80
D
140\r
141\r
142\r
143\r
144\r
145\r
33432128
D
146/**\r
147 * Build the engineio client + tools libs\r
148 */\r
c3511215 149concat([__dirname + '/assets/libs/engine.io.js', __dirname + '/assets/libs/engine.io.tools.js'], function (err, src) {\r
33432128 150 if (!err) {\r
c3511215 151 fs.writeFile(__dirname + '/assets/libs/engine.io.bundle.js', src, { encoding: FILE_ENCODING }, function (err) {\r
33432128
D
152 if (!err) {\r
153 console.log('Built engine.io.bundle.js');\r
154 } else {\r
155 console.error('Error building engine.io.bundle.js:', err);\r
156 }\r
157 });\r
158\r
159 var ast = uglifyJS.parse(src, {filename: 'engine.io.bundle.js'});\r
160 ast.figure_out_scope();\r
161 ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
162 ast.figure_out_scope();\r
163 ast.compute_char_frequency();\r
164 ast.mangle_names();\r
165 src = ast.print_to_string();\r
166\r
c3511215 167 fs.writeFile(__dirname + '/assets/libs/engine.io.bundle.min.js', src, { encoding: FILE_ENCODING }, function (err) {\r
33432128
D
168 if (!err) {\r
169 console.log('Built engine.io.bundle.min.js');\r
170 } else {\r
171 console.error('Error building engine.io.bundle.min.js:', err);\r
172 }\r
173 });\r
174 } else {\r
175 console.error('Error building engine.io.bundle.js and engine.io.bundle.min.js:', err);\r
176 }\r
177});\r
178\r
179\r
180\r
181\r
182\r
183\r
0fa2ca42
JA
184/**\r
185* Convert translations from .po to .json\r
186*/\r
c3511215
JA
187if (!fs.existsSync(__dirname + '/assets/locales')) {\r
188 fs.mkdirSync(__dirname + '/assets/locales');\r
12adecdd 189}\r
c3511215 190fs.readdir(__dirname + '/src/translations', function (err, translation_files) {\r
4ab66100
JA
191 if (!err) {\r
192 translation_files.forEach(function (file) {\r
193 var locale = file.slice(0, -3);\r
194\r
195 if ((file.slice(-3) === '.po') && (locale !== 'template')) {\r
736a1b21 196 po2json.parseFile(__dirname + '/src/translations/' + file, {format: 'jed', domain: locale}, function (err, json) {\r
4ab66100 197 if (!err) {\r
736a1b21 198\r
c3511215 199 fs.writeFile(__dirname + '/assets/locales/' + locale + '.json', JSON.stringify(json), function (err) {\r
4ab66100
JA
200 if (!err) {\r
201 console.log('Built translation file %s.json', locale);\r
202 } else {\r
203 console.error('Error building translation file %s.json:', locale, err);\r
204 }\r
205 });\r
206 } else {\r
207 console.error('Error building translation file %s.json: ', locale, err);\r
208 }\r
209 });\r
210 }\r
211 });\r
212 } else {\r
213 console.error('Error building translation files:', err);\r
0fa2ca42
JA
214 }\r
215});\r
216\r
217\r
8eb39b80
D
218\r
219\r
220\r
221\r
222/**\r
223 * Build the index.html file\r
224 */\r
225\r
c3511215 226var index_src = fs.readFileSync(__dirname + '/src/index.html.tmpl', FILE_ENCODING)\r
903f9288 227 .replace(new RegExp('<%base_path%>', 'g'), config.get().http_base_path || '')\r
4c424593 228 .replace(new RegExp('<%build_version%>', 'g'), package_json.version);\r
cbcd1a23 229\r
92f1ff73 230fs.writeFile(__dirname + '/index.html', index_src, { encoding: FILE_ENCODING }, function (err) {\r
cbcd1a23 231 if (!err) {\r
4ab66100 232 console.log('Built index.html');\r
cbcd1a23 233 } else {\r
4ab66100 234 console.error('Error building index.html');\r
cbcd1a23 235 }\r
8eb39b80 236});\r