Notification timeouts #502
[KiwiIRC.git] / client / src / applets / settings.js
... / ...
CommitLineData
1(function () {\r
2 var View = Backbone.View.extend({\r
3 events: {\r
4 'change [data-setting]': 'saveSettings',\r
5 'click [data-setting="theme"]': 'selectTheme',\r
6 'click .register_protocol': 'registerProtocol',\r
7 'click .enable_notifications': 'enableNoticiations'\r
8 },\r
9\r
10 initialize: function (options) {\r
11 var text = {\r
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
16 count_all_activity: _kiwi.global.i18n.translate('client_applets_settings_notification_count_all_activity').fetch(),\r
17 timestamps: _kiwi.global.i18n.translate('client_applets_settings_timestamp').fetch(),\r
18 timestamp_24: _kiwi.global.i18n.translate('client_applets_settings_timestamp_24_hour').fetch(),\r
19 mute: _kiwi.global.i18n.translate('client_applets_settings_notification_sound').fetch(),\r
20 emoticons: _kiwi.global.i18n.translate('client_applets_settings_emoticons').fetch(),\r
21 scroll_history: _kiwi.global.i18n.translate('client_applets_settings_history_length').fetch(),\r
22 languages: _kiwi.app.translations,\r
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
25 locale_restart_needed: _kiwi.global.i18n.translate('client_applets_settings_locale_restart_needed').fetch(),\r
26 default_note: _kiwi.global.i18n.translate('client_applets_settings_default_client_notice').fetch('<a href="chrome://settings/handlers">chrome://settings/handlers</a>'),\r
27 html5_notifications: _kiwi.global.i18n.translate('client_applets_settings_html5_notifications').fetch(),\r
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
32 };\r
33 this.$el = $(_.template($('#tmpl_applet_settings').html().trim(), text));\r
34\r
35 if (!navigator.registerProtocolHandler) {\r
36 this.$el.find('.protocol_handler').remove();\r
37 }\r
38\r
39 if (!window.webkitNotifications) {\r
40 this.$el.find('notification_enabler').remove();\r
41 }\r
42\r
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
53 var that = this;\r
54\r
55 $.each(_kiwi.global.settings.attributes, function(key, value) {\r
56\r
57 var $el = $('[data-setting="' + key + '"]', that.$el);\r
58\r
59 // Only deal with settings we have a UI element for\r
60 if (!$el.length)\r
61 return;\r
62\r
63 switch ($el.prop('type')) {\r
64 case 'checkbox':\r
65 $el.prop('checked', value);\r
66 break;\r
67 case 'radio':\r
68 $('[data-setting="' + key + '"][value="' + value + '"]', that.$el).prop('checked', true);\r
69 break;\r
70 case 'text':\r
71 $el.val(value);\r
72 break;\r
73 case 'select-one':\r
74 $('[value="' + value + '"]', that.$el).prop('selected', true);\r
75 break;\r
76 default:\r
77 $('[data-setting="' + key + '"][data-value="' + value + '"]', that.$el).addClass('active');\r
78 break;\r
79 }\r
80 });\r
81 },\r
82\r
83 saveSettings: function (event) {\r
84 var value,\r
85 settings = _kiwi.global.settings,\r
86 $setting = $(event.currentTarget, this.$el);\r
87\r
88 switch (event.currentTarget.type) {\r
89 case 'checkbox':\r
90 value = $setting.is(':checked');\r
91 break;\r
92 case 'radio':\r
93 case 'text':\r
94 value = $setting.val();\r
95 break;\r
96 case 'select-one':\r
97 value = $(event.currentTarget[$setting.prop('selectedIndex')]).val();\r
98 break;\r
99 default:\r
100 value = $setting.data('value');\r
101 break;\r
102 }\r
103\r
104 // Stop settings being updated while we're saving one by one\r
105 _kiwi.global.settings.off('change', this.loadSettings, this);\r
106 settings.set($setting.data('setting'), value);\r
107 settings.save();\r
108\r
109 // Continue listening for setting changes\r
110 _kiwi.global.settings.on('change', this.loadSettings, this);\r
111 },\r
112\r
113 selectTheme: function(event) {\r
114 $('[data-setting="theme"].active', this.$el).removeClass('active');\r
115 $(event.currentTarget).addClass('active').trigger('change');\r
116 event.preventDefault();\r
117 },\r
118\r
119 registerProtocol: function (event) {\r
120 navigator.registerProtocolHandler('irc', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
121 navigator.registerProtocolHandler('ircs', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');\r
122 },\r
123\r
124 enableNoticiations: function(event){\r
125 event.preventDefault();\r
126\r
127 if ('webkitNotifications' in window) {\r
128 window.webkitNotifications.requestPermission();\r
129 } else if ('Notification' in window) {\r
130 Notification.requestPermission();\r
131 }\r
132 }\r
133\r
134 });\r
135\r
136\r
137 var Applet = Backbone.Model.extend({\r
138 initialize: function () {\r
139 this.set('title', _kiwi.global.i18n.translate('client_applets_settings_title').fetch());\r
140 this.view = new View();\r
141 }\r
142 });\r
143\r
144\r
145 _kiwi.model.Applet.register('kiwi_settings', Applet);\r
146})();\r