Commit | Line | Data |
---|---|---|
8eb39b80 | 1 | var 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 |
7 | var FILE_ENCODING = 'utf-8',\r | |
8 | EOL = '\n';\r | |
9 | \r | |
10 | \r | |
9df70c63 D |
11 | function 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 | |
22 | config.loadConfig();\r | |
23 | \r | |
24 | \r | |
3ef153aa | 25 | var 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 | |
74 | var src = concat(source_files);\r | |
eaaf73b0 | 75 | src = '(function (global, undefined) {\n\n' + src + '\n\n})(window);';\r |
9df70c63 D |
76 | \r |
77 | \r | |
78 | fs.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 | |
84 | var ast = uglifyJS.parse(src, {filename: 'kiwi.js'});\r | |
85 | ast.figure_out_scope();\r | |
86 | ast = ast.transform(uglifyJS.Compressor({warnings: false}));\r | |
87 | ast.figure_out_scope();\r | |
88 | ast.compute_char_frequency();\r | |
89 | ast.mangle_names();\r | |
90 | src = ast.print_to_string();\r | |
9df70c63 | 91 | \r |
3ef153aa | 92 | fs.writeFileSync(__dirname + '/../kiwi.min.js', src, FILE_ENCODING);\r |
23533845 D |
93 | \r |
94 | \r | |
95 | \r | |
96 | \r | |
8eb39b80 D |
97 | console.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 | |
107 | var translations = [];\r | |
12adecdd JA |
108 | var translation_files = fs.readdirSync(__dirname + '/translations');\r |
109 | if (!fs.existsSync(__dirname + '/../locales')) {\r | |
110 | fs.mkdirSync(__dirname + '/../locales');\r | |
111 | }\r | |
0fa2ca42 JA |
112 | translation_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 | |
133 | var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING);\r | |
134 | var 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 | 142 | if (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 | |
156 | if (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 |
161 | if (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 |
166 | vars.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 | |
173 | fs.writeFileSync(__dirname + '/../../index.html', index_src, FILE_ENCODING);\r | |
174 | \r | |
175 | \r | |
0fa2ca42 | 176 | console.log('index.html built');\r |