Don't embded settings in HTML, serve them as a separate JSON file
[KiwiIRC.git] / client / assets / src / build.js
1 var fs = require('fs'),
2 uglifyJS = require('uglify-js'),
3 _ = require('lodash'),
4 po2json = require('po2json'),
5 config = require('./../../../server/configuration.js');
6
7 var FILE_ENCODING = 'utf-8',
8 EOL = '\n';
9
10
11 function concat(src) {
12 var file_list = src;
13 var out = file_list.map(function(file_path){
14 return fs.readFileSync(file_path, FILE_ENCODING) + '\n\n';
15 });
16
17 return out.join(EOL);
18 }
19
20
21
22 config.loadConfig();
23
24
25 var source_files = [
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',
42
43 __dirname + '/applets/settings.js',
44 __dirname + '/applets/chanlist.js',
45 __dirname + '/applets/scripteditor.js',
46
47 __dirname + '/helpers/utils.js',
48
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'
68 ];
69
70
71 /**
72 * Build the kiwi.js/kiwi.min.js files
73 */
74 var src = concat(source_files);
75 src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';
76
77
78 fs.writeFileSync(__dirname + '/../kiwi.js', src, FILE_ENCODING);
79
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);
83
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();
89 ast.mangle_names();
90 src = ast.print_to_string();
91
92 fs.writeFileSync(__dirname + '/../kiwi.min.js', src, FILE_ENCODING);
93
94
95
96
97 console.log('kiwi.js and kiwi.min.js built');
98
99
100
101
102
103
104 /**
105 * Convert translations from .po to .json
106 */
107 var translations = [];
108 var translation_files = fs.readdirSync(__dirname + '/translations');
109 if (!fs.existsSync(__dirname + '/../locales')) {
110 fs.mkdirSync(__dirname + '/../locales');
111 }
112 translation_files.forEach(function (file) {
113 var locale = file.slice(0, -3),
114 json = '',
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');
121 }
122 });
123
124
125
126
127
128
129 /**
130 * Build the index.html file
131 */
132
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');
135
136 fs.writeFile(__dirname + '/../../index.html', index_src, { encoding: FILE_ENCODING }, function (err) {
137 if (!err) {
138 console.log('index.html built');
139 } else {
140 console.log('Error building index.html');
141 }
142 });