Commit | Line | Data |
---|---|---|
4c424593 D |
1 | var 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 |
8 | var FILE_ENCODING = 'utf-8',\r | |
9 | EOL = '\n';\r | |
10 | \r | |
11 | \r | |
4ab66100 JA |
12 | function 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 | |
39 | config.loadConfig();\r | |
40 | \r | |
41 | \r | |
3ef153aa | 42 | var 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 |
93 | var helpers_path = __dirname + '/src/helpers/';\r |
94 | var helpers_sources = fs.readdirSync(helpers_path)\r | |
95 | .map(function(file){\r | |
96 | return helpers_path + file;\r | |
97 | });\r | |
98 | \r | |
99 | source_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 |
105 | concat(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 | 149 | concat([__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 |
187 | if (!fs.existsSync(__dirname + '/assets/locales')) {\r |
188 | fs.mkdirSync(__dirname + '/assets/locales');\r | |
12adecdd | 189 | }\r |
c3511215 | 190 | fs.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 | |
ac823215 | 225 | var build_time = new Date().getTime();\r |
ba317e87 D |
226 | var base_path = config.get().http_base_path || '';\r |
227 | \r | |
228 | // Trim off any trailing slashes\r | |
229 | if (base_path.substr(base_path.length - 1) === '/') {\r | |
230 | base_path = base_path.substr(0, base_path.length - 1);\r | |
231 | }\r | |
8eb39b80 | 232 | \r |
c3511215 | 233 | var index_src = fs.readFileSync(__dirname + '/src/index.html.tmpl', FILE_ENCODING)\r |
ba317e87 | 234 | .replace(new RegExp('<%base_path%>', 'g'), base_path)\r |
ac823215 K |
235 | .replace(new RegExp('<%build_version%>', 'g'), package_json.version)\r |
236 | .replace(new RegExp('<%build_time%>', 'g'), build_time);\r | |
ba317e87 | 237 | \r |
92f1ff73 | 238 | fs.writeFile(__dirname + '/index.html', index_src, { encoding: FILE_ENCODING }, function (err) {\r |
cbcd1a23 | 239 | if (!err) {\r |
4ab66100 | 240 | console.log('Built index.html');\r |
cbcd1a23 | 241 | } else {\r |
4ab66100 | 242 | console.error('Error building index.html');\r |
cbcd1a23 | 243 | }\r |
8eb39b80 | 244 | });\r |