Renamed no-nb.po to no.po
[KiwiIRC.git] / client / assets / src / build.js
CommitLineData
8eb39b80 1var 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
7var FILE_ENCODING = 'utf-8',\r
8 EOL = '\n';\r
9\r
10\r
9df70c63
D
11function concat(src) {\r
12 var file_list = src;\r
23533845 13 var out = file_list.map(function(file_path){\r
9df70c63 14 return fs.readFileSync(file_path, FILE_ENCODING) + '\n\n';\r
23533845
D
15 });\r
16\r
9df70c63 17 return out.join(EOL);\r
23533845
D
18}\r
19\r
8eb39b80
D
20\r
21\r
22config.loadConfig();\r
23\r
24\r
3ef153aa 25var source_files = [\r
9df70c63 26 __dirname + '/app.js',\r
2d22d7e2
D
27 __dirname + '/models/application.js',\r
28 __dirname + '/models/gateway.js',\r
29 __dirname + '/models/network.js',\r
30 __dirname + '/models/member.js',\r
31 __dirname + '/models/memberlist.js',\r
32 __dirname + '/models/newconnection.js',\r
33 __dirname + '/models/panel.js',\r
34 __dirname + '/models/panellist.js',\r
35 __dirname + '/models/networkpanellist.js',\r
36 __dirname + '/models/query.js',\r
37 __dirname + '/models/channel.js',\r
38 __dirname + '/models/server.js',\r
39 __dirname + '/models/applet.js',\r
40 __dirname + '/models/pluginmanager.js',\r
41 __dirname + '/models/datastore.js',\r
42\r
43 __dirname + '/applets/settings.js',\r
2d22d7e2
D
44 __dirname + '/applets/chanlist.js',\r
45 __dirname + '/applets/scripteditor.js',\r
9df70c63 46\r
3ea29ac2 47 __dirname + '/helpers/utils.js',\r
50ac472f
D
48\r
49 __dirname + '/views/panel.js',\r
50 __dirname + '/views/channel.js',\r
51 __dirname + '/views/applet.js',\r
52 __dirname + '/views/application.js',\r
53 __dirname + '/views/apptoolbar.js',\r
54 __dirname + '/views/controlbox.js',\r
bd85cbdb 55 __dirname + '/views/favicon.js',\r
50ac472f
D
56 __dirname + '/views/mediamessage.js',\r
57 __dirname + '/views/member.js',\r
58 __dirname + '/views/memberlist.js',\r
59 __dirname + '/views/menubox.js',\r
60 __dirname + '/views/networktabs.js',\r
61 __dirname + '/views/nickchangebox.js',\r
62 __dirname + '/views/resizehandler.js',\r
63 __dirname + '/views/serverselect.js',\r
64 __dirname + '/views/statusmessage.js',\r
65 __dirname + '/views/tabs.js',\r
66 __dirname + '/views/topicbar.js',\r
67 __dirname + '/views/userbox.js'\r
3ef153aa 68];\r
9df70c63
D
69\r
70\r
3ef153aa
JA
71/**\r
72 * Build the kiwi.js/kiwi.min.js files\r
73 */\r
74var src = concat(source_files);\r
eaaf73b0 75src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r
9df70c63
D
76\r
77\r
78fs.writeFileSync(__dirname + '/../kiwi.js', src, FILE_ENCODING);\r
79\r
3ef153aa
JA
80// Uglify can take take an array of filenames to produce minified code\r
81// but it's not wraped in an IIFE and produces a slightly larger file\r
82//src = uglifyJS.minify(source_files);\r
83\r
84var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r
85ast.figure_out_scope();\r
86ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
87ast.figure_out_scope();\r
88ast.compute_char_frequency();\r
89ast.mangle_names();\r
90src = ast.print_to_string();\r
9df70c63 91\r
3ef153aa 92fs.writeFileSync(__dirname + '/../kiwi.min.js', src, FILE_ENCODING);\r
23533845
D
93\r
94\r
95\r
96\r
8eb39b80
D
97console.log('kiwi.js and kiwi.min.js built');\r
98\r
99\r
100\r
101\r
102\r
103\r
0fa2ca42
JA
104/**\r
105* Convert translations from .po to .json\r
106*/\r
107var translations = [];\r
12adecdd
JA
108var translation_files = fs.readdirSync(__dirname + '/translations');\r
109if (!fs.existsSync(__dirname + '/../locales')) {\r
110 fs.mkdirSync(__dirname + '/../locales');\r
111}\r
0fa2ca42
JA
112translation_files.forEach(function (file) {\r
113 var locale = file.slice(0, -3),\r
114 json = '',\r
12adecdd 115 languages = JSON.parse(fs.readFileSync(__dirname + '/translations/translations.json'));\r
0fa2ca42 116 if ((file.slice(-3) === '.po') && (locale !== 'template')) {\r
12adecdd 117 json = po2json.parseSync(__dirname + '/translations/' + file);\r
0fa2ca42
JA
118 fs.writeFileSync(__dirname + '/../locales/' + locale + '.json', JSON.stringify(json));\r
119 translations.push({tag: locale, language: languages[locale]});\r
120 console.log('Built translation file %s', locale + '.json');\r
121 }\r
122});\r
123\r
124\r
8eb39b80
D
125\r
126\r
127\r
128\r
129/**\r
130 * Build the index.html file\r
131 */\r
132\r
133var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING);\r
134var vars = {\r
0a8a61ad 135 base_path: config.get().http_base_path || '/kiwi',\r
93e84f75 136 cache_buster: Math.ceil(Math.random() * 9000).toString(),\r
76391784
D
137 server_settings: {},\r
138 client_plugins: []\r
8eb39b80
D
139};\r
140\r
2eec3842 141// Any restricted server mode set?\r
93e84f75 142if (config.get().restrict_server) {\r
76391784 143 vars.server_settings = {\r
93e84f75
D
144 connection: {\r
145 server: config.get().restrict_server,\r
146 port: config.get().restrict_server_port || 6667,\r
147 ssl: config.get().restrict_server_ssl,\r
148 channel: config.get().restrict_server_channel,\r
149 nick: config.get().restrict_server_nick,\r
150 allow_change: false\r
151 }\r
76391784
D
152 };\r
153}\r
154\r
155// Any client default settings?\r
156if (config.get().client) {\r
157 vars.server_settings.client = config.get().client;\r
93e84f75
D
158}\r
159\r
2eec3842
D
160// Any client plugins?\r
161if (config.get().client_plugins && config.get().client_plugins.length > 0) {\r
76391784 162 vars.client_plugins = config.get().client_plugins;\r
2eec3842
D
163}\r
164\r
0fa2ca42
JA
165// Translations\r
166vars.translations = translations;\r
167\r
8eb39b80 168_.each(vars, function(value, key) {\r
76391784 169 if (typeof value === 'object') value = JSON.stringify(value);\r
8eb39b80
D
170 index_src = index_src.replace(new RegExp('<%' + key + '%>', 'g'), value);\r
171});\r
172\r
173fs.writeFileSync(__dirname + '/../../index.html', index_src, FILE_ENCODING);\r
174\r
175\r
0fa2ca42 176console.log('index.html built');\r