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 |
8eb39b80 | 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 |
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 |
90 | concat(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 |
134 | if (!fs.existsSync(__dirname + '/../locales')) {\r |
135 | fs.mkdirSync(__dirname + '/../locales');\r | |
136 | }\r | |
4ab66100 JA |
137 | fs.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 |
172 | var 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 | |
175 | fs.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 |