Set context on forEach loop, use `this.$` in all places
[KiwiIRC.git] / client / src / applets / settings.js
CommitLineData
4baeda09 1(function () {\r
1b48d21e
VC
2 var View = Backbone.View.extend({\r
3 events: {\r
4 'change [data-setting]': 'saveSettings',\r
ed5b9cd6 5 'click [data-setting="theme"]': 'selectTheme',\r
d70c63d4 6 'click .register_protocol': 'registerProtocol',\r
159e6756 7 'click .enable_notifications': 'enableNotifications'\r
1b48d21e
VC
8 },\r
9\r
10 initialize: function (options) {\r
13e912d8
NF
11 function t(key, vars) {\r
12 var trans = _kiwi.global.i18n.translate(key);\r
13 return trans.fetch.apply(trans, Array.prototype.slice.call(arguments, 1));\r
14 }\r
0d29c21f 15 var text = {\r
13e912d8
NF
16 tabs : t('client_applets_settings_channelview_tabs'),\r
17 list : t('client_applets_settings_channelview_list'),\r
18 large_amounts_of_chans: t('client_applets_settings_channelview_list_notice'),\r
19 join_part : t('client_applets_settings_notification_joinpart'),\r
20 count_all_activity : t('client_applets_settings_notification_count_all_activity'),\r
21 timestamps : t('client_applets_settings_timestamp'),\r
22 timestamp_24 : t('client_applets_settings_timestamp_24_hour'),\r
23 mute : t('client_applets_settings_notification_sound'),\r
24 emoticons : t('client_applets_settings_emoticons'),\r
25 scroll_history : t('client_applets_settings_history_length'),\r
26 languages : _kiwi.app.translations,\r
27 default_client : t('client_applets_settings_default_client'),\r
28 make_default : t('client_applets_settings_default_client_enable'),\r
29 locale_restart_needed : t('client_applets_settings_locale_restart_needed'),\r
30 default_note : t('client_applets_settings_default_client_notice', '<a href="chrome://settings/handlers">chrome://settings/handlers</a>'),\r
31 html5_notifications : t('client_applets_settings_html5_notifications'),\r
32 enable_notifications : t('client_applets_settings_enable_notifications'),\r
83dc56c5
D
33 theme_thumbnails: _.map(_kiwi.app.themes, function (theme) {\r
34 return _.template($('#tmpl_theme_thumbnail').html().trim(), theme);\r
35 })\r
0d29c21f
JA
36 };\r
37 this.$el = $(_.template($('#tmpl_applet_settings').html().trim(), text));\r
1b48d21e 38\r
ed5b9cd6 39 if (!navigator.registerProtocolHandler) {\r
aca5a9c9 40 this.$('.protocol_handler').remove();\r
ed5b9cd6 41 }\r
ee2f0962 42\r
75c3283c 43 if (!(window.Notification || window.webkitNotifications || navigator.mozNotification)) {\r
aca5a9c9 44 this.$('notification_enabler').remove();\r
ee2f0962
D
45 }\r
46\r
1b48d21e
VC
47 // Incase any settings change while we have this open, update them\r
48 _kiwi.global.settings.on('change', this.loadSettings, this);\r
49\r
50 // Now actually show the current settings\r
51 this.loadSettings();\r
52\r
53 },\r
54\r
55 loadSettings: function () {\r
56\r
3991d3a7 57 _.each(_kiwi.global.settings.attributes, function(value, key) {\r
1b48d21e 58\r
3991d3a7 59 var $el = this.$('[data-setting="' + key + '"]');\r
ad6e3f2b
VC
60\r
61 // Only deal with settings we have a UI element for\r
08701d92 62 if (!$el.length)\r
134071ac 63 return;\r
ad6e3f2b
VC
64\r
65 switch ($el.prop('type')) {\r
1b48d21e 66 case 'checkbox':\r
ad6e3f2b 67 $el.prop('checked', value);\r
1b48d21e
VC
68 break;\r
69 case 'radio':\r
3991d3a7 70 this.$('[data-setting="' + key + '"][value="' + value + '"]').prop('checked', true);\r
1b48d21e
VC
71 break;\r
72 case 'text':\r
ad6e3f2b 73 $el.val(value);\r
1b48d21e 74 break;\r
0fa2ca42 75 case 'select-one':\r
3991d3a7 76 this.$('[value="' + value + '"]').prop('selected', true);\r
0fa2ca42 77 break;\r
1b48d21e 78 default:\r
3991d3a7 79 this.$('[data-setting="' + key + '"][data-value="' + value + '"]').addClass('active');\r
1b48d21e
VC
80 break;\r
81 }\r
3991d3a7 82 }, this);\r
1b48d21e
VC
83 },\r
84\r
85 saveSettings: function (event) {\r
86 var value,\r
87 settings = _kiwi.global.settings,\r
aca5a9c9 88 $setting = this.$(event.currentTarget);\r
1b48d21e
VC
89\r
90 switch (event.currentTarget.type) {\r
91 case 'checkbox':\r
92 value = $setting.is(':checked');\r
93 break;\r
94 case 'radio':\r
95 case 'text':\r
96 value = $setting.val();\r
97 break;\r
0fa2ca42
JA
98 case 'select-one':\r
99 value = $(event.currentTarget[$setting.prop('selectedIndex')]).val();\r
100 break;\r
1b48d21e
VC
101 default:\r
102 value = $setting.data('value');\r
103 break;\r
104 }\r
105\r
106 // Stop settings being updated while we're saving one by one\r
107 _kiwi.global.settings.off('change', this.loadSettings, this);\r
108 settings.set($setting.data('setting'), value);\r
109 settings.save();\r
110\r
111 // Continue listening for setting changes\r
112 _kiwi.global.settings.on('change', this.loadSettings, this);\r
113 },\r
114\r
115 selectTheme: function(event) {\r
22ffa51a
D
116 event.preventDefault();\r
117\r
aca5a9c9 118 this.$('[data-setting="theme"].active').removeClass('active');\r
1b48d21e 119 $(event.currentTarget).addClass('active').trigger('change');\r
ed5b9cd6
JA
120 },\r
121\r
122 registerProtocol: function (event) {\r
22ffa51a
D
123 event.preventDefault();\r
124\r
ed5b9cd6
JA
125 navigator.registerProtocolHandler('irc', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
126 navigator.registerProtocolHandler('ircs', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
d70c63d4
K
127 },\r
128\r
aca5a9c9 129 enableNotifications: function(event) {\r
98bc1a84 130 event.preventDefault();\r
aca5a9c9 131 var Notify = window.Notification || window.webkitNotifications;\r
98bc1a84 132\r
aca5a9c9
NF
133 if (Notify) {\r
134 Notify.requestPermission();\r
98bc1a84 135 }\r
ee2f0962 136 }\r
d70c63d4 137\r
1b48d21e
VC
138 });\r
139\r
140\r
141 var Applet = Backbone.Model.extend({\r
142 initialize: function () {\r
247dd7ac 143 this.set('title', _kiwi.global.i18n.translate('client_applets_settings_title').fetch());\r
1b48d21e
VC
144 this.view = new View();\r
145 }\r
146 });\r
147\r
148\r
149 _kiwi.model.Applet.register('kiwi_settings', Applet);\r
d70c63d4 150})();\r