|  |  |  | /* global BlockedNumberController: false */ | 
					
						
							|  |  |  | /* global getBlockedNumbers: false */ | 
					
						
							|  |  |  | /* global Whisper: false */ | 
					
						
							|  |  |  | /* global storage: false */ | 
					
						
							|  |  |  | /* global i18n: false */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* eslint-disable no-new */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Whisper.BlockedNumberView = Whisper.View.extend({ | 
					
						
							|  |  |  |     templateName: 'blockedUserSettings', | 
					
						
							|  |  |  |     className: 'blockedUserSettings', | 
					
						
							|  |  |  |     events: { | 
					
						
							|  |  |  |       'click .unblock-button': 'onUnblock', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     initialize() { | 
					
						
							|  |  |  |       storage.onready(() => { | 
					
						
							|  |  |  |         BlockedNumberController.refresh(); | 
					
						
							|  |  |  |         this.collection = getBlockedNumbers(); | 
					
						
							|  |  |  |         this.listView = new Whisper.BlockedNumberListView({ | 
					
						
							|  |  |  |           collection: this.collection, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.listView.render(); | 
					
						
							|  |  |  |         this.blockedUserSettings = this.$('.blocked-user-settings'); | 
					
						
							|  |  |  |         this.blockedUserSettings.prepend(this.listView.el); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     render_attributes() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         blockedHeader: i18n('settingsUnblockHeader'), | 
					
						
							|  |  |  |         unblockMessage: i18n('unblockUser'), | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     onUnblock() { | 
					
						
							|  |  |  |       const number = this.$('select option:selected').val(); | 
					
						
							|  |  |  |       if (!number) { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (BlockedNumberController.isBlocked(number)) { | 
					
						
							|  |  |  |         BlockedNumberController.unblock(number); | 
					
						
							|  |  |  |         window.onUnblockNumber(number); | 
					
						
							|  |  |  |         this.listView.collection.remove( | 
					
						
							|  |  |  |           this.listView.collection.where({ number }) | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Whisper.BlockedNumberListView = Whisper.View.extend({ | 
					
						
							|  |  |  |     tagName: 'select', | 
					
						
							|  |  |  |     initialize(options) { | 
					
						
							|  |  |  |       this.options = options || {}; | 
					
						
							|  |  |  |       this.listenTo(this.collection, 'add', this.addOne); | 
					
						
							|  |  |  |       this.listenTo(this.collection, 'reset', this.addAll); | 
					
						
							|  |  |  |       this.listenTo(this.collection, 'remove', this.addAll); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     addOne(model) { | 
					
						
							|  |  |  |       const number = model.get('number'); | 
					
						
							|  |  |  |       if (number) { | 
					
						
							|  |  |  |         this.$el.append( | 
					
						
							|  |  |  |           `<option value="${number}">${this.truncate(number, 25)}</option>` | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     addAll() { | 
					
						
							|  |  |  |       this.$el.html(''); | 
					
						
							|  |  |  |       this.collection.each(this.addOne, this); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     truncate(string, limit) { | 
					
						
							|  |  |  |       // Make sure an element and number of items to truncate is provided
 | 
					
						
							|  |  |  |       if (!string || !limit) { | 
					
						
							|  |  |  |         return string; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Get the inner content of the element
 | 
					
						
							|  |  |  |       let content = string.trim(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Convert the content into an array of words
 | 
					
						
							|  |  |  |       // Remove any words above the limit
 | 
					
						
							|  |  |  |       content = content.slice(0, limit); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Convert the array of words back into a string
 | 
					
						
							|  |  |  |       // If there's content to add after it, add it
 | 
					
						
							|  |  |  |       if (string.length > limit) { | 
					
						
							|  |  |  |         content = `${content}...`; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return content; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     render() { | 
					
						
							|  |  |  |       this.addAll(); | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | })(); |