_kiwi.utils object for helpers
[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
247dd7ac
N
12 tabs: _kiwi.global.i18n.translate('client_applets_settings_channelview_tabs').fetch(),\r
13 list: _kiwi.global.i18n.translate('client_applets_settings_channelview_list').fetch(),\r
14 large_amounts_of_chans: _kiwi.global.i18n.translate('client_applets_settings_channelview_list_notice').fetch(),\r
15 join_part: _kiwi.global.i18n.translate('client_applets_settings_notification_joinpart').fetch(),\r
7ba064d9 16 count_all_activity: _kiwi.global.i18n.translate('client_applets_settings_notification_count_all_activity').fetch(),\r
247dd7ac 17 timestamps: _kiwi.global.i18n.translate('client_applets_settings_timestamp').fetch(),\r
62d1e896 18 timestamp_24: _kiwi.global.i18n.translate('client_applets_settings_timestamp_24_hour').fetch(),\r
247dd7ac 19 mute: _kiwi.global.i18n.translate('client_applets_settings_notification_sound').fetch(),\r
2eacc942 20 emoticons: _kiwi.global.i18n.translate('client_applets_settings_emoticons').fetch(),\r
247dd7ac 21 scroll_history: _kiwi.global.i18n.translate('client_applets_settings_history_length').fetch(),\r
0fa2ca42 22 languages: _kiwi.app.translations,\r
247dd7ac
N
23 default_client: _kiwi.global.i18n.translate('client_applets_settings_default_client').fetch(),\r
24 make_default: _kiwi.global.i18n.translate('client_applets_settings_default_client_enable').fetch(),\r
b54ef9a3 25 locale_restart_needed: _kiwi.global.i18n.translate('client_applets_settings_locale_restart_needed').fetch(),\r
d70c63d4 26 default_note: _kiwi.global.i18n.translate('client_applets_settings_default_client_notice').fetch('<a href="chrome://settings/handlers">chrome://settings/handlers</a>'),\r
ee2f0962 27 html5_notifications: _kiwi.global.i18n.translate('client_applets_settings_html5_notifications').fetch(),\r
83dc56c5
D
28 enable_notifications: _kiwi.global.i18n.translate('client_applets_settings_enable_notifications').fetch(),\r
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
9264ef74 36 this.$el.find('.protocol_handler').remove();\r
ed5b9cd6 37 }\r
ee2f0962 38\r
99d8d2bf 39\r
5fb6968e 40 if (_kiwi.utils.notifications.allowed() !== null) {\r
99d8d2bf 41 this.$el.find('.notification_enabler').remove();\r
ee2f0962
D
42 }\r
43\r
1b48d21e
VC
44 // Incase any settings change while we have this open, update them\r
45 _kiwi.global.settings.on('change', this.loadSettings, this);\r
46\r
47 // Now actually show the current settings\r
48 this.loadSettings();\r
49\r
50 },\r
51\r
52 loadSettings: function () {\r
53\r
54 var that = this;\r
55\r
56 $.each(_kiwi.global.settings.attributes, function(key, value) {\r
57\r
ad6e3f2b
VC
58 var $el = $('[data-setting="' + key + '"]', that.$el);\r
59\r
60 // Only deal with settings we have a UI element for\r
08701d92 61 if (!$el.length)\r
134071ac 62 return;\r
ad6e3f2b
VC
63\r
64 switch ($el.prop('type')) {\r
1b48d21e 65 case 'checkbox':\r
ad6e3f2b 66 $el.prop('checked', value);\r
1b48d21e
VC
67 break;\r
68 case 'radio':\r
69 $('[data-setting="' + key + '"][value="' + value + '"]', that.$el).prop('checked', true);\r
70 break;\r
71 case 'text':\r
ad6e3f2b 72 $el.val(value);\r
1b48d21e 73 break;\r
0fa2ca42
JA
74 case 'select-one':\r
75 $('[value="' + value + '"]', that.$el).prop('selected', true);\r
76 break;\r
1b48d21e
VC
77 default:\r
78 $('[data-setting="' + key + '"][data-value="' + value + '"]', that.$el).addClass('active');\r
79 break;\r
80 }\r
81 });\r
82 },\r
83\r
84 saveSettings: function (event) {\r
85 var value,\r
86 settings = _kiwi.global.settings,\r
0fa2ca42 87 $setting = $(event.currentTarget, this.$el);\r
1b48d21e
VC
88\r
89 switch (event.currentTarget.type) {\r
90 case 'checkbox':\r
91 value = $setting.is(':checked');\r
92 break;\r
93 case 'radio':\r
94 case 'text':\r
95 value = $setting.val();\r
96 break;\r
0fa2ca42
JA
97 case 'select-one':\r
98 value = $(event.currentTarget[$setting.prop('selectedIndex')]).val();\r
99 break;\r
1b48d21e
VC
100 default:\r
101 value = $setting.data('value');\r
102 break;\r
103 }\r
104\r
105 // Stop settings being updated while we're saving one by one\r
106 _kiwi.global.settings.off('change', this.loadSettings, this);\r
107 settings.set($setting.data('setting'), value);\r
108 settings.save();\r
109\r
110 // Continue listening for setting changes\r
111 _kiwi.global.settings.on('change', this.loadSettings, this);\r
112 },\r
113\r
114 selectTheme: function(event) {\r
22ffa51a
D
115 event.preventDefault();\r
116\r
1b48d21e
VC
117 $('[data-setting="theme"].active', this.$el).removeClass('active');\r
118 $(event.currentTarget).addClass('active').trigger('change');\r
ed5b9cd6
JA
119 },\r
120\r
121 registerProtocol: function (event) {\r
22ffa51a
D
122 event.preventDefault();\r
123\r
ed5b9cd6
JA
124 navigator.registerProtocolHandler('irc', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
125 navigator.registerProtocolHandler('ircs', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
d70c63d4
K
126 },\r
127\r
99d8d2bf 128 enableNotifications: function(event){\r
98bc1a84 129 event.preventDefault();\r
5fb6968e 130 var notifications = _kiwi.utils.notifications;\r
99d8d2bf
NF
131 notifications.requestPermission().always(_.bind(function () {\r
132 if (notifications.allowed() !== null) {\r
133 this.$('.notification_enabler').remove();\r
134 }\r
135 }, this));\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