Merge pull request #421 from CoryChaplin/development
[KiwiIRC.git] / client / src / applets / settings.js
1 (function () {
2 var View = Backbone.View.extend({
3 events: {
4 'change [data-setting]': 'saveSettings',
5 'click [data-setting="theme"]': 'selectTheme',
6 'click .register_protocol': 'registerProtocol',
7 'click .enable_notifications': 'enableNoticiations'
8 },
9
10 initialize: function (options) {
11 var text = {
12 tabs: _kiwi.global.i18n.translate('client_applets_settings_channelview_tabs').fetch(),
13 list: _kiwi.global.i18n.translate('client_applets_settings_channelview_list').fetch(),
14 large_amounts_of_chans: _kiwi.global.i18n.translate('client_applets_settings_channelview_list_notice').fetch(),
15 join_part: _kiwi.global.i18n.translate('client_applets_settings_notification_joinpart').fetch(),
16 timestamps: _kiwi.global.i18n.translate('client_applets_settings_timestamp').fetch(),
17 mute: _kiwi.global.i18n.translate('client_applets_settings_notification_sound').fetch(),
18 emoticons: _kiwi.global.i18n.translate('client_applets_settings_emoticons').fetch(),
19 scroll_history: _kiwi.global.i18n.translate('client_applets_settings_history_length').fetch(),
20 languages: _kiwi.app.translations,
21 default_client: _kiwi.global.i18n.translate('client_applets_settings_default_client').fetch(),
22 make_default: _kiwi.global.i18n.translate('client_applets_settings_default_client_enable').fetch(),
23 locale_restart_needed: _kiwi.global.i18n.translate('client_applets_settings_locale_restart_needed').fetch(),
24 default_note: _kiwi.global.i18n.translate('client_applets_settings_default_client_notice').fetch('<a href="chrome://settings/handlers">chrome://settings/handlers</a>'),
25 html5_notifications: _kiwi.global.i18n.translate('client_applets_settings_html5_notifications').fetch(),
26 enable_notifications: _kiwi.global.i18n.translate('client_applets_settings_enable_notifications').fetch()
27 };
28 this.$el = $(_.template($('#tmpl_applet_settings').html().trim(), text));
29
30 if (!navigator.registerProtocolHandler) {
31 this.$el.find('.protocol_handler').remove();
32 }
33
34 if (!window.webkitNotifications) {
35 this.$el.find('notification_enabler').remove();
36 }
37
38 // Incase any settings change while we have this open, update them
39 _kiwi.global.settings.on('change', this.loadSettings, this);
40
41 // Now actually show the current settings
42 this.loadSettings();
43
44 },
45
46 loadSettings: function () {
47
48 var that = this;
49
50 $.each(_kiwi.global.settings.attributes, function(key, value) {
51
52 var $el = $('[data-setting="' + key + '"]', that.$el);
53
54 // Only deal with settings we have a UI element for
55 if (!$el.length)
56 return;
57
58 switch ($el.prop('type')) {
59 case 'checkbox':
60 $el.prop('checked', value);
61 break;
62 case 'radio':
63 $('[data-setting="' + key + '"][value="' + value + '"]', that.$el).prop('checked', true);
64 break;
65 case 'text':
66 $el.val(value);
67 break;
68 case 'select-one':
69 $('[value="' + value + '"]', that.$el).prop('selected', true);
70 break;
71 default:
72 $('[data-setting="' + key + '"][data-value="' + value + '"]', that.$el).addClass('active');
73 break;
74 }
75 });
76 },
77
78 saveSettings: function (event) {
79 var value,
80 settings = _kiwi.global.settings,
81 $setting = $(event.currentTarget, this.$el);
82
83 switch (event.currentTarget.type) {
84 case 'checkbox':
85 value = $setting.is(':checked');
86 break;
87 case 'radio':
88 case 'text':
89 value = $setting.val();
90 break;
91 case 'select-one':
92 value = $(event.currentTarget[$setting.prop('selectedIndex')]).val();
93 break;
94 default:
95 value = $setting.data('value');
96 break;
97 }
98
99 // Stop settings being updated while we're saving one by one
100 _kiwi.global.settings.off('change', this.loadSettings, this);
101 settings.set($setting.data('setting'), value);
102 settings.save();
103
104 // Continue listening for setting changes
105 _kiwi.global.settings.on('change', this.loadSettings, this);
106 },
107
108 selectTheme: function(event) {
109 $('[data-setting="theme"].active', this.$el).removeClass('active');
110 $(event.currentTarget).addClass('active').trigger('change');
111 event.preventDefault();
112 },
113
114 registerProtocol: function (event) {
115 navigator.registerProtocolHandler('irc', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');
116 navigator.registerProtocolHandler('ircs', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');
117 },
118
119 enableNoticiations: function(event){
120 window.webkitNotifications.requestPermission();
121 }
122
123 });
124
125
126 var Applet = Backbone.Model.extend({
127 initialize: function () {
128 this.set('title', _kiwi.global.i18n.translate('client_applets_settings_title').fetch());
129 this.view = new View();
130 }
131 });
132
133
134 _kiwi.model.Applet.register('kiwi_settings', Applet);
135 })();