Merge branch 'master' into PLT-590
Этот коммит содержится в:
@@ -30,7 +30,6 @@ export default class PrivacySettings extends React.Component {
|
||||
var config = this.props.config;
|
||||
config.PrivacySettings.ShowEmailAddress = React.findDOMNode(this.refs.ShowEmailAddress).checked;
|
||||
config.PrivacySettings.ShowFullName = React.findDOMNode(this.refs.ShowFullName).checked;
|
||||
config.PrivacySettings.EnableSecurityFixAlert = React.findDOMNode(this.refs.EnableSecurityFixAlert).checked;
|
||||
|
||||
Client.saveConfig(
|
||||
config,
|
||||
@@ -137,39 +136,6 @@ export default class PrivacySettings extends React.Component {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='EnableSecurityFixAlert'
|
||||
>
|
||||
{'Send Error and Diagnostic: '}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='EnableSecurityFixAlert'
|
||||
value='true'
|
||||
ref='EnableSecurityFixAlert'
|
||||
defaultChecked={this.props.config.PrivacySettings.EnableSecurityFixAlert}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
{'true'}
|
||||
</label>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='EnableSecurityFixAlert'
|
||||
value='false'
|
||||
defaultChecked={!this.props.config.PrivacySettings.EnableSecurityFixAlert}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
{'false'}
|
||||
</label>
|
||||
<p className='help-text'>{'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.'}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='form-group'>
|
||||
<div className='col-sm-12'>
|
||||
{serverError}
|
||||
|
||||
@@ -35,11 +35,13 @@ export default class ServiceSettings extends React.Component {
|
||||
|
||||
config.ServiceSettings.SegmentDeveloperKey = React.findDOMNode(this.refs.SegmentDeveloperKey).value.trim();
|
||||
config.ServiceSettings.GoogleDeveloperKey = React.findDOMNode(this.refs.GoogleDeveloperKey).value.trim();
|
||||
//config.ServiceSettings.EnableOAuthServiceProvider = React.findDOMNode(this.refs.EnableOAuthServiceProvider).checked;
|
||||
config.ServiceSettings.EnableIncomingWebhooks = React.findDOMNode(this.refs.EnableIncomingWebhooks).checked;
|
||||
config.ServiceSettings.EnablePostUsernameOverride = React.findDOMNode(this.refs.EnablePostUsernameOverride).checked;
|
||||
config.ServiceSettings.EnablePostIconOverride = React.findDOMNode(this.refs.EnablePostIconOverride).checked;
|
||||
config.ServiceSettings.EnableTesting = React.findDOMNode(this.refs.EnableTesting).checked;
|
||||
config.ServiceSettings.EnableSecurityFixAlert = React.findDOMNode(this.refs.EnableSecurityFixAlert).checked;
|
||||
|
||||
//config.ServiceSettings.EnableOAuthServiceProvider = React.findDOMNode(this.refs.EnableOAuthServiceProvider).checked;
|
||||
|
||||
var MaximumLoginAttempts = 10;
|
||||
if (!isNaN(parseInt(React.findDOMNode(this.refs.MaximumLoginAttempts).value, 10))) {
|
||||
@@ -304,6 +306,39 @@ export default class ServiceSettings extends React.Component {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='form-group'>
|
||||
<label
|
||||
className='control-label col-sm-4'
|
||||
htmlFor='EnableSecurityFixAlert'
|
||||
>
|
||||
{'Enable Security Alerts: '}
|
||||
</label>
|
||||
<div className='col-sm-8'>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='EnableSecurityFixAlert'
|
||||
value='true'
|
||||
ref='EnableSecurityFixAlert'
|
||||
defaultChecked={this.props.config.ServiceSettings.EnableSecurityFixAlert}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
{'true'}
|
||||
</label>
|
||||
<label className='radio-inline'>
|
||||
<input
|
||||
type='radio'
|
||||
name='EnableSecurityFixAlert'
|
||||
value='false'
|
||||
defaultChecked={!this.props.config.ServiceSettings.EnableSecurityFixAlert}
|
||||
onChange={this.handleChange}
|
||||
/>
|
||||
{'false'}
|
||||
</label>
|
||||
<p className='help-text'>{'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.'}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='form-group'>
|
||||
<div className='col-sm-12'>
|
||||
{serverError}
|
||||
|
||||
@@ -104,12 +104,6 @@ export default class ChannelLoader extends React.Component {
|
||||
}
|
||||
});
|
||||
|
||||
/* Setup modal events */
|
||||
$('.modal').on('show.bs.modal', function onShow() {
|
||||
$('.modal-body').css('overflow-y', 'auto');
|
||||
$('.modal-body').css('max-height', $(window).height() * 0.7);
|
||||
});
|
||||
|
||||
/* Prevent backspace from navigating back a page */
|
||||
$(window).on('keydown.preventBackspace', (e) => {
|
||||
if (e.which === 8 && !$(e.target).is('input, textarea')) {
|
||||
|
||||
@@ -262,25 +262,27 @@ export default class CreateComment extends React.Component {
|
||||
id={this.props.rootId}
|
||||
className='post-create-body comment-create-body'
|
||||
>
|
||||
<Textbox
|
||||
onUserInput={this.handleUserInput}
|
||||
onKeyPress={this.commentMsgKeyPress}
|
||||
messageText={this.state.messageText}
|
||||
createMessage='Add a comment...'
|
||||
initialText=''
|
||||
id='reply_textbox'
|
||||
ref='textbox'
|
||||
/>
|
||||
<FileUpload
|
||||
ref='fileUpload'
|
||||
getFileCount={this.getFileCount}
|
||||
onUploadStart={this.handleUploadStart}
|
||||
onFileUpload={this.handleFileUploadComplete}
|
||||
onUploadError={this.handleUploadError}
|
||||
onTextDrop={this.handleTextDrop}
|
||||
postType='comment'
|
||||
channelId={this.props.channelId}
|
||||
/>
|
||||
<div className='post-body__cell'>
|
||||
<Textbox
|
||||
onUserInput={this.handleUserInput}
|
||||
onKeyPress={this.commentMsgKeyPress}
|
||||
messageText={this.state.messageText}
|
||||
createMessage='Add a comment...'
|
||||
initialText=''
|
||||
id='reply_textbox'
|
||||
ref='textbox'
|
||||
/>
|
||||
<FileUpload
|
||||
ref='fileUpload'
|
||||
getFileCount={this.getFileCount}
|
||||
onUploadStart={this.handleUploadStart}
|
||||
onFileUpload={this.handleFileUploadComplete}
|
||||
onUploadError={this.handleUploadError}
|
||||
onTextDrop={this.handleTextDrop}
|
||||
postType='comment'
|
||||
channelId={this.props.channelId}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<MsgTyping
|
||||
channelId={this.props.channelId}
|
||||
|
||||
@@ -96,7 +96,6 @@ export default class GetLinkModal extends React.Component {
|
||||
<p>
|
||||
Send teammates the link below for them to sign-up to this team site.
|
||||
<br /><br />
|
||||
Be careful not to share this link publicly, since anyone with the link can join your team.
|
||||
</p>
|
||||
<textarea
|
||||
className='form-control no-resize'
|
||||
|
||||
@@ -32,11 +32,17 @@ export default class SettingItemMax extends React.Component {
|
||||
}
|
||||
|
||||
var inputs = this.props.inputs;
|
||||
var widthClass;
|
||||
if (this.props.width === 'full') {
|
||||
widthClass = 'col-sm-12';
|
||||
} else {
|
||||
widthClass = 'col-sm-9 col-sm-offset-3';
|
||||
}
|
||||
|
||||
return (
|
||||
<ul className='section-max form-horizontal'>
|
||||
<li className='col-sm-12 section-title'>{this.props.title}</li>
|
||||
<li className='col-sm-9 col-sm-offset-3'>
|
||||
<li className={widthClass}>
|
||||
<ul className='setting-list'>
|
||||
<li className='setting-list-item'>
|
||||
{inputs}
|
||||
@@ -69,5 +75,6 @@ SettingItemMax.propTypes = {
|
||||
extraInfo: React.PropTypes.element,
|
||||
updateSection: React.PropTypes.func,
|
||||
submit: React.PropTypes.func,
|
||||
title: React.PropTypes.string
|
||||
title: React.PropTypes.string,
|
||||
width: React.PropTypes.string
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@ export default class SettingsSidebar extends React.Component {
|
||||
handleClick(tab, e) {
|
||||
e.preventDefault();
|
||||
this.props.updateTab(tab.name);
|
||||
$('.settings-modal').addClass('display--content');
|
||||
$(e.target).closest('.settings-modal').addClass('display--content');
|
||||
}
|
||||
render() {
|
||||
let tabList = this.props.tabs.map(function makeTab(tab) {
|
||||
|
||||
@@ -149,7 +149,7 @@ export default class SignupUserComplete extends React.Component {
|
||||
// set up the email entry and hide it if an email was provided
|
||||
var yourEmailIs = '';
|
||||
if (this.state.user.email) {
|
||||
yourEmailIs = <span>Your email address is {this.state.user.email}. You'll use this address to sign in to {global.window.config.SiteName}.</span>;
|
||||
yourEmailIs = <span>Your email address is <strong>{this.state.user.email}</strong>. You'll use this address to sign in to {global.window.config.SiteName}.</span>;
|
||||
}
|
||||
|
||||
var emailContainerStyle = 'margin--extra';
|
||||
|
||||
@@ -246,9 +246,11 @@ export default class Textbox extends React.Component {
|
||||
if (e.scrollHeight - mod < 167) {
|
||||
$(e).css({height: 'auto', 'overflow-y': 'hidden'}).height(e.scrollHeight - mod);
|
||||
$(w).css({height: 'auto'}).height(e.scrollHeight + 2);
|
||||
$(w).closest('.post-body__cell').removeClass('scroll');
|
||||
} else {
|
||||
$(e).css({height: 'auto', 'overflow-y': 'scroll'}).height(167);
|
||||
$(w).css({height: 'auto'}).height(167);
|
||||
$(w).closest('.post-body__cell').addClass('scroll');
|
||||
}
|
||||
|
||||
if (prevHeight !== $(e).height() && this.props.onHeightChange) {
|
||||
|
||||
@@ -368,8 +368,7 @@ export default class UserSettingsGeneralTab extends React.Component {
|
||||
|
||||
const extraInfo = (
|
||||
<span>
|
||||
{'Use Nickname for a name you might be called that is different from your first name and user name.'}
|
||||
{'This is most often used when two or more people have similar sounding names and usernames.'}
|
||||
{'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.'}
|
||||
</span>
|
||||
);
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ export default class UserSettingsIntegrationsTab extends React.Component {
|
||||
incomingHooksSection = (
|
||||
<SettingItemMax
|
||||
title='Incoming Webhooks'
|
||||
width = 'full'
|
||||
inputs={inputs}
|
||||
updateSection={function clearSection(e) {
|
||||
this.updateSection('');
|
||||
@@ -49,6 +50,7 @@ export default class UserSettingsIntegrationsTab extends React.Component {
|
||||
incomingHooksSection = (
|
||||
<SettingItemMin
|
||||
title='Incoming Webhooks'
|
||||
width = 'full'
|
||||
describe='Manage your incoming webhooks (Developer feature)'
|
||||
updateSection={function updateNameSection() {
|
||||
this.updateSection('incoming-hooks');
|
||||
|
||||
@@ -195,6 +195,7 @@ export default class ViewImageModal extends React.Component {
|
||||
target='_blank'
|
||||
>
|
||||
<img
|
||||
style={{maxHeight: this.state.imgHeight}}
|
||||
ref='image'
|
||||
src={this.getPreviewImagePath(filename)}
|
||||
/>
|
||||
@@ -210,6 +211,7 @@ export default class ViewImageModal extends React.Component {
|
||||
|
||||
content = (
|
||||
<video
|
||||
style={{maxHeight: this.state.imgHeight}}
|
||||
ref='video'
|
||||
data-setup='{}'
|
||||
controls='controls'
|
||||
@@ -334,7 +336,6 @@ export default class ViewImageModal extends React.Component {
|
||||
>
|
||||
<div
|
||||
className={'image-wrapper ' + bgClass}
|
||||
style={{maxHeight: this.state.imgHeight}}
|
||||
onMouseEnter={this.onMouseEnterImage}
|
||||
onMouseLeave={this.onMouseLeaveImage}
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
|
||||
@@ -201,7 +201,7 @@ module.exports = {
|
||||
centerChannelBg: '#1F1F1F',
|
||||
centerChannelColor: '#DDDDDD',
|
||||
newMessageSeparator: '#CC992D',
|
||||
linkColor: '#0177e7',
|
||||
linkColor: '#0D93FF',
|
||||
buttonBg: '#0177e7',
|
||||
buttonColor: '#FFFFFF',
|
||||
mentionHighlightBg: '#784098',
|
||||
|
||||
@@ -423,7 +423,10 @@ export function applyTheme(theme) {
|
||||
|
||||
if (theme.sidebarTextActiveColor) {
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a, .sidebar--left .nav-pills__container li.active a:hover, .sidebar--left .nav-pills__container li.active a:focus, .settings-modal .nav-pills>li.active a, .settings-modal .nav-pills>li.active a:hover, .settings-modal .nav-pills>li.active a:active', 'color:' + theme.sidebarTextActiveColor, 2);
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a .status .online--icon', 'fill:' + theme.sidebarTextActiveColor, 2);
|
||||
}
|
||||
|
||||
if (theme.sidebarTextActiveBg === theme.onlineIndicator) {
|
||||
changeCss('.sidebar--left .nav-pills__container li.active a .status .online--icon', 'fill:' + theme.sidebarTextActiveColor, 1);
|
||||
}
|
||||
|
||||
if (theme.sidebarHeaderBg) {
|
||||
@@ -497,7 +500,7 @@ export function applyTheme(theme) {
|
||||
changeCss('.date-separator .separator__hr, .modal-footer, .modal .custom-textarea, .post-right__container .post.post--root hr, .search-item-container', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.modal .custom-textarea:focus', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.3), 1);
|
||||
changeCss('.channel-intro, .settings-modal .settings-table .settings-content .divider-dark, hr, .settings-modal .settings-table .settings-links', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.post.current--user .post-body, .post.post--comment.other--root.current--user .post-comment', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.post.current--user .post-body, .post.post--comment.other--root.current--user .post-comment, pre', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.post.current--user .post-body, .post.post--comment.other--root.current--user .post-comment, .post.post--comment.other--root .post-comment, .post.same--root .post-body, .modal .more-channel-table tbody>tr td, .member-div:first-child, .member-div, .access-history__table .access__report, .activity-log__table', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.1), 2);
|
||||
changeCss('@media(max-width: 1440px){.post.same--root', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.07), 2);
|
||||
changeCss('@media(max-width: 1440px){.post.same--root', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.07), 2);
|
||||
|
||||
Ссылка в новой задаче
Block a user