Improved UX of registration form
* Make checkboxes bigger * Change messages to adapt to "Instante"'s needs * Add custom placeholder on username depending on language + region It replaces the previous js implementation, which is just worse Hopefully it's more clear now
This commit is contained in:
parent
d1e0fdaae7
commit
2f1401cfa4
|
@ -536,10 +536,27 @@ code {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input#user_account_attributes_username {
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
margin: 0;
|
||||||
|
width: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__append.left {
|
||||||
|
right: initial !important;
|
||||||
|
padding: 10px 0;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
&__append {
|
&__append {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 3px;
|
right: 3px;
|
||||||
top: 1px;
|
top: .2em;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
padding-bottom: 9px;
|
padding-bottom: 9px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -547,7 +564,6 @@ code {
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
max-width: 140px;
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
|
@ -559,7 +575,6 @@ code {
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 1px;
|
bottom: 1px;
|
||||||
width: 5px;
|
width: 5px;
|
||||||
background-image: linear-gradient(to right, rgba(darken($ui-base-color, 10%), 0), darken($ui-base-color, 10%));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
= f.simple_fields_for :account do |ff|
|
= f.simple_fields_for :account do |ff|
|
||||||
.fields-group
|
.fields-group
|
||||||
= ff.input :username, wrapper: :with_label, autofocus: true, label: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', pattern: '[a-zA-Z0-9_]+', maxlength: 30, onkeyup: "return window.playWithHandle(this)"}, append: "<b>pablo</b>@#{site_hostname}", hint: false
|
= ff.input :username, wrapper: :with_label, autofocus: true, label: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', pattern: '[a-zA-Z0-9_]+', maxlength: 20, placeholder: t('simple_form.labels.defaults.username_placeholder') || 'username' }, append: "@#{site_hostname}</div><div class=\"label_input__append left\">@", hint: false
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :email, wrapper: :with_label, label: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false
|
= f.input :email, wrapper: :with_label, label: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false
|
||||||
|
@ -41,23 +41,4 @@
|
||||||
.actions
|
.actions
|
||||||
= f.button :button, @invite.present? ? t('auth.register') : sign_up_message, type: :submit
|
= f.button :button, @invite.present? ? t('auth.register') : sign_up_message, type: :submit
|
||||||
|
|
||||||
:javascript
|
|
||||||
var originalHandle = null;
|
|
||||||
function playWithHandle(e) {
|
|
||||||
const inputValue = e.value.trim();
|
|
||||||
const placeHolder = e.parentElement.querySelector('.label_input__append');
|
|
||||||
var placeHolderStr = placeHolder.innerHTML.trim();
|
|
||||||
if (originalHandle === null)
|
|
||||||
originalHandle = placeHolderStr;
|
|
||||||
if (inputValue === '') {
|
|
||||||
if (originalHandle === null)
|
|
||||||
return;
|
|
||||||
placeHolder.innerHTML = originalHandle;
|
|
||||||
console.log('empty');
|
|
||||||
} else if (placeHolderStr.substr(0,1) !== '@') {
|
|
||||||
placeHolderStr = placeHolderStr.substr(placeHolderStr.indexOf('@'));
|
|
||||||
placeHolder.innerHTML = placeHolderStr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-footer= render 'auth/shared/links'
|
.form-footer= render 'auth/shared/links'
|
||||||
|
|
|
@ -71,7 +71,7 @@ es-AR:
|
||||||
imports:
|
imports:
|
||||||
data: Archivo CSV exportado desde otro servidor de Instante
|
data: Archivo CSV exportado desde otro servidor de Instante
|
||||||
invite_request:
|
invite_request:
|
||||||
text: Esto nos ayudará a revisar tu solicitud
|
text: Nos ayudará a decidir sobre tu solicitud
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Opcional. Acordate por qué agregaste esta regla.
|
comment: Opcional. Acordate por qué agregaste esta regla.
|
||||||
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y cambian de personas frecuentemente. Por esta razón, no se recomiendan bloqueos indefinidos de direcciones IP.
|
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y cambian de personas frecuentemente. Por esta razón, no se recomiendan bloqueos indefinidos de direcciones IP.
|
||||||
|
@ -175,6 +175,7 @@ es-AR:
|
||||||
sign_in_token_attempt: Código de seguridad
|
sign_in_token_attempt: Código de seguridad
|
||||||
type: Tipo de importación
|
type: Tipo de importación
|
||||||
username: Nombre de usuario
|
username: Nombre de usuario
|
||||||
|
username_placeholder: pabloO_32
|
||||||
username_or_email: Nombre de usuario o correo electrónico
|
username_or_email: Nombre de usuario o correo electrónico
|
||||||
whole_word: Palabra entera
|
whole_word: Palabra entera
|
||||||
email_domain_block:
|
email_domain_block:
|
||||||
|
@ -188,7 +189,7 @@ es-AR:
|
||||||
invite:
|
invite:
|
||||||
comment: Comentar
|
comment: Comentar
|
||||||
invite_request:
|
invite_request:
|
||||||
text: "¿Por qué querés unirte?"
|
text: "¿Cómo conocistes Instante?"
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Comentario
|
comment: Comentario
|
||||||
ip: Dirección IP
|
ip: Dirección IP
|
||||||
|
|
|
@ -70,7 +70,7 @@ es-MX:
|
||||||
imports:
|
imports:
|
||||||
data: Archivo CSV exportado desde otra instancia de Instante
|
data: Archivo CSV exportado desde otra instancia de Instante
|
||||||
invite_request:
|
invite_request:
|
||||||
text: Esto nos ayudará a revisar su aplicación
|
text: Nos ayudará a decidir sobre tu solicitud
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Opcional. Recuerda por qué has añadido esta regla.
|
comment: Opcional. Recuerda por qué has añadido esta regla.
|
||||||
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida.
|
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida.
|
||||||
|
@ -175,6 +175,7 @@ es-MX:
|
||||||
type: Importar tipo
|
type: Importar tipo
|
||||||
username: Nombre de usuario
|
username: Nombre de usuario
|
||||||
username_or_email: Usuario o Email
|
username_or_email: Usuario o Email
|
||||||
|
username_placeholder: juan_N54
|
||||||
whole_word: Toda la palabra
|
whole_word: Toda la palabra
|
||||||
email_domain_block:
|
email_domain_block:
|
||||||
with_dns_records: Incluye los registros MX y las IP del dominio
|
with_dns_records: Incluye los registros MX y las IP del dominio
|
||||||
|
@ -187,7 +188,7 @@ es-MX:
|
||||||
invite:
|
invite:
|
||||||
comment: Comentar
|
comment: Comentar
|
||||||
invite_request:
|
invite_request:
|
||||||
text: "¿Por qué quiere unirse usted?"
|
text: "¿Cómo conociste Instante?"
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Comentario
|
comment: Comentario
|
||||||
ip: IP
|
ip: IP
|
||||||
|
|
|
@ -71,7 +71,7 @@ es:
|
||||||
imports:
|
imports:
|
||||||
data: Archivo CSV exportado desde otra instancia de Instante
|
data: Archivo CSV exportado desde otra instancia de Instante
|
||||||
invite_request:
|
invite_request:
|
||||||
text: Esto nos ayudará a revisar su aplicación
|
text: Nos ayudará a decidir sobre tu solicitud
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Opcional. Recuerda por qué has añadido esta regla.
|
comment: Opcional. Recuerda por qué has añadido esta regla.
|
||||||
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida.
|
expires_in: Las direcciones IP son un recurso finito, a veces se comparten y a menudo cambian de manos. Por esta razón, no se recomiendan bloqueos de IP indefinida.
|
||||||
|
@ -175,6 +175,7 @@ es:
|
||||||
sign_in_token_attempt: Código de seguridad
|
sign_in_token_attempt: Código de seguridad
|
||||||
type: Importar tipo
|
type: Importar tipo
|
||||||
username: Nombre de usuario
|
username: Nombre de usuario
|
||||||
|
username_placeholder: martaA_94
|
||||||
username_or_email: Usuario o Email
|
username_or_email: Usuario o Email
|
||||||
whole_word: Toda la palabra
|
whole_word: Toda la palabra
|
||||||
email_domain_block:
|
email_domain_block:
|
||||||
|
@ -188,7 +189,7 @@ es:
|
||||||
invite:
|
invite:
|
||||||
comment: Comentar
|
comment: Comentar
|
||||||
invite_request:
|
invite_request:
|
||||||
text: "¿Por qué quiere unirse usted?"
|
text: "¿Cómo conociste Instante?"
|
||||||
ip_block:
|
ip_block:
|
||||||
comment: Comentario
|
comment: Comentario
|
||||||
ip: IP
|
ip: IP
|
||||||
|
|
Loading…
Reference in New Issue