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