ce09159a32f42a56dc16fd3dc68643505fb02abe
1 var fs
= require('fs'),
2 crypto
= require('crypto'),
3 config
= require('./configuration.js');
6 module
.exports
.generate
= generateSettings
;
7 module
.exports
.get = getSettings
;
10 // Cache for settings.json
11 var cached_settings
= {
22 // Clear the settings cache when the settings change
23 config
.on('loaded', function () {
24 cached_settings
.debug
.settings
= cached_settings
.production
.settings
= '';
25 cached_settings
.debug
.hash
= cached_settings
.production
.hash
= '';
31 function getSettings(debug
, callback
) {
32 var settings
= cached_settings
[debug
? 'debug' : 'production'];
34 var returnSettings = function() {
38 // Generate the settings if we don't have them cached as yet
39 if (settings
.settings
=== '') {
40 generateSettings(debug
, returnSettings
);
48 * Generate a settings object for the client.
49 * Settings include available translations, default client config, etc
51 function generateSettings(debug
, callback
) {
58 'assets/libs/lodash.min.js'
60 ['assets/libs/backbone.min.js', 'assets/libs/jed.js']
64 // Any restricted server mode set?
65 if (config
.get().restrict_server
) {
66 vars
.server_settings
= {
68 server
: config
.get().restrict_server
,
69 port
: config
.get().restrict_server_port
|| 6667,
70 ssl
: config
.get().restrict_server_ssl
,
71 channel
: config
.get().restrict_server_channel
,
72 nick
: config
.get().restrict_server_nick
,
78 // Any client default settings?
79 if (config
.get().client
) {
80 vars
.server_settings
.client
= config
.get().client
;
83 // Client transport specified?
84 if (config
.get().client_transports
) {
85 vars
.server_settings
.transports
= config
.get().client_transports
;
88 // Any client plugins?
89 if (config
.get().client_plugins
&& config
.get().client_plugins
.length
> 0) {
90 vars
.client_plugins
= config
.get().client_plugins
;
93 addScripts(vars
, debug
);
95 // Further jobs depend on callbacks, so tally up completed jobs before callback()
98 jobComplete = function() {
101 if (completed_jobs
< total_jobs
)
104 settings
= cached_settings
[debug
?'debug':'production'];
105 settings
.settings
= JSON
.stringify(vars
);
106 settings
.hash
= crypto
.createHash('md5').update(settings
.settings
).digest('hex');
111 addThemes(vars
, jobComplete
);
112 addTranslations(vars
, jobComplete
);
117 function addThemes(vars
, callback
) {
118 readThemeInfo(config
.get().client_themes
|| ['relaxed'], function (err
, themes
) {
120 return callback(err
);
123 vars
.themes
= themes
;
129 function readThemeInfo(themes
, prev
, callback
) {
131 var theme
= themes
[0];
133 if (typeof prev
=== 'function') {
138 fs
.readFile(__dirname
+ '/../client/assets/themes/' + theme
.toLowerCase() + '/theme.json', function (err
, theme_json
) {
140 return callback(err
);
144 theme_json
= JSON
.parse(theme_json
);
149 prev
.push(theme_json
);
151 if (themes
.length
> 1) {
152 return readThemeInfo(themes
.slice(1), prev
, callback
);
155 callback(null, prev
);
160 function addTranslations(vars
, callback
) {
161 // Get a list of available translations
162 fs
.readFile(__dirname
+ '/../client/src/translations/translations.json', function (err
, translations
) {
164 return callback(err
);
167 translations
= JSON
.parse(translations
);
168 fs
.readdir(__dirname
+ '/../client/src/translations/', function (err
, pofiles
) {
170 return callback(err
);
173 pofiles
.forEach(function (file
) {
174 var locale
= file
.slice(0, -3);
175 if ((file
.slice(-3) === '.po') && (locale
!== 'template')) {
176 vars
.translations
.push({tag
: locale
, language
: translations
[locale
]});
186 function addScripts(vars
, debug
) {
188 vars
.scripts
.push(['assets/kiwi.min.js', 'assets/libs/engine.io.bundle.min.js']);
192 vars
.scripts
= vars
.scripts
.concat([
195 'assets/libs/engine.io.js',
196 'assets/libs/engine.io.tools.js'
199 'src/models/application.js',
200 'src/models/gateway.js'
203 'src/models/newconnection.js',
204 'src/models/panellist.js',
205 'src/models/networkpanellist.js',
206 'src/models/panel.js',
207 'src/models/member.js',
208 'src/models/memberlist.js',
209 'src/models/network.js',
210 'src/models/channelinfo.js'
214 'src/models/channel.js',
215 'src/models/applet.js'
219 'src/models/query.js',
220 'src/models/server.js', // Depends on models/channel.js
221 'src/models/pluginmanager.js',
222 'src/models/datastore.js',
223 'src/helpers/utils.js',
224 'src/helpers/formatdate.js',
225 'src/helpers/plugininterface.js'
228 // Some views extend these, so make sure they're loaded beforehand
234 'src/views/channel.js',
235 'src/views/applet.js',
236 'src/views/application.js',
237 'src/views/apptoolbar.js',
238 'src/views/controlbox.js',
239 'src/views/favicon.js',
240 'src/views/mediamessage.js',
241 'src/views/member.js',
242 'src/views/memberlist.js',
243 'src/views/menubox.js',
244 'src/views/networktabs.js',
245 'src/views/nickchangebox.js',
246 'src/views/resizehandler.js',
247 'src/views/serverselect.js',
248 'src/views/statusmessage.js',
250 'src/views/topicbar.js',
251 'src/views/userbox.js',
252 'src/views/channeltools.js',
253 'src/views/channelinfo.js',
254 'src/views/rightbar.js'
257 'src/applets/settings.js',
258 'src/applets/chanlist.js',
259 'src/applets/scripteditor.js',
260 'src/applets/startup.js'