Multiple UI Improvements
Этот коммит содержится в:
@@ -111,7 +111,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if provider != nil {
|
||||
response := provider.DoCommand(c, channelId, message)
|
||||
handleResponse(c, w, response, channelId, provider.GetCommand(c))
|
||||
handleResponse(c, w, response, channelId, provider.GetCommand(c), true)
|
||||
return
|
||||
} else {
|
||||
chanChan := Srv.Store.Channel().Get(channelId)
|
||||
@@ -193,7 +193,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
if response == nil {
|
||||
c.Err = model.NewLocAppError("command", "api.command.execute_command.failed_empty.app_error", map[string]interface{}{"Trigger": trigger}, "")
|
||||
} else {
|
||||
handleResponse(c, w, response, channelId, cmd)
|
||||
handleResponse(c, w, response, channelId, cmd, false)
|
||||
}
|
||||
} else {
|
||||
body, _ := ioutil.ReadAll(resp.Body)
|
||||
@@ -211,11 +211,14 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
c.Err = model.NewLocAppError("command", "api.command.execute_command.not_found.app_error", map[string]interface{}{"Trigger": trigger}, "")
|
||||
}
|
||||
|
||||
func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, channelId string, cmd *model.Command) {
|
||||
func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, channelId string, cmd *model.Command, builtIn bool) {
|
||||
|
||||
post := &model.Post{}
|
||||
post.ChannelId = channelId
|
||||
post.AddProp("from_webhook", "true")
|
||||
|
||||
if !builtIn {
|
||||
post.AddProp("from_webhook", "true")
|
||||
}
|
||||
|
||||
if utils.Cfg.ServiceSettings.EnablePostUsernameOverride {
|
||||
if len(cmd.Username) != 0 {
|
||||
|
||||
@@ -52,7 +52,7 @@ const (
|
||||
RotatedCCWMirrored = 7
|
||||
RotatedCW = 8
|
||||
|
||||
MaxImageSize = 4096 * 2160 // 4k resolution
|
||||
MaxImageSize = 6048 * 4032 // 24 megapixels, roughly 36MB as a raw image
|
||||
)
|
||||
|
||||
var fileInfoCache *utils.Cache = utils.NewLru(1000)
|
||||
|
||||
@@ -604,12 +604,12 @@ func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *
|
||||
year := fmt.Sprintf("%d", tm.Year())
|
||||
zone, _ := tm.Zone()
|
||||
|
||||
subjectPage := NewServerTemplatePage("post_subject", c.Locale)
|
||||
subjectPage := NewServerTemplatePage("post_subject", profileMap[id].Locale)
|
||||
subjectPage.Props["Subject"] = userLocale("api.templates.post_subject",
|
||||
map[string]interface{}{"SubjectText": subjectText, "TeamDisplayName": team.DisplayName,
|
||||
"Month": month[:3], "Day": day, "Year": year})
|
||||
|
||||
bodyPage := NewServerTemplatePage("post_body", c.Locale)
|
||||
bodyPage := NewServerTemplatePage("post_body", profileMap[id].Locale)
|
||||
bodyPage.Props["SiteURL"] = c.GetSiteURL()
|
||||
bodyPage.Props["PostMessage"] = model.ClearMentionTags(post.Message)
|
||||
bodyPage.Props["TeamLink"] = teamURL + "/channels/" + channel.Name
|
||||
|
||||
@@ -89,9 +89,9 @@ func parseSearchFlags(input []string) ([]string, [][2]string) {
|
||||
}
|
||||
|
||||
if !isFlag {
|
||||
// trim off surrounding punctuation
|
||||
// trim off surrounding punctuation (note that we leave trailing asterisks to allow wildcards)
|
||||
word = puncStart.ReplaceAllString(word, "")
|
||||
word = puncEnd.ReplaceAllString(word, "")
|
||||
word = puncEndWildcard.ReplaceAllString(word, "")
|
||||
|
||||
// and remove extra pound #s
|
||||
word = hashtagStart.ReplaceAllString(word, "#")
|
||||
|
||||
@@ -216,4 +216,8 @@ func TestParseSearchParams(t *testing.T) {
|
||||
if sp := ParseSearchParams("##hashtag +#plus+"); len(sp) != 1 || sp[0].Terms != "#hashtag #plus" || sp[0].IsHashtag != true || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
|
||||
t.Fatalf("Incorrect output from parse search params: %v", sp[0])
|
||||
}
|
||||
|
||||
if sp := ParseSearchParams("wildcar*"); len(sp) != 1 || sp[0].Terms != "wildcar*" || sp[0].IsHashtag != false || len(sp[0].InChannels) != 0 || len(sp[0].FromUsers) != 0 {
|
||||
t.Fatalf("Incorrect output from parse search params: %v", sp[0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,6 +291,7 @@ var validHashtag = regexp.MustCompile(`^(#[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äö
|
||||
var puncStart = regexp.MustCompile(`^[.,()&$!\?\[\]{}':;\\<>\-+=%^*|]+`)
|
||||
var hashtagStart = regexp.MustCompile(`^#{2,}`)
|
||||
var puncEnd = regexp.MustCompile(`[.,()&$#!\?\[\]{}':;\\<>\-+=%^*|]+$`)
|
||||
var puncEndWildcard = regexp.MustCompile(`[.,()&$#!\?\[\]{}':;\\<>\-+=%^|]+$`)
|
||||
|
||||
func ParseHashtags(text string) (string, string) {
|
||||
words := strings.Fields(text)
|
||||
|
||||
@@ -120,8 +120,7 @@ class LicenseSettings extends React.Component {
|
||||
expires: Utils.displayDate(parseInt(global.window.mm_license.ExpiresAt, 10)),
|
||||
ldap: global.window.mm_license.LDAP
|
||||
}}
|
||||
defaultMessage='<div><p>This compiled release of Mattermost platform is provided under a <a href="http://mattermost.com" target="_blank">commercial license</a>
|
||||
from Mattermost, Inc. based on your subscription level and is subject to the <a href="{terms}" target="_blank">Terms of Service.</a></p>
|
||||
defaultMessage='<div><p>This compiled release of Mattermost platform is provided under a <a href="http://mattermost.com" target="_blank">commercial license</a> from Mattermost, Inc. based on your subscription level and is subject to the <a href="{terms}" target="_blank">Terms of Service.</a></p>
|
||||
<p>Your subscription details are as follows:</p>
|
||||
Name: {name}<br />
|
||||
Company or organization name: {company}<br/>
|
||||
@@ -152,9 +151,7 @@ class LicenseSettings extends React.Component {
|
||||
<p className='help-text'>
|
||||
<FormattedHTMLMessage
|
||||
id='admin.licence.keyMigration'
|
||||
defaultMessage='If you’re migrating servers you may need to remove your license key from this server in order to install it on a new server. To start,
|
||||
<a href="http://mattermost.com" target="_blank">disable all Enterprise Edition features on this server</a>.
|
||||
This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.'
|
||||
defaultMessage='If you’re migrating servers you may need to remove your license key from this server in order to install it on a new server. To start, <a href="http://mattermost.com" target="_blank">disable all Enterprise Edition features on this server</a>. This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.'
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -44,6 +44,7 @@ export default class ChannelMembersModal extends React.Component {
|
||||
}
|
||||
getStateFromStores() {
|
||||
const extraInfo = ChannelStore.getCurrentExtraInfo();
|
||||
const profiles = UserStore.getActiveOnlyProfiles();
|
||||
|
||||
if (extraInfo.member_count !== extraInfo.members.length) {
|
||||
AsyncClient.getChannelExtraInfo(this.props.channel.id, -1);
|
||||
@@ -53,9 +54,8 @@ export default class ChannelMembersModal extends React.Component {
|
||||
};
|
||||
}
|
||||
|
||||
// clone the member list since we mutate it later on
|
||||
const memberList = extraInfo.members.map((member) => {
|
||||
return Object.assign({}, member);
|
||||
return profiles[member.id];
|
||||
});
|
||||
|
||||
function compareByUsername(a, b) {
|
||||
@@ -130,8 +130,8 @@ export default class ChannelMembersModal extends React.Component {
|
||||
onClick={this.handleRemove.bind(this, user)}
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_members_modal.removeMember'
|
||||
defaultMessage='Remove Member'
|
||||
id='channel_members_modal.remove'
|
||||
defaultMessage='Remove'
|
||||
/>
|
||||
</button>
|
||||
);
|
||||
@@ -178,7 +178,6 @@ export default class ChannelMembersModal extends React.Component {
|
||||
this.props.onModalDismissed();
|
||||
}}
|
||||
>
|
||||
<i className='glyphicon glyphicon-envelope'/>
|
||||
<FormattedMessage
|
||||
id='channel_members_modal.addNew'
|
||||
defaultMessage=' Add New Members'
|
||||
|
||||
@@ -130,7 +130,7 @@ class CreatePost extends React.Component {
|
||||
post.message,
|
||||
false,
|
||||
(data) => {
|
||||
PostStore.storeDraft(data.channel_id, null);
|
||||
PostStore.storeDraft(this.state.channelId, null);
|
||||
this.setState({messageText: '', submitting: false, postError: null, previews: [], serverError: null});
|
||||
|
||||
if (data.goto_location && data.goto_location.length > 0) {
|
||||
@@ -262,9 +262,7 @@ class CreatePost extends React.Component {
|
||||
message = err.message;
|
||||
}
|
||||
|
||||
if (clientId === -1) {
|
||||
this.setState({serverError: message});
|
||||
} else {
|
||||
if (clientId !== -1) {
|
||||
const draft = PostStore.getDraft(this.state.channelId);
|
||||
|
||||
const index = draft.uploadsInProgress.indexOf(clientId);
|
||||
@@ -274,8 +272,10 @@ class CreatePost extends React.Component {
|
||||
|
||||
PostStore.storeDraft(this.state.channelId, draft);
|
||||
|
||||
this.setState({uploadsInProgress: draft.uploadsInProgress, serverError: message});
|
||||
this.setState({uploadsInProgress: draft.uploadsInProgress});
|
||||
}
|
||||
|
||||
this.setState({serverError: message});
|
||||
}
|
||||
removePreview(id) {
|
||||
const previews = Object.assign([], this.state.previews);
|
||||
|
||||
@@ -19,12 +19,10 @@ class FileAttachment extends React.Component {
|
||||
super(props);
|
||||
|
||||
this.loadFiles = this.loadFiles.bind(this);
|
||||
this.playGif = this.playGif.bind(this);
|
||||
this.stopGif = this.stopGif.bind(this);
|
||||
this.addBackgroundImage = this.addBackgroundImage.bind(this);
|
||||
|
||||
this.canSetState = false;
|
||||
this.state = {fileSize: -1, mime: '', playing: false, loading: false, format: ''};
|
||||
this.state = {fileSize: -1};
|
||||
}
|
||||
componentDidMount() {
|
||||
this.loadFiles();
|
||||
@@ -95,42 +93,6 @@ class FileAttachment extends React.Component {
|
||||
|
||||
return true;
|
||||
}
|
||||
playGif(e, filename) {
|
||||
var img = new Image();
|
||||
var fileUrl = utils.getFileUrl(filename);
|
||||
|
||||
this.setState({loading: true});
|
||||
img.load(fileUrl);
|
||||
img.onload = () => {
|
||||
var state = {playing: true, loading: false};
|
||||
|
||||
switch (true) {
|
||||
case img.width > img.height:
|
||||
state.format = 'landscape';
|
||||
break;
|
||||
case img.height > img.width:
|
||||
state.format = 'portrait';
|
||||
break;
|
||||
default:
|
||||
state.format = 'quadrat';
|
||||
break;
|
||||
}
|
||||
|
||||
this.setState(state);
|
||||
|
||||
// keep displaying background image for a short moment while browser is
|
||||
// loading gif, to prevent white background flashing through
|
||||
setTimeout(() => this.removeBackgroundImage.bind(this)(filename), 100);
|
||||
};
|
||||
img.onError = () => this.setState({loading: false});
|
||||
|
||||
e.stopPropagation();
|
||||
}
|
||||
stopGif(e, filename) {
|
||||
this.setState({playing: false});
|
||||
this.addBackgroundImage(filename);
|
||||
e.stopPropagation();
|
||||
}
|
||||
getFileInfoFromName(name) {
|
||||
var fileInfo = utils.splitFileLocation(name);
|
||||
|
||||
@@ -164,74 +126,18 @@ class FileAttachment extends React.Component {
|
||||
var filename = this.props.filename;
|
||||
|
||||
var fileInfo = utils.splitFileLocation(filename);
|
||||
var fileUrl = utils.getFileUrl(filename);
|
||||
var fileUrl = utils.getFileUrl(filename, true);
|
||||
var type = utils.getFileType(fileInfo.ext);
|
||||
|
||||
var playbackControls = '';
|
||||
var loadedFile = '';
|
||||
var loadingIndicator = '';
|
||||
if (this.state.mime === 'image/gif') {
|
||||
playbackControls = (
|
||||
<div
|
||||
className='file-playback-controls play'
|
||||
onClick={(e) => this.playGif(e, filename)}
|
||||
>
|
||||
{"►"}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
if (this.state.playing) {
|
||||
loadedFile = (
|
||||
<img
|
||||
className={'file__loaded ' + this.state.format}
|
||||
src={fileUrl}
|
||||
/>
|
||||
);
|
||||
playbackControls = (
|
||||
<div
|
||||
className='file-playback-controls stop'
|
||||
onClick={(e) => this.stopGif(e, filename)}
|
||||
>
|
||||
{"■"}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
if (this.state.loading) {
|
||||
loadingIndicator = (
|
||||
<img
|
||||
className='spinner file__loading'
|
||||
src='/static/images/load.gif'
|
||||
/>
|
||||
);
|
||||
playbackControls = '';
|
||||
}
|
||||
|
||||
var thumbnail;
|
||||
if (type === 'image') {
|
||||
if (this.state.playing) {
|
||||
thumbnail = (
|
||||
<div
|
||||
ref={filename}
|
||||
className='post__load'
|
||||
style={{backgroundImage: 'url(/static/images/load.gif)'}}
|
||||
>
|
||||
{playbackControls}
|
||||
{loadedFile}
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
thumbnail = (
|
||||
<div
|
||||
ref={filename}
|
||||
className='post__load'
|
||||
style={{backgroundImage: 'url(/static/images/load.gif)'}}
|
||||
>
|
||||
{loadingIndicator}
|
||||
{playbackControls}
|
||||
{loadedFile}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
thumbnail = (
|
||||
<div
|
||||
ref={filename}
|
||||
className='post__load'
|
||||
style={{backgroundImage: 'url(/static/images/load.gif)'}}
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
thumbnail = <div className={'file-icon ' + utils.getIconClassName(type)}/>;
|
||||
}
|
||||
@@ -242,7 +148,7 @@ class FileAttachment extends React.Component {
|
||||
filename,
|
||||
function success(data) {
|
||||
if (this.canSetState) {
|
||||
this.setState({fileSize: parseInt(data.size, 10), mime: data.mime});
|
||||
this.setState({fileSize: parseInt(data.size, 10)});
|
||||
}
|
||||
}.bind(this),
|
||||
function error() {
|
||||
|
||||
@@ -108,12 +108,12 @@ class FileUpload extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
handleChange() {
|
||||
var element = $(ReactDOM.findDOMNode(this.refs.fileInput));
|
||||
handleChange(e) {
|
||||
if (e.target.files.length > 0) {
|
||||
this.uploadFiles(e.target.files);
|
||||
|
||||
this.uploadFiles(element.prop('files'));
|
||||
|
||||
Utils.clearFileInput(element[0]);
|
||||
Utils.clearFileInput(e.target);
|
||||
}
|
||||
}
|
||||
|
||||
handleDrop(e) {
|
||||
|
||||
@@ -41,8 +41,6 @@ export default class GetLinkModal extends React.Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
const userCreationEnabled = global.window.mm_config.EnableUserCreation === 'true';
|
||||
|
||||
let helpText = null;
|
||||
if (this.props.helpText) {
|
||||
helpText = (
|
||||
@@ -55,7 +53,7 @@ export default class GetLinkModal extends React.Component {
|
||||
}
|
||||
|
||||
let copyLink = null;
|
||||
if (userCreationEnabled && document.queryCommandSupported('copy')) {
|
||||
if (document.queryCommandSupported('copy')) {
|
||||
copyLink = (
|
||||
<button
|
||||
data-copy-btn='true'
|
||||
@@ -71,17 +69,14 @@ export default class GetLinkModal extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
let linkText = null;
|
||||
if (userCreationEnabled) {
|
||||
linkText = (
|
||||
<textarea
|
||||
className='form-control no-resize min-height'
|
||||
readOnly='true'
|
||||
ref='textarea'
|
||||
value={this.props.link}
|
||||
/>
|
||||
);
|
||||
}
|
||||
const linkText = (
|
||||
<textarea
|
||||
className='form-control no-resize min-height'
|
||||
readOnly='true'
|
||||
ref='textarea'
|
||||
value={this.props.link}
|
||||
/>
|
||||
);
|
||||
|
||||
var copyLinkConfirm = null;
|
||||
if (this.state.copiedLink) {
|
||||
|
||||
@@ -495,7 +495,7 @@ class InviteMemberModal extends React.Component {
|
||||
<ConfirmModal
|
||||
title={formatMessage(holders.modalTitle)}
|
||||
message={formatMessage(holders.modalMessage)}
|
||||
confirm_button={formatMessage(holders.modalButton)}
|
||||
confirmButton={formatMessage(holders.modalButton)}
|
||||
show={this.state.showConfirmModal}
|
||||
onConfirm={this.handleHide.bind(this, false)}
|
||||
onCancel={() => this.setState({showConfirmModal: false})}
|
||||
@@ -512,4 +512,4 @@ InviteMemberModal.propTypes = {
|
||||
intl: intlShape.isRequired
|
||||
};
|
||||
|
||||
export default injectIntl(InviteMemberModal);
|
||||
export default injectIntl(InviteMemberModal);
|
||||
|
||||
@@ -107,7 +107,7 @@ export default class NavbarDropdown extends React.Component {
|
||||
</li>
|
||||
);
|
||||
|
||||
if (this.props.teamType === Constants.OPEN_TEAM) {
|
||||
if (this.props.teamType === Constants.OPEN_TEAM && global.window.mm_config.EnableUserCreation === 'true') {
|
||||
teamLink = (
|
||||
<li>
|
||||
<a
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
import * as Utils from '../utils/utils.jsx';
|
||||
|
||||
export default class SettingsSidebar extends React.Component {
|
||||
componentDidUpdate() {
|
||||
$('.settings-modal').find('.modal-body').scrollTop(0);
|
||||
$('.settings-modal').find('.modal-body').perfectScrollbar('update');
|
||||
}
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ export default class SearchSuggestionList extends SuggestionList {
|
||||
text = (
|
||||
<FormattedMessage
|
||||
id='suggestion.search.private'
|
||||
defaultMessage='Public Groups'
|
||||
defaultMessage='Private Groups'
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -611,7 +611,9 @@ class GeneralTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i className='modal-back'></i>
|
||||
<div className='modal-back'>
|
||||
<i className='fa fa-angle-left'></i>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='general_tab.title'
|
||||
defaultMessage='General Settings'
|
||||
|
||||
@@ -131,7 +131,10 @@ class TeamImportTab extends React.Component {
|
||||
<h4
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
><i className='modal-back'></i>
|
||||
>
|
||||
<div className='modal-back'>
|
||||
<i className='fa fa-angle-left'></i>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='team_import_tab.import'
|
||||
defaultMessage='Import'
|
||||
|
||||
@@ -308,8 +308,8 @@ export default class TeamMembersDropdown extends React.Component {
|
||||
data-toggle='dropdown'
|
||||
aria-expanded='true'
|
||||
>
|
||||
<span className='fa fa-pencil'></span>
|
||||
<span>{currentRoles} </span>
|
||||
<span className='fa fa-chevron-down'></span>
|
||||
</a>
|
||||
<ul
|
||||
className='dropdown-menu member-menu'
|
||||
|
||||
@@ -91,7 +91,7 @@ class TeamSettingsModal extends React.Component {
|
||||
/>
|
||||
</h4>
|
||||
</div>
|
||||
<div className='modal-body'>
|
||||
<div className='modal-body settings-modal__body'>
|
||||
<div className='settings-table'>
|
||||
<div className='settings-links'>
|
||||
<SettingsSidebar
|
||||
|
||||
@@ -129,12 +129,12 @@ export default class Textbox extends React.Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
const hasText = this.props.messageText.length > 0;
|
||||
|
||||
let previewLink = null;
|
||||
if (Utils.isFeatureEnabled(PreReleaseFeatures.MARKDOWN_PREVIEW)) {
|
||||
const previewLinkVisible = this.props.messageText.length > 0;
|
||||
previewLink = (
|
||||
<a
|
||||
style={{visibility: previewLinkVisible ? 'visible' : 'hidden'}}
|
||||
onClick={this.showPreview}
|
||||
className='textbox-preview-link'
|
||||
>
|
||||
@@ -153,6 +153,51 @@ export default class Textbox extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
let helpText = (
|
||||
<div
|
||||
style={{visibility: hasText ? 'visible' : 'hidden', opacity: hasText ? '0.5' : '0'}}
|
||||
className='help_format_text'
|
||||
>
|
||||
<b>
|
||||
<FormattedMessage
|
||||
id='textbox.bold'
|
||||
defaultMessage='**bold**'
|
||||
/>
|
||||
</b>
|
||||
<i>
|
||||
<FormattedMessage
|
||||
id='textbox.italic'
|
||||
defaultMessage='_italic_'
|
||||
/>
|
||||
</i>
|
||||
<span>~~<strike>
|
||||
<FormattedMessage
|
||||
id='textbox.strike'
|
||||
defaultMessage='strike'
|
||||
/>
|
||||
</strike>~~ </span>
|
||||
<code>
|
||||
<FormattedMessage
|
||||
id='textbox.inlinecode'
|
||||
defaultMessage='`inline code`'
|
||||
/>
|
||||
</code>
|
||||
<code>
|
||||
<FormattedMessage
|
||||
id='textbox.preformatted'
|
||||
defaultMessage='```preformatted```'
|
||||
/>
|
||||
</code>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='textbox.quote'
|
||||
defaultMessage='>quote'
|
||||
/>
|
||||
</span>
|
||||
{previewLink}
|
||||
</div>
|
||||
);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref='wrapper'
|
||||
@@ -184,7 +229,7 @@ export default class Textbox extends React.Component {
|
||||
dangerouslySetInnerHTML={{__html: this.state.preview ? TextFormatting.formatText(this.props.messageText) : ''}}
|
||||
>
|
||||
</div>
|
||||
{previewLink}
|
||||
{helpText}
|
||||
<a
|
||||
target='_blank'
|
||||
href='http://docs.mattermost.com/help/getting-started/messaging-basics.html'
|
||||
|
||||
@@ -10,9 +10,9 @@ export default function UserListRow({user, actions}) {
|
||||
|
||||
let name = user.username;
|
||||
if (user.nickname && nameFormat === Constants.Preferences.DISPLAY_PREFER_NICKNAME) {
|
||||
name = `${user.nickname} (${user.username})`;
|
||||
name = `${user.nickname} (@${user.username})`;
|
||||
} else if ((user.first_name || user.last_name) && (nameFormat === Constants.Preferences.DISPLAY_PREFER_NICKNAME || nameFormat === Constants.Preferences.DISPLAY_PREFER_FULL_NAME)) {
|
||||
name = `${Utils.getFullName(user)} (${user.username})`;
|
||||
name = `${Utils.getFullName(user)} (@${user.username})`;
|
||||
}
|
||||
|
||||
const buttons = actions.map((Action, index) => {
|
||||
|
||||
@@ -300,10 +300,12 @@ class AdvancedSettingsDisplay extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.advance.title'
|
||||
defaultMessage='Advanced Settings'
|
||||
|
||||
@@ -94,10 +94,12 @@ class DeveloperTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.developer.title'
|
||||
defaultMessage='Developer Settings'
|
||||
|
||||
@@ -444,10 +444,12 @@ export default class UserSettingsDisplay extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.display.title'
|
||||
defaultMessage='Display Settings'
|
||||
|
||||
@@ -759,10 +759,12 @@ class UserSettingsGeneralTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.general.title'
|
||||
defaultMessage='General Settings'
|
||||
|
||||
@@ -163,10 +163,12 @@ class UserSettingsIntegrationsTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.integrations.title'
|
||||
defaultMessage='Integration Settings'
|
||||
|
||||
@@ -277,7 +277,7 @@ class UserSettingsModal extends React.Component {
|
||||
/>
|
||||
</Modal.Title>
|
||||
</Modal.Header>
|
||||
<Modal.Body ref='modalBody'>
|
||||
<Modal.Body bsClass='settings-modal__body modal' ref='modalBody'>
|
||||
<div className='settings-table'>
|
||||
<div className='settings-links'>
|
||||
<SettingsSidebar
|
||||
@@ -309,7 +309,7 @@ class UserSettingsModal extends React.Component {
|
||||
<ConfirmModal
|
||||
title={formatMessage(holders.confirmTitle)}
|
||||
message={formatMessage(holders.confirmMsg)}
|
||||
confirm_button={formatMessage(holders.confirmBtns)}
|
||||
confirmButton={formatMessage(holders.confirmBtns)}
|
||||
show={this.state.showConfirmModal}
|
||||
onConfirm={this.handleConfirm}
|
||||
onCancel={this.handleCancelConfirmation}
|
||||
|
||||
@@ -774,10 +774,12 @@ class NotificationsTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.notifications.title'
|
||||
defaultMessage='Notification Settings'
|
||||
|
||||
@@ -389,10 +389,12 @@ class SecurityTab extends React.Component {
|
||||
className='modal-title'
|
||||
ref='title'
|
||||
>
|
||||
<i
|
||||
className='modal-back'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
<div className='modal-back'>
|
||||
<i
|
||||
className='fa fa-angle-left'
|
||||
onClick={this.props.collapseModal}
|
||||
/>
|
||||
</div>
|
||||
<FormattedMessage
|
||||
id='user.settings.security.title'
|
||||
defaultMessage='Security Settings'
|
||||
|
||||
@@ -123,14 +123,13 @@ function autolinkAtMentions(text, tokens) {
|
||||
return (Constants.SPECIAL_MENTIONS.indexOf(u) !== -1 || UserStore.getProfileByUsername(u));
|
||||
}
|
||||
|
||||
function addToken(username, mention, extraText) {
|
||||
function addToken(username, mention) {
|
||||
const index = tokens.size;
|
||||
const alias = `MM_ATMENTION${index}`;
|
||||
|
||||
tokens.set(alias, {
|
||||
value: `<a class='mention-link' href='#' data-mention='${username}'>${mention}</a>`,
|
||||
originalText: mention,
|
||||
extraText
|
||||
originalText: mention
|
||||
});
|
||||
return alias;
|
||||
}
|
||||
@@ -152,9 +151,9 @@ function autolinkAtMentions(text, tokens) {
|
||||
usernameLower = usernameLower.substring(0, c - 1);
|
||||
|
||||
if (mentionExists(usernameLower)) {
|
||||
const extraText = originalUsername.substr(c - 1);
|
||||
const alias = addToken(usernameLower, '@' + usernameLower, extraText);
|
||||
return alias;
|
||||
const suffix = originalUsername.substr(c - 1);
|
||||
const alias = addToken(usernameLower, '@' + usernameLower);
|
||||
return alias + suffix;
|
||||
}
|
||||
} else {
|
||||
// If the last character is not punctuation, no point in going any further
|
||||
@@ -188,7 +187,7 @@ function highlightCurrentMentions(text, tokens) {
|
||||
const newAlias = `MM_SELFMENTION${index}`;
|
||||
|
||||
newTokens.set(newAlias, {
|
||||
value: `<span class='mention-highlight'>${alias}</span>` + (token.extraText || ''),
|
||||
value: `<span class='mention-highlight'>${alias}</span>`,
|
||||
originalText: token.originalText
|
||||
});
|
||||
output = output.replace(alias, newAlias);
|
||||
|
||||
@@ -606,16 +606,17 @@ export function toTitleCase(str) {
|
||||
|
||||
export function applyTheme(theme) {
|
||||
if (theme.sidebarBg) {
|
||||
changeCss('.sidebar--left, .settings-modal .settings-table .settings-links, .sidebar--menu', 'background:' + theme.sidebarBg, 1);
|
||||
changeCss('.sidebar--left, .modal .settings-modal .settings-table .settings-links, .sidebar--menu', 'background:' + theme.sidebarBg, 1);
|
||||
changeCss('body', 'scrollbar-face-color:' + theme.sidebarBg, 3);
|
||||
}
|
||||
|
||||
if (theme.sidebarText) {
|
||||
changeCss('.sidebar--left .nav-pills__container li>a, .sidebar--right, .settings-modal .nav-pills>li a, .sidebar--menu', 'color:' + changeOpacity(theme.sidebarText, 0.6), 1);
|
||||
changeCss('@media(max-width: 768px){.settings-modal .settings-table .nav>li>a', 'color:' + theme.sidebarText, 1);
|
||||
changeCss('.sidebar--left .nav-pills__container li>a, .sidebar--right, .modal .settings-modal .nav-pills>li a, .sidebar--menu', 'color:' + changeOpacity(theme.sidebarText, 0.6), 1);
|
||||
changeCss('@media(max-width: 768px){.modal .settings-modal .settings-table .nav>li>a', 'color:' + theme.sidebarText, 1);
|
||||
changeCss('.sidebar--left .nav-pills__container li>h4, .sidebar--left .add-channel-btn', 'color:' + changeOpacity(theme.sidebarText, 0.6), 1);
|
||||
changeCss('.sidebar--left .add-channel-btn:hover, .sidebar--left .add-channel-btn:focus', 'color:' + theme.sidebarText, 1);
|
||||
changeCss('.sidebar--left .status .offline--icon, .sidebar--left .status .offline--icon', 'fill:' + theme.sidebarText, 1);
|
||||
changeCss('@media(max-width: 768px){.settings-modal .settings-table .nav>li>a', 'border-color:' + changeOpacity(theme.sidebarText, 0.2), 2);
|
||||
changeCss('@media(max-width: 768px){.modal .settings-modal .settings-table .nav>li>a', 'border-color:' + changeOpacity(theme.sidebarText, 0.2), 2);
|
||||
}
|
||||
|
||||
if (theme.sidebarUnreadText) {
|
||||
@@ -623,16 +624,16 @@ export function applyTheme(theme) {
|
||||
}
|
||||
|
||||
if (theme.sidebarTextHoverBg) {
|
||||
changeCss('.sidebar--left .nav-pills__container li>a:hover, .sidebar--left .nav-pills__container li>a:focus, .settings-modal .nav-pills>li:hover a, .settings-modal .nav-pills>li:focus a', 'background:' + theme.sidebarTextHoverBg, 1);
|
||||
changeCss('@media(max-width: 768px){.settings-modal .settings-table .nav>li:hover a', 'background:' + theme.sidebarTextHoverBg, 1);
|
||||
changeCss('.sidebar--left .nav-pills__container li>a:hover, .sidebar--left .nav-pills__container li>a:focus, .modal .settings-modal .nav-pills>li:hover a, .modal .settings-modal .nav-pills>li:focus a', 'background:' + theme.sidebarTextHoverBg, 1);
|
||||
changeCss('@media(max-width: 768px){.modal .settings-modal .settings-table .nav>li:hover a', 'background:' + theme.sidebarTextHoverBg, 1);
|
||||
}
|
||||
|
||||
if (theme.sidebarTextActiveBorder) {
|
||||
changeCss('.sidebar--left .nav li.active a:before, .settings-modal .nav-pills>li.active a:before', 'background:' + theme.sidebarTextActiveBorder, 1);
|
||||
changeCss('.sidebar--left .nav li.active a:before, .modal .settings-modal .nav-pills>li.active a:before', 'background:' + theme.sidebarTextActiveBorder, 1);
|
||||
}
|
||||
|
||||
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, .sidebar--left .nav-pills__container li.active a:hover, .sidebar--left .nav-pills__container li.active a:focus, .modal .settings-modal .nav-pills>li.active a, .modal .settings-modal .nav-pills>li.active a:hover, .modal .settings-modal .nav-pills>li.active a:active', 'color:' + theme.sidebarTextActiveColor, 2);
|
||||
changeCss('.sidebar--left .nav li.active a, .sidebar--left .nav li.active a:hover, .sidebar--left .nav li.active a:focus', 'background:' + changeOpacity(theme.sidebarTextActiveColor, 0.1), 1);
|
||||
}
|
||||
|
||||
@@ -665,12 +666,12 @@ export function applyTheme(theme) {
|
||||
|
||||
if (theme.mentionBj) {
|
||||
changeCss('.sidebar--left .nav-pills__unread-indicator', 'background:' + theme.mentionBj, 1);
|
||||
changeCss('.sidebar--left .badge', 'background:' + theme.mentionBj, 1);
|
||||
changeCss('.sidebar--left .badge', 'background:' + theme.mentionBj + '!important;', 1);
|
||||
}
|
||||
|
||||
if (theme.mentionColor) {
|
||||
changeCss('.sidebar--left .nav-pills__unread-indicator', 'color:' + theme.mentionColor, 2);
|
||||
changeCss('.sidebar--left .badge', 'color:' + theme.mentionColor, 2);
|
||||
changeCss('.sidebar--left .badge', 'color:' + theme.mentionColor + '!important;', 2);
|
||||
}
|
||||
|
||||
if (theme.centerChannelBg) {
|
||||
@@ -686,6 +687,8 @@ export function applyTheme(theme) {
|
||||
changeCss('.popover.top>.arrow:after, .tip-overlay.tip-overlay--chat .arrow', 'border-top-color:' + theme.centerChannelBg, 1);
|
||||
changeCss('@media(min-width: 768px){.search-bar__container .search__form .search-bar, .form-control', 'background:' + theme.centerChannelBg, 1);
|
||||
changeCss('.attachment__content', 'background:' + theme.centerChannelBg, 1);
|
||||
changeCss('body', 'scrollbar-face-color:' + theme.centerChannelBg, 2);
|
||||
changeCss('body', 'scrollbar-track-color:' + theme.centerChannelBg, 2);
|
||||
}
|
||||
|
||||
if (theme.centerChannelColor) {
|
||||
@@ -705,7 +708,7 @@ export function applyTheme(theme) {
|
||||
changeCss('.markdown__table tbody tr:nth-child(2n)', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.channel-header__info>div.dropdown .header-dropdown__icon', 'color:' + changeOpacity(theme.centerChannelColor, 0.8), 1);
|
||||
changeCss('.channel-header #member_popover', 'color:' + changeOpacity(theme.centerChannelColor, 0.8), 1);
|
||||
changeCss('.custom-textarea, .custom-textarea:focus, .preview-container .preview-div, .post-image__column .post-image__details, .sidebar--right .sidebar-right__body, .markdown__table th, .markdown__table td, .suggestion-content, .modal .modal-content, .settings-modal .settings-table .settings-content .divider-light, .webhooks__container, .dropdown-menu, .modal .modal-header, .popover', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.custom-textarea, .custom-textarea:focus, .preview-container .preview-div, .post-image__column .post-image__details, .sidebar--right .sidebar-right__body, .markdown__table th, .markdown__table td, .suggestion-content, .modal .modal-content, .modal .settings-modal .settings-table .settings-content .divider-light, .webhooks__container, .dropdown-menu, .modal .modal-header, .popover', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.popover.bottom>.arrow', 'border-bottom-color:' + changeOpacity(theme.centerChannelColor, 0.25), 1);
|
||||
changeCss('.search-help-popover .search-autocomplete__divider span', 'color:' + changeOpacity(theme.centerChannelColor, 0.7), 1);
|
||||
changeCss('.popover.right>.arrow', 'border-right-color:' + changeOpacity(theme.centerChannelColor, 0.25), 1);
|
||||
@@ -726,18 +729,20 @@ export function applyTheme(theme) {
|
||||
changeCss('.date-separator .separator__hr, .modal-footer, .modal .custom-textarea', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.search-item-container, .post-right__container .post.post--root', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.1), 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, .settings-modal .settings-table .settings-content .appearance-section .theme-elements__header', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.channel-intro, .modal .settings-modal .settings-table .settings-content .divider-dark, hr, .modal .settings-modal .settings-table .settings-links, .modal .settings-modal .settings-table .settings-content .appearance-section .theme-elements__header', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||
changeCss('.post.current--user .post__body, .post.post--comment.other--root.current--user .post-comment, pre, .post-right__container .post.post--root', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.post.current--user .post__body, .post.post--comment.other--root.current--user .post-comment, .post.same--root.post--comment .post__body, .modal .more-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: 1800px){.inner__wrap.move--left .post.post--comment.same--root', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.07), 2);
|
||||
changeCss('.post:hover, .modal .more-table tbody>tr:hover td, .settings-modal .settings-table .settings-content .section-min:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.post:hover, .modal .more-table tbody>tr:hover td, .modal .settings-modal .settings-table .settings-content .section-min:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.date-separator.hovered--before:after, .date-separator.hovered--after:before, .new-separator.hovered--after:before, .new-separator.hovered--before:after', 'background:' + changeOpacity(theme.centerChannelColor, 0.07), 1);
|
||||
changeCss('.command-name:hover, .mentions-name:hover, .suggestion--selected, .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover, .bot-indicator', 'background:' + changeOpacity(theme.centerChannelColor, 0.15), 1);
|
||||
changeCss('code, .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control', 'background:' + changeOpacity(theme.centerChannelColor, 0.1), 1);
|
||||
changeCss('@media(min-width: 960px){.post.current--user:hover .post__body ', 'background: none;', 1);
|
||||
changeCss('.sidebar--right', 'color:' + theme.centerChannelColor, 2);
|
||||
changeCss('.search-help-popover .search-autocomplete__item:hover, .settings-modal .settings-table .settings-content .appearance-section .theme-elements__body', 'background:' + changeOpacity(theme.centerChannelColor, 0.05), 1);
|
||||
changeCss('.search-help-popover .search-autocomplete__item:hover, .modal .settings-modal .settings-table .settings-content .appearance-section .theme-elements__body', 'background:' + changeOpacity(theme.centerChannelColor, 0.05), 1);
|
||||
changeCss('.search-help-popover .search-autocomplete__item.selected', 'background:' + changeOpacity(theme.centerChannelColor, 0.15), 1);
|
||||
changeCss('::-webkit-scrollbar-thumb', 'background:' + changeOpacity(theme.centerChannelColor, 0.4), 1);
|
||||
changeCss('body', 'scrollbar-arrow-color:' + theme.centerChannelColor, 4);
|
||||
}
|
||||
|
||||
if (theme.newMessageSeparator) {
|
||||
|
||||
@@ -224,3 +224,33 @@ a:focus, a:hover {
|
||||
margin-bottom: 0.25em;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
|
||||
// Scrollbar Css
|
||||
|
||||
::-webkit-scrollbar
|
||||
{
|
||||
width: 8px; /* for vertical scrollbars */
|
||||
height: 8px; /* for horizontal scrollbars */
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track
|
||||
{
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb
|
||||
{
|
||||
@include border-radius(5px);
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
body{
|
||||
scrollbar-face-color: rgba(0, 0, 0, 0.1);
|
||||
scrollbar-shadow-color: #2D2C4D;
|
||||
scrollbar-highlight-color:#7D7E94;
|
||||
scrollbar-3dlight-color: #7D7E94;
|
||||
scrollbar-darkshadow-color: #2D2C4D;
|
||||
scrollbar-track-color: rgba(0, 0, 0, 0.1);
|
||||
scrollbar-arrow-color: #C1C1D1;
|
||||
}
|
||||
@@ -49,7 +49,7 @@
|
||||
width: 100%;
|
||||
@include legacy-pie-clearfix;
|
||||
text-overflow: ellipsis;
|
||||
padding: 8px 8px 8px 15px;
|
||||
padding: 8px 15px;
|
||||
&.padding--equal {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
@@ -58,22 +58,37 @@ body.ios {
|
||||
box-shadow: none;
|
||||
white-space: normal;
|
||||
}
|
||||
.textbox-preview-link, .textbox-help-link {
|
||||
.textbox-help-link {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
bottom: -23px;
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.textbox-preview-link {
|
||||
right: 45px;
|
||||
}
|
||||
.textbox-help-link {
|
||||
right: 0;
|
||||
}
|
||||
min-height:36px;
|
||||
}
|
||||
|
||||
.help_format_text {
|
||||
position: absolute;
|
||||
bottom: -23px;
|
||||
right: 40px;
|
||||
font-size: 0.85em;
|
||||
@include opacity(0);
|
||||
@include single-transition(all 0.2s ease);
|
||||
|
||||
b, i, code {
|
||||
margin-right: 3px;
|
||||
}
|
||||
.textbox-preview-link{
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
margin-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.date-separator, .new-separator {
|
||||
text-align: center;
|
||||
height: 2em;
|
||||
@@ -709,6 +724,12 @@ body.ios {
|
||||
margin-top: 1.4em;
|
||||
}
|
||||
|
||||
li {
|
||||
> p {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-height: 400px;
|
||||
}
|
||||
@@ -765,14 +786,12 @@ body.ios {
|
||||
|
||||
.post__embed-visibility {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
font-size: 0;
|
||||
width: 30px;
|
||||
margin-top: -5px;
|
||||
margin: 5px 0 10px;
|
||||
display: inline-block;
|
||||
|
||||
&:hover{
|
||||
text-decoration: none;
|
||||
|
||||
@@ -22,6 +22,12 @@
|
||||
|
||||
}
|
||||
|
||||
|
||||
.help_format_text {
|
||||
bottom: -63px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.post {
|
||||
|
||||
&.post--root {
|
||||
|
||||
@@ -98,8 +98,6 @@
|
||||
|
||||
.post {
|
||||
|
||||
background: none !important;
|
||||
|
||||
.post__dropdown {
|
||||
line-height: 9px;
|
||||
text-decoration: none;
|
||||
@@ -120,9 +118,9 @@
|
||||
visibility: visible;
|
||||
display: none;
|
||||
|
||||
&.icon--show {
|
||||
display: inline-block;
|
||||
}
|
||||
&.icon--show {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -310,6 +308,11 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.row--invite {
|
||||
.col-sm-6 {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
.modal {
|
||||
.info__label {
|
||||
text-align: left;
|
||||
@@ -319,6 +322,10 @@
|
||||
.modal-action {
|
||||
margin-top: 10px;
|
||||
}
|
||||
button.close {
|
||||
font-weight: normal;
|
||||
font-size: 27px;
|
||||
}
|
||||
.modal-title {
|
||||
float: none;
|
||||
max-width: 90%;
|
||||
@@ -332,95 +339,89 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.row--invite {
|
||||
.col-sm-6 {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
.settings-modal {
|
||||
&.display--content {
|
||||
.modal-header {
|
||||
display: none;
|
||||
.settings-modal {
|
||||
&.display--content {
|
||||
.modal-header {
|
||||
display: none;
|
||||
}
|
||||
.settings-table {
|
||||
display: block;
|
||||
.settings-content {
|
||||
&.minimize-settings {
|
||||
display: block;
|
||||
}
|
||||
.section-min:hover {
|
||||
background: none;
|
||||
}
|
||||
.no-padding--left {
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
.settings-links {
|
||||
display: none;
|
||||
}
|
||||
.modal-header {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 5;
|
||||
.modal-title {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.user-settings {
|
||||
.tab-header {
|
||||
display: none;
|
||||
}
|
||||
.divider-dark.first {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.settings-table {
|
||||
display: block;
|
||||
padding: 0;
|
||||
.nav {
|
||||
&.position--top {
|
||||
top: auto;
|
||||
}
|
||||
position: relative;
|
||||
top: auto;
|
||||
width: 100%;
|
||||
}
|
||||
.settings-content {
|
||||
.section-edit {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: 0;
|
||||
padding-right: 0;
|
||||
.fa {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
&.minimize-settings {
|
||||
display: block;
|
||||
padding: 0;
|
||||
display: none;
|
||||
.user-settings {
|
||||
padding: 70px 20px 30px;
|
||||
}
|
||||
}
|
||||
.section-min:hover {
|
||||
background: none;
|
||||
}
|
||||
.no-padding--left {
|
||||
padding-left: 15px;
|
||||
background: none !important;
|
||||
}
|
||||
}
|
||||
.settings-links {
|
||||
display: none;
|
||||
}
|
||||
.modal-header {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 5;
|
||||
}
|
||||
.modal-title {
|
||||
padding-left: 20px;
|
||||
}
|
||||
.user-settings {
|
||||
.tab-header {
|
||||
display: none;
|
||||
}
|
||||
.divider-dark.first {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.settings-table {
|
||||
.nav {
|
||||
&.position--top {
|
||||
top: auto;
|
||||
}
|
||||
position: relative;
|
||||
top: auto;
|
||||
width: 100%;
|
||||
}
|
||||
.settings-content {
|
||||
.section-edit {
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
right: 0;
|
||||
padding-right: 0;
|
||||
.fa {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
&.minimize-settings {
|
||||
padding: 0;
|
||||
display: none;
|
||||
.user-settings {
|
||||
padding: 70px 20px 30px;
|
||||
}
|
||||
}
|
||||
.section-min:hover {
|
||||
background: none !important;
|
||||
}
|
||||
}
|
||||
.settings-links {
|
||||
background: #fff;
|
||||
}
|
||||
.nav {
|
||||
> li {
|
||||
> a {
|
||||
border-top: 1px solid #ddd;
|
||||
font-size: 1.1em;
|
||||
line-height: 2.7;
|
||||
color: #555;
|
||||
.glyphicon {
|
||||
margin-left: 7px;
|
||||
.nav {
|
||||
> li {
|
||||
> a {
|
||||
border-top: 1px solid #ddd;
|
||||
font-size: 1.1em;
|
||||
line-height: 2.7;
|
||||
color: #555;
|
||||
.glyphicon {
|
||||
margin-left: 7px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -572,7 +573,8 @@
|
||||
.glyphicon-refresh-animate {
|
||||
right: 33px;
|
||||
top: 15px;
|
||||
color: #aaa;
|
||||
color: #fff;
|
||||
color: rgba(255,255,255,0.5);
|
||||
}
|
||||
.form-control {
|
||||
border: none;
|
||||
@@ -800,22 +802,24 @@
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 480px) {
|
||||
.settings-modal {
|
||||
.modal {
|
||||
.settings-modal {
|
||||
|
||||
.settings-table {
|
||||
.settings-table {
|
||||
|
||||
.security-links {
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
.security-links {
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.tip-overlay.tip-overlay--sidebar {
|
||||
|
||||
@@ -12,358 +12,369 @@
|
||||
}
|
||||
}
|
||||
|
||||
.settings-modal {
|
||||
width:800px;
|
||||
max-width: 100%;
|
||||
.modal-content {
|
||||
width:800px;
|
||||
max-width: 100%;
|
||||
}
|
||||
.modal-back {
|
||||
width: 40px;
|
||||
height: 56px;
|
||||
background: url("../images/arrow-left.png") no-repeat;
|
||||
@include background-size(8px 13px);
|
||||
background-position: center;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
}
|
||||
.modal-body {
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
label {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.no-padding--left {
|
||||
padding-left: 0;
|
||||
}
|
||||
.padding-top {
|
||||
padding-top: 7px;
|
||||
&.x2 {
|
||||
padding-top: 14px;
|
||||
}
|
||||
&.x3 {
|
||||
padding-top: 21px;
|
||||
}
|
||||
}
|
||||
.padding-bottom {
|
||||
padding-bottom: 7px;
|
||||
&.x2 {
|
||||
padding-bottom: 14px;
|
||||
}
|
||||
&.x3 {
|
||||
padding-bottom: 21px;
|
||||
}
|
||||
.control-label {
|
||||
font-weight: 600;
|
||||
&.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
.profile-img {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
}
|
||||
.settings-table {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
> div {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
}
|
||||
.nav {
|
||||
position: fixed;
|
||||
width: 179px;
|
||||
&.position--top {
|
||||
top: 57px;
|
||||
}
|
||||
}
|
||||
.security-links {
|
||||
margin-right: 20px;
|
||||
.modal {
|
||||
.settings-modal {
|
||||
width: 800px;
|
||||
.modal-back {
|
||||
width: 50px;
|
||||
height: 40px;
|
||||
top: 12px;
|
||||
font-size: 27px;
|
||||
font-weight: normal;
|
||||
line-height: 32px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
text-align: center;
|
||||
.fa {
|
||||
margin-right: 6px;
|
||||
line-height: inherit;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
.settings-links {
|
||||
width: 180px;
|
||||
background: #FAFAFA;
|
||||
border-right: 1px solid #DDD;
|
||||
.modal-body {
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
min-height: calc(100% - 62px);
|
||||
}
|
||||
.settings-content {
|
||||
padding: 0px 20px 30px;
|
||||
.modal-header {
|
||||
display: none;
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
label {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.no-padding--left {
|
||||
padding-left: 0;
|
||||
}
|
||||
.padding-top {
|
||||
padding-top: 7px;
|
||||
&.x2 {
|
||||
padding-top: 14px;
|
||||
}
|
||||
.section-min {
|
||||
padding: 1em 0;
|
||||
margin-bottom: 0;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
@include clearfix;
|
||||
&:hover {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
&:hover .fa {
|
||||
display: inline-block;
|
||||
}
|
||||
&:hover .section-edit {
|
||||
text-decoration: underline;
|
||||
}
|
||||
&.x3 {
|
||||
padding-top: 21px;
|
||||
}
|
||||
|
||||
.section-max {
|
||||
background: rgba(black, 0.05);
|
||||
padding: 1em 0 1.3em;
|
||||
margin-bottom: 0;
|
||||
@include clearfix;
|
||||
.section-title {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.padding-bottom {
|
||||
padding-bottom: 7px;
|
||||
&.x2 {
|
||||
padding-bottom: 14px;
|
||||
}
|
||||
|
||||
.appearance-section {
|
||||
.theme-group {
|
||||
.input-group-addon {
|
||||
padding: 4px 5px;
|
||||
width: 40px;
|
||||
}
|
||||
img {
|
||||
border: 1px solid rgba(black, 0.15);
|
||||
width: 29px;
|
||||
}
|
||||
}
|
||||
.group--code {
|
||||
select {
|
||||
padding-right: 25px;
|
||||
}
|
||||
select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
&:before {
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
top: 11px;
|
||||
right: 50px;
|
||||
z-index: 5;
|
||||
content: "\f0d7";
|
||||
display: inline-block;
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
select {
|
||||
-moz-appearance:none;
|
||||
-webkit-appearance:none;
|
||||
appearance:none;
|
||||
}
|
||||
}
|
||||
.premade-themes {
|
||||
margin-bottom: 10px;
|
||||
.theme-label {
|
||||
font-weight: 400;
|
||||
margin-top: 5px;
|
||||
}
|
||||
img {
|
||||
border: 3px solid transparent;
|
||||
}
|
||||
.active {
|
||||
img {
|
||||
border-color: $primary-color;
|
||||
}
|
||||
}
|
||||
&.x3 {
|
||||
padding-bottom: 21px;
|
||||
}
|
||||
|
||||
.theme-elements {
|
||||
padding-left:15px;
|
||||
|
||||
.element {
|
||||
margin-right:10px;
|
||||
|
||||
&:nth-child(2n) {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.theme-elements__header {
|
||||
margin: 10px 20px 0px 0;
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 5px 0 10px;
|
||||
font-size: em(13.5px);
|
||||
.control-label {
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
|
||||
.fa-minus {
|
||||
&.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
.profile-img {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
}
|
||||
.settings-table {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
> div {
|
||||
display: table-cell;
|
||||
vertical-align: top;
|
||||
}
|
||||
.nav {
|
||||
position: fixed;
|
||||
width: 179px;
|
||||
&.position--top {
|
||||
top: 57px;
|
||||
}
|
||||
}
|
||||
.security-links {
|
||||
margin-right: 20px;
|
||||
.fa {
|
||||
margin-right: 6px;
|
||||
}
|
||||
}
|
||||
.settings-links {
|
||||
width: 180px;
|
||||
}
|
||||
.settings-content {
|
||||
padding: 0px 20px 30px;
|
||||
.modal-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.open {
|
||||
.fa-minus {
|
||||
.section-min {
|
||||
padding: 1em 0;
|
||||
margin-bottom: 0;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
@include clearfix;
|
||||
&:hover {
|
||||
background: #f9f9f9;
|
||||
}
|
||||
&:hover .fa {
|
||||
display: inline-block;
|
||||
}
|
||||
.fa-plus {
|
||||
display: none;
|
||||
&:hover .section-edit {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.header__icon {
|
||||
float: right;
|
||||
@include opacity(0.5);
|
||||
.section-max {
|
||||
background: rgba(black, 0.05);
|
||||
padding: 1em 0 1.3em;
|
||||
margin-bottom: 0;
|
||||
@include clearfix;
|
||||
.section-title {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.appearance-section {
|
||||
.theme-group {
|
||||
.input-group-addon {
|
||||
padding: 4px 5px;
|
||||
width: 40px;
|
||||
}
|
||||
img {
|
||||
border: 1px solid rgba(black, 0.15);
|
||||
width: 29px;
|
||||
}
|
||||
}
|
||||
.group--code {
|
||||
select {
|
||||
padding-right: 25px;
|
||||
}
|
||||
select::-ms-expand {
|
||||
display: none;
|
||||
}
|
||||
&:before {
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
top: 11px;
|
||||
right: 50px;
|
||||
z-index: 5;
|
||||
content: "\f0d7";
|
||||
display: inline-block;
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
select {
|
||||
-moz-appearance:none;
|
||||
-webkit-appearance:none;
|
||||
appearance:none;
|
||||
}
|
||||
}
|
||||
.premade-themes {
|
||||
margin-bottom: 10px;
|
||||
.theme-label {
|
||||
font-weight: 400;
|
||||
margin-top: 5px;
|
||||
}
|
||||
img {
|
||||
border: 3px solid transparent;
|
||||
}
|
||||
.active {
|
||||
img {
|
||||
border-color: $primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.theme-elements__body {
|
||||
padding-top: 5px;
|
||||
display: none;
|
||||
@include legacy-pie-clearfix;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
padding: 20px 0 0 20px;
|
||||
margin: 0 20px 0 0;
|
||||
@include border-radius(0 0 3px 3px);
|
||||
}
|
||||
.theme-elements {
|
||||
padding-left:15px;
|
||||
|
||||
.custom-label {
|
||||
white-space: nowrap;
|
||||
font-weight: normal;
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.input-group-addon {
|
||||
background: transparent;
|
||||
}
|
||||
.radio {
|
||||
label {
|
||||
.element {
|
||||
margin-right:10px;
|
||||
|
||||
&:nth-child(2n) {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.theme-elements__header {
|
||||
margin: 10px 20px 0px 0;
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 5px 0 10px;
|
||||
font-size: em(13.5px);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
|
||||
.fa-minus {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.open {
|
||||
.fa-minus {
|
||||
display: inline-block;
|
||||
}
|
||||
.fa-plus {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.header__icon {
|
||||
float: right;
|
||||
@include opacity(0.5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.theme-elements__body {
|
||||
padding-top: 5px;
|
||||
display: none;
|
||||
@include legacy-pie-clearfix;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
padding: 20px 0 0 20px;
|
||||
margin: 0 20px 0 0;
|
||||
@include border-radius(0 0 3px 3px);
|
||||
}
|
||||
|
||||
.custom-label {
|
||||
white-space: nowrap;
|
||||
font-weight: normal;
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.input-group-addon {
|
||||
background: transparent;
|
||||
}
|
||||
.radio {
|
||||
label {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-title {
|
||||
margin-bottom: 5px;
|
||||
font-weight: 600;
|
||||
padding-right: 50px;
|
||||
}
|
||||
|
||||
.section-edit {
|
||||
text-align: right;
|
||||
margin-bottom: 5px;
|
||||
.fa {
|
||||
margin-right: 5px;
|
||||
font-size: 12px;
|
||||
@include opacity(0.5);
|
||||
display: none;
|
||||
&.fa-chevron-down {
|
||||
top: -1px;
|
||||
margin-right: 0;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-describe {
|
||||
@include opacity(0.7);
|
||||
white-space:pre;
|
||||
@include clearfix;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.divider-dark {
|
||||
border-bottom:1px solid #aaaaaa;
|
||||
}
|
||||
|
||||
.divider-light {
|
||||
border-bottom:1px solid lightgrey;
|
||||
}
|
||||
|
||||
.setting-list {
|
||||
padding: 0;
|
||||
list-style-type:none;
|
||||
}
|
||||
|
||||
.setting-list__hint {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.mentions-input {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.setting-list-item {
|
||||
margin-top:7px;
|
||||
}
|
||||
.has-error {
|
||||
color: #a94442;
|
||||
}
|
||||
|
||||
.file-status {
|
||||
font-size: 13px;
|
||||
margin-top: 8px;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.confirm-import {
|
||||
padding: 4px 10px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.section-title {
|
||||
margin-bottom: 5px;
|
||||
font-weight: 600;
|
||||
padding-right: 50px;
|
||||
}
|
||||
|
||||
.section-edit {
|
||||
text-align: right;
|
||||
margin-bottom: 5px;
|
||||
.fa {
|
||||
margin-right: 5px;
|
||||
font-size: 12px;
|
||||
@include opacity(0.5);
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.section-describe {
|
||||
@include opacity(0.7);
|
||||
white-space:pre;
|
||||
@include clearfix;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.divider-dark {
|
||||
border-bottom:1px solid #aaaaaa;
|
||||
}
|
||||
|
||||
.divider-light {
|
||||
border-bottom:1px solid lightgrey;
|
||||
}
|
||||
|
||||
.setting-list {
|
||||
padding: 0;
|
||||
list-style-type:none;
|
||||
}
|
||||
|
||||
.setting-list__hint {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.mentions-input {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.setting-list-item {
|
||||
margin-top:7px;
|
||||
}
|
||||
.has-error {
|
||||
color: #a94442;
|
||||
}
|
||||
|
||||
.file-status {
|
||||
font-size: 13px;
|
||||
margin-top: 8px;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.confirm-import {
|
||||
padding: 4px 10px;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.nav-pills {
|
||||
> li {
|
||||
margin: 0;
|
||||
a {
|
||||
border-radius: 0;
|
||||
color: #777;
|
||||
}
|
||||
.glyphicon {
|
||||
width: 25px;
|
||||
top: 2px;
|
||||
}
|
||||
&:hover {
|
||||
.nav-pills {
|
||||
> li {
|
||||
margin: 0;
|
||||
a {
|
||||
background: #E6F2FA;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
a {
|
||||
color: #111;
|
||||
background-color: #E1E1E1;
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
}
|
||||
}
|
||||
a, a:hover, a:focus {
|
||||
padding-right: 10px;
|
||||
background-color: rgba(black, 0.1);
|
||||
padding: 8px 5px 8px 15px;
|
||||
border-radius: 0;
|
||||
font-weight: 400;
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: #777;
|
||||
}
|
||||
.glyphicon {
|
||||
width: 25px;
|
||||
top: 2px;
|
||||
}
|
||||
&:hover {
|
||||
a {
|
||||
background-color: rgba(black, 0.1);
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
a {
|
||||
color: #111;
|
||||
background-color: #E1E1E1;
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
}
|
||||
}
|
||||
a, a:hover, a:focus {
|
||||
background-color: rgba(black, 0.1);
|
||||
border-radius: 0;
|
||||
font-weight: 400;
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
h3 {
|
||||
font-size: em(20px);
|
||||
}
|
||||
h3 {
|
||||
font-size: em(20px);
|
||||
}
|
||||
}
|
||||
|
||||
.channel-settings {
|
||||
|
||||
@@ -190,10 +190,10 @@
|
||||
"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.usernameAttrEx": "Ex \"sAMAccountName\"",
|
||||
"admin.ldap.usernameAttrTitle": "Username Attribute:",
|
||||
"admin.licence.keyMigration": "If you’re migrating servers you may need to remove your license key from this server in order to install it on a new server. To start,<a href=\"http://mattermost.com\" target=\"_blank\">disable all Enterprise Edition features on this server</a>.This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.",
|
||||
"admin.licence.keyMigration": "If you’re migrating servers you may need to remove your license key from this server in order to install it on a new server. To start, <a href=\"http://mattermost.com\" target=\"_blank\">disable all Enterprise Edition features on this server</a>. This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.",
|
||||
"admin.license.edition": "Edition: ",
|
||||
"admin.license.enterpriseEdition": "Mattermost Enterprise Edition. Designed for enterprise-scale communication.",
|
||||
"admin.license.enterpriseType": "<div><p>This compiled release of Mattermost platform is provided under a <a href=\"http://mattermost.com\" target=\"_blank\">commercial license</a>from Mattermost, Inc. based on your subscription level and is subject to the <a href=\"{terms}\" target=\"_blank\">Terms of Service.</a></p><p>Your subscription details are as follows:</p>Name: {name}<br />Company or organization name: {company}<br/>Number of users: {users}<br/>License issued: {issued}<br/>Start date of license: {start}<br/>Expiry date of license: {expires}<br/>LDAP: {ldap}<br/></div>",
|
||||
"admin.license.enterpriseType": "<div><p>This compiled release of Mattermost platform is provided under a <a href=\"http://mattermost.com\" target=\"_blank\">commercial license</a> from Mattermost, Inc. based on your subscription level and is subject to the <a href=\"{terms}\" target=\"_blank\">Terms of Service.</a></p><p>Your subscription details are as follows:</p>Name: {name}<br />Company or organization name: {company}<br/>Number of users: {users}<br/>License issued: {issued}<br/>Start date of license: {start}<br/>Expiry date of license: {expires}<br/>LDAP: {ldap}<br/></div>",
|
||||
"admin.license.key": "License Key: ",
|
||||
"admin.license.keyRemove": "Remove Enterprise License and Downgrade Server",
|
||||
"admin.license.removing": "Removing License...",
|
||||
@@ -277,8 +277,8 @@
|
||||
"admin.service.attemptTitle": "Maximum Login Attempts:",
|
||||
"admin.service.cmdsDesc": "When true, user created slash commands will be allowed.",
|
||||
"admin.service.cmdsTitle": "Enable Slash Commands: ",
|
||||
"admin.service.corsEx": "http://example.com https://example.com",
|
||||
"admin.service.corsDescription": "Enable HTTP Cross origin request from specific domains (separate by a spacebar). Use \"*\" if you want to allow CORS from any domain or leave it blank to disable it.",
|
||||
"admin.service.corsEx": "http://example.com https://example.com",
|
||||
"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: ",
|
||||
@@ -561,7 +561,7 @@
|
||||
"channel_loader.wrote": " wrote: ",
|
||||
"channel_members_modal.addNew": " Add New Members",
|
||||
"channel_members_modal.close": "Close",
|
||||
"channel_members_modal.removeMember": "Remove Member",
|
||||
"channel_members_modal.remove": "Remove",
|
||||
"channel_memebers_modal.members": " Members",
|
||||
"channel_modal.cancel": "Cancel",
|
||||
"channel_modal.channel": "Channel",
|
||||
@@ -966,7 +966,7 @@
|
||||
"sso_signup.team_error": "Please enter a team name",
|
||||
"suggestion.mention.all": "Notifies everyone in the team",
|
||||
"suggestion.mention.channel": "Notifies everyone in the channel",
|
||||
"suggestion.search.private": "Public Groups",
|
||||
"suggestion.search.private": "Private Groups",
|
||||
"suggestion.search.public": "Public Channels",
|
||||
"team_export_tab.download": "download",
|
||||
"team_export_tab.export": "Export",
|
||||
@@ -1054,9 +1054,15 @@
|
||||
"team_signup_welcome.validEmailError": "Please enter a valid email address",
|
||||
"team_signup_welcome.welcome": "Welcome to:",
|
||||
"team_signup_welcome.yes": "Yes, this address is correct",
|
||||
"textbox.bold": "**bold**",
|
||||
"textbox.edit": "Edit message",
|
||||
"textbox.help": "Help",
|
||||
"textbox.inlinecode": "`inline code`",
|
||||
"textbox.italic": "_italic_",
|
||||
"textbox.preformatted": "```preformatted```",
|
||||
"textbox.preview": "Preview",
|
||||
"textbox.quote": ">quote",
|
||||
"textbox.strike": "strike",
|
||||
"tutorial_intro.allSet": "You’re all set",
|
||||
"tutorial_intro.end": "Click “Next” to enter Town Square. This is the first channel teammates see when they sign up. Use it for posting updates everyone needs to know.",
|
||||
"tutorial_intro.invite": "Invite teammates",
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
"admin.ldap.uernameAttrDesc": "El atributo en el servidor LDAP que se utilizará para poblar el nombre de usuario en Mattermost. Este puede ser igual al Attributo Id.",
|
||||
"admin.ldap.usernameAttrEx": "Ej \"sAMAccountName\"",
|
||||
"admin.ldap.usernameAttrTitle": "Atributo Usuario:",
|
||||
"admin.licence.keyMigration": "Si estás migrando servidores es posible que necesites remover tu licencia de este servidor para poder instalarlo en un servidor nuevo. Para empezar,<a href=\"http://mattermost.com\" target=\"_blank\">deshabilita todas las características de la Edición Enterprise de este servidor</a>.Esta operación habilitará la opción para remover la licencia y degradar este servidor de la Edición Enterprise a la Edición Team.",
|
||||
"admin.licence.keyMigration": "Si estás migrando servidores es posible que necesites remover tu licencia de este servidor para poder instalarlo en un servidor nuevo. Para empezar, <a href=\"http://mattermost.com\" target=\"_blank\">deshabilita todas las características de la Edición Enterprise de este servidor</a>. Esta operación habilitará la opción para remover la licencia y degradar este servidor de la Edición Enterprise a la Edición Team.",
|
||||
"admin.license.edition": "Edición: ",
|
||||
"admin.license.enterpriseEdition": "Mattermost Edición Enterprise. Diseñada para comunicación de escala empresarial.",
|
||||
"admin.license.enterpriseType": "<div><p>Esta versión compilada de la plataforma de Mattermost es provista bajo una <a href=\"http://mattermost.com\" target=\"_blank\">licencia comercial</a> de Mattermost, Inc. en función en su nivel de subscripción y bajo los <a href=\"{terms}\" target=\"_blank\">Términos del Servicio.</a></p><p>Los detalles de tu subscripción son los siguientes:</p>Nombre: {name}<br />Nombre compañía u organización: {company}<br/>Cantidad de usuarios: {users}<br/>Licencia emitida: {issued}<br/>Fecha de inicio: {start}<br/>Fecha de expiración: {expires}<br/>LDAP: {ldap}<br/></div>",
|
||||
@@ -277,8 +277,8 @@
|
||||
"admin.service.attemptTitle": "Máximo de intentos de conexión:",
|
||||
"admin.service.cmdsDesc": "Cuando es verdadero, se permite la creación de comandos de barra por usuarios.",
|
||||
"admin.service.cmdsTitle": "Habilitar Comandos de Barra: ",
|
||||
"admin.service.corsEx": "http://ejemplo.com https://ejemplo.com",
|
||||
"admin.service.corsDescription": "Habilita las solicitudes HTTP de origen cruzado para dominios en específico (separados por un espacio). Utiliza \"*\" si quieres habilitar CORS desde cualquier dominio o deja el campo en blanco para deshabilitarlo.",
|
||||
"admin.service.corsEx": "http://ejemplo.com https://ejemplo.com",
|
||||
"admin.service.corsTitle": "Permitir Solicitudes de Origen Cruzado desde:",
|
||||
"admin.service.developerDesc": "(Opción de Desarrollador) Cuando está asignado en verdadero, información extra sobre errores se muestra en el UI.",
|
||||
"admin.service.developerTitle": "Habilitar modo de Desarrollador: ",
|
||||
@@ -561,7 +561,6 @@
|
||||
"channel_loader.wrote": " escribió: ",
|
||||
"channel_members_modal.addNew": " Agregar nuevos Miembros",
|
||||
"channel_members_modal.close": "Cerrar",
|
||||
"channel_members_modal.removeMember": "Elminar Miembro",
|
||||
"channel_memebers_modal.members": " Miembros",
|
||||
"channel_modal.cancel": "Cancelar",
|
||||
"channel_modal.channel": "Canal",
|
||||
@@ -702,6 +701,7 @@
|
||||
"get_link.copy": "Copiar Enlace",
|
||||
"get_post_link_modal.help": "En enlace de abajo permite a los usuarios autorizados a ver tu mensaje.",
|
||||
"get_post_link_modal.title": "Copiar enlace Permanente",
|
||||
"get_team_invite_link_modal.help": "Envía el siguiente enlace a tus compañeros para que se registren a este equipo. El enlace de invitación al equipo puede ser compartido con multiples compañeros y el mismo no cambiará a menos que sea regenerado en la Configuración del Equipo por un Administrador del Equipo.",
|
||||
"get_team_invite_link_modal.helpDisabled": "La creación de usuario ha sido deshabilitada para tu equipo. Por favor solicita más detalles a tu administrador de equipo.",
|
||||
"get_team_invite_link_modal.title": "Enlace de Invitación al Equipo",
|
||||
"intro_messages.DM": "Este es el inicio de tu historial de mensajes directos con {teammate}.<br />Los mensajes directos y archivos que se comparten aquí no son mostrados a personas fuera de esta área.",
|
||||
@@ -982,18 +982,18 @@
|
||||
"team_import_tab.summary": "Ver Resumen",
|
||||
"team_member_modal.close": "Cerrar",
|
||||
"team_member_modal.members": "{team} Miembros",
|
||||
"team_members_modal.confirmDemoteDescription": "Si te degradas a ti mismo de la función de Administrador de Sistema y no hay otro usuario con privilegios de Administrador de Sistema, tendrás que volver a asignar un Administrador del Sistema accediendo al servidor de Mattermost a través de un terminal y ejecutar el siguiente comando.",
|
||||
"team_members_modal.confirmDemoteRoleTitle": "Confirmar el decenso del rol de Administrador de Sistema",
|
||||
"team_members_modal.confirmDemotion": "Confirmar decenso",
|
||||
"team_members_modal.confirmDemotionCmd": "platform -assign_role -team_name=\"tuequipo\" -email=\"nombre@tuempresa.com\" -role=\"system_admin\"",
|
||||
"team_members_modal.inactive": "Inactivo",
|
||||
"team_members_modal.makeActive": "Activar",
|
||||
"team_members_modal.makeAdmin": "Convertir a Admin de Equipo",
|
||||
"team_members_modal.makeInactive": "Desactivar",
|
||||
"team_members_modal.makeMember": "Convertir en Miembro",
|
||||
"team_members_modal.member": "Miembro",
|
||||
"team_members_modal.systemAdmin": "Administrador de Sistema",
|
||||
"team_members_modal.teamAdmin": "Admin de Equipo",
|
||||
"team_members_dropdown.confirmDemoteDescription": "Si te degradas a ti mismo de la función de Administrador de Sistema y no hay otro usuario con privilegios de Administrador de Sistema, tendrás que volver a asignar un Administrador del Sistema accediendo al servidor de Mattermost a través de un terminal y ejecutar el siguiente comando.",
|
||||
"team_members_dropdown.confirmDemoteRoleTitle": "Confirmar el decenso del rol de Administrador de Sistema",
|
||||
"team_members_dropdown.confirmDemotion": "Confirmar decenso",
|
||||
"team_members_dropdown.confirmDemotionCmd": "platform -assign_role -team_name=\"tuequipo\" -email=\"nombre@tuempresa.com\" -role=\"system_admin\"",
|
||||
"team_members_dropdown.inactive": "Inactivo",
|
||||
"team_members_dropdown.makeActive": "Activar",
|
||||
"team_members_dropdown.makeAdmin": "Hacer Admin de Equipo",
|
||||
"team_members_dropdown.makeInactive": "Inactivar",
|
||||
"team_members_dropdown.makeMember": "Hacer Miembro",
|
||||
"team_members_dropdown.member": "Miembro",
|
||||
"team_members_dropdown.systemAdmin": "Admin del Sistema",
|
||||
"team_members_dropdown.teamAdmin": "Admin del Equipo",
|
||||
"team_settings_modal.exportTab": "Exportar",
|
||||
"team_settings_modal.generalTab": "General",
|
||||
"team_settings_modal.importTab": "Importar",
|
||||
|
||||
@@ -21,33 +21,6 @@
|
||||
"activity_log_modal.android": "Android",
|
||||
"activity_log_modal.androidNativeApp": "App Nativo Android",
|
||||
"activity_log_modal.iphoneNativeApp": "App Nativo para iPhone",
|
||||
"analytics.chart.loading": "Carregando...",
|
||||
"analytics.chart.meaningful": "Não há dados suficientes para uma representação significativa.",
|
||||
"analytics.system.activeUsers": "Usuários Ativos Com Posts",
|
||||
"analytics.system.channelTypes": "Tipos de Canal",
|
||||
"analytics.system.postTypes": "Posts, Arquivos e Hashtags",
|
||||
"analytics.system.privateGroups": "Grupos Privados",
|
||||
"analytics.system.publicChannels": "Canais Públicos",
|
||||
"analytics.system.textPosts": "Post com Texto somente",
|
||||
"analytics.system.title": "Estatísticas do Sistema",
|
||||
"analytics.system.totalFilePosts": "Posts com Arquivos",
|
||||
"analytics.system.totalHashtagPosts": "Posts com Hashtags",
|
||||
"analytics.system.totalIncomingWebhooks": "Webhooks Entrada",
|
||||
"analytics.system.totalOutgoingWebhooks": "Webhooks Saída",
|
||||
"analytics.system.totalCommands": "Total de Comandos",
|
||||
"analytics.system.totalSessions": "Total de Sessões",
|
||||
"analytics.system.totalPosts": "Total Posts",
|
||||
"analytics.system.totalUsers": "Total de Usuários",
|
||||
"analytics.system.totalTeams": "Total de Equipes",
|
||||
"analytics.system.totalChannels": "Total de Canais",
|
||||
"analytics.team.activeUsers": "Usuários Ativos Com Posts",
|
||||
"analytics.team.recentActive": "Usuários Ativos Recentes",
|
||||
"analytics.team.newlyCreated": "Novos Usuários Criados",
|
||||
"analytics.team.privateGroups": "Grupos Privados",
|
||||
"analytics.team.publicChannels": "Canais Públicos",
|
||||
"analytics.team.title": "Estatísticas de Equipe para {team}",
|
||||
"analytics.team.totalPosts": "Total Posts",
|
||||
"analytics.team.totalUsers": "Total de Usuários",
|
||||
"admin.audits.reload": "Recarregar",
|
||||
"admin.audits.title": "Atividade de Usuário",
|
||||
"admin.email.allowEmailSignInDescription": "Quando verdadeiro, Mattermost permite aos usuários fazer login usando o e-mail e senha.",
|
||||
@@ -217,10 +190,10 @@
|
||||
"admin.ldap.uernameAttrDesc": "O atributo no servidor LDAP que será usado para preencher o campo nome de usuário no Mattermost. Este pode ser o mesmo que o Atributo ID.",
|
||||
"admin.ldap.usernameAttrEx": "Ex \"sAMAccountName\"",
|
||||
"admin.ldap.usernameAttrTitle": "Atributo do Usuário:",
|
||||
"admin.licence.keyMigration": "Se você estiver migrando seu servidor você pode precisar remover sua chave da licença deste servidor a pedido para instala-la em um novo servidor. Para iniciar,<a href=\"http://mattermost.com\" target=\"_blank\">desativar todos os recursos Enterprise Edition deste servidor</a>.Isto irá habilitar para remover a chave da licença e fazer downgrade deste servidor Enterprise Edition para Team Edition.",
|
||||
"admin.licence.keyMigration": "Se você estiver migrando seu servidor você pode precisar remover sua chave da licença deste servidor a pedido para instala-la em um novo servidor. Para iniciar, <a href=\"http://mattermost.com\" target=\"_blank\">desativar todos os recursos Enterprise Edition deste servidor</a>. Isto irá habilitar para remover a chave da licença e fazer downgrade deste servidor Enterprise Edition para Team Edition.",
|
||||
"admin.license.edition": "Edição: ",
|
||||
"admin.license.enterpriseEdition": "Mattermost Enterprise Edition. Desenvolvido para escala empresarial de comunicação.",
|
||||
"admin.license.enterpriseType": "<div><p>Esta versão compilada da plataforma Mattermost é fornecida sob a <a href=\"http://mattermost.com\" target=\"_blank\">licença comercial</a>para Mattermost, Inc. com base em seu nível de subscrição e está sujeito a <a href=\"{terms}\" target=\"_blank\">Termos de Serviço.</a></p><p>Os detalhes de sua assinatura, são como segue:</p>Nome: {name}<br />Nome da Empresa ou organização: {company}<br/>Número de usuários: {users}<br/>Licença emitida: {issued}<br/>Data de Início da licença: {start}<br/>Data de expiração da licença: {expires}<br/>LDAP: {ldap}<br/></div>",
|
||||
"admin.license.enterpriseType": "<div><p>Esta versão compilada da plataforma Mattermost é fornecida sob a <a href=\"http://mattermost.com\" target=\"_blank\">licença comercial</a> para Mattermost, Inc. com base em seu nível de subscrição e está sujeito a <a href=\"{terms}\" target=\"_blank\">Termos de Serviço.</a></p><p>Os detalhes de sua assinatura, são como segue:</p>Nome: {name}<br />Nome da Empresa ou organização: {company}<br/>Número de usuários: {users}<br/>Licença emitida: {issued}<br/>Data de Início da licença: {start}<br/>Data de expiração da licença: {expires}<br/>LDAP: {ldap}<br/></div>",
|
||||
"admin.license.key": "Chave da Licença: ",
|
||||
"admin.license.keyRemove": "Remover a Licença Enterprise e fazer Downgrade do Servidor",
|
||||
"admin.license.removing": "Removendo a Licença...",
|
||||
@@ -451,6 +424,33 @@
|
||||
"admin.user_item.resetPwd": "Resetar Senha",
|
||||
"admin.user_item.sysAdmin": "Admin do Sistema",
|
||||
"admin.user_item.teamAdmin": "Admin Equipe",
|
||||
"analytics.chart.loading": "Carregando...",
|
||||
"analytics.chart.meaningful": "Não há dados suficientes para uma representação significativa.",
|
||||
"analytics.system.activeUsers": "Usuários Ativos Com Posts",
|
||||
"analytics.system.channelTypes": "Tipos de Canal",
|
||||
"analytics.system.postTypes": "Posts, Arquivos e Hashtags",
|
||||
"analytics.system.privateGroups": "Grupos Privados",
|
||||
"analytics.system.publicChannels": "Canais Públicos",
|
||||
"analytics.system.textPosts": "Post com Texto somente",
|
||||
"analytics.system.title": "Estatísticas do Sistema",
|
||||
"analytics.system.totalChannels": "Total de Canais",
|
||||
"analytics.system.totalCommands": "Total de Comandos",
|
||||
"analytics.system.totalFilePosts": "Posts com Arquivos",
|
||||
"analytics.system.totalHashtagPosts": "Posts com Hashtags",
|
||||
"analytics.system.totalIncomingWebhooks": "Webhooks Entrada",
|
||||
"analytics.system.totalOutgoingWebhooks": "Webhooks Saída",
|
||||
"analytics.system.totalPosts": "Total Posts",
|
||||
"analytics.system.totalSessions": "Total de Sessões",
|
||||
"analytics.system.totalTeams": "Total de Equipes",
|
||||
"analytics.system.totalUsers": "Total de Usuários",
|
||||
"analytics.team.activeUsers": "Usuários Ativos Com Posts",
|
||||
"analytics.team.newlyCreated": "Novos Usuários Criados",
|
||||
"analytics.team.privateGroups": "Grupos Privados",
|
||||
"analytics.team.publicChannels": "Canais Públicos",
|
||||
"analytics.team.recentActive": "Usuários Ativos Recentes",
|
||||
"analytics.team.title": "Estatísticas de Equipe para {team}",
|
||||
"analytics.team.totalPosts": "Total Posts",
|
||||
"analytics.team.totalUsers": "Total de Usuários",
|
||||
"audit_table.accountActive": "Conta inativada",
|
||||
"audit_table.accountInactive": "Conta inativada",
|
||||
"audit_table.action": "Ação",
|
||||
@@ -547,18 +547,17 @@
|
||||
"channel_invite.add": " Adicionar",
|
||||
"channel_invite.addNewMembers": "Adicionar Novo Membro para ",
|
||||
"channel_invite.close": "Fechar",
|
||||
"channel_loader.connection_error": "Parece existir um problema com a sua conexão de internet.",
|
||||
"channel_loader.posted": "Postado",
|
||||
"channel_loader.socketError": "Por favor verifique sua conexão, Mattermost está inalcançável. Se este problema persistir, peça ao administrador para verificar a porta WebSocket.",
|
||||
"channel_loader.someone": "Alguém",
|
||||
"channel_loader.something": " fez algo novo",
|
||||
"channel_loader.unknown_error": "Recebido um código de status inesperado do servidor.",
|
||||
"channel_loader.uploadedFile": " enviado um arquivo",
|
||||
"channel_loader.uploadedImage": " enviado uma imagem",
|
||||
"channel_loader.wrote": " escreveu: ",
|
||||
"channel_loader.connection_error": "Parece existir um problema com a sua conexão de internet.",
|
||||
"channel_loader.unknown_error": "Recebido um código de status inesperado do servidor.",
|
||||
"channel_members_modal.addNew": " Adicionar Novos Membros",
|
||||
"channel_members_modal.close": "Fechar",
|
||||
"channel_members_modal.removeMember": "Remover Membro",
|
||||
"channel_memebers_modal.members": " Membros",
|
||||
"channel_modal.cancel": "Cancelar",
|
||||
"channel_modal.channel": "Canal",
|
||||
@@ -961,7 +960,6 @@
|
||||
"sso_signup.team_error": "Por favor entre o nome da equipe",
|
||||
"suggestion.mention.all": "Notificar todo mundo na equipe",
|
||||
"suggestion.mention.channel": "Notifica todos no canal",
|
||||
"suggestion.search.private": "Grupos Públicos",
|
||||
"suggestion.search.public": "Canais Públicos",
|
||||
"team_export_tab.download": "download",
|
||||
"team_export_tab.export": "Exportar",
|
||||
@@ -1049,9 +1047,15 @@
|
||||
"team_signup_welcome.validEmailError": "Por favor entre um endereço de e-mail válido",
|
||||
"team_signup_welcome.welcome": "Bem-vindo:",
|
||||
"team_signup_welcome.yes": "Sim, este endereço de email está correto",
|
||||
"textbox.bold": "**negrito**",
|
||||
"textbox.edit": "Editar mensagem",
|
||||
"textbox.help": "Ajuda",
|
||||
"textbox.inlinecode": "`código`",
|
||||
"textbox.italic": "_itálico_",
|
||||
"textbox.preformatted": "```pre-formatado```",
|
||||
"textbox.preview": "Pré-visualização",
|
||||
"textbox.quote": ">citado",
|
||||
"textbox.strike": "tachado",
|
||||
"tutorial_intro.allSet": "Está tudo pronto",
|
||||
"tutorial_intro.end": "Clique em “Próximo” para entrar Town Square. Este é o primeiro canal que sua equipe de trabalho vê quando eles se inscrevem. Use para postar atualizações que todos precisam saber.",
|
||||
"tutorial_intro.invite": "Convidar pessoas para equipe",
|
||||
|
||||
Ссылка в новой задаче
Block a user