Enforce display name

pull/574/head
Beaudan Brown 6 years ago
parent fcea190539
commit 3bdbf03658

@ -196,7 +196,6 @@
<div class='message'>{{ message }}</div> <div class='message'>{{ message }}</div>
{{ /message }} {{ /message }}
<div class='buttons'> <div class='buttons'>
<button class='clear' tabindex='3'>{{ clear }}</button>
<button class='cancel' tabindex='2'>{{ cancel }}</button> <button class='cancel' tabindex='2'>{{ cancel }}</button>
<button class='ok' tabindex='1'>{{ ok }}</button> <button class='ok' tabindex='1'>{{ ok }}</button>
</div> </div>
@ -646,7 +645,7 @@
<div class='page'> <div class='page'>
<div class='display-name-input'> <div class='display-name-input'>
<div class='input-header'>Enter your public display name (alphanumeric characters and underscores only)</div> <div class='input-header'>Enter your public display name (alphanumeric characters and underscores only)</div>
<input class='form-control' type='text' id='display-name' placeholder='Display Name (optional)' autocomplete='off' spellcheck='false' maxlength='25'> <input class='form-control' type='text' id='display-name' placeholder='Display Name' autocomplete='off' spellcheck='false' maxlength='25'>
</div> </div>
<div class='password-inputs'> <div class='password-inputs'>
<div class='input-header'>Type an optional password for added security</div> <div class='input-header'>Type an optional password for added security</div>
@ -655,8 +654,8 @@
<div class='error'></div> <div class='error'></div>
</div> </div>
<div class='buttons'> <div class='buttons'>
<a class='button grey' id='back-button'>Back</a> <button class='button grey' id='back-button' tabindex='2'>Back</button>
<a class='button' id='save-button' data-loading-text='Please wait...'>Save</a> <button class='button' id='save-button' tabindex='1'>Save</button>
</div> </div>
</div> </div>

@ -19,9 +19,6 @@
this.reject = options.reject; this.reject = options.reject;
this.cancelText = options.cancelText || i18n('cancel'); this.cancelText = options.cancelText || i18n('cancel');
this.clear = options.clear;
this.clearText = options.clearText || i18n('clear');
this.title = options.title; this.title = options.title;
this.render(); this.render();
@ -52,16 +49,17 @@
keyup: 'onKeyup', keyup: 'onKeyup',
'click .ok': 'ok', 'click .ok': 'ok',
'click .cancel': 'cancel', 'click .cancel': 'cancel',
'click .clear': 'clear',
change: 'validateNickname', change: 'validateNickname',
}, },
validateNickname() { validateNickname() {
const nickname = this.$input.val(); const nickname = this.$input.val();
if (_.isEmpty(nickname)) { if (_.isEmpty(nickname)) {
this.$('.clear').hide(); this.$('.ok').attr('disabled', 'disabled');
return false;
} else { } else {
this.$('.clear').show(); this.$('.ok').removeAttr('disabled');
return true;
} }
}, },
render_attributes() { render_attributes() {
@ -70,7 +68,6 @@
showCancel: !this.hideCancel, showCancel: !this.hideCancel,
cancel: this.cancelText, cancel: this.cancelText,
ok: this.okText, ok: this.okText,
clear: this.clearText,
title: this.title, title: this.title,
}; };
}, },
@ -88,14 +85,13 @@
this.reject(); this.reject();
} }
}, },
clear() {
this.$input.val('').trigger('change');
},
onKeyup(event) { onKeyup(event) {
this.validateNickname(); const valid = this.validateNickname();
switch (event.key) { switch (event.key) {
case 'Enter': case 'Enter':
if (valid) {
this.ok(); this.ok();
}
break; break;
case 'Escape': case 'Escape':
case 'Esc': case 'Esc':

@ -57,21 +57,13 @@
this.onValidatePassword(); this.onValidatePassword();
const sanitiseNameInput = () => {
const oldVal = this.$('#display-name').val();
this.$('#display-name').val(oldVal.replace(/[^a-zA-Z0-9_]/g, ''));
};
this.$('#display-name').get(0).oninput = () => {
sanitiseNameInput();
};
this.$('#display-name').get(0).onpaste = () => { this.$('#display-name').get(0).onpaste = () => {
// Sanitise data immediately after paste because it's easier // Sanitise data immediately after paste because it's easier
setTimeout(() => { setTimeout(() => {
sanitiseNameInput(); this.sanitiseNameInput();
}); });
}; };
this.sanitiseNameInput();
}, },
events: { events: {
keyup: 'onKeyup', keyup: 'onKeyup',
@ -91,6 +83,18 @@
'keyup #password': 'onValidatePassword', 'keyup #password': 'onValidatePassword',
'keyup #password-confirmation': 'onValidatePassword', 'keyup #password-confirmation': 'onValidatePassword',
}, },
sanitiseNameInput() {
const oldVal = this.$('#display-name').val();
const newVal = oldVal.replace(/[^a-zA-Z0-9_]/g, '');
this.$('#display-name').val(newVal);
if (_.isEmpty(newVal)) {
this.$('#save-button').attr('disabled', 'disabled');
return false;
} else {
this.$('#save-button').removeAttr('disabled');
return true;
}
},
async showPage(pageIndex) { async showPage(pageIndex) {
// eslint-disable-next-line func-names // eslint-disable-next-line func-names
this.$pages.each(function(index) { this.$pages.each(function(index) {
@ -123,9 +127,12 @@
return; return;
} }
const validName = this.sanitiseNameInput();
switch (event.key) { switch (event.key) {
case 'Enter': case 'Enter':
if (validName) {
this.onSaveProfile(); this.onSaveProfile();
}
break; break;
case 'Escape': case 'Escape':
case 'Esc': case 'Esc':

@ -69,6 +69,15 @@ audio {
button { button {
cursor: pointer; cursor: pointer;
font-size: inherit; font-size: inherit;
&[disabled='disabled'] {
&,
&:hover {
opacity: 0.5;
box-shadow: none;
cursor: default;
}
}
} }
button.grey { button.grey {
border-radius: $border-radius; border-radius: $border-radius;

Loading…
Cancel
Save