|  |  |  | /* global Whisper, i18n, _, displayNameRegex */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Whisper.NicknameDialogView = Whisper.View.extend({ | 
					
						
							|  |  |  |     className: 'loki-dialog nickname-dialog modal', | 
					
						
							|  |  |  |     templateName: 'nickname-dialog', | 
					
						
							|  |  |  |     initialize(options) { | 
					
						
							|  |  |  |       this.message = options.message; | 
					
						
							|  |  |  |       this.name = options.name || ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.resolve = options.resolve; | 
					
						
							|  |  |  |       this.okText = options.okText || i18n('ok'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.reject = options.reject; | 
					
						
							|  |  |  |       this.cancelText = options.cancelText || i18n('cancel'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.title = options.title; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.render(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.$input = this.$('input'); | 
					
						
							|  |  |  |       this.$input.val(this.name); | 
					
						
							|  |  |  |       this.$input.focus(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.validateNickname(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const sanitiseNameInput = () => { | 
					
						
							|  |  |  |         const oldVal = this.$input.val(); | 
					
						
							|  |  |  |         this.$input.val(oldVal.replace(displayNameRegex, '')); | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.$input[0].oninput = () => { | 
					
						
							|  |  |  |         sanitiseNameInput(); | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.$input[0].onpaste = () => { | 
					
						
							|  |  |  |         // Sanitise data immediately after paste because it's easier
 | 
					
						
							|  |  |  |         setTimeout(() => { | 
					
						
							|  |  |  |           sanitiseNameInput(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     events: { | 
					
						
							|  |  |  |       keyup: 'onKeyup', | 
					
						
							|  |  |  |       'click .ok': 'ok', | 
					
						
							|  |  |  |       'click .cancel': 'cancel', | 
					
						
							|  |  |  |       change: 'validateNickname', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     validateNickname() { | 
					
						
							|  |  |  |       const nickname = this.$input.val(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (_.isEmpty(nickname)) { | 
					
						
							|  |  |  |         this.$('.ok').attr('disabled', 'disabled'); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       this.$('.ok').removeAttr('disabled'); | 
					
						
							|  |  |  |       return true; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     render_attributes() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         message: this.message, | 
					
						
							|  |  |  |         showCancel: !this.hideCancel, | 
					
						
							|  |  |  |         cancel: this.cancelText, | 
					
						
							|  |  |  |         ok: this.okText, | 
					
						
							|  |  |  |         title: this.title, | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     ok() { | 
					
						
							|  |  |  |       const nickname = this.$input.val().trim(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.remove(); | 
					
						
							|  |  |  |       if (this.resolve) { | 
					
						
							|  |  |  |         this.resolve(nickname); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     cancel() { | 
					
						
							|  |  |  |       this.remove(); | 
					
						
							|  |  |  |       if (this.reject) { | 
					
						
							|  |  |  |         this.reject(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     onKeyup(event) { | 
					
						
							|  |  |  |       const valid = this.validateNickname(); | 
					
						
							|  |  |  |       switch (event.key) { | 
					
						
							|  |  |  |         case 'Enter': | 
					
						
							|  |  |  |           if (valid) { | 
					
						
							|  |  |  |             this.ok(); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |         case 'Escape': | 
					
						
							|  |  |  |         case 'Esc': | 
					
						
							|  |  |  |           this.cancel(); | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |           return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       event.preventDefault(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     focusInput() { | 
					
						
							|  |  |  |       this.$input.focus(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | })(); |