summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2016-05-26 09:47:41 -0400
committerJoram Wilander <jwawilander@gmail.com>2016-05-26 09:47:41 -0400
commit8a7e1b6dff9e0a7a01ed06870c5a8520500d20af (patch)
tree36af6ce50fdb703436621dfd6764f7f8a39eeba6
parent6fecfcc7ca9f7cf29b4cf87ebeb63b09df70a8c7 (diff)
downloadchat-8a7e1b6dff9e0a7a01ed06870c5a8520500d20af.tar.gz
chat-8a7e1b6dff9e0a7a01ed06870c5a8520500d20af.tar.bz2
chat-8a7e1b6dff9e0a7a01ed06870c5a8520500d20af.zip
PLT-2886 Added name properties to all radio buttons (#3112)
* Removed unused, deprecated system console page * Added name properties to all radio buttons * Removed unused english strings from admin console
-rw-r--r--webapp/components/admin_console/boolean_setting.jsx6
-rw-r--r--webapp/components/admin_console/generated_setting.jsx2
-rw-r--r--webapp/components/admin_console/team_settings.jsx735
-rw-r--r--webapp/components/user_settings/user_settings_advanced.jsx2
-rw-r--r--webapp/components/user_settings/user_settings_display.jsx9
-rw-r--r--webapp/components/user_settings/user_settings_notifications.jsx10
-rw-r--r--webapp/components/user_settings/user_settings_theme.jsx2
-rw-r--r--webapp/i18n/en.json57
8 files changed, 31 insertions, 792 deletions
diff --git a/webapp/components/admin_console/boolean_setting.jsx b/webapp/components/admin_console/boolean_setting.jsx
index a0bd2aa36..bdc1d79bf 100644
--- a/webapp/components/admin_console/boolean_setting.jsx
+++ b/webapp/components/admin_console/boolean_setting.jsx
@@ -42,6 +42,7 @@ export default class BooleanSetting extends React.Component {
<input
type='radio'
value='true'
+ name={this.props.id}
checked={this.props.value}
onChange={this.handleChange}
disabled={this.props.disabled}
@@ -52,6 +53,7 @@ export default class BooleanSetting extends React.Component {
<input
type='radio'
value='false'
+ name={this.props.id}
checked={!this.props.value}
onChange={this.handleChange}
disabled={this.props.disabled}
@@ -65,13 +67,13 @@ export default class BooleanSetting extends React.Component {
BooleanSetting.defaultProps = {
trueText: (
<FormattedMessage
- id='admin.ldap.true'
+ id='admin.true'
defaultMessage='true'
/>
),
falseText: (
<FormattedMessage
- id='admin.ldap.false'
+ id='admin.false'
defaultMessage='false'
/>
),
diff --git a/webapp/components/admin_console/generated_setting.jsx b/webapp/components/admin_console/generated_setting.jsx
index a83407cb6..29bb96985 100644
--- a/webapp/components/admin_console/generated_setting.jsx
+++ b/webapp/components/admin_console/generated_setting.jsx
@@ -27,7 +27,7 @@ export default class GeneratedSetting extends React.Component {
disabled: false,
regenerateText: (
<FormattedMessage
- id='admin.email.regenerate'
+ id='admin.regenerate'
defaultMessage='Re-Generate'
/>
)
diff --git a/webapp/components/admin_console/team_settings.jsx b/webapp/components/admin_console/team_settings.jsx
deleted file mode 100644
index e3d7914a6..000000000
--- a/webapp/components/admin_console/team_settings.jsx
+++ /dev/null
@@ -1,735 +0,0 @@
-// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-import $ from 'jquery';
-import Client from 'utils/web_client.jsx';
-import * as AsyncClient from 'utils/async_client.jsx';
-import * as Utils from 'utils/utils.jsx';
-
-import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl';
-
-const holders = defineMessages({
- siteNameExample: {
- id: 'admin.team.siteNameExample',
- defaultMessage: 'Ex "Mattermost"'
- },
- maxUsersExample: {
- id: 'admin.team.maxUsersExample',
- defaultMessage: 'Ex "25"'
- },
- restrictExample: {
- id: 'admin.team.restrictExample',
- defaultMessage: 'Ex "corp.mattermost.com, mattermost.org"'
- },
- saving: {
- id: 'admin.team.saving',
- defaultMessage: 'Saving Config...'
- },
- restrictDirectMessageAny: {
- id: 'admin.team.restrict_direct_message_any',
- defaultMessage: 'Any user on the Mattermost server'
- },
- restrictDirectMessageTeam: {
- id: 'admin.team.restrict_direct_message_team',
- defaultMessage: 'Any member of the team'
- }
-});
-
-import React from 'react';
-
-const ENABLE_BRAND_ACTION = 'enable_brand_action';
-const DISABLE_BRAND_ACTION = 'disable_brand_action';
-
-class TeamSettings extends React.Component {
- constructor(props) {
- super(props);
-
- this.handleChange = this.handleChange.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- this.handleImageChange = this.handleImageChange.bind(this);
- this.handleImageSubmit = this.handleImageSubmit.bind(this);
-
- this.uploading = false;
- this.timestamp = 0;
-
- this.state = {
- saveNeeded: false,
- brandImageExists: false,
- enableCustomBrand: this.props.config.TeamSettings.EnableCustomBrand,
- restrictDirectMessage: this.props.config.TeamSettings.RestrictDirectMessage,
- serverError: null
- };
- }
-
- componentWillMount() {
- if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.CustomBrand === 'true') {
- $.get(Client.getAdminRoute() + '/get_brand_image').done(() => this.setState({brandImageExists: true}));
- }
- }
-
- componentDidUpdate() {
- if (this.refs.image) {
- const reader = new FileReader();
-
- const img = this.refs.image;
- reader.onload = (e) => {
- $(img).attr('src', e.target.result);
- };
-
- reader.readAsDataURL(this.state.brandImage);
- }
- }
-
- handleChange(action) {
- var s = {saveNeeded: true};
-
- if (action === ENABLE_BRAND_ACTION) {
- s.enableCustomBrand = true;
- }
-
- if (action === DISABLE_BRAND_ACTION) {
- s.enableCustomBrand = false;
- }
-
- this.setState(s);
- }
-
- handleImageChange() {
- const element = $(this.refs.fileInput);
- if (element.prop('files').length > 0) {
- this.setState({fileSelected: true, brandImage: element.prop('files')[0]});
- }
- $('#upload-button').button('reset');
- }
-
- handleSubmit(e) {
- e.preventDefault();
- $('#save-button').button('loading');
-
- var config = this.props.config;
- config.TeamSettings.SiteName = this.refs.SiteName.value.trim();
- config.TeamSettings.RestrictCreationToDomains = this.refs.RestrictCreationToDomains.value.trim();
- config.TeamSettings.EnableTeamCreation = this.refs.EnableTeamCreation.checked;
- config.TeamSettings.EnableUserCreation = this.refs.EnableUserCreation.checked;
- config.TeamSettings.EnableOpenServer = this.refs.EnableOpenServer.checked;
- config.TeamSettings.RestrictTeamNames = this.refs.RestrictTeamNames.checked;
- config.TeamSettings.RestrictDirectMessage = this.refs.RestrictDirectMessage.value.trim();
-
- if (this.refs.EnableCustomBrand) {
- config.TeamSettings.EnableCustomBrand = this.refs.EnableCustomBrand.checked;
- }
-
- if (this.refs.CustomBrandText) {
- config.TeamSettings.CustomBrandText = this.refs.CustomBrandText.value;
- }
-
- var MaxUsersPerTeam = 50;
- if (!isNaN(parseInt(this.refs.MaxUsersPerTeam.value, 10))) {
- MaxUsersPerTeam = parseInt(this.refs.MaxUsersPerTeam.value, 10);
- }
- config.TeamSettings.MaxUsersPerTeam = MaxUsersPerTeam;
- this.refs.MaxUsersPerTeam.value = MaxUsersPerTeam;
-
- Client.saveConfig(
- config,
- () => {
- AsyncClient.getConfig();
- this.setState({
- serverError: null,
- saveNeeded: false
- });
- $('#save-button').button('reset');
- },
- (err) => {
- this.setState({
- serverError: err.message,
- saveNeeded: true
- });
- $('#save-button').button('reset');
- }
- );
- }
-
- handleImageSubmit(e) {
- e.preventDefault();
-
- if (!this.state.brandImage) {
- return;
- }
-
- if (this.uploading) {
- return;
- }
-
- $('#upload-button').button('loading');
- this.uploading = true;
-
- Client.uploadBrandImage(this.state.brandImage,
- () => {
- $('#upload-button').button('complete');
- this.timestamp = Utils.getTimestamp();
- this.setState({brandImageExists: true, brandImage: null});
- this.uploading = false;
- },
- (err) => {
- $('#upload-button').button('reset');
- this.uploading = false;
- this.setState({serverImageError: err.message});
- }
- );
- }
-
- createBrandSettings() {
- var btnClass = 'btn';
- if (this.state.fileSelected) {
- btnClass = 'btn btn-primary';
- }
-
- var serverImageError = '';
- if (this.state.serverImageError) {
- serverImageError = <div className='form-group has-error'><label className='control-label'>{this.state.serverImageError}</label></div>;
- }
-
- let uploadImage;
- let uploadText;
- if (this.state.enableCustomBrand) {
- let img;
- if (this.state.brandImage) {
- img = (
- <img
- ref='image'
- className='brand-img'
- src=''
- />
- );
- } else if (this.state.brandImageExists) {
- img = (
- <img
- className='brand-img'
- src={Client.getAdminRoute() + '/get_brand_image?t=' + this.timestamp}
- />
- );
- } else {
- img = (
- <p>
- <FormattedMessage
- id='admin.team.noBrandImage'
- defaultMessage='No brand image uploaded'
- />
- </p>
- );
- }
-
- uploadImage = (
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='CustomBrandImage'
- >
- <FormattedMessage
- id='admin.team.brandImageTitle'
- defaultMessage='Custom Brand Image:'
- />
- </label>
- <div className='col-sm-8'>
- {img}
- </div>
- <div className='col-sm-4'/>
- <div className='col-sm-8'>
- <div className='file__upload'>
- <button className='btn btn-default'>
- <FormattedMessage
- id='admin.team.chooseImage'
- defaultMessage='Choose New Image'
- />
- </button>
- <input
- ref='fileInput'
- type='file'
- accept='.jpg,.png,.bmp'
- onChange={this.handleImageChange}
- />
- </div>
- <button
- className={btnClass}
- disabled={!this.state.fileSelected}
- onClick={this.handleImageSubmit}
- id='upload-button'
- data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> ' + Utils.localizeMessage('admin.team.uploading', 'Uploading..')}
- data-complete-text={'<span class=\'glyphicon glyphicon-ok\'></span> ' + Utils.localizeMessage('admin.team.uploaded', 'Uploaded!')}
- >
- <FormattedMessage
- id='admin.team.upload'
- defaultMessage='Upload'
- />
- </button>
- <br/>
- {serverImageError}
- <p className='help-text no-margin'>
- <FormattedHTMLMessage
- id='admin.team.uploadDesc'
- defaultMessage='Customize your user experience by adding a custom image to your login screen. See examples at <a href="http://docs.mattermost.com/administration/config-settings.html#custom-branding" target="_blank">docs.mattermost.com/administration/config-settings.html#custom-branding</a>.'
- />
- </p>
- </div>
- </div>
- );
-
- uploadText = (
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='CustomBrandText'
- >
- <FormattedMessage
- id='admin.team.brandTextTitle'
- defaultMessage='Custom Brand Text:'
- />
- </label>
- <div className='col-sm-8'>
- <textarea
- type='text'
- rows='5'
- maxLength='1024'
- className='form-control admin-textarea'
- id='CustomBrandText'
- ref='CustomBrandText'
- onChange={this.handleChange}
- >
- {this.props.config.TeamSettings.CustomBrandText}
- </textarea>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.brandTextDescription'
- defaultMessage='The custom branding Markdown-formatted text you would like to appear below your custom brand image on your login sreen.'
- />
- </p>
- </div>
- </div>
- );
- }
-
- return (
- <div>
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='EnableCustomBrand'
- >
- <FormattedMessage
- id='admin.team.brandTitle'
- defaultMessage='Enable Custom Branding: '
- />
- </label>
- <div className='col-sm-8'>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableCustomBrand'
- value='true'
- ref='EnableCustomBrand'
- defaultChecked={this.props.config.TeamSettings.EnableCustomBrand}
- onChange={this.handleChange.bind(this, ENABLE_BRAND_ACTION)}
- />
- <FormattedMessage
- id='admin.team.true'
- defaultMessage='true'
- />
- </label>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableCustomBrand'
- value='false'
- defaultChecked={!this.props.config.TeamSettings.EnableCustomBrand}
- onChange={this.handleChange.bind(this, DISABLE_BRAND_ACTION)}
- />
- <FormattedMessage
- id='admin.team.false'
- defaultMessage='false'
- />
- </label>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.brandDesc'
- defaultMessage='Enable custom branding to show an image of your choice, uploaded below, and some help text, written below, on the login page.'
- />
- </p>
- </div>
- </div>
-
- {uploadImage}
- {uploadText}
- </div>
- );
- }
-
- render() {
- const {formatMessage} = this.props.intl;
- var serverError = '';
- if (this.state.serverError) {
- serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
- }
-
- var saveClass = 'btn';
- if (this.state.saveNeeded) {
- saveClass = 'btn btn-primary';
- }
-
- let brand;
- if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.CustomBrand === 'true') {
- brand = this.createBrandSettings();
- }
-
- return (
- <div className='wrapper--fixed'>
-
- <h3>
- <FormattedMessage
- id='admin.team.title'
- defaultMessage='Team Settings'
- />
- </h3>
- <form
- className='form-horizontal'
- role='form'
- >
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='SiteName'
- >
- <FormattedMessage
- id='admin.team.siteNameTitle'
- defaultMessage='Site Name:'
- />
- </label>
- <div className='col-sm-8'>
- <input
- type='text'
- className='form-control'
- id='SiteName'
- ref='SiteName'
- placeholder={formatMessage(holders.siteNameExample)}
- defaultValue={this.props.config.TeamSettings.SiteName}
- onChange={this.handleChange}
- />
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.siteNameDescription'
- defaultMessage='Name of service shown in login screens and UI.'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='MaxUsersPerTeam'
- >
- <FormattedMessage
- id='admin.team.maxUsersTitle'
- defaultMessage='Max Users Per Team:'
- />
- </label>
- <div className='col-sm-8'>
- <input
- type='text'
- className='form-control'
- id='MaxUsersPerTeam'
- ref='MaxUsersPerTeam'
- placeholder={formatMessage(holders.maxUsersExample)}
- defaultValue={this.props.config.TeamSettings.MaxUsersPerTeam}
- onChange={this.handleChange}
- />
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.maxUsersDescription'
- defaultMessage='Maximum total number of users per team, including both active and inactive users.'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='EnableTeamCreation'
- >
- <FormattedMessage
- id='admin.team.teamCreationTitle'
- defaultMessage='Enable Team Creation: '
- />
- </label>
- <div className='col-sm-8'>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableTeamCreation'
- value='true'
- ref='EnableTeamCreation'
- defaultChecked={this.props.config.TeamSettings.EnableTeamCreation}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.true'
- defaultMessage='true'
- />
- </label>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableTeamCreation'
- value='false'
- defaultChecked={!this.props.config.TeamSettings.EnableTeamCreation}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.false'
- defaultMessage='false'
- />
- </label>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.teamCreationDescription'
- defaultMessage='When false, the ability to create teams is disabled. The create team button displays error when pressed.'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='EnableUserCreation'
- >
- <FormattedMessage
- id='admin.team.userCreationTitle'
- defaultMessage='Enable User Creation: '
- />
- </label>
- <div className='col-sm-8'>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableUserCreation'
- value='true'
- ref='EnableUserCreation'
- defaultChecked={this.props.config.TeamSettings.EnableUserCreation}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.true'
- defaultMessage='true'
- />
- </label>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableUserCreation'
- value='false'
- defaultChecked={!this.props.config.TeamSettings.EnableUserCreation}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.false'
- defaultMessage='false'
- />
- </label>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.userCreationDescription'
- defaultMessage='When false, the ability to create accounts is disabled. The create account button displays error when pressed.'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='EnableOpenServer'
- >
- <FormattedMessage
- id='admin.team.openServerTitle'
- defaultMessage='Enable Open Server: '
- />
- </label>
- <div className='col-sm-8'>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableOpenServer'
- value='true'
- ref='EnableOpenServer'
- defaultChecked={this.props.config.TeamSettings.EnableOpenServer}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.true'
- defaultMessage='true'
- />
- </label>
- <label className='radio-inline'>
- <input
- type='radio'
- name='EnableOpenServer'
- value='false'
- defaultChecked={!this.props.config.TeamSettings.EnableOpenServer}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.false'
- defaultMessage='false'
- />
- </label>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.openServerDescription'
- defaultMessage='When true, anyone can signup for a user account on this server without the need to be invited.'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='RestrictCreationToDomains'
- >
- <FormattedMessage
- id='admin.team.restrictTitle'
- defaultMessage='Restrict Creation To Domains:'
- />
- </label>
- <div className='col-sm-8'>
- <input
- type='text'
- className='form-control'
- id='RestrictCreationToDomains'
- ref='RestrictCreationToDomains'
- placeholder={formatMessage(holders.restrictExample)}
- defaultValue={this.props.config.TeamSettings.RestrictCreationToDomains}
- onChange={this.handleChange}
- />
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.restrictDescription'
- defaultMessage='Teams and user accounts can only be created from a specific domain (e.g. "mattermost.org") or list of comma-separated domains (e.g. "corp.mattermost.com, mattermost.org").'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='RestrictTeamNames'
- >
- <FormattedMessage
- id='admin.team.restrictNameTitle'
- defaultMessage='Restrict Team Names: '
- />
- </label>
- <div className='col-sm-8'>
- <label className='radio-inline'>
- <input
- type='radio'
- name='RestrictTeamNames'
- value='true'
- ref='RestrictTeamNames'
- defaultChecked={this.props.config.TeamSettings.RestrictTeamNames}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.true'
- defaultMessage='true'
- />
- </label>
- <label className='radio-inline'>
- <input
- type='radio'
- name='RestrictTeamNames'
- value='false'
- defaultChecked={!this.props.config.TeamSettings.RestrictTeamNames}
- onChange={this.handleChange}
- />
- <FormattedMessage
- id='admin.team.false'
- defaultMessage='false'
- />
- </label>
- <p className='help-text'>
- <FormattedMessage
- id='admin.team.restrictNameDesc'
- defaultMessage='When true, You cannot create a team name with reserved words like www, admin, support, test, channel, etc'
- />
- </p>
- </div>
- </div>
-
- <div className='form-group'>
- <label
- className='control-label col-sm-4'
- htmlFor='restrictDirectMessage'
- >
- <FormattedMessage
- id='admin.team.restrictDirectMessage'
- defaultMessage='Enable users to open Direct Message channels with:'
- />
- </label>
- <div className='col-sm-8'>
- <select
- className='form-control'
- id='restrictDirectMessage'
- ref='RestrictDirectMessage'
- defaultValue={this.props.config.TeamSettings.RestrictDirectMessage}
- onChange={this.handleChange.bind(this, 'restrictDirectMessage')}
- >
- <option value='any'>{formatMessage(holders.restrictDirectMessageAny)}</option>
- <option value='team'>{formatMessage(holders.restrictDirectMessageTeam)}</option>
- </select>
- <p className='help-text'>
- <FormattedHTMLMessage
- id='admin.team.restrictDirectMessageDesc'
- defaultMessage='"Any user on the Mattermost server" enables users to open a Direct Message channel with any user on the server, even if they are not on any teams together. "Any member of the team" limits the ability to open Direct Message channels to only users who are in the same team.'
- />
- </p>
- </div>
- </div>
-
- {brand}
-
- <div className='form-group'>
- <div className='col-sm-12'>
- {serverError}
- <button
- disabled={!this.state.saveNeeded}
- type='submit'
- className={saveClass}
- onClick={this.handleSubmit}
- id='save-button'
- data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> ' + formatMessage(holders.saving)}
- >
- <FormattedMessage
- id='admin.team.save'
- defaultMessage='Save'
- />
- </button>
- </div>
- </div>
-
- </form>
- </div>
- );
- }
-}
-
-TeamSettings.propTypes = {
- intl: intlShape.isRequired,
- config: React.PropTypes.object
-};
-
-export default injectIntl(TeamSettings);
diff --git a/webapp/components/user_settings/user_settings_advanced.jsx b/webapp/components/user_settings/user_settings_advanced.jsx
index 61e0e1dad..dc5bd1c0e 100644
--- a/webapp/components/user_settings/user_settings_advanced.jsx
+++ b/webapp/components/user_settings/user_settings_advanced.jsx
@@ -173,6 +173,7 @@ class AdvancedSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='sendOnCtrlEnter'
checked={ctrlSendActive[0]}
onChange={this.updateSetting.bind(this, 'send_on_ctrl_enter', 'true')}
/>
@@ -187,6 +188,7 @@ class AdvancedSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='sendOnCtrlEnter'
checked={ctrlSendActive[1]}
onChange={this.updateSetting.bind(this, 'send_on_ctrl_enter', 'false')}
/>
diff --git a/webapp/components/user_settings/user_settings_display.jsx b/webapp/components/user_settings/user_settings_display.jsx
index fa0118d1e..16175d4de 100644
--- a/webapp/components/user_settings/user_settings_display.jsx
+++ b/webapp/components/user_settings/user_settings_display.jsx
@@ -146,6 +146,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='clockFormat'
checked={clockFormat[0]}
onChange={this.handleClockRadio.bind(this, 'false')}
/>
@@ -160,6 +161,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='clockFormat'
checked={clockFormat[1]}
onChange={this.handleClockRadio.bind(this, 'true')}
/>
@@ -264,6 +266,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='nameFormat'
checked={nameFormat[1]}
onChange={this.handleNameRadio.bind(this, 'username')}
/>
@@ -275,6 +278,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='nameFormat'
checked={nameFormat[0]}
onChange={this.handleNameRadio.bind(this, 'nickname_full_name')}
/>
@@ -286,6 +290,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='nameFormat'
checked={nameFormat[2]}
onChange={this.handleNameRadio.bind(this, 'full_name')}
/>
@@ -375,6 +380,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='messageDisplay'
checked={messageDisplay[0]}
onChange={this.handlemessageDisplayRadio.bind(this, Preferences.MESSAGE_DISPLAY_CLEAN)}
/>
@@ -389,6 +395,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='messageDisplay'
checked={messageDisplay[1]}
onChange={this.handlemessageDisplayRadio.bind(this, Preferences.MESSAGE_DISPLAY_COMPACT)}
/>
@@ -474,6 +481,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='channelDisplayMode'
checked={channelDisplayMode[0]}
onChange={this.handleChannelDisplayModeRadio.bind(this, Preferences.CHANNEL_DISPLAY_MODE_CENTERED)}
/>
@@ -488,6 +496,7 @@ export default class UserSettingsDisplay extends React.Component {
<label>
<input
type='radio'
+ name='channelDisplayMode'
checked={channelDisplayMode[1]}
onChange={this.handleChannelDisplayModeRadio.bind(this, Preferences.CHANNEL_DISPLAY_MODE_FULL_SCREEN)}
/>
diff --git a/webapp/components/user_settings/user_settings_notifications.jsx b/webapp/components/user_settings/user_settings_notifications.jsx
index 9d60f27fa..410ce1a4e 100644
--- a/webapp/components/user_settings/user_settings_notifications.jsx
+++ b/webapp/components/user_settings/user_settings_notifications.jsx
@@ -270,6 +270,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='pushNotificationLevel'
checked={notifyActive[0]}
onChange={this.handlePushRadio.bind(this, 'all')}
/>
@@ -284,6 +285,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='pushNotificationLevel'
checked={notifyActive[1]}
onChange={this.handlePushRadio.bind(this, 'mention')}
/>
@@ -298,6 +300,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='pushNotificationLevel'
checked={notifyActive[2]}
onChange={this.handlePushRadio.bind(this, 'none')}
/>
@@ -393,6 +396,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='desktopNotificationLevel'
checked={notifyActive[0]}
onChange={this.handleNotifyRadio.bind(this, 'all')}
/>
@@ -407,6 +411,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='desktopNotificationLevel'
checked={notifyActive[1]}
onChange={this.handleNotifyRadio.bind(this, 'mention')}
/>
@@ -421,6 +426,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='desktopNotificationLevel'
checked={notifyActive[2]}
onChange={this.handleNotifyRadio.bind(this, 'none')}
/>
@@ -508,6 +514,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='notificationSounds'
checked={soundActive[0]}
onChange={this.handleSoundRadio.bind(this, 'true')}
/>
@@ -522,6 +529,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='notificationSounds'
checked={soundActive[1]}
onChange={this.handleSoundRadio.bind(this, 'false')}
/>
@@ -611,6 +619,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='emailNotifications'
checked={emailActive[0]}
onChange={this.handleEmailRadio.bind(this, 'true')}
/>
@@ -625,6 +634,7 @@ class NotificationsTab extends React.Component {
<label>
<input
type='radio'
+ name='emailNotifications'
checked={emailActive[1]}
onChange={this.handleEmailRadio.bind(this, 'false')}
/>
diff --git a/webapp/components/user_settings/user_settings_theme.jsx b/webapp/components/user_settings/user_settings_theme.jsx
index 389fde004..811f4d8e4 100644
--- a/webapp/components/user_settings/user_settings_theme.jsx
+++ b/webapp/components/user_settings/user_settings_theme.jsx
@@ -214,6 +214,7 @@ export default class ThemeSetting extends React.Component {
<label>
<input
type='radio'
+ name='theme'
checked={!displayCustom}
onChange={this.updateType.bind(this, 'premade')}
/>
@@ -236,6 +237,7 @@ export default class ThemeSetting extends React.Component {
<label>
<input
type='radio'
+ name='theme'
checked={displayCustom}
onChange={this.updateType.bind(this, 'custom')}
/>
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
index 795814e31..ecabc3d5a 100644
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -132,9 +132,7 @@
"admin.email.allowUsernameSignInTitle": "Allow Sign In With Username: ",
"admin.email.easHelp": "Learn more about compiling and deploying your own mobile apps from an <a href=\"http://docs.mattermost.com/deployment/push.html#enterprise-app-store-eas\" target=\"_blank\">Enterprise App Store</a>.",
"admin.email.emailFail": "Connection unsuccessful: {error}",
- "admin.email.emailSettings": "Email Settings",
"admin.email.emailSuccess": "No errors were reported while sending an email. Please check your inbox to make sure.",
- "admin.email.false": "false",
"admin.email.fullPushNotification": "Send full message snippet",
"admin.email.genericPushNotification": "Send generic description with user and channel names",
"admin.email.inviteSaltDescription": "32-character salt added to signing of email invites. Randomly generated on install. Click \"Re-Generate\" to create new salt.",
@@ -164,11 +162,8 @@
"admin.email.pushServerEx": "E.g.: \"http://push-test.mattermost.com\"",
"admin.email.pushServerTitle": "Push Notification Server:",
"admin.email.pushTitle": "Send Push Notifications: ",
- "admin.email.regenerate": "Re-Generate",
"admin.email.requireVerificationDescription": "Typically set to true in production. When true, Mattermost requires email verification after account creation prior to allowing login. Developers may set this field to false so skip sending verification emails for faster development.",
"admin.email.requireVerificationTitle": "Require Email Verification: ",
- "admin.email.save": "Save",
- "admin.email.saving": "Saving Config...",
"admin.email.selfPush": "Manually enter Push Notification Service location",
"admin.email.smtpPasswordDescription": " Obtain this credential from administrator setting up your email server.",
"admin.email.smtpPasswordExample": "Ex: \"yourpassword\", \"jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY\"",
@@ -183,7 +178,7 @@
"admin.email.smtpUsernameExample": "Ex: \"admin@yourcompany.com\", \"AKIADTOVBGERKLCBV\"",
"admin.email.smtpUsernameTitle": "SMTP Username:",
"admin.email.testing": "Testing...",
- "admin.email.true": "true",
+ "admin.false": "false",
"admin.gitab.clientSecretDescription": "Obtain this value via the instructions above for logging into GitLab.",
"admin.gitlab.EnableHtmlDesc": "<ol><li>Log in to your GitLab account and go to Profile Settings -> Applications.</li><li>Enter Redirect URIs \"<your-mattermost-url>/login/gitlab/complete\" (example: http://localhost:8065/login/gitlab/complete) and \"<your-mattermost-url>/signup/gitlab/complete\". </li><li>Then use \"Secret\" and \"Id\" fields from GitLab to complete the options below.</li><li>Complete the Endpoint URLs below. </li></ol>",
"admin.gitlab.authDescription": "Enter https://<your-gitlab-url>/oauth/authorize (example https://example.com:3000/oauth/authorize). Make sure you use HTTP or HTTPS in your URL depending on your server configuration.",
@@ -196,14 +191,10 @@
"admin.gitlab.clientSecretTitle": "Secret:",
"admin.gitlab.enableDescription": "When true, Mattermost allows team creation and account signup using GitLab OAuth.",
"admin.gitlab.enableTitle": "Enable Sign Up With GitLab: ",
- "admin.gitlab.false": "false",
- "admin.gitlab.save": "Save",
- "admin.gitlab.saving": "Saving Config...",
"admin.gitlab.settingsTitle": "GitLab Settings",
"admin.gitlab.tokenDescription": "Enter https://<your-gitlab-url>/oauth/token. Make sure you use HTTP or HTTPS in your URL depending on your server configuration.",
"admin.gitlab.tokenExample": "Ex \"\"",
"admin.gitlab.tokenTitle": "Token Endpoint:",
- "admin.gitlab.true": "true",
"admin.gitlab.userDescription": "Enter https://<your-gitlab-url>/api/v3/user. Make sure you use HTTP or HTTPS in your URL depending on your server configuration.",
"admin.gitlab.userExample": "Ex \"\"",
"admin.gitlab.userTitle": "User API Endpoint:",
@@ -219,8 +210,6 @@
"admin.image.amazonS3SecretDescription": "Obtain this credential from your Amazon EC2 administrator.",
"admin.image.amazonS3SecretExample": "Ex \"jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY\"",
"admin.image.amazonS3SecretTitle": "Amazon S3 Secret Access Key:",
- "admin.image.false": "false",
- "admin.image.fileSettings": "File Settings",
"admin.image.localDescription": "Directory to which image files are written. If blank, will be set to ./data/.",
"admin.image.localExample": "Ex \"./data/\"",
"admin.image.localTitle": "Local Directory Location:",
@@ -239,9 +228,6 @@
"admin.image.publicLinkDescription": "32-character salt added to signing of public image links. Randomly generated on install. Click \"Re-Generate\" to create new salt.",
"admin.image.publicLinkExample": "Ex \"gxHVDcKUyP2y1eiyW8S8na1UYQAfq6J6\"",
"admin.image.publicLinkTitle": "Public Link Salt:",
- "admin.image.regenerate": "Re-Generate",
- "admin.image.save": "Save",
- "admin.image.saving": "Saving Config...",
"admin.image.shareDescription": "Allow users to share public links to files and images.",
"admin.image.shareTitle": "Share Public File Link: ",
"admin.image.storeAmazonS3": "Amazon S3",
@@ -253,7 +239,6 @@
"admin.image.thumbWidthDescription": "Width of thumbnails generated from uploaded images. Updating this value changes how thumbnail images render in future, but does not change images created in the past.",
"admin.image.thumbWidthExample": "Ex \"120\"",
"admin.image.thumbWidthTitle": "Thumbnail Width:",
- "admin.image.true": "true",
"admin.ldap.bannerDesc": "If a user attribute changes on the LDAP server it will be updated the next time the user enters their credentials to log in to Mattermost. This includes if a user is made inactive or removed from an LDAP server. Synchronization with LDAP servers is planned in a future release.",
"admin.ldap.bannerHeading": "Note:",
"admin.ldap.baseDesc": "The Base DN is the Distinguished Name of the location where Mattermost should start its search for users in the LDAP tree.",
@@ -268,7 +253,6 @@
"admin.ldap.emailAttrTitle": "Email Attribute:",
"admin.ldap.enableDesc": "When true, Mattermost allows login using LDAP",
"admin.ldap.enableTitle": "Enable Login With LDAP:",
- "admin.ldap.false": "false",
"admin.ldap.firstnameAttrDesc": "The attribute in the LDAP server that will be used to populate the first name of users in Mattermost.",
"admin.ldap.firstnameAttrEx": "Ex \"givenName\"",
"admin.ldap.firstnameAttrTitle": "First Name Attrubute",
@@ -291,15 +275,11 @@
"admin.ldap.queryDesc": "The timeout value for queries to the LDAP server. Increase if you are getting timeout errors caused by a slow LDAP server.",
"admin.ldap.queryEx": "Ex \"60\"",
"admin.ldap.queryTitle": "Query Timeout (seconds):",
- "admin.ldap.save": "Save",
- "admin.ldap.saving": "Saving Config...",
"admin.ldap.serverDesc": "The domain or IP address of LDAP server.",
"admin.ldap.serverEx": "Ex \"10.0.0.23\"",
"admin.ldap.serverTitle": "LDAP Server:",
"admin.ldap.skipCertificateVerification": "Skip Certificate Verification",
"admin.ldap.skipCertificateVerificationDesc": "Skips the certificate verification step for TLS or STARTTLS connections. Not recommended for production environments where TLS is required. For testing only.",
- "admin.ldap.title": "LDAP Settings",
- "admin.ldap.true": "true",
"admin.ldap.uernameAttrDesc": "The attribute in the LDAP server that will be used to populate the username field in Mattermost. This may be the same as the ID Attribute.",
"admin.ldap.userFilterDisc": "Optionally enter an LDAP Filter to use when searching for user objects. Only the users selected by the query will be able to access Mattermost. For Active Directory, the query to filter out disabled users is (&(objectCategory=Person)(!(UserAccountControl:1.2.840.113556.1.4.803:=2))).",
"admin.ldap.userFilterEx": "Ex. \"(objectClass=user)\"",
@@ -320,7 +300,6 @@
"admin.license.uploading": "Uploading License...",
"admin.log.consoleDescription": "Typically set to false in production. Developers may set this field to true to output log messages to console based on the console level option. If true, server writes messages to the standard output stream (stdout).",
"admin.log.consoleTitle": "Log To The Console: ",
- "admin.log.false": "false",
"admin.log.fileDescription": "Typically set to true in production. When true, log files are written to the log file specified in file location field below.",
"admin.log.fileLevelDescription": "This setting determines the level of detail at which log events are written to the log file. ERROR: Outputs only error messages. INFO: Outputs error messages and information around startup and initialization. DEBUG: Prints high detail for developers working on debugging issues.",
"admin.log.fileLevelTitle": "File Log Level:",
@@ -340,27 +319,18 @@
"admin.log.locationPlaceholder": "Enter your file location",
"admin.log.locationTitle": "File Location:",
"admin.log.logSettings": "Log Settings",
- "admin.log.save": "Save",
- "admin.log.saving": "Saving Config...",
- "admin.log.true": "true",
"admin.logs.reload": "Reload",
"admin.logs.title": "Server Logs",
"admin.nav.help": "Help",
"admin.nav.logout": "Logout",
"admin.nav.report": "Report a Problem",
"admin.nav.switch": "Team Selection",
- "admin.privacy.false": "false",
- "admin.privacy.save": "Save",
- "admin.privacy.saving": "Saving Config...",
"admin.privacy.showEmailDescription": "When false, hides email address of users from other users in the user interface, including team owners and team administrators. Used when system is set up for managing teams where some users choose to keep their contact information private.",
"admin.privacy.showEmailTitle": "Show Email Address: ",
"admin.privacy.showFullNameDescription": "When false, hides full name of users from other users, including team owners and team administrators. Username is shown in place of full name.",
"admin.privacy.showFullNameTitle": "Show Full Name: ",
- "admin.privacy.title": "Privacy Settings",
- "admin.privacy.true": "true",
"admin.rate.enableLimiterDescription": "When true, APIs are throttled at rates specified below.",
"admin.rate.enableLimiterTitle": "Enable Rate Limiter: ",
- "admin.rate.false": "false",
"admin.rate.httpHeaderDescription": "When filled in, vary rate limiting by HTTP header field specified (e.g. when configuring NGINX set to \"X-Real-IP\", when configuring AmazonELB set to \"X-Forwarded-For\").",
"admin.rate.httpHeaderExample": "Ex \"X-Real-IP\", \"X-Forwarded-For\"",
"admin.rate.httpHeaderTitle": "Vary By HTTP Header:",
@@ -374,10 +344,7 @@
"admin.rate.queriesTitle": "Number Of Queries Per Second:",
"admin.rate.remoteDescription": "When true, rate limit API access by IP address.",
"admin.rate.remoteTitle": "Vary By Remote Address: ",
- "admin.rate.save": "Save",
- "admin.rate.saving": "Saving Config...",
- "admin.rate.title": "Rate Limit Settings",
- "admin.rate.true": "true",
+ "admin.regenerate": "Re-Generate",
"admin.reset_password.close": "Close",
"admin.reset_password.newPassword": "New Password",
"admin.reset_password.select": "Select",
@@ -397,7 +364,6 @@
"admin.service.corsTitle": "Allow Cross-origin Requests from:",
"admin.service.developerDesc": "(Developer Option) When true, extra information around errors will be displayed in the UI.",
"admin.service.developerTitle": "Enable Developer Mode: ",
- "admin.service.false": "false",
"admin.service.googleDescription": "Set this key to enable embedding of YouTube video previews based on hyperlinks appearing in messages or comments. Instructions to obtain a key available at <a href=\"https://www.youtube.com/watch?v=Im69kzhpR3I\" target=\"_blank\">https://www.youtube.com/watch?v=Im69kzhpR3I</a>. Leaving the field blank disables the automatic generation of YouTube video previews from links.",
"admin.service.googleExample": "Ex \"7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QV\"",
"admin.service.googleTitle": "Google Developer Key:",
@@ -418,8 +384,6 @@
"admin.service.outWebhooksTitle": "Enable Outgoing Webhooks: ",
"admin.service.overrideDescription": "When true, webhooks and slash commands will be allowed to change the username they are posting as. Note, combined with allowing icon overriding, this could open users up to phishing attacks.",
"admin.service.overrideTitle": "Enable Overriding Usernames from Webhooks and Slash Commands: ",
- "admin.service.save": "Save",
- "admin.service.saving": "Saving Config...",
"admin.service.securityDesc": "When true, System Administrators are notified by email if a relevant security fix alert has been announced in the last 12 hours. Requires email to be enabled.",
"admin.service.securityTitle": "Enable Security Alerts: ",
"admin.service.segmentDescription": "For users running a SaaS services, sign up for a key at Segment.com to track metrics.",
@@ -432,8 +396,6 @@
"admin.service.ssoSessionDaysDesc": "The SSO session will expire after the number of days specified and will require a user to login again.",
"admin.service.testingDescription": "(Developer Option) When true, /loadtest slash command is enabled to load test accounts and test data. Changing this will require a server restart before taking effect.",
"admin.service.testingTitle": "Enable Testing: ",
- "admin.service.title": "Service Settings",
- "admin.service.true": "true",
"admin.service.webSessionDays": "Session Length for Web in Days:",
"admin.service.webSessionDaysDesc": "The web session will expire after the number of days specified and will require a user to login again.",
"admin.service.webhooksDescription": "When true, incoming webhooks will be allowed. To help combat phishing attacks, all posts from webhooks will be labelled by a BOT tag.",
@@ -483,7 +445,6 @@
"admin.sidebarHeader.systemConsole": "System Console",
"admin.sql.dataSource": "Data Source:",
"admin.sql.driverName": "Driver Name:",
- "admin.sql.false": "false",
"admin.sql.keyDescription": "32-character salt available to encrypt and decrypt sensitive fields in database.",
"admin.sql.keyExample": "Ex \"gxHVDcKUyP2y1eiyW8S8na1UYQAfq6J6\"",
"admin.sql.keyTitle": "At Rest Encrypt Key:",
@@ -495,14 +456,9 @@
"admin.sql.maxOpenTitle": "Maximum Open Connections:",
"admin.sql.noteDescription": "Changing properties in this section will require a server restart before taking effect.",
"admin.sql.noteTitle": "Note:",
- "admin.sql.regenerate": "Re-Generate",
"admin.sql.replicas": "Data Source Replicas:",
- "admin.sql.save": "Save",
- "admin.sql.saving": "Saving Config...",
- "admin.sql.title": "SQL Settings",
"admin.sql.traceDescription": "(Development Mode) When true, executing SQL statements are written to the log.",
"admin.sql.traceTitle": "Trace: ",
- "admin.sql.true": "true",
"admin.sql.warning": "Warning: re-generating this salt may cause some columns in the database to return empty results.",
"admin.support.aboutDesc": "Link to About page for more information on your Mattermost deployment, for example its purpose and audience within your organization. Defaults to Mattermost information page.",
"admin.support.aboutTitle": "About link:",
@@ -516,11 +472,8 @@
"admin.support.privacyTitle": "Privacy Policy link:",
"admin.support.problemDesc": "Link to help documentation from team site main menu. By default this points to the peer-to-peer troubleshooting forum where users can search for, find and request help with technical issues.",
"admin.support.problemTitle": "Report a Problem link:",
- "admin.support.save": "Save",
- "admin.support.saving": "Saving Config...",
"admin.support.termsDesc": "Link to Terms of Service available to users on desktop and on mobile. Leaving this blank will hide the option to display a notice.",
"admin.support.termsTitle": "Terms of Service link:",
- "admin.support.title": "Legal and Support Settings",
"admin.system_analytics.activeUsers": "Active Users With Posts",
"admin.system_analytics.title": "the System",
"admin.system_analytics.totalPosts": "Total Posts",
@@ -532,7 +485,6 @@
"admin.team.chooseImage": "Choose New Image",
"admin.team.dirDesc": "When true, teams that are configured to show in team directory will show on main page inplace of creating a new team.",
"admin.team.dirTitle": "Enable Team Directory: ",
- "admin.team.false": "false",
"admin.team.maxUsersDescription": "Maximum total number of users per team, including both active and inactive users.",
"admin.team.maxUsersExample": "Ex \"25\"",
"admin.team.maxUsersTitle": "Max Users Per Team:",
@@ -548,15 +500,11 @@
"admin.team.restrictTitle": "Restrict Creation To Domains:",
"admin.team.restrict_direct_message_any": "Any user on the Mattermost server",
"admin.team.restrict_direct_message_team": "Any member of the team",
- "admin.team.save": "Save",
- "admin.team.saving": "Saving Config...",
"admin.team.siteNameDescription": "Name of service shown in login screens and UI.",
"admin.team.siteNameExample": "Ex \"Mattermost\"",
"admin.team.siteNameTitle": "Site Name:",
"admin.team.teamCreationDescription": "When false, the ability to create teams is disabled. The create team button displays error when pressed.",
"admin.team.teamCreationTitle": "Enable Team Creation: ",
- "admin.team.title": "Team Settings",
- "admin.team.true": "true",
"admin.team.upload": "Upload",
"admin.team.uploadDesc": "Customize your user experience by adding a custom image to your login screen. See examples at <a href='http://docs.mattermost.com/administration/config-settings.html#custom-branding' target='_blank'>docs.mattermost.com/administration/config-settings.html#custom-branding</a>.",
"admin.team.uploaded": "Uploaded!",
@@ -565,6 +513,7 @@
"admin.team.userCreationTitle": "Enable User Creation: ",
"admin.team_analytics.activeUsers": "Active Users With Posts",
"admin.team_analytics.totalPosts": "Total Posts",
+ "admin.true": "true",
"admin.userList.title": "Users for {team}",
"admin.userList.title2": "Users for {team} ({count})",
"admin.user_item.authServiceEmail": ", <strong>Sign-in Method:</strong> Email",