You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
| /* 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;
 | |
|     },
 | |
|   });
 | |
| })();
 |