|  |  |  | /* | 
					
						
							|  |  |  |  * vim: ts=4:sw=4:expandtab | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | ;(function() { | 
					
						
							|  |  |  |     'use strict'; | 
					
						
							|  |  |  |     window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Whisper.Notifications = new (Backbone.Collection.extend({ | 
					
						
							|  |  |  |         initialize: function() { | 
					
						
							|  |  |  |             this.on('add', this.update); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         isEnabled: function(callback) { | 
					
						
							|  |  |  |             return Notification.permission === 'granted' && | 
					
						
							|  |  |  |                 !storage.get('disable-notifications'); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         enable: function(callback) { | 
					
						
							|  |  |  |             storage.remove('disable-notifications'); | 
					
						
							|  |  |  |             Notification.requestPermission(function(status) { | 
					
						
							|  |  |  |                 callback(status); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         disable: function() { | 
					
						
							|  |  |  |             storage.put('disable-notifications', true); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         onclick: function() { | 
					
						
							|  |  |  |             var last = this.last(); | 
					
						
							|  |  |  |             if (!last) { | 
					
						
							|  |  |  |                 openInbox(); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             var conversation = ConversationController.create({ | 
					
						
							|  |  |  |                 id: last.get('conversationId') | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |             openConversation(conversation); | 
					
						
							|  |  |  |             this.clear(); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         update: function(options) { | 
					
						
							|  |  |  |             if (this.length > 1) { | 
					
						
							|  |  |  |                 var iconUrl = 'images/icon_128.png'; | 
					
						
							|  |  |  |                 var conversationIds = _.uniq(this.map(function(m) { | 
					
						
							|  |  |  |                     return m.get('conversationId'); | 
					
						
							|  |  |  |                 })); | 
					
						
							|  |  |  |                 if (conversationIds.length === 1) { | 
					
						
							|  |  |  |                     iconUrl = this.at(0).get('iconUrl'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 extension.notify({ | 
					
						
							|  |  |  |                     type    : 'list', | 
					
						
							|  |  |  |                     iconUrl : iconUrl, | 
					
						
							|  |  |  |                     title   : '' + this.length + ' new messages', | 
					
						
							|  |  |  |                     message : 'Most recent from ' + this.last().get('title'), | 
					
						
							|  |  |  |                     items   : this.map(function(m) { | 
					
						
							|  |  |  |                         return { | 
					
						
							|  |  |  |                             title   : m.get('title'), | 
					
						
							|  |  |  |                             message : m.get('message') | 
					
						
							|  |  |  |                         }; | 
					
						
							|  |  |  |                     }), | 
					
						
							|  |  |  |                     buttons : [{ | 
					
						
							|  |  |  |                         title   : 'Mark all as read', | 
					
						
							|  |  |  |                         iconUrl : 'images/check.png' | 
					
						
							|  |  |  |                     }] | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 var m = this.at(0); | 
					
						
							|  |  |  |                 var type = 'basic'; | 
					
						
							|  |  |  |                 if (m.get('imageUrl')) { | 
					
						
							|  |  |  |                     type = 'image'; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 extension.notify({ | 
					
						
							|  |  |  |                     type     : type, | 
					
						
							|  |  |  |                     title    : m.get('title'), | 
					
						
							|  |  |  |                     message  : m.get('message'), | 
					
						
							|  |  |  |                     iconUrl  : m.get('iconUrl'), | 
					
						
							|  |  |  |                     imageUrl : m.get('imageUrl') | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         clear: function() { | 
					
						
							|  |  |  |             this.reset([]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }))(); | 
					
						
							|  |  |  | })(); |