16fc8825cf98e3ac0b2416847a00c06fc224349f
[KiwiIRC.git] / client / assets / 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 .registerProtocol': 'registerProtocol'
7 },
8
9 initialize: function (options) {
10 this.$el = $($('#tmpl_applet_settings').html().trim());
11
12 if (!navigator.registerProtocolHandler) {
13 this.$el.find('.protoHandler').remove();
14 }
15
16 // Incase any settings change while we have this open, update them
17 _kiwi.global.settings.on('change', this.loadSettings, this);
18
19 // Now actually show the current settings
20 this.loadSettings();
21
22 },
23
24 loadSettings: function () {
25
26 var that = this;
27
28 $.each(_kiwi.global.settings.attributes, function(key, value) {
29
30 var $el = $('[data-setting="' + key + '"]', that.$el);
31
32 // Only deal with settings we have a UI element for
33 if (!$el.length)
34 return;
35
36 switch ($el.prop('type')) {
37 case 'checkbox':
38 $el.prop('checked', value);
39 break;
40 case 'radio':
41 $('[data-setting="' + key + '"][value="' + value + '"]', that.$el).prop('checked', true);
42 break;
43 case 'text':
44 $el.val(value);
45 break;
46 default:
47 $('[data-setting="' + key + '"][data-value="' + value + '"]', that.$el).addClass('active');
48 break;
49 }
50 });
51 },
52
53 saveSettings: function (event) {
54 var value,
55 settings = _kiwi.global.settings,
56 $setting = $(event.currentTarget, this.$el)
57
58 switch (event.currentTarget.type) {
59 case 'checkbox':
60 value = $setting.is(':checked');
61 break;
62 case 'radio':
63 case 'text':
64 value = $setting.val();
65 break;
66 default:
67 value = $setting.data('value');
68 break;
69 }
70
71 // Stop settings being updated while we're saving one by one
72 _kiwi.global.settings.off('change', this.loadSettings, this);
73 settings.set($setting.data('setting'), value);
74 settings.save();
75
76 // Continue listening for setting changes
77 _kiwi.global.settings.on('change', this.loadSettings, this);
78 },
79
80 selectTheme: function(event) {
81 $('[data-setting="theme"].active', this.$el).removeClass('active');
82 $(event.currentTarget).addClass('active').trigger('change');
83 event.preventDefault();
84 },
85
86 registerProtocol: function (event) {
87 navigator.registerProtocolHandler('irc', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');
88 navigator.registerProtocolHandler('ircs', document.location.origin + _kiwi.app.get('base_path') + '/%s', 'Kiwi IRC');
89 }
90 });
91
92
93 var Applet = Backbone.Model.extend({
94 initialize: function () {
95 this.set('title', 'Settings');
96 this.view = new View();
97 }
98 });
99
100
101 _kiwi.model.Applet.register('kiwi_settings', Applet);
102 })();