Merge branch 'settings' of https://github.com/M2Ys4U/KiwiIRC into settings
[KiwiIRC.git] / client / assets / src / build.js
CommitLineData
8eb39b80 1var fs = require('fs'),\r
3ef153aa 2 uglifyJS = require('uglify-js'),\r
f9ff7686 3 _ = require('lodash'),\r
0fa2ca42 4 po2json = require('po2json'),\r
8eb39b80 5 config = require('./../../../server/configuration.js');\r
23533845
D
6\r
7var FILE_ENCODING = 'utf-8',\r
8 EOL = '\n';\r
9\r
10\r
4ab66100
JA
11function concat(file_list, callback) {\r
12 var num_files = file_list.length,\r
13 files = [],\r
14 loaded = 0,\r
15 error = false;\r
16\r
17 file_list.forEach(function (file_path, idx) {\r
18 if (error) {\r
19 return;\r
20 }\r
21 fs.readFile(file_path, { encoding: FILE_ENCODING }, function (err, data) {\r
22 if (error) {\r
23 return;\r
24 } else if (err) {\r
25 error = true;\r
26 return callback(err);\r
27 }\r
28 files[idx] = data + '\n\n';\r
29 if (++loaded === num_files) {\r
30 callback(null, files.join(EOL));\r
31 }\r
32 });\r
23533845 33 });\r
23533845
D
34}\r
35\r
8eb39b80
D
36\r
37\r
38config.loadConfig();\r
39\r
40\r
3ef153aa 41var source_files = [\r
9df70c63 42 __dirname + '/app.js',\r
2d22d7e2
D
43 __dirname + '/models/application.js',\r
44 __dirname + '/models/gateway.js',\r
45 __dirname + '/models/network.js',\r
46 __dirname + '/models/member.js',\r
47 __dirname + '/models/memberlist.js',\r
48 __dirname + '/models/newconnection.js',\r
49 __dirname + '/models/panel.js',\r
50 __dirname + '/models/panellist.js',\r
51 __dirname + '/models/networkpanellist.js',\r
52 __dirname + '/models/query.js',\r
53 __dirname + '/models/channel.js',\r
54 __dirname + '/models/server.js',\r
55 __dirname + '/models/applet.js',\r
56 __dirname + '/models/pluginmanager.js',\r
57 __dirname + '/models/datastore.js',\r
58\r
59 __dirname + '/applets/settings.js',\r
2d22d7e2
D
60 __dirname + '/applets/chanlist.js',\r
61 __dirname + '/applets/scripteditor.js',\r
9df70c63 62\r
3ea29ac2 63 __dirname + '/helpers/utils.js',\r
50ac472f
D
64\r
65 __dirname + '/views/panel.js',\r
66 __dirname + '/views/channel.js',\r
67 __dirname + '/views/applet.js',\r
68 __dirname + '/views/application.js',\r
69 __dirname + '/views/apptoolbar.js',\r
70 __dirname + '/views/controlbox.js',\r
bd85cbdb 71 __dirname + '/views/favicon.js',\r
50ac472f
D
72 __dirname + '/views/mediamessage.js',\r
73 __dirname + '/views/member.js',\r
74 __dirname + '/views/memberlist.js',\r
75 __dirname + '/views/menubox.js',\r
76 __dirname + '/views/networktabs.js',\r
77 __dirname + '/views/nickchangebox.js',\r
78 __dirname + '/views/resizehandler.js',\r
79 __dirname + '/views/serverselect.js',\r
80 __dirname + '/views/statusmessage.js',\r
81 __dirname + '/views/tabs.js',\r
82 __dirname + '/views/topicbar.js',\r
83 __dirname + '/views/userbox.js'\r
3ef153aa 84];\r
9df70c63
D
85\r
86\r
3ef153aa
JA
87/**\r
88 * Build the kiwi.js/kiwi.min.js files\r
89 */\r
4ab66100
JA
90concat(source_files, function (err, src) {\r
91 if (!err) {\r
92 src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r
93\r
94 fs.writeFile(__dirname + '/../kiwi.js', src, { encoding: FILE_ENCODING }, function (err) {\r
95 if (!err) {\r
96 console.log('Built kiwi.js');\r
97 } else {\r
98 console.error('Error building kiwi.js:', err);\r
99 }\r
100 });\r
101\r
102 // Uglify can take take an array of filenames to produce minified code\r
103 // but it's not wraped in an IIFE and produces a slightly larger file\r
104 //src = uglifyJS.minify(source_files);\r
105\r
106 var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r
107 ast.figure_out_scope();\r
108 ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
109 ast.figure_out_scope();\r
110 ast.compute_char_frequency();\r
111 ast.mangle_names();\r
112 src = ast.print_to_string();\r
113\r
114 fs.writeFile(__dirname + '/../kiwi.min.js', src, { encoding: FILE_ENCODING }, function (err) {\r
115 if (!err) {\r
116 console.log('Built kiwi.min.js');\r
117 } else {\r
118 console.error('Error building kiwi.min.js:', err);\r
119 }\r
120 });\r
121 } else {\r
122 console.error('Error building kiwi.js and kiwi.min.js:', err);\r
123 }\r
124});\r
8eb39b80
D
125\r
126\r
127\r
128\r
129\r
130\r
0fa2ca42
JA
131/**\r
132* Convert translations from .po to .json\r
133*/\r
12adecdd
JA
134if (!fs.existsSync(__dirname + '/../locales')) {\r
135 fs.mkdirSync(__dirname + '/../locales');\r
136}\r
4ab66100
JA
137fs.readdir(__dirname + '/translations', function (err, translation_files) {\r
138 if (!err) {\r
139 translation_files.forEach(function (file) {\r
140 var locale = file.slice(0, -3);\r
141\r
142 if ((file.slice(-3) === '.po') && (locale !== 'template')) {\r
143 po2json.parse(__dirname + '/translations/' + file, function (err, json) {\r
144 if (!err) {\r
145 fs.writeFile(__dirname + '/../locales/' + locale + '.json', JSON.stringify(json), function (err) {\r
146 if (!err) {\r
147 console.log('Built translation file %s.json', locale);\r
148 } else {\r
149 console.error('Error building translation file %s.json:', locale, err);\r
150 }\r
151 });\r
152 } else {\r
153 console.error('Error building translation file %s.json: ', locale, err);\r
154 }\r
155 });\r
156 }\r
157 });\r
158 } else {\r
159 console.error('Error building translation files:', err);\r
0fa2ca42
JA
160 }\r
161});\r
162\r
163\r
8eb39b80
D
164\r
165\r
166\r
167\r
168/**\r
169 * Build the index.html file\r
170 */\r
171\r
cbcd1a23
JA
172var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING)\r
173 .replace(new RegExp('<%base_path%>', 'g'), config.get().http_base_path || '/kiwi');\r
174\r
175fs.writeFile(__dirname + '/../../index.html', index_src, { encoding: FILE_ENCODING }, function (err) {\r
176 if (!err) {\r
4ab66100 177 console.log('Built index.html');\r
cbcd1a23 178 } else {\r
4ab66100 179 console.error('Error building index.html');\r
cbcd1a23 180 }\r
8eb39b80 181});\r