diff options
-rw-r--r-- | i18n/en.json | 4 | ||||
-rw-r--r-- | i18n/es.json | 8 | ||||
-rw-r--r-- | i18n/fr.json | 10 | ||||
-rw-r--r-- | i18n/pt.json | 10 | ||||
-rw-r--r-- | webapp/components/textbox.jsx | 2 | ||||
-rw-r--r-- | webapp/components/user_settings/user_settings_general.jsx | 417 | ||||
-rw-r--r-- | webapp/components/user_settings/user_settings_security.jsx | 251 | ||||
-rw-r--r-- | webapp/i18n/en.json | 12 | ||||
-rw-r--r-- | webapp/i18n/es.json | 3 | ||||
-rw-r--r-- | webapp/i18n/fr.json | 3 | ||||
-rw-r--r-- | webapp/i18n/pt.json | 3 | ||||
-rw-r--r-- | webapp/sass/layout/_post.scss | 2 | ||||
-rw-r--r-- | webapp/sass/routes/_signup.scss | 15 |
13 files changed, 417 insertions, 323 deletions
diff --git a/i18n/en.json b/i18n/en.json index 935af52f9..0207d660e 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -697,11 +697,11 @@ }, { "id": "api.post.check_for_out_of_channel_mentions.message.multiple", - "translation": "{{.Usernames}} and {{.LastUsername}} were mentioned, but they do not belong to this channel." + "translation": "{{.Usernames}} and {{.LastUsername}} were mentioned, but they did not receive notifications because they do not belong to this channel." }, { "id": "api.post.check_for_out_of_channel_mentions.message.one", - "translation": "{{.Username}} was mentioned, but does not belong to this channel." + "translation": "{{.Username}} was mentioned, but they did not receive a notification because they do not belong to this channel." }, { "id": "api.post.create_post.bad_filename.error", diff --git a/i18n/es.json b/i18n/es.json index 06a725e18..924ce59d2 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -696,14 +696,6 @@ "translation": "Error obteniendo el token de acceso desde la BD antes de ser eliminado" }, { - "id": "api.post.check_for_out_of_channel_mentions.message.multiple", - "translation": "{{.Usernames}} y {{.LastUsername}} fueron mencionados, pero no pertenecen a este canal." - }, - { - "id": "api.post.check_for_out_of_channel_mentions.message.one", - "translation": "{{.Username}} fue mencionado, pero no pertenece a este canal." - }, - { "id": "api.post.create_post.bad_filename.error", "translation": "Nombre errado de archivo descartado, archivo=%v" }, diff --git a/i18n/fr.json b/i18n/fr.json index 300e1c0de..c52e17af8 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -696,14 +696,6 @@ "translation": "Erreur lors de la récupération du jeton d'accès avant suppression" }, { - "id": "api.post.check_for_out_of_channel_mentions.message.multiple", - "translation": "{{.Usernames}} et {{.LastUsername}} sont mentionnés, mais ne participent pas à ce canal." - }, - { - "id": "api.post.check_for_out_of_channel_mentions.message.one", - "translation": "{{.Username}} a été mentionné, mais ne participe pas à ce canal." - }, - { "id": "api.post.create_post.bad_filename.error", "translation": "Nom de fichier invalide supprimé, filename=%v" }, @@ -3671,4 +3663,4 @@ "id": "web.watcher_fail.error", "translation": "Échec de l'ajout du dossier à l'observateur %v" } -]
\ No newline at end of file +] diff --git a/i18n/pt.json b/i18n/pt.json index de2163e63..11ab26d6c 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -696,14 +696,6 @@ "translation": "Erro ao obter o token de acesso do BD antes da exclusão" }, { - "id": "api.post.check_for_out_of_channel_mentions.message.multiple", - "translation": "{{.Usernames}} e {{.LastUsername}} foram mencionados, mas eles não pertencem a este canal." - }, - { - "id": "api.post.check_for_out_of_channel_mentions.message.one", - "translation": "{{.Username}} foi mencionado, mas ele não pertence a este canal." - }, - { "id": "api.post.create_post.bad_filename.error", "translation": "Nome ruim do arquivo descartado, nome do arquivo=%v" }, @@ -3671,4 +3663,4 @@ "id": "web.watcher_fail.error", "translation": "Falha ao adicionar diretório observador %v" } -]
\ No newline at end of file +] diff --git a/webapp/components/textbox.jsx b/webapp/components/textbox.jsx index 63d5486a4..c77e1f9a3 100644 --- a/webapp/components/textbox.jsx +++ b/webapp/components/textbox.jsx @@ -130,7 +130,7 @@ export default class Textbox extends React.Component { const helpText = ( <div - style={{visibility: hasText ? 'visible' : 'hidden', opacity: hasText ? '0.5' : '0'}} + style={{visibility: hasText ? 'visible' : 'hidden', opacity: hasText ? '0.3' : '0'}} className='help__format-text' > <b> diff --git a/webapp/components/user_settings/user_settings_general.jsx b/webapp/components/user_settings/user_settings_general.jsx index 87cce9dc0..eddbc1efe 100644 --- a/webapp/components/user_settings/user_settings_general.jsx +++ b/webapp/components/user_settings/user_settings_general.jsx @@ -14,7 +14,7 @@ import Constants from 'utils/constants.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import * as Utils from 'utils/utils.jsx'; -import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedDate} from 'react-intl'; +import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage, FormattedDate} from 'react-intl'; const holders = defineMessages({ usernameReserved: { @@ -37,18 +37,6 @@ const holders = defineMessages({ id: 'user.settings.general.checkEmail', defaultMessage: 'Check your email at {email} to verify the address.' }, - newAddress: { - id: 'user.settings.general.newAddress', - defaultMessage: 'New Address: {email}<br />Check your email to verify the above address.' - }, - checkEmailNoAddress: { - id: 'user.settings.general.checkEmailNoAddress', - defaultMessage: 'Check your email to verify your new address' - }, - loginGitlab: { - id: 'user.settings.general.loginGitlab', - defaultMessage: 'Log in done through GitLab' - }, validImage: { id: 'user.settings.general.validImage', defaultMessage: 'Only JPG or PNG images may be used for profile pictures' @@ -73,10 +61,6 @@ const holders = defineMessages({ id: 'user.settings.general.username', defaultMessage: 'Username' }, - email: { - id: 'user.settings.general.email', - defaultMessage: 'Email' - }, profilePicture: { id: 'user.settings.general.profilePicture', defaultMessage: 'Profile Picture' @@ -299,9 +283,224 @@ class UserSettingsGeneralTab extends React.Component { return {username: user.username, firstName: user.first_name, lastName: user.last_name, nickname: user.nickname, email: user.email, confirmEmail: '', picture: null, loadingPicture: false, emailChangeInProgress: false}; } + createEmailSection() { + let emailSection; + + if (this.props.activeSection === 'email') { + const emailEnabled = global.window.mm_config.SendEmailNotifications === 'true'; + const emailVerificationEnabled = global.window.mm_config.RequireEmailVerification === 'true'; + const inputs = []; + + let helpText = ( + <FormattedMessage + id='user.settings.general.emailHelp1' + defaultMessage='Email is used for sign-in, notifications, and password reset. Email requires verification if changed.' + /> + ); + + if (!emailEnabled) { + helpText = ( + <div className='setting-list__hint text-danger'> + <FormattedMessage + id='user.settings.general.emailHelp2' + defaultMessage='Email has been disabled by your system administrator. No notification emails will be sent until it is enabled.' + /> + </div> + ); + } else if (!emailVerificationEnabled) { + helpText = ( + <FormattedMessage + id='user.settings.general.emailHelp3' + defaultMessage='Email is used for sign-in, notifications, and password reset.' + /> + ); + } else if (this.state.emailChangeInProgress) { + const newEmail = UserStore.getCurrentUser().email; + if (newEmail) { + helpText = ( + <FormattedMessage + id='user.settings.general.emailHelp4' + defaultMessage='A verification email was sent to {email}.' + values={{ + email: newEmail + }} + /> + ); + } + } + + let submit = null; + + if (this.props.user.auth_service === '') { + inputs.push( + <div key='emailSetting'> + <div className='form-group'> + <label className='col-sm-5 control-label'> + <FormattedMessage + id='user.settings.general.primaryEmail' + defaultMessage='Primary Email' + /> + </label> + <div className='col-sm-7'> + <input + className='form-control' + type='text' + onChange={this.updateEmail} + value={this.state.email} + /> + </div> + </div> + </div> + ); + + inputs.push( + <div key='confirmEmailSetting'> + <div className='form-group'> + <label className='col-sm-5 control-label'> + <FormattedMessage + id='user.settings.general.confirmEmail' + defaultMessage='Confirm Email' + /> + </label> + <div className='col-sm-7'> + <input + className='form-control' + type='text' + onChange={this.updateConfirmEmail} + value={this.state.confirmEmail} + /> + </div> + </div> + {helpText} + </div> + ); + + submit = this.submitEmail; + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + inputs.push( + <div + key='oauthEmailInfo' + className='form-group' + > + <div className='setting-list__hint'> + <FormattedMessage + id='user.settings.general.emailGitlabCantUpdate' + defaultMessage='Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.' + values={{ + email: this.state.email + }} + /> + </div> + {helpText} + </div> + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + inputs.push( + <div + key='oauthEmailInfo' + className='form-group' + > + <div className='setting-list__hint'> + <FormattedMessage + id='user.settings.general.emailLdapCantUpdate' + defaultMessage='Login occurs through LDAP. Email cannot be updated. Email address used for notifications is {email}.' + values={{ + email: this.state.email + }} + /> + </div> + {helpText} + </div> + ); + } + + emailSection = ( + <SettingItemMax + title={ + <FormattedMessage + id='user.settings.general.email' + defaultMessage='Email' + /> + } + inputs={inputs} + submit={submit} + server_error={this.state.serverError} + client_error={this.state.emailError} + updateSection={(e) => { + this.updateSection(''); + e.preventDefault(); + }} + /> + ); + } else { + let describe = ''; + if (this.props.user.auth_service === '') { + if (this.state.emailChangeInProgress) { + const newEmail = UserStore.getCurrentUser().email; + if (newEmail) { + describe = ( + <FormattedHTMLMessage + id='user.settings.general.newAddress' + defaultMessage='New Address: {email}<br />Check your email to verify the above address.' + values={{ + email: newEmail + }} + /> + ); + } else { + describe = ( + <FormattedMessage + id='user.settings.general.checkEmailNoAddress' + defaultMessage='Check your email to verify your new address' + /> + ); + } + } else { + describe = UserStore.getCurrentUser().email; + } + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + describe = ( + <FormattedMessage + id='user.settings.general.loginGitlab' + defaultMessage='Login done through GitLab ({email})' + values={{ + email: this.state.email + }} + /> + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + describe = ( + <FormattedMessage + id='user.settings.general.loginLdap' + defaultMessage='Login done through LDAP ({email})' + values={{ + email: this.state.email + }} + /> + ); + } + + emailSection = ( + <SettingItemMin + title={ + <FormattedMessage + id='user.settings.general.email' + defaultMessage='Email' + /> + } + describe={describe} + updateSection={() => { + this.updateSection('email'); + }} + /> + ); + } + + return emailSection; + } render() { const user = this.props.user; - const {formatMessage, formatHTMLMessage} = this.props.intl; + const {formatMessage} = this.props.intl; let clientError = null; if (this.state.clientError) { @@ -311,10 +510,6 @@ class UserSettingsGeneralTab extends React.Component { if (this.state.serverError) { serverError = this.state.serverError; } - let emailError = null; - if (this.state.emailError) { - emailError = this.state.emailError; - } let nameSection; const inputs = []; @@ -409,20 +604,27 @@ class UserSettingsGeneralTab extends React.Component { /> ); } else { - let fullName = ''; + let describe = ''; if (user.first_name && user.last_name) { - fullName = user.first_name + ' ' + user.last_name; + describe = user.first_name + ' ' + user.last_name; } else if (user.first_name) { - fullName = user.first_name; + describe = user.first_name; } else if (user.last_name) { - fullName = user.last_name; + describe = user.last_name; + } else { + describe = ( + <FormattedMessage + id='user.settings.general.emptyName' + defaultMessage="Click 'Edit' to add your full name" + /> + ); } nameSection = ( <SettingItemMin title={formatMessage(holders.fullName)} - describe={fullName} + describe={describe} updateSection={() => { this.updateSection('name'); }} @@ -483,10 +685,22 @@ class UserSettingsGeneralTab extends React.Component { /> ); } else { + let describe = ''; + if (user.nickname) { + describe = user.nickname; + } else { + describe = ( + <FormattedMessage + id='user.settings.general.emptyNickname' + defaultMessage="Click 'Edit' to add a nickname" + /> + ); + } + nicknameSection = ( <SettingItemMin title={formatMessage(holders.nickname)} - describe={UserStore.getCurrentUser().nickname} + describe={describe} updateSection={() => { this.updateSection('nickname'); }} @@ -559,152 +773,7 @@ class UserSettingsGeneralTab extends React.Component { ); } - let emailSection; - if (this.props.activeSection === 'email') { - const emailEnabled = global.window.mm_config.SendEmailNotifications === 'true'; - const emailVerificationEnabled = global.window.mm_config.RequireEmailVerification === 'true'; - let helpText = ( - <FormattedMessage - id='user.settings.general.emailHelp1' - defaultMessage='Email is used for sign-in, notifications, and password reset. Email requires verification if changed.' - /> - ); - - if (!emailEnabled) { - helpText = ( - <div className='setting-list__hint text-danger'> - <FormattedMessage - id='user.settings.general.emailHelp2' - defaultMessage='Email has been disabled by your system administrator. No notification emails will be sent until it is enabled.' - /> - </div> - ); - } else if (!emailVerificationEnabled) { - helpText = ( - <FormattedMessage - id='user.settings.general.emailHelp3' - defaultMessage='Email is used for sign-in, notifications, and password reset.' - /> - ); - } else if (this.state.emailChangeInProgress) { - const newEmail = UserStore.getCurrentUser().email; - if (newEmail) { - helpText = ( - <FormattedMessage - id='user.settings.general.emailHelp4' - defaultMessage='A verification email was sent to {email}.' - values={{ - email: newEmail - }} - /> - ); - } - } - - let submit = null; - - if (this.props.user.auth_service === '') { - inputs.push( - <div key='emailSetting'> - <div className='form-group'> - <label className='col-sm-5 control-label'> - <FormattedMessage - id='user.settings.general.primaryEmail' - defaultMessage='Primary Email' - /> - </label> - <div className='col-sm-7'> - <input - className='form-control' - type='text' - onChange={this.updateEmail} - value={this.state.email} - /> - </div> - </div> - </div> - ); - - inputs.push( - <div key='confirmEmailSetting'> - <div className='form-group'> - <label className='col-sm-5 control-label'> - <FormattedMessage - id='user.settings.general.confirmEmail' - defaultMessage='Confirm Email' - /> - </label> - <div className='col-sm-7'> - <input - className='form-control' - type='text' - onChange={this.updateConfirmEmail} - value={this.state.confirmEmail} - /> - </div> - </div> - {helpText} - </div> - ); - - submit = this.submitEmail; - } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { - inputs.push( - <div - key='oauthEmailInfo' - className='form-group' - > - <div className='setting-list__hint'> - <FormattedMessage - id='user.settings.general.emailCantUpdate' - defaultMessage='Log in occurs through GitLab. Email cannot be updated.' - /> - </div> - {helpText} - </div> - ); - } - - emailSection = ( - <SettingItemMax - title='Email' - inputs={inputs} - submit={submit} - server_error={serverError} - client_error={emailError} - updateSection={(e) => { - this.updateSection(''); - e.preventDefault(); - }} - /> - ); - } else { - let describe = ''; - if (this.props.user.auth_service === '') { - if (this.state.emailChangeInProgress) { - const newEmail = UserStore.getCurrentUser().email; - if (newEmail) { - describe = formatHTMLMessage(holders.newAddress, {email: newEmail}); - } else { - describe = formatMessage(holders.checkEmailNoAddress); - } - } else { - describe = UserStore.getCurrentUser().email; - } - } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { - describe = formatMessage(holders.loginGitlab); - } - - emailSection = ( - <SettingItemMin - title={formatMessage(holders.email)} - describe={describe} - updateSection={() => { - this.updateSection('email'); - }} - /> - ); - } + const emailSection = this.createEmailSection(); let pictureSection; if (this.props.activeSection === 'picture') { diff --git a/webapp/components/user_settings/user_settings_security.jsx b/webapp/components/user_settings/user_settings_security.jsx index b34fa8582..f24beb6b3 100644 --- a/webapp/components/user_settings/user_settings_security.jsx +++ b/webapp/components/user_settings/user_settings_security.jsx @@ -30,14 +30,6 @@ const holders = defineMessages({ id: 'user.settings.security.passwordMatchError', defaultMessage: 'The new passwords you entered do not match' }, - password: { - id: 'user.settings.security.password', - defaultMessage: 'Password' - }, - lastUpdated: { - id: 'user.settings.security.lastUpdated', - defaultMessage: 'Last updated {date} at {time}' - }, method: { id: 'user.settings.security.method', defaultMessage: 'Sign-in Method' @@ -131,74 +123,106 @@ class SecurityTab extends React.Component { } createPasswordSection() { let updateSectionStatus; - const {formatMessage} = this.props.intl; - if (this.props.activeSection === 'password' && this.props.user.auth_service === '') { + if (this.props.activeSection === 'password') { const inputs = []; + let submit; - inputs.push( - <div - key='currentPasswordUpdateForm' - className='form-group' - > - <label className='col-sm-5 control-label'> - <FormattedMessage - id='user.settings.security.currentPassword' - defaultMessage='Current Password' - /> - </label> - <div className='col-sm-7'> - <input - className='form-control' - type='password' - onChange={this.updateCurrentPassword} - value={this.state.currentPassword} - /> + if (this.props.user.auth_service === '') { + submit = this.submitPassword; + + inputs.push( + <div + key='currentPasswordUpdateForm' + className='form-group' + > + <label className='col-sm-5 control-label'> + <FormattedMessage + id='user.settings.security.currentPassword' + defaultMessage='Current Password' + /> + </label> + <div className='col-sm-7'> + <input + className='form-control' + type='password' + onChange={this.updateCurrentPassword} + value={this.state.currentPassword} + /> + </div> </div> - </div> - ); - inputs.push( - <div - key='newPasswordUpdateForm' - className='form-group' - > - <label className='col-sm-5 control-label'> - <FormattedMessage - id='user.settings.security.newPassword' - defaultMessage='New Password' - /> - </label> - <div className='col-sm-7'> - <input - className='form-control' - type='password' - onChange={this.updateNewPassword} - value={this.state.newPassword} - /> + ); + inputs.push( + <div + key='newPasswordUpdateForm' + className='form-group' + > + <label className='col-sm-5 control-label'> + <FormattedMessage + id='user.settings.security.newPassword' + defaultMessage='New Password' + /> + </label> + <div className='col-sm-7'> + <input + className='form-control' + type='password' + onChange={this.updateNewPassword} + value={this.state.newPassword} + /> + </div> </div> - </div> - ); - inputs.push( - <div - key='retypeNewPasswordUpdateForm' - className='form-group' - > - <label className='col-sm-5 control-label'> - <FormattedMessage - id='user.settings.security.retypePassword' - defaultMessage='Retype New Password' - /> - </label> - <div className='col-sm-7'> - <input - className='form-control' - type='password' - onChange={this.updateConfirmPassword} - value={this.state.confirmPassword} - /> + ); + inputs.push( + <div + key='retypeNewPasswordUpdateForm' + className='form-group' + > + <label className='col-sm-5 control-label'> + <FormattedMessage + id='user.settings.security.retypePassword' + defaultMessage='Retype New Password' + /> + </label> + <div className='col-sm-7'> + <input + className='form-control' + type='password' + onChange={this.updateConfirmPassword} + value={this.state.confirmPassword} + /> + </div> </div> - </div> - ); + ); + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + inputs.push( + <div + key='oauthEmailInfo' + className='form-group' + > + <div className='setting-list__hint'> + <FormattedMessage + id='user.settings.security.passwordGitlabCantUpdate' + defaultMessage='Login occurs through GitLab. Password cannot be updated.' + /> + </div> + </div> + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + inputs.push( + <div + key='oauthEmailInfo' + className='form-group' + > + <div className='setting-list__hint'> + <FormattedMessage + id='user.settings.security.passwordLdapCantUpdate' + defaultMessage='Login occurs through LDAP. Password cannot be updated.' + /> + </div> + </div> + ); + } updateSectionStatus = function resetSection(e) { this.props.updateSection(''); @@ -209,9 +233,14 @@ class SecurityTab extends React.Component { return ( <SettingItemMax - title={formatMessage(holders.password)} + title={ + <FormattedMessage + id='user.settings.security.password' + defaultMessage='Password' + /> + } inputs={inputs} - submit={this.submitPassword} + submit={submit} server_error={this.state.serverError} client_error={this.state.passwordError} updateSection={updateSectionStatus} @@ -219,34 +248,51 @@ class SecurityTab extends React.Component { ); } - var describe; - var d = new Date(this.props.user.last_password_update); + let describe; - const hours12 = !Utils.isMilitaryTime(); - describe = ( - <FormattedMessage - id='user.settings.security.lastUpdated' - defaultMessage='Last updated {date} at {time}' - values={{ - date: ( - <FormattedDate - value={d} - day='2-digit' - month='short' - year='numeric' - /> - ), - time: ( - <FormattedTime - value={d} - hour12={hours12} - hour='2-digit' - minute='2-digit' - /> - ) - }} - /> - ); + if (this.props.user.auth_service === '') { + const d = new Date(this.props.user.last_password_update); + const hours12 = !Utils.isMilitaryTime(); + + describe = ( + <FormattedMessage + id='user.settings.security.lastUpdated' + defaultMessage='Last updated {date} at {time}' + values={{ + date: ( + <FormattedDate + value={d} + day='2-digit' + month='short' + year='numeric' + /> + ), + time: ( + <FormattedTime + value={d} + hour12={hours12} + hour='2-digit' + minute='2-digit' + /> + ) + }} + /> + ); + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + describe = ( + <FormattedMessage + id='user.settings.security.loginGitlab' + defaultMessage='Login done through Gitlab' + /> + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + describe = ( + <FormattedMessage + id='user.settings.security.loginLdap' + defaultMessage='Login done through LDAP' + /> + ); + } updateSectionStatus = function updateSection() { this.props.updateSection('password'); @@ -254,7 +300,12 @@ class SecurityTab extends React.Component { return ( <SettingItemMin - title={formatMessage(holders.password)} + title={ + <FormattedMessage + id='user.settings.security.password' + defaultMessage='Password' + /> + } describe={describe} updateSection={updateSectionStatus} /> diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index 40e486434..c8e40f0a3 100644 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -1287,18 +1287,22 @@ "user.settings.general.close": "Close", "user.settings.general.confirmEmail": "Confirm Email", "user.settings.general.email": "Email", - "user.settings.general.emailCantUpdate": "Log in occurs through GitLab. Email cannot be updated.", + "user.settings.general.emailGitlabCantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.", + "user.settings.general.emailLdapCantUpdate": "Login occurs through LDAP. Email cannot be updated. Email address used for notifications is {email}.", "user.settings.general.emailHelp1": "Email is used for sign-in, notifications, and password reset. Email requires verification if changed.", "user.settings.general.emailHelp2": "Email has been disabled by your system administrator. No notification emails will be sent until it is enabled.", "user.settings.general.emailHelp3": "Email is used for sign-in, notifications, and password reset.", "user.settings.general.emailHelp4": "A verification email was sent to {email}.", "user.settings.general.emailMatch": "The new emails you entered do not match.", + "user.settings.general.emptyName": "Click 'Edit' to add your full name", + "user.settings.general.emptyNickname": "Click 'Edit' to add a nickname", "user.settings.general.firstName": "First Name", "user.settings.general.fullName": "Full Name", "user.settings.general.imageTooLarge": "Unable to upload profile image. File is too large.", "user.settings.general.imageUpdated": "Image last updated {date}", "user.settings.general.lastName": "Last Name", - "user.settings.general.loginGitlab": "Log in done through GitLab", + "user.settings.general.loginGitlab": "Login done through GitLab ({email})", + "user.settings.general.loginLdap": "Login done through LDAP ({email})", "user.settings.general.newAddress": "New Address: {email}<br />Check your email to verify the above address.", "user.settings.general.nickname": "Nickname", "user.settings.general.nicknameExtra": "Use Nickname for a name you might be called that is different from your first name and username. This is most often used when two or more people have similar sounding names and usernames.", @@ -1363,11 +1367,15 @@ "user.settings.security.emailPwd": "Email and Password", "user.settings.security.gitlab": "GitLab SSO", "user.settings.security.lastUpdated": "Last updated {date} at {time}", + "user.settings.security.loginGitlab": "Login done through Gitlab", + "user.settings.security.loginLdap": "Login done through LDAP", "user.settings.security.logoutActiveSessions": "View and Logout of Active Sessions", "user.settings.security.method": "Sign-in Method", "user.settings.security.newPassword": "New Password", "user.settings.security.oneSignin": "You may only have one sign-in method at a time. Switching sign-in method will send an email notifying you if the change was successful.", "user.settings.security.password": "Password", + "user.settings.security.passwordGitlabCantUpdate": "Login occurs through GitLab. Password cannot be updated.", + "user.settings.security.passwordLdapCantUpdate": "Login occurs through LDAP. Password cannot be updated.", "user.settings.security.passwordLengthError": "New passwords must be at least {chars} characters", "user.settings.security.passwordMatchError": "The new passwords you entered do not match", "user.settings.security.retypePassword": "Retype New Password", diff --git a/webapp/i18n/es.json b/webapp/i18n/es.json index 607e46483..d30792b8c 100644 --- a/webapp/i18n/es.json +++ b/webapp/i18n/es.json @@ -1247,7 +1247,6 @@ "user.settings.general.close": "Cerrar", "user.settings.general.confirmEmail": "Confirmar Correo electrónico", "user.settings.general.email": "Correo electrónico", - "user.settings.general.emailCantUpdate": "El inicio de sesión ocurre a través de GitLab. El correo electrónico no puede ser cambiado.", "user.settings.general.emailHelp1": "El correo electrónico es utilizado para iniciar sesión, recibir notificaciones y para restablecer la contraseña. Si se cambia el correo electrónico deberás verificarlo nuevamente.", "user.settings.general.emailHelp2": "El correo ha sido deshabilitado por el administrador de sistemas. No llegarán correos de notificación hasta que se vuelva a habilitar.", "user.settings.general.emailHelp3": "El correo electrónico es utilizado para iniciar sesión, recibir notificaciones y para restablecer la contraseña.", @@ -1258,7 +1257,7 @@ "user.settings.general.imageTooLarge": "No se puede subir la imagen del perfil. El archivo es muy grande.", "user.settings.general.imageUpdated": "Última actualizacón de la imagen {date}", "user.settings.general.lastName": "Apellido", - "user.settings.general.loginGitlab": "Inicio de sesión realizado a través de GitLab", + "user.settings.general.loginGitlab": "Inicio de sesión realizado a través de GitLab ({email})", "user.settings.general.newAddress": "Nueva dirección: {email}<br />Revisa tu correo electrónico para verificar tu nueva dirección.", "user.settings.general.nickname": "Sobrenombre", "user.settings.general.nicknameExtra": "Utiliza un Sobrenombre por el cual te conocen que sea diferente de tu nombre y del nombre de tu usuario. Esto se utiliza con mayor frecuencia cuando dos o más personas tienen nombres y nombres de usuario que suenan similares.", diff --git a/webapp/i18n/fr.json b/webapp/i18n/fr.json index 9d68c54ec..f05987e15 100644 --- a/webapp/i18n/fr.json +++ b/webapp/i18n/fr.json @@ -1247,7 +1247,6 @@ "user.settings.general.close": "Quitter", "user.settings.general.confirmEmail": "Courriel de confirmation", "user.settings.general.email": "Adresse électronique", - "user.settings.general.emailCantUpdate": "La connexion s'effectue par GitLab. L'adresse électronique ne peut être modifiée.", "user.settings.general.emailHelp1": "L'adresse électronique est utilisé pour la connexion, les notifications et la réinitialisation du mot de passe. Votre adresse électronique doit être validé si vous le changez.", "user.settings.general.emailHelp2": "Les courriels sont désactivés par votre administrateur système. Aucune notification ne peut être envoyée.", "user.settings.general.emailHelp3": "L'adresse électronique est utilisée pour la connexion, les notifications et la réinitialisation du mot de passe.", @@ -1258,7 +1257,7 @@ "user.settings.general.imageTooLarge": "Impossible de mettre à jour votre photo de profil. Le fichier est trop grand.", "user.settings.general.imageUpdated": "Image mise à jour le {date}", "user.settings.general.lastName": "Nom", - "user.settings.general.loginGitlab": "Connexion avec GitLab", + "user.settings.general.loginGitlab": "Connexion avec GitLab ({email})", "user.settings.general.newAddress": "Nouvelle adresse : {email}<br />Vérifiez votre messagerie pour valider votre adresse électronique.", "user.settings.general.nickname": "Pseudo", "user.settings.general.nicknameExtra": "Vous pouvez utiliser un pseudo à la place de vos prénom, nom et nom d'utilisateur. Ceci est pratique lorsque deux personnes de votre équipe ont des noms proches.", diff --git a/webapp/i18n/pt.json b/webapp/i18n/pt.json index c9ab089fb..466d4b6ea 100644 --- a/webapp/i18n/pt.json +++ b/webapp/i18n/pt.json @@ -1246,7 +1246,6 @@ "user.settings.general.close": "Fechar", "user.settings.general.confirmEmail": "Confirmar o email", "user.settings.general.email": "E-mail", - "user.settings.general.emailCantUpdate": "Login ocorreu através do GitLab. Email não pode ser atualizado.", "user.settings.general.emailHelp1": "Email é usado para login, notificações, e redefinição de senha. Requer verificação de email se alterado.", "user.settings.general.emailHelp2": "Email foi desativado pelo seu administrador de sistema. Nenhuma notificação por email será enviada até isto ser habilitado.", "user.settings.general.emailHelp3": "Email é usado para login, notificações e redefinição de senha.", @@ -1257,7 +1256,7 @@ "user.settings.general.imageTooLarge": "Não é possível fazer upload da imagem de perfil. O arquivo é muito grande.", "user.settings.general.imageUpdated": "Imagem última atualização {date}", "user.settings.general.lastName": "Último Nome", - "user.settings.general.loginGitlab": "Login feito através do GitLab", + "user.settings.general.loginGitlab": "Login feito através do GitLab ({email})", "user.settings.general.newAddress": "Novo Endereço: {email}<br />Verifique seu email para checar o endereço acima.", "user.settings.general.nickname": "Apelido", "user.settings.general.nicknameExtra": "Use Apelidos para um nome você pode ser chamado assim, isso é diferente de seu primeiro nome e nome de usuário. Este é mais frequentemente usado quando duas ou mais pessoas têm nomes semelhantes de usuário.", diff --git a/webapp/sass/layout/_post.scss b/webapp/sass/layout/_post.scss index 05ef09643..f29448bde 100644 --- a/webapp/sass/layout/_post.scss +++ b/webapp/sass/layout/_post.scss @@ -77,7 +77,7 @@ body.ios { .help__format-text { @include opacity(0); - @include single-transition(all .2s ease); + @include single-transition(all, .5s, ease, .5s); display: inline-block; font-size: .85em; margin-right: 10px; diff --git a/webapp/sass/routes/_signup.scss b/webapp/sass/routes/_signup.scss index 062e4c9a5..6d6092170 100644 --- a/webapp/sass/routes/_signup.scss +++ b/webapp/sass/routes/_signup.scss @@ -98,7 +98,6 @@ .inner__content { margin: 30px 0 20px; - padding: 0 1rem; } .block--gray { @@ -132,14 +131,12 @@ font-size: 2.2em; font-weight: 600; margin: .5em 0 0; - padding-left: 1rem; } .signup-team__subdomain { font-size: 1.5em; font-weight: 300; margin: .2em 0 1.2em; - padding-left: 1rem; text-transform: uppercase; } @@ -151,6 +148,7 @@ background: #dddddd; height: 1px; margin: 2em 0; + margin: 2.5em 0 2.5em -1rem; text-align: left; span { @@ -171,10 +169,6 @@ padding-left: 18px; } - .signup__email-container { - margin-left: 1rem; - } - .btn { font-size: 1em; font-weight: 600; @@ -200,7 +194,7 @@ display: block; height: 40px; line-height: 34px; - margin: 1em 0 1em 10px; + margin: 1em 0; min-width: 200px; padding: 0 1em; width: 200px; @@ -262,7 +256,6 @@ } &.btn-full { - margin-left: 0; padding-left: 35px; text-align: left; width: 100%; @@ -374,11 +367,11 @@ } .margin--extra { - margin-top: 3em; + margin-top: 2.5em; } .margin--extra-2x { - margin-top: 6em; + margin-top: 5em; } } |