| 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 |