From d2cf53f5cdba92ba6c9046420537d25a67bbfdbc Mon Sep 17 00:00:00 2001 From: Cory Chaplin Date: Thu, 20 Mar 2014 00:33:42 +0100 Subject: [PATCH] Initial work on text themes. To be completed. --- client/assets/text_themes/default.json | 15 +++++++++++++++ client/build.js | 3 ++- client/src/app.js | 16 +++++++++++++++- client/src/models/channel.js | 11 ++++++----- client/src/models/network.js | 18 +++++++++--------- client/src/views/channel.js | 2 +- client/src/views/texttheme.js | 20 ++++++++++++++++++++ server/settingsgenerator.js | 3 ++- 8 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 client/assets/text_themes/default.json create mode 100644 client/src/views/texttheme.js diff --git a/client/assets/text_themes/default.json b/client/assets/text_themes/default.json new file mode 100644 index 0000000..7879be3 --- /dev/null +++ b/client/assets/text_themes/default.json @@ -0,0 +1,15 @@ +{ + "client_models_channel_join": "%C3== %I%T", + "client_models_channel_part": "%C5== %I%T", + "client_models_channel_quit": "%C5== %I%T", + "client_models_channel_kicked": "%C5== %I%T", + "client_models_channel_selfkick": "%C5== %I%T", + "client_models_network_badpassword": "%C3== %I%T", + "client_models_network_mode": "%C3== %I%T", + "client_models_network_selfmode": "%C3== %I%T", + "client_models_network_banned": "%C3== %I%T", + "client_models_network_channel_badkey": "%C3== %I%T", + "client_models_network_channel_inviteonly": "%C3== %I%T", + "client_models_network_channel_limitreached": "%C3== %I%T", + "client_models_network_nickname_alreadyinuse": "%C3== %I%T" +} \ No newline at end of file diff --git a/client/build.js b/client/build.js index da31785..008a44f 100644 --- a/client/build.js +++ b/client/build.js @@ -83,7 +83,8 @@ var source_files = [ __dirname + '/src/views/topicbar.js', __dirname + '/src/views/userbox.js', __dirname + '/src/views/channeltools.js', - __dirname + '/src/views/channelinfo.js' + __dirname + '/src/views/channelinfo.js', + __dirname + '/src/views/texttheme.js' ]; diff --git a/client/src/app.js b/client/src/app.js index c15b769..e9c241b 100644 --- a/client/src/app.js +++ b/client/src/app.js @@ -114,7 +114,7 @@ _kiwi.global = { } else { _kiwi.global.i18n = new Jed(); } - + _kiwi.app = new _kiwi.model.Application(opts); // Start the client up @@ -125,6 +125,12 @@ _kiwi.global = { callback && callback(); }; + + igniteTextTheme = function(text_theme, s, xhr) { + _kiwi.global.text_theme = new _kiwi.view.TextTheme(text_theme); + + callback && callback(); + } // Set up the settings datastore _kiwi.global.settings = _kiwi.model.DataStore.instance('kiwi.settings'); @@ -139,6 +145,14 @@ _kiwi.global = { } else { $.getJSON(opts.base_path + '/assets/locales/' + locale + '.json', continueStart); } + + text_theme = _kiwi.global.settings.get('text_theme'); + if (!text_theme) { + $.getJSON(opts.base_path + '/assets/text_themes/default.json', igniteTextTheme); + } else { + $.getJSON(opts.base_path + '/assets/text_themes/' + text_theme + '.json', igniteTextTheme); + } + } }; diff --git a/client/src/models/channel.js b/client/src/models/channel.js index 899c450..04e1ed6 100644 --- a/client/src/models/channel.js +++ b/client/src/models/channel.js @@ -22,7 +22,7 @@ _kiwi.model.Channel = _kiwi.model.Panel.extend({ return; } - this.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_channel_join').fetch(member.displayNick(true)), 'action join', {time: options.kiwi.time}); + this.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_channel_join', [member.displayNick(true)]), 'action join', {time: options.kiwi.time}); }, this); members.bind("remove", function (member, members, options) { @@ -30,20 +30,21 @@ _kiwi.model.Channel = _kiwi.model.Panel.extend({ var msg = (options.kiwi.message) ? '(' + options.kiwi.message + ')' : ''; if (options.kiwi.type === 'quit' && show_message) { - this.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_channel_quit').fetch(member.displayNick(true), msg), 'action quit', {time: options.kiwi.time}); + this.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_channel_quit', [member.displayNick(true)], msg), 'action quit', {time: options.kiwi.time}); } else if (options.kiwi.type === 'kick') { if (!options.kiwi.current_user_kicked) { //If user kicked someone, show the message regardless of settings. if (show_message || options.kiwi.current_user_initiated) { - this.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_channel_kicked').fetch(member.displayNick(true), options.kiwi.by, msg), 'action kick', {time: options.kiwi.time}); + this.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_channel_kicked', [member.displayNick(true), options.kiwi.by, msg]), 'action kick', {time: options.kiwi.time}); } } else { - this.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_channel_selfkick').fetch(options.kiwi.by, msg), 'action kick', {time: options.kiwi.time}); + this.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_channel_selfkick', [options.kiwi.by], msg), 'action kick', {time: options.kiwi.time}); } } else if (show_message) { - this.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_channel_part').fetch(member.displayNick(true), msg), 'action part', {time: options.kiwi.time}); + this.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_channel_part', [member.displayNick(true)], msg), 'action part', {time: options.kiwi.time}); + } }, this); }, diff --git a/client/src/models/network.js b/client/src/models/network.js index b9ecb0d..bb36391 100644 --- a/client/src/models/network.js +++ b/client/src/models/network.js @@ -430,7 +430,7 @@ member = panel.get('members').getByNick(event.nick); if (member) { member.set('nick', event.newnick); - panel.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_nickname_changed').fetch(event.nick, event.newnick) , 'action nick', {time: event.time}); + panel.addMsg('', _kiwi.global.text_theme.styleText('client_models_network_nickname_changed', [event.nick, event.newnick], 'action nick', {time: event.time})); } }); } @@ -688,7 +688,7 @@ request_updated_banlist = true; } - channel.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_mode').fetch(event.nick, friendlyModeString()), 'action mode', {time: event.time}); + channel.addMsg('', _kiwi.global.text_theme.styleText('client_models_network_mode', [event.nick, friendlyModeString()]), 'action mode', {time: event.time}); // TODO: Be smart, remove the specific ban from the banlist rather than request a whole banlist if (request_updated_banlist) @@ -697,7 +697,7 @@ } else { // This is probably a mode being set on us. if (event.target.toLowerCase() === this.get("nick").toLowerCase()) { - this.panels.server.addMsg('', '== ' + _kiwi.global.i18n.translate('client_models_network_selfmode').fetch(event.nick, friendlyModeString()), 'action mode'); + this.panels.server.addMsg('', _kiwi.global.text_theme.styleText('client_models_network_selfmode', [event.nick, friendlyModeString()]), 'action mode'); } else { console.log('MODE command recieved for unknown target %s: ', event.target, event); } @@ -783,22 +783,22 @@ switch (event.error) { case 'banned_from_channel': - panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_banned').fetch(event.channel, event.reason), 'status'); + panel.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_banned', [event.channel, event.reason]), 'status'); _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_banned').fetch(event.channel, event.reason)); break; case 'bad_channel_key': - panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_badkey').fetch(event.channel), 'status'); + panel.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_channel_badkey', [event.channel]), 'status'); _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_badkey').fetch(event.channel)); break; case 'invite_only_channel': - panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_inviteonly').fetch(event.channel), 'status'); + panel.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_channel_inviteonly', [event.channel]), 'status'); _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_inviteonly').fetch(event.channel)); break; case 'user_on_channel': panel.addMsg(' ', '== ' + event.nick + ' is already on this channel'); break; case 'channel_is_full': - panel.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_channel_limitreached').fetch(event.channel), 'status'); + panel.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_channel_limitreached', [event.channel]), 'status'); _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_channel_limitreached').fetch(event.channel)); break; case 'chanop_privs_needed': @@ -814,7 +814,7 @@ } break; case 'nickname_in_use': - this.panels.server.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_nickname_alreadyinuse').fetch( event.nick), 'status'); + this.panels.server.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_nickname_alreadyinuse', [event.nick]), 'status'); if (this.panels.server !== this.panels.active) { _kiwi.app.message.text(_kiwi.global.i18n.translate('client_models_network_nickname_alreadyinuse').fetch(event.nick)); } @@ -827,7 +827,7 @@ break; case 'password_mismatch': - this.panels.server.addMsg(' ', '== ' + _kiwi.global.i18n.translate('client_models_network_badpassword').fetch(), 'status'); + this.panels.server.addMsg(' ', _kiwi.global.text_theme.styleText('client_models_network_badpassword'), 'status'); break; default: // We don't know what data contains, so don't do anything with it. diff --git a/client/src/views/channel.js b/client/src/views/channel.js index 28498de..7250b36 100644 --- a/client/src/views/channel.js +++ b/client/src/views/channel.js @@ -228,7 +228,7 @@ _kiwi.view.Channel = _kiwi.view.Panel.extend({ topic = this.model.get("topic"); } - this.model.addMsg('', '== ' + _kiwi.global.i18n.translate('client_views_channel_topic').fetch(this.model.get('name'), topic), 'topic'); + this.model.addMsg('', _kiwi.global.text_theme.styleText('client_views_channel_topic', [this.model.get('name'), topic]), 'topic'); // If this is the active channel then update the topic bar if (_kiwi.app.panels().active === this) { diff --git a/client/src/views/texttheme.js b/client/src/views/texttheme.js new file mode 100644 index 0000000..0250ccb --- /dev/null +++ b/client/src/views/texttheme.js @@ -0,0 +1,20 @@ +_kiwi.view.TextTheme = _kiwi.view.Panel.extend({ + initialize: function(text_theme) { + this.text_theme = text_theme; + }, + getText: function(string_id, params, trailing = '') { + var translation; + + translation = _kiwi.global.i18n.translate(string_id).fetch(params); + + return translation + trailing; + }, + styleText: function(string_id, params, trailing = '') { + var style, text; + + style = formatToIrcMsg(_kiwi.global.text_theme.options[string_id]); + text = this.getText(string_id, params, trailing); + + return style.replace('%T', text); + } +}); \ No newline at end of file diff --git a/server/settingsgenerator.js b/server/settingsgenerator.js index d797535..bf767fb 100644 --- a/server/settingsgenerator.js +++ b/server/settingsgenerator.js @@ -249,7 +249,8 @@ function addScripts(vars, debug) { 'src/views/topicbar.js', 'src/views/userbox.js', 'src/views/channeltools.js', - 'src/views/channelinfo.js' + 'src/views/channelinfo.js', + 'src/views/texttheme.js' ] ]); } \ No newline at end of file -- 2.25.1