1 var fs
= require('fs'),
2 uglifyJS
= require('uglify-js'),
4 po2json
= require('po2json'),
5 config
= require('../server/configuration.js'),
6 package_json
= require('../package.json');
8 var FILE_ENCODING
= 'utf-8',
12 function concat(file_list
, callback
) {
13 var num_files
= file_list
.length
,
18 file_list
.forEach(function (file_path
, idx
) {
22 fs
.readFile(file_path
, { encoding
: FILE_ENCODING
}, function (err
, data
) {
29 files
[idx
] = data
+ '\n\n';
30 if (++loaded
=== num_files
) {
31 callback(null, files
.join(EOL
));
43 __dirname
+ '/src/app.js',
44 __dirname
+ '/src/models/application.js',
45 __dirname
+ '/src/models/gateway.js',
46 __dirname
+ '/src/models/network.js',
47 __dirname
+ '/src/models/member.js',
48 __dirname
+ '/src/models/memberlist.js',
49 __dirname
+ '/src/models/newconnection.js',
50 __dirname
+ '/src/models/panel.js',
51 __dirname
+ '/src/models/panellist.js',
52 __dirname
+ '/src/models/networkpanellist.js',
53 __dirname
+ '/src/models/channel.js',
54 __dirname
+ '/src/models/query.js',
55 __dirname
+ '/src/models/server.js',
56 __dirname
+ '/src/models/applet.js',
57 __dirname
+ '/src/models/pluginmanager.js',
58 __dirname
+ '/src/models/datastore.js',
59 __dirname
+ '/src/models/channelinfo.js',
61 __dirname
+ '/src/views/panel.js',
62 __dirname
+ '/src/views/channel.js',
63 __dirname
+ '/src/views/applet.js',
64 __dirname
+ '/src/views/application.js',
65 __dirname
+ '/src/views/apptoolbar.js',
66 __dirname
+ '/src/views/controlbox.js',
67 __dirname
+ '/src/views/favicon.js',
68 __dirname
+ '/src/views/mediamessage.js',
69 __dirname
+ '/src/views/member.js',
70 __dirname
+ '/src/views/memberlist.js',
71 __dirname
+ '/src/views/menubox.js',
72 __dirname
+ '/src/views/networktabs.js',
73 __dirname
+ '/src/views/nickchangebox.js',
74 __dirname
+ '/src/views/resizehandler.js',
75 __dirname
+ '/src/views/serverselect.js',
76 __dirname
+ '/src/views/statusmessage.js',
77 __dirname
+ '/src/views/tabs.js',
78 __dirname
+ '/src/views/topicbar.js',
79 __dirname
+ '/src/views/userbox.js',
80 __dirname
+ '/src/views/channeltools.js',
81 __dirname
+ '/src/views/channelinfo.js',
82 __dirname
+ '/src/views/rightbar.js',
83 __dirname
+ '/src/applets/settings.js',
84 __dirname
+ '/src/applets/chanlist.js',
85 __dirname
+ '/src/applets/scripteditor.js',
86 __dirname
+ '/src/applets/startup.js'
90 var helpers_path
= __dirname
+ '/src/helpers/';
91 var helpers_sources
= fs
.readdirSync(helpers_path
)
93 return helpers_path
+ file
;
96 source_files
= source_files
.concat(helpers_sources
);
100 * Build the kiwi.js/kiwi.min.js files
102 concat(source_files
, function (err
, src
) {
104 src
= '(function (global, undefined) {\n\n' + src
+ '\n\n})(window);';
106 fs
.writeFile(__dirname
+ '/assets/kiwi.js', src
, { encoding
: FILE_ENCODING
}, function (err
) {
108 console
.log('Built kiwi.js');
110 console
.error('Error building kiwi.js:', err
);
114 // Uglify can take take an array of filenames to produce minified code
115 // but it's not wraped in an IIFE and produces a slightly larger file
116 //src = uglifyJS.minify(source_files);
118 var ast
= uglifyJS
.parse(src
, {filename
: 'kiwi.js'});
119 ast
.figure_out_scope();
120 ast
= ast
.transform(uglifyJS
.Compressor({warnings
: false}));
121 ast
.figure_out_scope();
122 ast
.compute_char_frequency();
124 src
= ast
.print_to_string();
126 fs
.writeFile(__dirname
+ '/assets/kiwi.min.js', src
, { encoding
: FILE_ENCODING
}, function (err
) {
128 console
.log('Built kiwi.min.js');
130 console
.error('Error building kiwi.min.js:', err
);
134 console
.error('Error building kiwi.js and kiwi.min.js:', err
);
144 * Build the engineio client + tools libs
146 concat([__dirname
+ '/assets/libs/engine.io.js', __dirname
+ '/assets/libs/engine.io.tools.js'], function (err
, src
) {
148 fs
.writeFile(__dirname
+ '/assets/libs/engine.io.bundle.js', src
, { encoding
: FILE_ENCODING
}, function (err
) {
150 console
.log('Built engine.io.bundle.js');
152 console
.error('Error building engine.io.bundle.js:', err
);
156 var ast
= uglifyJS
.parse(src
, {filename
: 'engine.io.bundle.js'});
157 ast
.figure_out_scope();
158 ast
= ast
.transform(uglifyJS
.Compressor({warnings
: false}));
159 ast
.figure_out_scope();
160 ast
.compute_char_frequency();
162 src
= ast
.print_to_string();
164 fs
.writeFile(__dirname
+ '/assets/libs/engine.io.bundle.min.js', src
, { encoding
: FILE_ENCODING
}, function (err
) {
166 console
.log('Built engine.io.bundle.min.js');
168 console
.error('Error building engine.io.bundle.min.js:', err
);
172 console
.error('Error building engine.io.bundle.js and engine.io.bundle.min.js:', err
);
182 * Convert translations from .po to .json
184 if (!fs
.existsSync(__dirname
+ '/assets/locales')) {
185 fs
.mkdirSync(__dirname
+ '/assets/locales');
187 fs
.readdir(__dirname
+ '/src/translations', function (err
, translation_files
) {
189 translation_files
.forEach(function (file
) {
190 var locale
= file
.slice(0, -3);
192 if ((file
.slice(-3) === '.po') && (locale
!== 'template')) {
193 po2json
.parseFile(__dirname
+ '/src/translations/' + file
, {format
: 'jed', domain
: locale
}, function (err
, json
) {
196 fs
.writeFile(__dirname
+ '/assets/locales/' + locale
+ '.json', JSON
.stringify(json
), function (err
) {
198 console
.log('Built translation file %s.json', locale
);
200 console
.error('Error building translation file %s.json:', locale
, err
);
204 console
.error('Error building translation file %s.json: ', locale
, err
);
210 console
.error('Error building translation files:', err
);
220 * Build the index.html file
223 var index_src
= fs
.readFileSync(__dirname
+ '/src/index.html.tmpl', FILE_ENCODING
)
224 .replace(new RegExp('<%base_path%>', 'g'), config
.get().http_base_path
|| '')
225 .replace(new RegExp('<%build_version%>', 'g'), package_json
.version
);
227 fs
.writeFile(__dirname
+ '/index.html', index_src
, { encoding
: FILE_ENCODING
}, function (err
) {
229 console
.log('Built index.html');
231 console
.error('Error building index.html');