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