* New options page
[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 },
7
8 initialize: function (options) {
9 this.$el = $($('#tmpl_applet_settings').html().trim());
10
11 // Incase any settings change while we have this open, update them
12 _kiwi.global.settings.on('change', this.loadSettings, this);
13
14 // Now actually show the current settings
15 this.loadSettings();
16
17 },
18
19 loadSettings: function () {
20
21 var settings = _kiwi.global.settings,
22 theme = settings.get('theme') || 'relaxed',
23 channel_style = settings.get('channel_list_style') || 'tabs',
24 scrollback = settings.get('scrollback') || '250';
25
26 $('[data-setting="theme"][data-value="' + theme + '"]', this.$el).addClass('active');
27
28 $('[data-setting="channel_list_style"][value="' + channel_style + '"]', this.$el).prop('checked', true);
29
30 if (typeof settings.get('show_joins_parts') === 'undefined' || settings.get('show_joins_parts')) {
31 $('[data-setting="show_joins_parts"]', this.$el).prop('checked', true);
32 } else {
33 $('[data-setting="show_joins_parts"]', this.$el).prop('checked', false);
34 }
35
36 if (typeof settings.get('show_timestamps') === 'undefined' || settings.get('show_timestamps')) {
37 $('[data-setting="show_timestamps"]', this.$el).prop('checked', true);
38 } else {
39 $('[data-setting="show_timestamps"]', this.$el).prop('checked', false);
40 }
41
42 if (typeof settings.get('mute_sounds') === 'undefined' || settings.get('mute_sounds')) {
43 $('[data-setting="mute_sounds"]', this.$el).prop('checked', true);
44 } else {
45 $('[data-setting="mute_sounds"]', this.$el).prop('checked', false);
46 }
47
48 $('[data-setting="scrollback"]', this.$el).val(scrollback);
49 },
50
51 saveSettings: function (event) {
52 var value,
53 settings = _kiwi.global.settings,
54 $setting = $(event.currentTarget, this.$el)
55
56 switch (event.currentTarget.type) {
57 case 'checkbox':
58 value = $setting.is(':checked');
59 break;
60 case 'radio':
61 case 'text':
62 value = $setting.val();
63 break;
64 default:
65 value = $setting.data('value');
66 break;
67 }
68
69 // Stop settings being updated while we're saving one by one
70 _kiwi.global.settings.off('change', this.loadSettings, this);
71 settings.set($setting.data('setting'), value);
72 settings.save();
73
74 // Continue listening for setting changes
75 _kiwi.global.settings.on('change', this.loadSettings, this);
76 },
77
78 selectTheme: function(event) {
79 $('[data-setting="theme"].active', this.$el).removeClass('active');
80 $(event.currentTarget).addClass('active').trigger('change');
81 event.preventDefault();
82 }
83 });
84
85
86 var Applet = Backbone.Model.extend({
87 initialize: function () {
88 this.set('title', 'Settings');
89 this.view = new View();
90 }
91 });
92
93
94 _kiwi.model.Applet.register('kiwi_settings', Applet);
95 })();