var fs = require('fs'),\r
uglifyJS = require('uglify-js'),\r
_ = require('lodash'),\r
+ po2json = require('po2json'),\r
config = require('./../../../server/configuration.js');\r
\r
var FILE_ENCODING = 'utf-8',\r
EOL = '\n';\r
\r
\r
-function concat(src) {\r
- var file_list = src;\r
- var out = file_list.map(function(file_path){\r
- return fs.readFileSync(file_path, FILE_ENCODING) + '\n\n';\r
- });\r
+function concat(file_list, callback) {\r
+ var num_files = file_list.length,\r
+ files = [],\r
+ loaded = 0,\r
+ error = false;\r
\r
- return out.join(EOL);\r
+ file_list.forEach(function (file_path, idx) {\r
+ if (error) {\r
+ return;\r
+ }\r
+ fs.readFile(file_path, { encoding: FILE_ENCODING }, function (err, data) {\r
+ if (error) {\r
+ return;\r
+ } else if (err) {\r
+ error = true;\r
+ return callback(err);\r
+ }\r
+ files[idx] = data + '\n\n';\r
+ if (++loaded === num_files) {\r
+ callback(null, files.join(EOL));\r
+ }\r
+ });\r
+ });\r
}\r
\r
\r
/**\r
* Build the kiwi.js/kiwi.min.js files\r
*/\r
-var src = concat(source_files);\r
-src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r
-\r
-\r
-fs.writeFileSync(__dirname + '/../kiwi.js', src, FILE_ENCODING);\r
-\r
-// Uglify can take take an array of filenames to produce minified code\r
-// but it's not wraped in an IIFE and produces a slightly larger file\r
-//src = uglifyJS.minify(source_files);\r
-\r
-var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r
-ast.figure_out_scope();\r
-ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
-ast.figure_out_scope();\r
-ast.compute_char_frequency();\r
-ast.mangle_names();\r
-src = ast.print_to_string();\r
-\r
-fs.writeFileSync(__dirname + '/../kiwi.min.js', src, FILE_ENCODING);\r
-\r
-\r
+concat(source_files, function (err, src) {\r
+ if (!err) {\r
+ src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r
+\r
+ fs.writeFile(__dirname + '/../kiwi.js', src, { encoding: FILE_ENCODING }, function (err) {\r
+ if (!err) {\r
+ console.log('Built kiwi.js');\r
+ } else {\r
+ console.error('Error building kiwi.js:', err);\r
+ }\r
+ });\r
+\r
+ // Uglify can take take an array of filenames to produce minified code\r
+ // but it's not wraped in an IIFE and produces a slightly larger file\r
+ //src = uglifyJS.minify(source_files);\r
+\r
+ var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r
+ ast.figure_out_scope();\r
+ ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r
+ ast.figure_out_scope();\r
+ ast.compute_char_frequency();\r
+ ast.mangle_names();\r
+ src = ast.print_to_string();\r
+\r
+ fs.writeFile(__dirname + '/../kiwi.min.js', src, { encoding: FILE_ENCODING }, function (err) {\r
+ if (!err) {\r
+ console.log('Built kiwi.min.js');\r
+ } else {\r
+ console.error('Error building kiwi.min.js:', err);\r
+ }\r
+ });\r
+ } else {\r
+ console.error('Error building kiwi.js and kiwi.min.js:', err);\r
+ }\r
+});\r
\r
\r
-console.log('kiwi.js and kiwi.min.js built');\r
\r
\r
\r
\r
+/**\r
+* Convert translations from .po to .json\r
+*/\r
+if (!fs.existsSync(__dirname + '/../locales')) {\r
+ fs.mkdirSync(__dirname + '/../locales');\r
+}\r
+fs.readdir(__dirname + '/translations', function (err, translation_files) {\r
+ if (!err) {\r
+ translation_files.forEach(function (file) {\r
+ var locale = file.slice(0, -3);\r
+\r
+ if ((file.slice(-3) === '.po') && (locale !== 'template')) {\r
+ po2json.parse(__dirname + '/translations/' + file, function (err, json) {\r
+ if (!err) {\r
+ fs.writeFile(__dirname + '/../locales/' + locale + '.json', JSON.stringify(json), function (err) {\r
+ if (!err) {\r
+ console.log('Built translation file %s.json', locale);\r
+ } else {\r
+ console.error('Error building translation file %s.json:', locale, err);\r
+ }\r
+ });\r
+ } else {\r
+ console.error('Error building translation file %s.json: ', locale, err);\r
+ }\r
+ });\r
+ }\r
+ });\r
+ } else {\r
+ console.error('Error building translation files:', err);\r
+ }\r
+});\r
\r
\r
\r
* Build the index.html file\r
*/\r
\r
-var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING);\r
-var vars = {\r
- base_path: config.get().http_base_path || '/kiwi',\r
- cache_buster: Math.ceil(Math.random() * 9000).toString(),\r
- server_settings: {},\r
- client_plugins: []\r
-};\r
-\r
-// Any restricted server mode set?\r
-if (config.get().restrict_server) {\r
- vars.server_settings = {\r
- connection: {\r
- server: config.get().restrict_server,\r
- port: config.get().restrict_server_port || 6667,\r
- ssl: config.get().restrict_server_ssl,\r
- channel: config.get().restrict_server_channel,\r
- nick: config.get().restrict_server_nick,\r
- allow_change: false\r
- }\r
- };\r
-}\r
-\r
-// Any client default settings?\r
-if (config.get().client) {\r
- vars.server_settings.client = config.get().client;\r
-}\r
+var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING)\r
+ .replace(new RegExp('<%base_path%>', 'g'), config.get().http_base_path || '/kiwi');\r
\r
-// Any client plugins?\r
-if (config.get().client_plugins && config.get().client_plugins.length > 0) {\r
- vars.client_plugins = config.get().client_plugins;\r
-}\r
-\r
-_.each(vars, function(value, key) {\r
- if (typeof value === 'object') value = JSON.stringify(value);\r
- index_src = index_src.replace(new RegExp('<%' + key + '%>', 'g'), value);\r
+fs.writeFile(__dirname + '/../../index.html', index_src, { encoding: FILE_ENCODING }, function (err) {\r
+ if (!err) {\r
+ console.log('Built index.html');\r
+ } else {\r
+ console.error('Error building index.html');\r
+ }\r
});\r
-\r
-fs.writeFileSync(__dirname + '/../../index.html', index_src, FILE_ENCODING);\r
-\r
-\r
-console.log('index.html built');
\ No newline at end of file