Change favicon format to .ico. Small improvements to the script.
[KiwiIRC.git] / client / assets / src / build.js
1 var fs = require('fs'),
2 uglifyJS = require('uglify-js'),
3 _ = require('lodash'),
4 config = require('./../../../server/configuration.js');
5
6 var FILE_ENCODING = 'utf-8',
7 EOL = '\n';
8
9
10 function concat(src) {
11 var file_list = src;
12 var out = file_list.map(function(file_path){
13 return fs.readFileSync(file_path, FILE_ENCODING) + '\n\n';
14 });
15
16 return out.join(EOL);
17 }
18
19
20
21 config.loadConfig();
22
23
24 var source_files = [
25 __dirname + '/app.js',
26 __dirname + '/models/application.js',
27 __dirname + '/models/gateway.js',
28 __dirname + '/models/network.js',
29 __dirname + '/models/member.js',
30 __dirname + '/models/memberlist.js',
31 __dirname + '/models/newconnection.js',
32 __dirname + '/models/panel.js',
33 __dirname + '/models/panellist.js',
34 __dirname + '/models/networkpanellist.js',
35 __dirname + '/models/query.js',
36 __dirname + '/models/channel.js',
37 __dirname + '/models/server.js',
38 __dirname + '/models/applet.js',
39 __dirname + '/models/pluginmanager.js',
40 __dirname + '/models/datastore.js',
41
42 __dirname + '/applets/settings.js',
43 __dirname + '/applets/chanlist.js',
44 __dirname + '/applets/scripteditor.js',
45
46 __dirname + '/helpers/utils.js',
47
48 __dirname + '/views/panel.js',
49 __dirname + '/views/channel.js',
50 __dirname + '/views/applet.js',
51 __dirname + '/views/application.js',
52 __dirname + '/views/apptoolbar.js',
53 __dirname + '/views/controlbox.js',
54 __dirname + '/views/favicon.js',
55 __dirname + '/views/mediamessage.js',
56 __dirname + '/views/member.js',
57 __dirname + '/views/memberlist.js',
58 __dirname + '/views/menubox.js',
59 __dirname + '/views/networktabs.js',
60 __dirname + '/views/nickchangebox.js',
61 __dirname + '/views/resizehandler.js',
62 __dirname + '/views/serverselect.js',
63 __dirname + '/views/statusmessage.js',
64 __dirname + '/views/tabs.js',
65 __dirname + '/views/topicbar.js',
66 __dirname + '/views/userbox.js'
67 ];
68
69
70 /**
71 * Build the kiwi.js/kiwi.min.js files
72 */
73 var src = concat(source_files);
74 src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';
75
76
77 fs.writeFileSync(__dirname + '/../kiwi.js', src, FILE_ENCODING);
78
79 // Uglify can take take an array of filenames to produce minified code
80 // but it's not wraped in an IIFE and produces a slightly larger file
81 //src = uglifyJS.minify(source_files);
82
83 var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});
84 ast.figure_out_scope();
85 ast = ast.transform(uglifyJS.Compressor({warnings: false}));
86 ast.figure_out_scope();
87 ast.compute_char_frequency();
88 ast.mangle_names();
89 src = ast.print_to_string();
90
91 fs.writeFileSync(__dirname + '/../kiwi.min.js', src, FILE_ENCODING);
92
93
94
95
96 console.log('kiwi.js and kiwi.min.js built');
97
98
99
100
101
102
103
104
105
106
107 /**
108 * Build the index.html file
109 */
110
111 var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING);
112 var vars = {
113 base_path: config.get().http_base_path || '/kiwi',
114 cache_buster: Math.ceil(Math.random() * 9000).toString(),
115 server_settings: {},
116 client_plugins: []
117 };
118
119 // Any restricted server mode set?
120 if (config.get().restrict_server) {
121 vars.server_settings = {
122 connection: {
123 server: config.get().restrict_server,
124 port: config.get().restrict_server_port || 6667,
125 ssl: config.get().restrict_server_ssl,
126 channel: config.get().restrict_server_channel,
127 nick: config.get().restrict_server_nick,
128 allow_change: false
129 }
130 };
131 }
132
133 // Any client default settings?
134 if (config.get().client) {
135 vars.server_settings.client = config.get().client;
136 }
137
138 // Any client plugins?
139 if (config.get().client_plugins && config.get().client_plugins.length > 0) {
140 vars.client_plugins = config.get().client_plugins;
141 }
142
143 _.each(vars, function(value, key) {
144 if (typeof value === 'object') value = JSON.stringify(value);
145 index_src = index_src.replace(new RegExp('<%' + key + '%>', 'g'), value);
146 });
147
148 fs.writeFileSync(__dirname + '/../../index.html', index_src, FILE_ENCODING);
149
150
151 console.log('index.html built');