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