1 var fs
= require('fs'),
2 uglifyJS
= require('uglify-js'),
4 po2json
= require('po2json'),
5 config
= require('./../../../server/configuration.js');
7 var FILE_ENCODING
= 'utf-8',
11 function concat(src
) {
13 var out
= file_list
.map(function(file_path
){
14 return fs
.readFileSync(file_path
, FILE_ENCODING
) + '\n\n';
26 __dirname
+ '/app.js',
27 __dirname
+ '/models/application.js',
28 __dirname
+ '/models/gateway.js',
29 __dirname
+ '/models/network.js',
30 __dirname
+ '/models/member.js',
31 __dirname
+ '/models/memberlist.js',
32 __dirname
+ '/models/newconnection.js',
33 __dirname
+ '/models/panel.js',
34 __dirname
+ '/models/panellist.js',
35 __dirname
+ '/models/networkpanellist.js',
36 __dirname
+ '/models/query.js',
37 __dirname
+ '/models/channel.js',
38 __dirname
+ '/models/server.js',
39 __dirname
+ '/models/applet.js',
40 __dirname
+ '/models/pluginmanager.js',
41 __dirname
+ '/models/datastore.js',
43 __dirname
+ '/applets/settings.js',
44 __dirname
+ '/applets/chanlist.js',
45 __dirname
+ '/applets/scripteditor.js',
47 __dirname
+ '/helpers/utils.js',
49 __dirname
+ '/views/panel.js',
50 __dirname
+ '/views/channel.js',
51 __dirname
+ '/views/applet.js',
52 __dirname
+ '/views/application.js',
53 __dirname
+ '/views/apptoolbar.js',
54 __dirname
+ '/views/controlbox.js',
55 __dirname
+ '/views/favicon.js',
56 __dirname
+ '/views/mediamessage.js',
57 __dirname
+ '/views/member.js',
58 __dirname
+ '/views/memberlist.js',
59 __dirname
+ '/views/menubox.js',
60 __dirname
+ '/views/networktabs.js',
61 __dirname
+ '/views/nickchangebox.js',
62 __dirname
+ '/views/resizehandler.js',
63 __dirname
+ '/views/serverselect.js',
64 __dirname
+ '/views/statusmessage.js',
65 __dirname
+ '/views/tabs.js',
66 __dirname
+ '/views/topicbar.js',
67 __dirname
+ '/views/userbox.js'
72 * Build the kiwi.js/kiwi.min.js files
74 var src
= concat(source_files
);
75 src
= '(function (global, undefined) {\n\n' + src
+ '\n\n})(window);';
78 fs
.writeFileSync(__dirname
+ '/../kiwi.js', src
, FILE_ENCODING
);
80 // Uglify can take take an array of filenames to produce minified code
81 // but it's not wraped in an IIFE and produces a slightly larger file
82 //src = uglifyJS.minify(source_files);
84 var ast
= uglifyJS
.parse(src
, {filename
: 'kiwi.js'});
85 ast
.figure_out_scope();
86 ast
= ast
.transform(uglifyJS
.Compressor({warnings
: false}));
87 ast
.figure_out_scope();
88 ast
.compute_char_frequency();
90 src
= ast
.print_to_string();
92 fs
.writeFileSync(__dirname
+ '/../kiwi.min.js', src
, FILE_ENCODING
);
97 console
.log('kiwi.js and kiwi.min.js built');
105 * Convert translations from .po to .json
107 var translations
= [];
108 var translation_files
= fs
.readdirSync(__dirname
+ '/translations');
109 if (!fs
.existsSync(__dirname
+ '/../locales')) {
110 fs
.mkdirSync(__dirname
+ '/../locales');
112 translation_files
.forEach(function (file
) {
113 var locale
= file
.slice(0, -3),
115 languages
= JSON
.parse(fs
.readFileSync(__dirname
+ '/translations/translations.json'));
116 if ((file
.slice(-3) === '.po') && (locale
!== 'template')) {
117 json
= po2json
.parseSync(__dirname
+ '/translations/' + file
);
118 fs
.writeFileSync(__dirname
+ '/../locales/' + locale
+ '.json', JSON
.stringify(json
));
119 translations
.push({tag
: locale
, language
: languages
[locale
]});
120 console
.log('Built translation file %s', locale
+ '.json');
130 * Build the index.html file
133 var index_src
= fs
.readFileSync(__dirname
+ '/index.html.tmpl', FILE_ENCODING
)
134 .replace(new RegExp('<%base_path%>', 'g'), config
.get().http_base_path
|| '/kiwi');
136 fs
.writeFile(__dirname
+ '/../../index.html', index_src
, { encoding
: FILE_ENCODING
}, function (err
) {
138 console
.log('index.html built');
140 console
.log('Error building index.html');