summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/channel.go12
-rw-r--r--api/slackimport.go5
-rw-r--r--api/user.go5
-rw-r--r--i18n/en.json2
-rw-r--r--i18n/es.json4
-rw-r--r--web/react/components/admin_console/image_settings.jsx5
-rw-r--r--web/react/components/admin_console/user_item.jsx4
-rw-r--r--web/react/components/channel_header.jsx2
-rw-r--r--web/react/components/create_comment.jsx4
-rw-r--r--web/react/components/create_post.jsx2
-rw-r--r--web/react/components/delete_post_modal.jsx8
-rw-r--r--web/react/components/edit_channel_header_modal.jsx2
-rw-r--r--web/react/components/member_list_item.jsx4
-rw-r--r--web/react/components/member_list_team_item.jsx4
-rw-r--r--web/react/components/more_channels.jsx2
-rw-r--r--web/react/components/more_direct_channels.jsx4
-rw-r--r--web/react/components/navbar.jsx4
-rw-r--r--web/react/components/post.jsx6
-rw-r--r--web/react/components/post_deleted_modal.jsx6
-rw-r--r--web/react/components/posts_view.jsx6
-rw-r--r--web/react/components/rhs_comment.jsx4
-rw-r--r--web/react/components/rhs_header_post.jsx8
-rw-r--r--web/react/components/search_bar.jsx8
-rw-r--r--web/react/components/search_results_header.jsx8
-rw-r--r--web/react/components/sidebar.jsx4
-rw-r--r--web/react/components/signup_user_complete.jsx11
-rw-r--r--web/react/components/user_settings/import_theme_modal.jsx4
-rw-r--r--web/react/components/user_settings/manage_command_hooks.jsx32
-rw-r--r--web/react/components/user_settings/user_settings_advanced.jsx4
-rw-r--r--web/react/components/user_settings/user_settings_display.jsx75
-rw-r--r--web/react/components/user_settings/user_settings_modal.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_theme.jsx2
-rw-r--r--web/react/dispatcher/event_helpers.jsx10
-rw-r--r--web/react/stores/admin_store.jsx8
-rw-r--r--web/react/stores/channel_store.jsx10
-rw-r--r--web/react/stores/error_store.jsx2
-rw-r--r--web/react/stores/file_store.jsx2
-rw-r--r--web/react/stores/post_store.jsx32
-rw-r--r--web/react/stores/preference_store.jsx4
-rw-r--r--web/react/stores/search_store.jsx4
-rw-r--r--web/react/stores/team_store.jsx2
-rw-r--r--web/react/stores/user_store.jsx12
-rw-r--r--web/react/utils/async_client.jsx66
-rw-r--r--web/react/utils/channel_intro_messages.jsx2
-rw-r--r--web/react/utils/constants.jsx63
-rw-r--r--web/react/utils/utils.jsx5
-rw-r--r--web/sass-files/sass/partials/_base.scss4
-rw-r--r--web/sass-files/sass/partials/_markdown.scss1
-rw-r--r--web/sass-files/sass/partials/_mentions.scss16
-rw-r--r--web/sass-files/sass/partials/_modal.scss16
-rw-r--r--web/sass-files/sass/partials/_popover.scss3
-rw-r--r--web/sass-files/sass/partials/_post.scss31
-rw-r--r--web/sass-files/sass/partials/_responsive.scss5
-rw-r--r--web/sass-files/sass/partials/_settings.scss17
-rw-r--r--web/sass-files/sass/partials/_sidebar--right.scss16
-rw-r--r--web/static/i18n/en.json18
-rw-r--r--web/static/i18n/es.json16
-rw-r--r--web/static/images/postArrows.pngbin5684 -> 0 bytes
58 files changed, 344 insertions, 274 deletions
diff --git a/api/channel.go b/api/channel.go
index a27b3c1bf..ff5b0f8da 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -301,11 +301,11 @@ func PostUpdateChannelHeaderMessageAndForget(c *Context, channelId string, oldCh
var message string
if oldChannelHeader == "" {
- message = fmt.Sprintf(c.T("api.channel.post_update_channel_header_message_and_forget.updated_to"), user.Username, newChannelHeader)
+ message = fmt.Sprintf(utils.T("api.channel.post_update_channel_header_message_and_forget.updated_to"), user.Username, newChannelHeader)
} else if newChannelHeader == "" {
- message = fmt.Sprintf(c.T("api.channel.post_update_channel_header_message_and_forget.removed"), user.Username, oldChannelHeader)
+ message = fmt.Sprintf(utils.T("api.channel.post_update_channel_header_message_and_forget.removed"), user.Username, oldChannelHeader)
} else {
- message = fmt.Sprintf(c.T("api.channel.post_update_channel_header_message_and_forget.updated_from"), user.Username, oldChannelHeader, newChannelHeader)
+ message = fmt.Sprintf(utils.T("api.channel.post_update_channel_header_message_and_forget.updated_from"), user.Username, oldChannelHeader, newChannelHeader)
}
post := &model.Post{
@@ -460,7 +460,7 @@ func JoinChannel(c *Context, channelId string, role string) {
c.Err = err
return
}
- PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(c.T("api.channel.join_channel.post_and_forget"), user.Username))
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(utils.T("api.channel.join_channel.post_and_forget"), user.Username))
} else {
c.Err = model.NewLocAppError("join", "api.channel.join_channel.permissions.app_error", nil, "")
c.Err.StatusCode = http.StatusForbidden
@@ -578,7 +578,7 @@ func leave(c *Context, w http.ResponseWriter, r *http.Request) {
RemoveUserFromChannel(c.Session.UserId, c.Session.UserId, channel)
- PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(c.T("api.channel.leave.left"), user.Username))
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(utils.T("api.channel.leave.left"), user.Username))
result := make(map[string]string)
result["id"] = channel.Id
@@ -849,7 +849,7 @@ func addMember(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAudit("name=" + channel.Name + " user_id=" + userId)
- PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(c.T("api.channel.add_member.added"), nUser.Username, oUser.Username))
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(utils.T("api.channel.add_member.added"), nUser.Username, oUser.Username))
<-Srv.Store.Channel().UpdateLastViewedAt(id, oUser.Id)
w.Write([]byte(cm.ToJson()))
diff --git a/api/slackimport.go b/api/slackimport.go
index 6497ac261..5ca209c5c 100644
--- a/api/slackimport.go
+++ b/api/slackimport.go
@@ -75,7 +75,10 @@ func SlackParseUsers(data io.Reader) []SlackUser {
var users []SlackUser
if err := decoder.Decode(&users); err != nil {
- return make([]SlackUser, 0)
+ // This actually returns errors that are ignored.
+ // In this case it is erroring because of a null that Slack
+ // introduced. So we just return the users here.
+ return users
}
return users
}
diff --git a/api/user.go b/api/user.go
index 507c83d28..8f381aeda 100644
--- a/api/user.go
+++ b/api/user.go
@@ -31,6 +31,7 @@ import (
"net/url"
"strconv"
"strings"
+ "time"
)
func InitUser(r *mux.Router) {
@@ -633,12 +634,14 @@ func Login(c *Context, w http.ResponseWriter, r *http.Request, user *model.User,
}
multiToken = strings.TrimSpace(multiToken + " " + session.Token)
+ expiresAt := time.Unix(model.GetMillis()/1000+int64(maxAge), 0)
multiSessionCookie := &http.Cookie{
Name: model.SESSION_COOKIE_TOKEN,
Value: multiToken,
Path: "/",
MaxAge: maxAge,
+ Expires: expiresAt,
HttpOnly: true,
}
@@ -793,7 +796,7 @@ func attachDeviceId(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- w.Write([]byte(deviceId))
+ w.Write([]byte(model.MapToJson(props)))
}
func RevokeSessionById(c *Context, sessionId string) {
diff --git a/i18n/en.json b/i18n/en.json
index aeeaf576b..3b204f250 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -685,7 +685,7 @@
},
{
"id": "api.post.check_for_out_of_channel_mentions.message.one",
- "translation": "{{.Username}} was mentioned, but they do not belong to this channel."
+ "translation": "{{.Username}} was mentioned, but does not belong to this channel."
},
{
"id": "api.post.create_post.bad_filename.error",
diff --git a/i18n/es.json b/i18n/es.json
index 9512bd929..d22c4564a 100644
--- a/i18n/es.json
+++ b/i18n/es.json
@@ -245,7 +245,7 @@
},
{
"id": "api.command.admin_only.app_error",
- "translation": "Las ingtegraciones solo pueden ser utilizadas por adminitradores."
+ "translation": "Las integraciones han sido limitadas a los adminitradores."
},
{
"id": "api.command.delete.app_error",
@@ -681,7 +681,7 @@
},
{
"id": "api.post.check_for_out_of_channel_mentions.message.multiple",
- "translation": "{{.Usernames}} y {{.LastUsername}} fueron mencionados, pero ellos no pertenecen a este canal."
+ "translation": "{{.Usernames}} y {{.LastUsername}} fueron mencionados, pero no pertenecen a este canal."
},
{
"id": "api.post.check_for_out_of_channel_mentions.message.one",
diff --git a/web/react/components/admin_console/image_settings.jsx b/web/react/components/admin_console/image_settings.jsx
index 12bf554ea..86f78e093 100644
--- a/web/react/components/admin_console/image_settings.jsx
+++ b/web/react/components/admin_console/image_settings.jsx
@@ -8,10 +8,6 @@ import crypto from 'crypto';
import {injectIntl, intlShape, defineMessages, FormattedMessage} from 'mm-intl';
const holders = defineMessages({
- storeDisabled: {
- id: 'admin.image.storeDisabled',
- defaultMessage: 'Disable File Storage'
- },
storeLocal: {
id: 'admin.image.storeLocal',
defaultMessage: 'Local File System'
@@ -242,7 +238,6 @@ class FileSettings extends React.Component {
defaultValue={this.props.config.FileSettings.DriverName}
onChange={this.handleChange.bind(this, 'DriverName')}
>
- <option value=''>{formatMessage(holders.storeDisabled)}</option>
<option value='local'>{formatMessage(holders.storeLocal)}</option>
<option value='amazons3'>{formatMessage(holders.storeAmazonS3)}</option>
</select>
diff --git a/web/react/components/admin_console/user_item.jsx b/web/react/components/admin_console/user_item.jsx
index 02b01b090..0c1a55cc1 100644
--- a/web/react/components/admin_console/user_item.jsx
+++ b/web/react/components/admin_console/user_item.jsx
@@ -360,8 +360,8 @@ export default class UserItem extends React.Component {
height='36'
width='36'
/>
- <span className='member-name'>{Utils.getDisplayName(user)}</span>
- <span className='member-email'>{email}</span>
+ <span className='more-name'>{Utils.getDisplayName(user)}</span>
+ <span className='more-description'>{email}</span>
<div className='dropdown member-drop'>
<a
href='#'
diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx
index 8fc3cd63d..a827cbcc6 100644
--- a/web/react/components/channel_header.jsx
+++ b/web/react/components/channel_header.jsx
@@ -114,7 +114,7 @@ export default class ChannelHeader extends React.Component {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: terms,
do_search: true,
is_mention_search: true
diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx
index 709485991..55dd8276c 100644
--- a/web/react/components/create_comment.jsx
+++ b/web/react/components/create_comment.jsx
@@ -152,7 +152,7 @@ class CreateComment extends React.Component {
ChannelStore.setChannelMember(member);
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST,
+ type: ActionTypes.RECEIVED_POST,
post: data
});
}.bind(this),
@@ -216,7 +216,7 @@ class CreateComment extends React.Component {
}
AppDispatcher.handleViewAction({
- type: ActionTypes.RECIEVED_EDIT_POST,
+ type: ActionTypes.RECEIVED_EDIT_POST,
refocusId: '#reply_textbox',
title: this.props.intl.formatMessage(holders.commentTitle),
message: lastPost.message,
diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx
index ecabdaee6..b9fbf09b5 100644
--- a/web/react/components/create_post.jsx
+++ b/web/react/components/create_post.jsx
@@ -364,7 +364,7 @@ class CreatePost extends React.Component {
var type = (lastPost.root_id && lastPost.root_id.length > 0) ? formatMessage(holders.comment) : formatMessage(holders.post);
AppDispatcher.handleViewAction({
- type: ActionTypes.RECIEVED_EDIT_POST,
+ type: ActionTypes.RECEIVED_EDIT_POST,
refocusId: '#post_textbox',
title: type,
message: lastPost.message,
diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx
index 9d7dcb3e5..65ffa96a1 100644
--- a/web/react/components/delete_post_modal.jsx
+++ b/web/react/components/delete_post_modal.jsx
@@ -62,12 +62,12 @@ export default class DeletePostModal extends React.Component {
var selectedPost = selectedList.posts[selectedList.order[0]];
if ((selectedPost.id === this.state.post.id && !this.state.root_id) || selectedPost.root_id === this.state.post.id) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
} else if (selectedPost.id === this.state.post.id && this.state.root_id) {
@@ -76,12 +76,12 @@ export default class DeletePostModal extends React.Component {
delete selectedList.posts[selectedPost.id];
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
post_list: selectedList
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
}
diff --git a/web/react/components/edit_channel_header_modal.jsx b/web/react/components/edit_channel_header_modal.jsx
index 1066d123e..f6865fadd 100644
--- a/web/react/components/edit_channel_header_modal.jsx
+++ b/web/react/components/edit_channel_header_modal.jsx
@@ -68,7 +68,7 @@ class EditChannelHeaderModal extends React.Component {
this.onHide();
AppDispatcher.handleServerAction({
- type: Constants.ActionTypes.RECIEVED_CHANNEL,
+ type: Constants.ActionTypes.RECEIVED_CHANNEL,
channel
});
},
diff --git a/web/react/components/member_list_item.jsx b/web/react/components/member_list_item.jsx
index c50ee5c96..41ea58eeb 100644
--- a/web/react/components/member_list_item.jsx
+++ b/web/react/components/member_list_item.jsx
@@ -124,8 +124,8 @@ export default class MemberListItem extends React.Component {
height='36'
width='36'
/>
- <div className='member-name'>{Utils.displayUsername(member.id)}</div>
- <div className='member-description'>{member.email}</div>
+ <div className='more-name'>{Utils.displayUsername(member.id)}</div>
+ <div className='more-description'>{member.email}</div>
</td>
<td className='td--action lg'>{invite}</td>
</tr>
diff --git a/web/react/components/member_list_team_item.jsx b/web/react/components/member_list_team_item.jsx
index 6e1006911..30086d1b2 100644
--- a/web/react/components/member_list_team_item.jsx
+++ b/web/react/components/member_list_team_item.jsx
@@ -208,8 +208,8 @@ export default class MemberListTeamItem extends React.Component {
height='36'
width='36'
/>
- <span className='member-name'>{Utils.displayUsername(user.id)}</span>
- <span className='member-email'>{email}</span>
+ <span className='more-name'>{Utils.displayUsername(user.id)}</span>
+ <span className='more-description'>{email}</span>
<div className='dropdown member-drop'>
<a
href='#'
diff --git a/web/react/components/more_channels.jsx b/web/react/components/more_channels.jsx
index d12ea4703..d800f93d8 100644
--- a/web/react/components/more_channels.jsx
+++ b/web/react/components/more_channels.jsx
@@ -114,7 +114,7 @@ export default class MoreChannels extends React.Component {
<tr key={channel.id}>
<td>
<p className='more-name'>{channel.display_name}</p>
- <p className='more-purpose'>{channel.purpose}</p>
+ <p className='more-description'>{channel.purpose}</p>
</td>
<td className='td--action'>
{joinButton}
diff --git a/web/react/components/more_direct_channels.jsx b/web/react/components/more_direct_channels.jsx
index f8a6884d0..3b72b251c 100644
--- a/web/react/components/more_direct_channels.jsx
+++ b/web/react/components/more_direct_channels.jsx
@@ -57,7 +57,7 @@ class MoreDirectChannels extends React.Component {
}
componentWillUnmount() {
- UserStore.addChangeListener(this.handleUserChange);
+ UserStore.removeChangeListener(this.handleUserChange);
}
componentDidUpdate(prevProps) {
@@ -318,4 +318,4 @@ MoreDirectChannels.propTypes = {
onModalDismissed: React.PropTypes.func
};
-export default injectIntl(MoreDirectChannels); \ No newline at end of file
+export default injectIntl(MoreDirectChannels);
diff --git a/web/react/components/navbar.jsx b/web/react/components/navbar.jsx
index 8005678a2..e6a9fbd25 100644
--- a/web/react/components/navbar.jsx
+++ b/web/react/components/navbar.jsx
@@ -82,12 +82,12 @@ export default class Navbar extends React.Component {
var windowWidth = $(window).outerWidth();
if (windowWidth <= 768) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx
index 53fe7fb5d..3619a9f8f 100644
--- a/web/react/components/post.jsx
+++ b/web/react/components/post.jsx
@@ -31,12 +31,12 @@ export default class Post extends React.Component {
data.posts = this.props.posts;
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
post_list: data
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
}
@@ -59,7 +59,7 @@ export default class Post extends React.Component {
ChannelStore.setChannelMember(member);
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST,
+ type: ActionTypes.RECEIVED_POST,
post: data
});
},
diff --git a/web/react/components/post_deleted_modal.jsx b/web/react/components/post_deleted_modal.jsx
index 218f57eb5..642befeab 100644
--- a/web/react/components/post_deleted_modal.jsx
+++ b/web/react/components/post_deleted_modal.jsx
@@ -24,19 +24,19 @@ export default class PostDeletedModal extends React.Component {
}
handleClose() {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: null,
do_search: false,
is_mention_search: false
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
}
diff --git a/web/react/components/posts_view.jsx b/web/react/components/posts_view.jsx
index f108ace2e..ebe19abad 100644
--- a/web/react/components/posts_view.jsx
+++ b/web/react/components/posts_view.jsx
@@ -94,7 +94,7 @@ export default class PostsView extends React.Component {
});
}
- this.scrollStopAction.fireAfter(1000);
+ this.scrollStopAction.fireAfter(2000);
}
handleScrollStop() {
this.setState({
@@ -564,6 +564,8 @@ function ScrollToBottomArrows({isScrolling, atBottom, onClick}) {
<div
className={className}
onClick={onClick}
- />
+ >
+ <span dangerouslySetInnerHTML={{__html: Constants.SCROLL_BOTTOM_ICON}} />
+ </div>
);
}
diff --git a/web/react/components/rhs_comment.jsx b/web/react/components/rhs_comment.jsx
index 1addebbe4..9c85e9940 100644
--- a/web/react/components/rhs_comment.jsx
+++ b/web/react/components/rhs_comment.jsx
@@ -49,7 +49,7 @@ class RhsComment extends React.Component {
ChannelStore.setChannelMember(member);
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST,
+ type: ActionTypes.RECEIVED_POST,
post: data
});
},
@@ -267,4 +267,4 @@ RhsComment.propTypes = {
post: React.PropTypes.object
};
-export default injectIntl(RhsComment); \ No newline at end of file
+export default injectIntl(RhsComment);
diff --git a/web/react/components/rhs_header_post.jsx b/web/react/components/rhs_header_post.jsx
index d56ba76f8..cd310df56 100644
--- a/web/react/components/rhs_header_post.jsx
+++ b/web/react/components/rhs_header_post.jsx
@@ -21,12 +21,12 @@ export default class RhsHeaderPost extends React.Component {
e.preventDefault();
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
}
@@ -34,14 +34,14 @@ export default class RhsHeaderPost extends React.Component {
e.preventDefault();
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: this.props.fromSearch,
do_search: true,
is_mention_search: this.props.isMentionSearch
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
}
diff --git a/web/react/components/search_bar.jsx b/web/react/components/search_bar.jsx
index 35d7e9514..f7cb1b8f2 100644
--- a/web/react/components/search_bar.jsx
+++ b/web/react/components/search_bar.jsx
@@ -74,19 +74,19 @@ class SearchBar extends React.Component {
e.preventDefault();
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: null,
do_search: false,
is_mention_search: false
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
}
@@ -117,7 +117,7 @@ class SearchBar extends React.Component {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: data,
is_mention_search: isMentionSearch
});
diff --git a/web/react/components/search_results_header.jsx b/web/react/components/search_results_header.jsx
index 45f56f65a..7f88eb2c7 100644
--- a/web/react/components/search_results_header.jsx
+++ b/web/react/components/search_results_header.jsx
@@ -19,19 +19,19 @@ export default class SearchResultsHeader extends React.Component {
e.preventDefault();
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: null,
do_search: false,
is_mention_search: false
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
results: null
});
}
@@ -72,4 +72,4 @@ export default class SearchResultsHeader extends React.Component {
SearchResultsHeader.propTypes = {
isMentionSearch: React.PropTypes.bool
-}; \ No newline at end of file
+};
diff --git a/web/react/components/sidebar.jsx b/web/react/components/sidebar.jsx
index 14790fbec..c7dba306b 100644
--- a/web/react/components/sidebar.jsx
+++ b/web/react/components/sidebar.jsx
@@ -96,7 +96,7 @@ export default class Sidebar extends React.Component {
let directChannel = channels.find(Utils.isDirectChannelForUser.bind(null, teammateId));
// a direct channel doesn't exist yet so create a fake one
- if (!directChannel) {
+ if (directChannel == null) {
directChannel = {
name: Utils.getDirectChannelName(currentUserId, teammateId),
last_post_at: 0,
@@ -104,6 +104,8 @@ export default class Sidebar extends React.Component {
type: Constants.DM_CHANNEL,
fake: true
};
+ } else {
+ directChannel = JSON.parse(JSON.stringify(directChannel));
}
directChannel.display_name = Utils.displayUsername(teammateId);
diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx
index 672213d1a..b770a2a2c 100644
--- a/web/react/components/signup_user_complete.jsx
+++ b/web/react/components/signup_user_complete.jsx
@@ -362,6 +362,17 @@ class SignupUserComplete extends React.Component {
);
}
+ if (signupMessage.length === 0 && !emailSignup) {
+ emailSignup = (
+ <div>
+ <FormattedMessage
+ id='signup_user_completed.none'
+ defaultMessage='No user creation method has been enabled. Please contact an administrator for access.'
+ />
+ </div>
+ );
+ }
+
return (
<div>
<form>
diff --git a/web/react/components/user_settings/import_theme_modal.jsx b/web/react/components/user_settings/import_theme_modal.jsx
index 66bed0b0b..e9e90a936 100644
--- a/web/react/components/user_settings/import_theme_modal.jsx
+++ b/web/react/components/user_settings/import_theme_modal.jsx
@@ -84,7 +84,7 @@ class ImportThemeModal extends React.Component {
Client.updateUser(user,
(data) => {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_ME,
+ type: ActionTypes.RECEIVED_ME,
me: data
});
@@ -212,4 +212,4 @@ ImportThemeModal.propTypes = {
intl: intlShape.isRequired
};
-export default injectIntl(ImportThemeModal); \ No newline at end of file
+export default injectIntl(ImportThemeModal);
diff --git a/web/react/components/user_settings/manage_command_hooks.jsx b/web/react/components/user_settings/manage_command_hooks.jsx
index 948ab7885..3656424b2 100644
--- a/web/react/components/user_settings/manage_command_hooks.jsx
+++ b/web/react/components/user_settings/manage_command_hooks.jsx
@@ -271,7 +271,7 @@ export default class ManageCommandCmds extends React.Component {
cmds.push(
<div
key={cmd.id}
- className='webcmd__item'
+ className='webhook__item webcmd__item'
>
<div className='padding-top x2'>
<strong>
@@ -400,7 +400,7 @@ export default class ManageCommandCmds extends React.Component {
}
const existingCmds = (
- <div className='webcmds__container'>
+ <div className='webhooks__container webcmds__container'>
<label className='control-label padding-top x2'>
<FormattedMessage
id='user.settings.cmds.existing'
@@ -408,7 +408,7 @@ export default class ManageCommandCmds extends React.Component {
/>
</label>
<div className='padding-top divider-light'></div>
- <div className='webcmds__list'>
+ <div className='webhooks__list webcmds__list'>
{displayCmds}
</div>
</div>
@@ -530,17 +530,19 @@ export default class ManageCommandCmds extends React.Component {
/>
</label>
<div className='padding-top'>
- <label>
- <input
- type='checkbox'
- checked={this.state.cmd.auto_complete}
- onChange={this.updateAutoComplete}
- />
- <FormattedMessage
- id='user.settings.cmds.auto_complete_help'
- defaultMessage='Show this command in autocomplete list'
- />
- </label>
+ <div className='checkbox'>
+ <label>
+ <input
+ type='checkbox'
+ checked={this.state.cmd.auto_complete}
+ onChange={this.updateAutoComplete}
+ />
+ <FormattedMessage
+ id='user.settings.cmds.auto_complete_help'
+ defaultMessage=' Show this command in autocomplete list'
+ />
+ </label>
+ </div>
</div>
</div>
<div className='padding-top x2'>
@@ -637,7 +639,7 @@ export default class ManageCommandCmds extends React.Component {
</div>
{addError}
</div>
- <div className='padding-top padding-bottom'>
+ <div className='padding-top x2 padding-bottom'>
<a
className={'btn btn-sm btn-primary'}
href='#'
diff --git a/web/react/components/user_settings/user_settings_advanced.jsx b/web/react/components/user_settings/user_settings_advanced.jsx
index 5c0757589..e513f81d2 100644
--- a/web/react/components/user_settings/user_settings_advanced.jsx
+++ b/web/react/components/user_settings/user_settings_advanced.jsx
@@ -47,10 +47,6 @@ const holders = defineMessages({
EMBED_PREVIEW: {
id: 'user.settings.advance.embed_preview',
defaultMessage: 'Show preview snippet of links below message'
- },
- LOC_PREVIEW: {
- id: 'user.settings.advance.loc_preview',
- defaultMessage: 'Show user language in display settings'
}
});
diff --git a/web/react/components/user_settings/user_settings_display.jsx b/web/react/components/user_settings/user_settings_display.jsx
index 4b11c06fb..5f23a8995 100644
--- a/web/react/components/user_settings/user_settings_display.jsx
+++ b/web/react/components/user_settings/user_settings_display.jsx
@@ -10,7 +10,6 @@ import PreferenceStore from '../../stores/preference_store.jsx';
import * as Utils from '../../utils/utils.jsx';
import Constants from '../../utils/constants.jsx';
-const PreReleaseFeatures = Constants.PRE_RELEASE_FEATURES;
import {savePreferences} from '../../utils/client.jsx';
import {intlShape, injectIntl, defineMessages, FormattedMessage} from 'mm-intl';
@@ -379,46 +378,44 @@ class UserSettingsDisplay extends React.Component {
);
}
- if (Utils.isFeatureEnabled(PreReleaseFeatures.LOC_PREVIEW)) {
- if (this.props.activeSection === 'languages') {
- var inputs = [];
- inputs.push(
- <ManageLanguages
- user={this.props.user}
- key='languages-ui'
- />
- );
+ if (this.props.activeSection === 'languages') {
+ var inputs = [];
+ inputs.push(
+ <ManageLanguages
+ user={this.props.user}
+ key='languages-ui'
+ />
+ );
- languagesSection = (
- <SettingItemMax
- title={formatMessage(holders.language)}
- width='medium'
- inputs={inputs}
- updateSection={(e) => {
- this.updateSection('');
- e.preventDefault();
- }}
- />
- );
- } else {
- var locale = 'English';
- Utils.languages().forEach((l) => {
- if (l.value === this.props.user.locale) {
- locale = l.name;
- }
- });
+ languagesSection = (
+ <SettingItemMax
+ title={formatMessage(holders.language)}
+ width='medium'
+ inputs={inputs}
+ updateSection={(e) => {
+ this.updateSection('');
+ e.preventDefault();
+ }}
+ />
+ );
+ } else {
+ var locale = 'English';
+ Utils.languages().forEach((l) => {
+ if (l.value === this.props.user.locale) {
+ locale = l.name;
+ }
+ });
- languagesSection = (
- <SettingItemMin
- title={formatMessage(holders.language)}
- width='medium'
- describe={locale}
- updateSection={() => {
- this.updateSection('languages');
- }}
- />
- );
- }
+ languagesSection = (
+ <SettingItemMin
+ title={formatMessage(holders.language)}
+ width='medium'
+ describe={locale}
+ updateSection={() => {
+ this.updateSection('languages');
+ }}
+ />
+ );
}
return (
diff --git a/web/react/components/user_settings/user_settings_modal.jsx b/web/react/components/user_settings/user_settings_modal.jsx
index e0b72157b..90f28822b 100644
--- a/web/react/components/user_settings/user_settings_modal.jsx
+++ b/web/react/components/user_settings/user_settings_modal.jsx
@@ -234,7 +234,7 @@ class UserSettingsModal extends React.Component {
tabs.push({name: 'developer', uiName: formatMessage(holders.developer), icon: 'glyphicon glyphicon-th'});
}
- if (global.window.mm_config.EnableIncomingWebhooks === 'true' || global.window.mm_config.EnableOutgoingWebhooks === 'true') {
+ if (global.window.mm_config.EnableIncomingWebhooks === 'true' || global.window.mm_config.EnableOutgoingWebhooks === 'true' || global.window.mm_config.EnableCommands === 'true') {
tabs.push({name: 'integrations', uiName: formatMessage(holders.integrations), icon: 'glyphicon glyphicon-transfer'});
}
tabs.push({name: 'display', uiName: formatMessage(holders.display), icon: 'glyphicon glyphicon-eye-open'});
diff --git a/web/react/components/user_settings/user_settings_theme.jsx b/web/react/components/user_settings/user_settings_theme.jsx
index a0656feaa..34c688db1 100644
--- a/web/react/components/user_settings/user_settings_theme.jsx
+++ b/web/react/components/user_settings/user_settings_theme.jsx
@@ -107,7 +107,7 @@ export default class ThemeSetting extends React.Component {
Client.updateUser(user,
(data) => {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_ME,
+ type: ActionTypes.RECEIVED_ME,
me: data
});
diff --git a/web/react/dispatcher/event_helpers.jsx b/web/react/dispatcher/event_helpers.jsx
index c1041e438..5476d707f 100644
--- a/web/react/dispatcher/event_helpers.jsx
+++ b/web/react/dispatcher/event_helpers.jsx
@@ -30,7 +30,7 @@ export function emitPostFocusEvent(postId) {
postId,
(data) => {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_FOCUSED_POST,
+ type: ActionTypes.RECEIVED_FOCUSED_POST,
postId,
post_list: data
});
@@ -47,13 +47,13 @@ export function emitPostFocusRightHandSideFromSearch(post, isMentionSearch) {
post.id,
(data) => {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST_SELECTED,
+ type: ActionTypes.RECEIVED_POST_SELECTED,
post_list: data,
from_search: SearchStore.getSearchTerm()
});
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: null,
is_mention_search: isMentionSearch
});
@@ -89,7 +89,7 @@ export function emitLoadMorePostsFocusedBottomEvent() {
export function emitPostRecievedEvent(post) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POST,
+ type: ActionTypes.RECEIVED_POST,
post
});
}
@@ -177,7 +177,7 @@ export function emitClearSuggestions(suggestionId) {
export function emitPreferenceChangedEvent(preference) {
AppDispatcher.handleServerAction({
- type: Constants.ActionTypes.RECIEVED_PREFERENCE,
+ type: Constants.ActionTypes.RECEIVED_PREFERENCE,
preference
});
}
diff --git a/web/react/stores/admin_store.jsx b/web/react/stores/admin_store.jsx
index 8f43091a7..eb3254cfe 100644
--- a/web/react/stores/admin_store.jsx
+++ b/web/react/stores/admin_store.jsx
@@ -135,19 +135,19 @@ AdminStoreClass.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_LOGS:
+ case ActionTypes.RECEIVED_LOGS:
AdminStore.saveLogs(action.logs);
AdminStore.emitLogChange();
break;
- case ActionTypes.RECIEVED_SERVER_AUDITS:
+ case ActionTypes.RECEIVED_SERVER_AUDITS:
AdminStore.saveAudits(action.audits);
AdminStore.emitAuditChange();
break;
- case ActionTypes.RECIEVED_CONFIG:
+ case ActionTypes.RECEIVED_CONFIG:
AdminStore.saveConfig(action.config);
AdminStore.emitConfigChange();
break;
- case ActionTypes.RECIEVED_ALL_TEAMS:
+ case ActionTypes.RECEIVED_ALL_TEAMS:
AdminStore.saveAllTeams(action.teams);
AdminStore.emitAllTeamsChange();
break;
diff --git a/web/react/stores/channel_store.jsx b/web/react/stores/channel_store.jsx
index 2337a573d..d650b23c2 100644
--- a/web/react/stores/channel_store.jsx
+++ b/web/react/stores/channel_store.jsx
@@ -296,7 +296,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
ChannelStore.emitChange();
break;
- case ActionTypes.RECIEVED_FOCUSED_POST: {
+ case ActionTypes.RECEIVED_FOCUSED_POST: {
const post = action.post_list.posts[action.postId];
ChannelStore.setCurrentId(post.channel_id);
ChannelStore.setPostMode(ChannelStore.POST_MODE_FOCUS);
@@ -304,7 +304,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
break;
}
- case ActionTypes.RECIEVED_CHANNELS:
+ case ActionTypes.RECEIVED_CHANNELS:
ChannelStore.storeChannels(action.channels);
ChannelStore.storeChannelMembers(action.members);
currentId = ChannelStore.getCurrentId();
@@ -315,7 +315,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
ChannelStore.emitChange();
break;
- case ActionTypes.RECIEVED_CHANNEL:
+ case ActionTypes.RECEIVED_CHANNEL:
ChannelStore.pStoreChannel(action.channel);
if (action.member) {
ChannelStore.pStoreChannelMember(action.member);
@@ -328,12 +328,12 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
ChannelStore.emitChange();
break;
- case ActionTypes.RECIEVED_MORE_CHANNELS:
+ case ActionTypes.RECEIVED_MORE_CHANNELS:
ChannelStore.storeMoreChannels(action.channels);
ChannelStore.emitMoreChange();
break;
- case ActionTypes.RECIEVED_CHANNEL_EXTRA_INFO:
+ case ActionTypes.RECEIVED_CHANNEL_EXTRA_INFO:
var extraInfos = ChannelStore.getExtraInfos();
extraInfos[action.extra_info.id] = action.extra_info;
ChannelStore.storeExtraInfos(extraInfos);
diff --git a/web/react/stores/error_store.jsx b/web/react/stores/error_store.jsx
index ed46d6b68..5afcefd12 100644
--- a/web/react/stores/error_store.jsx
+++ b/web/react/stores/error_store.jsx
@@ -57,7 +57,7 @@ var ErrorStore = new ErrorStoreClass();
ErrorStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_ERROR:
+ case ActionTypes.RECEIVED_ERROR:
ErrorStore.storeLastError(action.err);
ErrorStore.emitChange();
break;
diff --git a/web/react/stores/file_store.jsx b/web/react/stores/file_store.jsx
index ca8c6a96b..6d7e0f354 100644
--- a/web/react/stores/file_store.jsx
+++ b/web/react/stores/file_store.jsx
@@ -49,7 +49,7 @@ class FileStore extends EventEmitter {
const action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_FILE_INFO:
+ case ActionTypes.RECEIVED_FILE_INFO:
this.setInfo(action.filename, action.info);
this.emitChange(action.filename);
break;
diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx
index 8ff58f685..b5bb93576 100644
--- a/web/react/stores/post_store.jsx
+++ b/web/react/stores/post_store.jsx
@@ -376,15 +376,16 @@ class PostStoreClass extends EventEmitter {
}
storePendingPost(post) {
- post.state = Constants.POST_LOADING;
+ const copyPost = JSON.parse(JSON.stringify(post));
+ copyPost.state = Constants.POST_LOADING;
- const postList = makePostListNonNull(this.getPendingPosts(post.channel_id));
+ const postList = makePostListNonNull(this.getPendingPosts(copyPost.channel_id));
- postList.posts[post.pending_post_id] = post;
- postList.order.unshift(post.pending_post_id);
+ postList.posts[copyPost.pending_post_id] = copyPost;
+ postList.order.unshift(copyPost.pending_post_id);
- this.makePostsInfo(post.channel_id);
- this.postsInfo[post.channel_id].pendingPosts = postList;
+ this.makePostsInfo(copyPost.channel_id);
+ this.postsInfo[copyPost.channel_id].pendingPosts = postList;
this.emitChange();
}
@@ -410,14 +411,15 @@ class PostStoreClass extends EventEmitter {
}
updatePendingPost(post) {
- const postList = makePostListNonNull(this.getPendingPosts(post.channel_id));
+ const copyPost = JSON.parse(JSON.stringify(post));
+ const postList = makePostListNonNull(this.getPendingPosts(copyPost.channel_id));
- if (postList.order.indexOf(post.pending_post_id) === -1) {
+ if (postList.order.indexOf(copyPost.pending_post_id) === -1) {
return;
}
- postList.posts[post.pending_post_id] = post;
- this.postsInfo[post.channel_id].pendingPosts = postList;
+ postList.posts[copyPost.pending_post_id] = copyPost;
+ this.postsInfo[copyPost.channel_id].pendingPosts = postList;
this.emitChange();
}
@@ -540,23 +542,23 @@ PostStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_POSTS: {
+ case ActionTypes.RECEIVED_POSTS: {
const id = PostStore.currentFocusedPostId == null ? action.id : PostStore.currentFocusedPostId;
PostStore.checkBounds(id, action.numRequested, makePostListNonNull(action.post_list), action.before);
PostStore.storePosts(id, makePostListNonNull(action.post_list));
PostStore.emitChange();
break;
}
- case ActionTypes.RECIEVED_FOCUSED_POST:
+ case ActionTypes.RECEIVED_FOCUSED_POST:
PostStore.clearChannelVisibility(action.postId, false);
PostStore.storeFocusedPost(action.postId, makePostListNonNull(action.post_list));
PostStore.emitChange();
break;
- case ActionTypes.RECIEVED_POST:
+ case ActionTypes.RECEIVED_POST:
PostStore.storePost(action.post);
PostStore.emitChange();
break;
- case ActionTypes.RECIEVED_EDIT_POST:
+ case ActionTypes.RECEIVED_EDIT_POST:
PostStore.emitEditPost(action);
PostStore.emitChange();
break;
@@ -577,7 +579,7 @@ PostStore.dispatchToken = AppDispatcher.register((payload) => {
PostStore.removePost(action.post);
PostStore.emitChange();
break;
- case ActionTypes.RECIEVED_POST_SELECTED:
+ case ActionTypes.RECEIVED_POST_SELECTED:
PostStore.storeSelectedPost(action.post_list);
PostStore.emitSelectedPostChange(action.from_search);
break;
diff --git a/web/react/stores/preference_store.jsx b/web/react/stores/preference_store.jsx
index 7ecaf0a95..30f5468c2 100644
--- a/web/react/stores/preference_store.jsx
+++ b/web/react/stores/preference_store.jsx
@@ -159,13 +159,13 @@ class PreferenceStoreClass extends EventEmitter {
const action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_PREFERENCE: {
+ case ActionTypes.RECEIVED_PREFERENCE: {
const preference = action.preference;
this.setPreference(preference.category, preference.name, preference.value);
this.emitChange();
break;
}
- case ActionTypes.RECIEVED_PREFERENCES:
+ case ActionTypes.RECEIVED_PREFERENCES:
this.setPreferences(action.preferences);
this.emitChange();
break;
diff --git a/web/react/stores/search_store.jsx b/web/react/stores/search_store.jsx
index f932c379a..549f355ef 100644
--- a/web/react/stores/search_store.jsx
+++ b/web/react/stores/search_store.jsx
@@ -119,11 +119,11 @@ SearchStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_SEARCH:
+ case ActionTypes.RECEIVED_SEARCH:
SearchStore.storeSearchResults(action.results, action.is_mention_search);
SearchStore.emitSearchChange();
break;
- case ActionTypes.RECIEVED_SEARCH_TERM:
+ case ActionTypes.RECEIVED_SEARCH_TERM:
SearchStore.storeSearchTerm(action.term);
SearchStore.emitSearchTermChange(action.do_search, action.is_mention_search);
break;
diff --git a/web/react/stores/team_store.jsx b/web/react/stores/team_store.jsx
index 2d518d9e7..7a1a2ef42 100644
--- a/web/react/stores/team_store.jsx
+++ b/web/react/stores/team_store.jsx
@@ -116,7 +116,7 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_TEAM:
+ case ActionTypes.RECEIVED_TEAM:
TeamStore.saveTeam(action.team);
TeamStore.emitChange();
break;
diff --git a/web/react/stores/user_store.jsx b/web/react/stores/user_store.jsx
index b97a0d87b..dd60e166f 100644
--- a/web/react/stores/user_store.jsx
+++ b/web/react/stores/user_store.jsx
@@ -336,27 +336,27 @@ UserStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
switch (action.type) {
- case ActionTypes.RECIEVED_PROFILES:
+ case ActionTypes.RECEIVED_PROFILES:
UserStore.saveProfiles(action.profiles);
UserStore.emitChange();
break;
- case ActionTypes.RECIEVED_ME:
+ case ActionTypes.RECEIVED_ME:
UserStore.setCurrentUser(action.me);
UserStore.emitChange(action.me.id);
break;
- case ActionTypes.RECIEVED_SESSIONS:
+ case ActionTypes.RECEIVED_SESSIONS:
UserStore.setSessions(action.sessions);
UserStore.emitSessionsChange();
break;
- case ActionTypes.RECIEVED_AUDITS:
+ case ActionTypes.RECEIVED_AUDITS:
UserStore.setAudits(action.audits);
UserStore.emitAuditsChange();
break;
- case ActionTypes.RECIEVED_TEAMS:
+ case ActionTypes.RECEIVED_TEAMS:
UserStore.setTeams(action.teams);
UserStore.emitTeamsChange();
break;
- case ActionTypes.RECIEVED_STATUSES:
+ case ActionTypes.RECEIVED_STATUSES:
UserStore.pSetStatuses(action.statuses);
UserStore.emitStatusesChange();
break;
diff --git a/web/react/utils/async_client.jsx b/web/react/utils/async_client.jsx
index c5957e8cc..c8676f45d 100644
--- a/web/react/utils/async_client.jsx
+++ b/web/react/utils/async_client.jsx
@@ -5,6 +5,7 @@ import * as client from './client.jsx';
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
import BrowserStore from '../stores/browser_store.jsx';
import ChannelStore from '../stores/channel_store.jsx';
+import PreferenceStore from '../stores/preference_store.jsx';
import PostStore from '../stores/post_store.jsx';
import UserStore from '../stores/user_store.jsx';
import * as utils from './utils.jsx';
@@ -17,7 +18,7 @@ var callTracker = {};
export function dispatchError(err, method) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_ERROR,
+ type: ActionTypes.RECEIVED_ERROR,
err: err,
method: method
});
@@ -70,7 +71,7 @@ export function getChannels(checkVersion) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_CHANNELS,
+ type: ActionTypes.RECEIVED_CHANNELS,
channels: data.channels,
members: data.members
});
@@ -98,7 +99,7 @@ export function getChannel(id) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_CHANNEL,
+ type: ActionTypes.RECEIVED_CHANNEL,
channel: data.channel,
member: data.member
});
@@ -155,7 +156,7 @@ export function getMoreChannels(force) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_MORE_CHANNELS,
+ type: ActionTypes.RECEIVED_MORE_CHANNELS,
channels: data.channels,
members: data.members
});
@@ -194,7 +195,7 @@ export function getChannelExtraInfo(id, memberLimit) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_CHANNEL_EXTRA_INFO,
+ type: ActionTypes.RECEIVED_CHANNEL_EXTRA_INFO,
extra_info: data
});
},
@@ -221,7 +222,7 @@ export function getProfiles() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_PROFILES,
+ type: ActionTypes.RECEIVED_PROFILES,
profiles: data
});
},
@@ -248,7 +249,7 @@ export function getSessions() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SESSIONS,
+ type: ActionTypes.RECEIVED_SESSIONS,
sessions: data
});
},
@@ -275,7 +276,7 @@ export function getAudits() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_AUDITS,
+ type: ActionTypes.RECEIVED_AUDITS,
audits: data
});
},
@@ -301,7 +302,7 @@ export function getLogs() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_LOGS,
+ type: ActionTypes.RECEIVED_LOGS,
logs: data
});
},
@@ -327,7 +328,7 @@ export function getServerAudits() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SERVER_AUDITS,
+ type: ActionTypes.RECEIVED_SERVER_AUDITS,
audits: data
});
},
@@ -353,7 +354,7 @@ export function getConfig() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_CONFIG,
+ type: ActionTypes.RECEIVED_CONFIG,
config: data
});
},
@@ -379,7 +380,7 @@ export function getAllTeams() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_ALL_TEAMS,
+ type: ActionTypes.RECEIVED_ALL_TEAMS,
teams: data
});
},
@@ -408,7 +409,7 @@ export function findTeams(email) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_TEAMS,
+ type: ActionTypes.RECEIVED_TEAMS,
teams: data
});
},
@@ -436,7 +437,7 @@ export function search(terms) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH,
+ type: ActionTypes.RECEIVED_SEARCH,
results: data
});
},
@@ -488,7 +489,7 @@ export function getPostsPage(id, maxPosts) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POSTS,
+ type: ActionTypes.RECEIVED_POSTS,
id: channelId,
before: true,
numRequested: numPosts,
@@ -538,7 +539,7 @@ export function getPosts(id) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POSTS,
+ type: ActionTypes.RECEIVED_POSTS,
id: channelId,
before: true,
numRequested: Constants.POST_CHUNK_SIZE,
@@ -577,7 +578,7 @@ export function getPostsBefore(postId, offset, numPost) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POSTS,
+ type: ActionTypes.RECEIVED_POSTS,
id: channelId,
before: true,
numRequested: numPost,
@@ -616,7 +617,7 @@ export function getPostsAfter(postId, offset, numPost) {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_POSTS,
+ type: ActionTypes.RECEIVED_POSTS,
id: channelId,
before: false,
numRequested: numPost,
@@ -649,7 +650,7 @@ export function getMe() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_ME,
+ type: ActionTypes.RECEIVED_ME,
me: data
});
},
@@ -661,13 +662,12 @@ export function getMe() {
}
export function getStatuses() {
- const directChannels = ChannelStore.getAll().filter((channel) => channel.type === Constants.DM_CHANNEL);
+ const preferences = PreferenceStore.getCategory(Constants.Preferences.CATEGORY_DIRECT_CHANNEL_SHOW);
const teammateIds = [];
- for (var i = 0; i < directChannels.length; i++) {
- const teammate = utils.getDirectTeammate(directChannels[i].id);
- if (teammate) {
- teammateIds.push(teammate.id);
+ for (const preference of preferences) {
+ if (preference.value === 'true') {
+ teammateIds.push(preference.name);
}
}
@@ -685,7 +685,7 @@ export function getStatuses() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_STATUSES,
+ type: ActionTypes.RECEIVED_STATUSES,
statuses: data
});
},
@@ -711,7 +711,7 @@ export function getMyTeam() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_TEAM,
+ type: ActionTypes.RECEIVED_TEAM,
team: data
});
},
@@ -737,7 +737,7 @@ export function getAllPreferences() {
}
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_PREFERENCES,
+ type: ActionTypes.RECEIVED_PREFERENCES,
preferences: data
});
},
@@ -754,7 +754,7 @@ export function savePreferences(preferences, success, error) {
(data, textStatus, xhr) => {
if (xhr.status !== 304) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_PREFERENCES,
+ type: ActionTypes.RECEIVED_PREFERENCES,
preferences
});
}
@@ -779,13 +779,19 @@ export function getSuggestedCommands(command, suggestionId, component) {
var matches = [];
data.forEach((cmd) => {
if (('/' + cmd.trigger).indexOf(command) === 0) {
+ let s = '/' + cmd.trigger;
+ if (cmd.auto_complete_hint && cmd.auto_complete_hint.length !== 0) {
+ s += ' ' + cmd.auto_complete_hint;
+ }
matches.push({
- suggestion: '/' + cmd.trigger + ' ' + cmd.auto_complete_hint,
+ suggestion: s,
description: cmd.auto_complete_desc
});
}
});
+ matches = matches.sort((a, b) => a.suggestion.localeCompare(b.suggestion));
+
// pull out the suggested commands from the returned data
const terms = matches.map((suggestion) => suggestion.suggestion);
@@ -821,7 +827,7 @@ export function getFileInfo(filename) {
callTracker[callName] = 0;
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_FILE_INFO,
+ type: ActionTypes.RECEIVED_FILE_INFO,
filename,
info: data
});
diff --git a/web/react/utils/channel_intro_messages.jsx b/web/react/utils/channel_intro_messages.jsx
index 69e08f143..1aca0467e 100644
--- a/web/react/utils/channel_intro_messages.jsx
+++ b/web/react/utils/channel_intro_messages.jsx
@@ -128,7 +128,7 @@ export function createDefaultIntroMessage(channel) {
<div className='channel-intro'>
<FormattedHTMLMessage
id='intro_messages.default'
- defaultMessage="<h4 class='channel-intro__title'>Beginning of {display_name}</h4><p class='channel-intro__content'><strong>Welcome to {display_name}!'</strong><br/><br/>This is the first channel teammates see when they sign up - use it for posting updates everyone needs to know.</p>"
+ defaultMessage="<h4 class='channel-intro__title'>Beginning of {display_name}</h4><p class='channel-intro__content'><strong>Welcome to {display_name}!</strong><br/><br/>This is the first channel teammates see when they sign up - use it for posting updates everyone needs to know.</p>"
values={{
display_name: channel.display_name
}}
diff --git a/web/react/utils/constants.jsx b/web/react/utils/constants.jsx
index d78776aa3..b1e84202d 100644
--- a/web/react/utils/constants.jsx
+++ b/web/react/utils/constants.jsx
@@ -5,7 +5,7 @@ import keyMirror from 'keymirror';
export default {
ActionTypes: keyMirror({
- RECIEVED_ERROR: null,
+ RECEIVED_ERROR: null,
CLICK_CHANNEL: null,
CREATE_CHANNEL: null,
@@ -14,40 +14,40 @@ export default {
POST_DELETED: null,
REMOVE_POST: null,
- RECIEVED_CHANNELS: null,
- RECIEVED_CHANNEL: null,
- RECIEVED_MORE_CHANNELS: null,
- RECIEVED_CHANNEL_EXTRA_INFO: null,
+ RECEIVED_CHANNELS: null,
+ RECEIVED_CHANNEL: null,
+ RECEIVED_MORE_CHANNELS: null,
+ RECEIVED_CHANNEL_EXTRA_INFO: null,
FOCUS_POST: null,
- RECIEVED_POSTS: null,
- RECIEVED_FOCUSED_POST: null,
- RECIEVED_POST: null,
- RECIEVED_EDIT_POST: null,
- RECIEVED_SEARCH: null,
- RECIEVED_SEARCH_TERM: null,
- RECIEVED_POST_SELECTED: null,
- RECIEVED_MENTION_DATA: null,
- RECIEVED_ADD_MENTION: null,
+ RECEIVED_POSTS: null,
+ RECEIVED_FOCUSED_POST: null,
+ RECEIVED_POST: null,
+ RECEIVED_EDIT_POST: null,
+ RECEIVED_SEARCH: null,
+ RECEIVED_SEARCH_TERM: null,
+ RECEIVED_POST_SELECTED: null,
+ RECEIVED_MENTION_DATA: null,
+ RECEIVED_ADD_MENTION: null,
- RECIEVED_PROFILES: null,
- RECIEVED_ME: null,
- RECIEVED_SESSIONS: null,
- RECIEVED_AUDITS: null,
- RECIEVED_TEAMS: null,
- RECIEVED_STATUSES: null,
- RECIEVED_PREFERENCE: null,
- RECIEVED_PREFERENCES: null,
- RECIEVED_FILE_INFO: null,
+ RECEIVED_PROFILES: null,
+ RECEIVED_ME: null,
+ RECEIVED_SESSIONS: null,
+ RECEIVED_AUDITS: null,
+ RECEIVED_TEAMS: null,
+ RECEIVED_STATUSES: null,
+ RECEIVED_PREFERENCE: null,
+ RECEIVED_PREFERENCES: null,
+ RECEIVED_FILE_INFO: null,
- RECIEVED_MSG: null,
+ RECEIVED_MSG: null,
- RECIEVED_TEAM: null,
+ RECEIVED_TEAM: null,
- RECIEVED_CONFIG: null,
- RECIEVED_LOGS: null,
- RECIEVED_SERVER_AUDITS: null,
- RECIEVED_ALL_TEAMS: null,
+ RECEIVED_CONFIG: null,
+ RECEIVED_LOGS: null,
+ RECEIVED_SERVER_AUDITS: null,
+ RECEIVED_ALL_TEAMS: null,
SHOW_SEARCH: null,
@@ -173,6 +173,7 @@ export default {
MENU_ICON: "<svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px'width='4px' height='16px' viewBox='0 0 8 32' enable-background='new 0 0 8 32' xml:space='preserve'> <g> <circle cx='4' cy='4.062' r='4'/> <circle cx='4' cy='16' r='4'/> <circle cx='4' cy='28' r='4'/> </g> </svg>",
COMMENT_ICON: "<svg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px'width='15px' height='15px' viewBox='1 1.5 15 15' enable-background='new 1 1.5 15 15' xml:space='preserve'> <g> <g> <path fill='#211B1B' d='M14,1.5H3c-1.104,0-2,0.896-2,2v8c0,1.104,0.896,2,2,2h1.628l1.884,3l1.866-3H14c1.104,0,2-0.896,2-2v-8 C16,2.396,15.104,1.5,14,1.5z M15,11.5c0,0.553-0.447,1-1,1H8l-1.493,2l-1.504-1.991L5,12.5H3c-0.552,0-1-0.447-1-1v-8 c0-0.552,0.448-1,1-1h11c0.553,0,1,0.448,1,1V11.5z'/> </g> </g> </svg>",
REPLY_ICON: "<svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px'viewBox='-158 242 18 18' style='enable-background:new -158 242 18 18;' xml:space='preserve'> <path d='M-142.2,252.6c-2-3-4.8-4.7-8.3-4.8v-3.3c0-0.2-0.1-0.3-0.2-0.3s-0.3,0-0.4,0.1l-6.9,6.2c-0.1,0.1-0.1,0.2-0.1,0.3 c0,0.1,0,0.2,0.1,0.3l6.9,6.4c0.1,0.1,0.3,0.1,0.4,0.1c0.1-0.1,0.2-0.2,0.2-0.4v-3.8c4.2,0,7.4,0.4,9.6,4.4c0.1,0.1,0.2,0.2,0.3,0.2 c0,0,0.1,0,0.1,0c0.2-0.1,0.3-0.3,0.2-0.4C-140.2,257.3-140.6,255-142.2,252.6z M-150.8,252.5c-0.2,0-0.4,0.2-0.4,0.4v3.3l-6-5.5 l6-5.3v2.8c0,0.2,0.2,0.4,0.4,0.4c3.3,0,6,1.5,8,4.5c0.5,0.8,0.9,1.6,1.2,2.3C-144,252.8-147.1,252.5-150.8,252.5z'/> </svg>",
+ SCROLL_BOTTOM_ICON: "<svg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px'viewBox='-239 239 21 23' style='enable-background:new -239 239 21 23;' xml:space='preserve'> <path d='M-239,241.4l2.4-2.4l8.1,8.2l8.1-8.2l2.4,2.4l-10.5,10.6L-239,241.4z M-228.5,257.2l8.1-8.2l2.4,2.4l-10.5,10.6l-10.5-10.6 l2.4-2.4L-228.5,257.2z'/> </svg>",
UPDATE_TYPING_MS: 5000,
THEMES: {
default: {
@@ -456,10 +457,6 @@ export default {
EMBED_PREVIEW: {
label: 'embed_preview',
description: 'Show preview snippet of links below message'
- },
- LOC_PREVIEW: {
- label: 'loc_preview',
- description: 'Show user language in display settings'
}
},
OVERLAY_TIME_DELAY: 400,
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index 376053792..e2a5b9620 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -512,7 +512,7 @@ export function insertHtmlEntities(text) {
export function searchForTerm(term) {
AppDispatcher.handleServerAction({
- type: ActionTypes.RECIEVED_SEARCH_TERM,
+ type: ActionTypes.RECEIVED_SEARCH_TERM,
term: term,
do_search: true
});
@@ -702,6 +702,7 @@ export function applyTheme(theme) {
}
if (theme.centerChannelColor) {
+ changeCss('.post-list__arrows', 'fill:' + changeOpacity(theme.centerChannelColor, 0.3), 1);
changeCss('.sidebar--left, .sidebar--right .sidebar--right__header', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
changeCss('.app__content, .post-create__container .post-create-body .btn-file, .post-create__container .post-create-footer .msg-typing, .command-name, .modal .modal-content, .dropdown-menu, .popover, .mentions-name, .tip-overlay', 'color:' + theme.centerChannelColor, 1);
changeCss('#archive-link-home', 'background:' + changeOpacity(theme.centerChannelColor, 0.15), 1);
@@ -1395,7 +1396,7 @@ export function languages() {
},
{
value: 'es',
- name: 'Español'
+ name: 'Español (Beta)'
}
]
);
diff --git a/web/sass-files/sass/partials/_base.scss b/web/sass-files/sass/partials/_base.scss
index a13689382..ee6a6b955 100644
--- a/web/sass-files/sass/partials/_base.scss
+++ b/web/sass-files/sass/partials/_base.scss
@@ -25,6 +25,10 @@ body {
}
}
+b, strong {
+ font-weight: 600;
+}
+
.inner__wrap {
height: 100%;
> .row.main {
diff --git a/web/sass-files/sass/partials/_markdown.scss b/web/sass-files/sass/partials/_markdown.scss
index 14e12ecd2..0ba1929e0 100644
--- a/web/sass-files/sass/partials/_markdown.scss
+++ b/web/sass-files/sass/partials/_markdown.scss
@@ -39,6 +39,7 @@
padding: 4px 10px 5px 10px;
font-size: 13px;
opacity: 0.7;
+ z-index: 5;
}
.post__body {
diff --git a/web/sass-files/sass/partials/_mentions.scss b/web/sass-files/sass/partials/_mentions.scss
index df6dd40a2..aa654e9e8 100644
--- a/web/sass-files/sass/partials/_mentions.scss
+++ b/web/sass-files/sass/partials/_mentions.scss
@@ -18,6 +18,13 @@
line-height: 36px;
font-size: 13px;
cursor: pointer;
+ white-space: nowrap;
+
+ .mention-align {
+ @include clearfix;
+ text-overflow: ellipsis;
+ width: calc(100% - 50px);
+ }
}
.mentions-text {
@@ -33,6 +40,15 @@
font-size: 20px;
text-align: center;
@include border-radius(32px);
+
+ .mention-align {
+ max-width: 80%;
+ overflow: hidden;
+ display: inline-block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
}
.mention-fullname {
diff --git a/web/sass-files/sass/partials/_modal.scss b/web/sass-files/sass/partials/_modal.scss
index b451adb75..db99e840b 100644
--- a/web/sass-files/sass/partials/_modal.scss
+++ b/web/sass-files/sass/partials/_modal.scss
@@ -103,7 +103,7 @@
background: rgba(0, 0, 0, 0.1);
}
span {
- font-family: 'Open Sans', sans-serif;
+ font-family: 'Open Sans', sans-serif;
line-height: 10px;
}
}
@@ -170,6 +170,12 @@
overflow: hidden;
text-overflow: ellipsis;
}
+ .more-description {
+ @include opacity(0.7);
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
tbody {
> tr {
&:hover td {
@@ -425,9 +431,9 @@
}
.modal-body.edit-modal-body {
- overflow: visible;
+ overflow: visible;
- .suggestion-content {
- max-height: 150px;
- }
+ .suggestion-content {
+ max-height: 150px;
+ }
}
diff --git a/web/sass-files/sass/partials/_popover.scss b/web/sass-files/sass/partials/_popover.scss
index 8a61758f1..bf762d2c9 100644
--- a/web/sass-files/sass/partials/_popover.scss
+++ b/web/sass-files/sass/partials/_popover.scss
@@ -150,6 +150,9 @@
}
.more-name {
margin-left: 6px;
+ max-width: 140px;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
}
}
diff --git a/web/sass-files/sass/partials/_post.scss b/web/sass-files/sass/partials/_post.scss
index a018315e3..323691d89 100644
--- a/web/sass-files/sass/partials/_post.scss
+++ b/web/sass-files/sass/partials/_post.scss
@@ -264,32 +264,37 @@ body.ios {
line-height: 25px;
margin-left: -60px;
-webkit-font-smoothing: initial;
- @include single-transition(all, 0.3s, ease);
+ @include single-transition(all, 0.6s, ease);
@include translateY(-45px);
@include opacity(0);
display: none;
&.scrolling {
- @include single-transition(all, 0.3s, ease);
@include translateY(0);
@include opacity(0.8);
}
}
.post-list__arrows {
- background: url('../images/postArrows.png') center;
- @include background-size(28px 28px);
background-repeat: no-repeat;
width: 40px;
height: 40px;
+ text-align: center;
+ fill: #444;
position: absolute;
bottom: 0;
- left: 10px;
+ left: 9px;
z-index: 50;
@include opacity(0);
- @include single-transition(all, 0.3s);
+ @include single-transition(all, 0.6s);
display: none;
+ svg {
+ color: inherit;
+ width: 28px;
+ height: 28px;
+ }
+
&.scrolling {
display: block;
@include opacity(1);
@@ -485,8 +490,9 @@ body.ios {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
position: absolute;
- top: -3px;
- left: -1.0em;
+ top: -2px;
+ left: -7px;
+ font-size: 11px;
line-height: 37px;
@include opacity(0);
}
@@ -570,11 +576,20 @@ body.ios {
li {
display: inline-block;
+ vertical-align: top;
}
.col__name {
margin-right: 7px;
font-weight: 600;
+
+ .user-popover {
+ max-width: 200px;
+ @include clearfix;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
}
.col__reply {
diff --git a/web/sass-files/sass/partials/_responsive.scss b/web/sass-files/sass/partials/_responsive.scss
index 09d498a69..5d6cbee60 100644
--- a/web/sass-files/sass/partials/_responsive.scss
+++ b/web/sass-files/sass/partials/_responsive.scss
@@ -160,6 +160,11 @@
.col__name {
pointer-events: none;
+
+ .user-popover {
+ max-width: 130px;
+ }
+
}
}
diff --git a/web/sass-files/sass/partials/_settings.scss b/web/sass-files/sass/partials/_settings.scss
index bf296e913..1bbec566c 100644
--- a/web/sass-files/sass/partials/_settings.scss
+++ b/web/sass-files/sass/partials/_settings.scss
@@ -223,6 +223,8 @@
.section-describe {
@include opacity(0.7);
white-space:pre;
+ @include clearfix;
+ text-overflow: ellipsis;
}
.divider-dark {
@@ -341,21 +343,6 @@ h3 {
@include border-radius(50px);
margin-right: 8px;
}
- .member-name {
- font-weight:500;
- display: block;
- max-width: 80%;
- overflow: hidden;
- text-overflow: ellipsis;
- }
-
- .member-email {
- color:darkgrey;
- display: block;
- max-width: 80%;
- overflow: hidden;
- text-overflow: ellipsis;
- }
}
.member-role, .member-drop {
diff --git a/web/sass-files/sass/partials/_sidebar--right.scss b/web/sass-files/sass/partials/_sidebar--right.scss
index f40a50b03..aaa6f4c92 100644
--- a/web/sass-files/sass/partials/_sidebar--right.scss
+++ b/web/sass-files/sass/partials/_sidebar--right.scss
@@ -16,6 +16,22 @@
}
+ .post {
+
+ .post__header {
+
+ .col__name {
+
+ .user-popover {
+ max-width: 130px;
+ }
+
+ }
+
+ }
+
+ }
+
.sidebar--right__content {
height: 100%;
@include display-flex;
diff --git a/web/static/i18n/en.json b/web/static/i18n/en.json
index 5b03f0130..b9124f271 100644
--- a/web/static/i18n/en.json
+++ b/web/static/i18n/en.json
@@ -148,7 +148,6 @@
"admin.gitlab.userTitle": "User API Endpoint:",
"admin.gitlab.userDescription": "Enter https://<your-gitlab-url>/api/v3/user. Make sure you use HTTP or HTTPS in your URL depending on your server configuration.",
"admin.gitlab.save": "Save",
- "admin.image.storeDisabled": "Disable File Storage",
"admin.image.storeLocal": "Local File System",
"admin.image.storeAmazonS3": "Amazon S3",
"admin.image.localExample": "Ex \"./data/\"",
@@ -901,6 +900,7 @@
"signup_user_completed.choosePwd": "Choose your password",
"signup_user_completed.create": "Create Account",
"signup_user_completed.or": "or",
+ "signup_user_completed.none": "No user creation method has been enabled. Please contact an administrator for access.",
"signup_user_completed.welcome": "Welcome to:",
"signup_user_completed.onSite": "on {siteName}",
"signup_user_completed.lets": "Let's create your account",
@@ -1089,7 +1089,7 @@
"user.settings.cmds.username_desc": "The username to use when overriding the post.",
"user.settings.cmds.icon_url_desc": "URL to an icon",
"user.settings.cmds.trigger_desc": "Word to trigger on",
- "user.settings.cmds.auto_complete_help": "Show this command in autocomplete list.",
+ "user.settings.cmds.auto_complete_help": " Show this command in autocomplete list",
"user.settings.cmds.auto_complete_hint_desc": "List parameters to be passed to the command.",
"user.settings.cmds.request_type_desc": "Command request type issued to the callback URL.",
"user.settings.cmds.url_desc": "URL that will receive the HTTP POST or GET event",
@@ -1126,7 +1126,6 @@
"user.settings.advance.enabled": "enabled",
"user.settings.advance.markdown_preview": "Show markdown preview option in message input box",
"user.settings.advance.embed_preview": "Show preview snippet of links below message",
- "user.settings.advance.loc_preview": "Show user language in display settings",
"user.settings.advance.sendDesc": "If enabled 'Enter' inserts a new line and 'Ctrl + Enter' submits the message.",
"user.settings.advance.preReleaseDesc": "Check any pre-released features you'd like to preview. You may also need to refresh the page before the setting will take effect.",
"user.settings.advance.title": "Advanced Settings",
@@ -1147,11 +1146,6 @@
"user.settings.display.nameOptsDesc": "Set how to display other user's names in posts and the Direct Messages list.",
"user.settings.display.fontDesc": "Select the font displayed in the Mattermost user interface.",
"user.settings.display.title": "Display Settings",
- "user.settings.display.theme.themeColors": "Theme Colors",
- "user.settings.display.theme.customTheme": "Custom Theme",
- "user.settings.display.theme.import": "Import theme colors from Slack",
- "user.settings.display.theme.title": "Theme",
- "user.settings.display.theme.describe": "Open to manage your theme",
"user.settings.general.usernameReserved": "This username is reserved, please choose a new one.",
"user.settings.general.usernameRestrictions": "'Username must begin with a letter, and contain between {min} to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-' and '_'.",
"user.settings.general.validEmail": "Please enter a valid email address",
@@ -1194,7 +1188,6 @@
"user.settings.modal.general": "General",
"user.settings.modal.security": "Security",
"user.settings.modal.notifications": "Notifications",
- "user.settings.modal.appearance": "Appearance",
"user.settings.modal.developer": "Developer",
"user.settings.modal.integrations": "Integrations",
"user.settings.modal.display": "Display",
@@ -1245,6 +1238,11 @@
"user.settings.security.title": "Security Settings",
"user.settings.security.viewHistory": "View Access History",
"user.settings.security.logoutActiveSessions": "View and Logout of Active Sessions",
+ "user.settings.display.theme.title": "Theme",
+ "user.settings.display.theme.describe": "Open to manage your theme",
+ "user.settings.display.theme.themeColors": "Theme Colors",
+ "user.settings.display.theme.customTheme": "Custom Theme",
+ "user.settings.display.theme.import": "Import theme colors from Slack",
"view_image_popover.publicLink": "Get Public Link",
"view_image_popover.file": "File {count} of {total}",
"view_image_popover.download": "Download",
@@ -1263,4 +1261,4 @@
"intro_messages.beginning": "Beginning of {name}",
"intro_messages.invite": "Invite others to this {type}",
"intro_messages.setHeader": "Set a Header"
-}
+} \ No newline at end of file
diff --git a/web/static/i18n/es.json b/web/static/i18n/es.json
index 25515ca86..8b9ab09bf 100644
--- a/web/static/i18n/es.json
+++ b/web/static/i18n/es.json
@@ -157,7 +157,6 @@
"admin.image.shareDescription": "Permitir a los usuarios compartir enlaces públicos para archivos e imágenes.",
"admin.image.shareTitle": "Compartir publicamente enlaces de archivos: ",
"admin.image.storeAmazonS3": "Amazon S3",
- "admin.image.storeDisabled": "Deshabilitar almacenamiento de archivos",
"admin.image.storeLocal": "Sistema local de archivos",
"admin.image.storeTitle": "Almacenar archivos en:",
"admin.image.thumbHeightDescription": "Alto de imágen miniatura subida. Actualizando este valor la imagen miniatura cambia en el futuro, pero no cambia para imagenes creadas en el pasado.",
@@ -303,6 +302,8 @@
"admin.service.googleTitle": "Llave de desarrolador Google:",
"admin.service.iconDescription": "Cuando es verdadero, se le permitirá cambiar el icono del mensaje desde webhooks. Nota, en combinación con permitir el cambio de nombre de usuario, podría exponer a los usuarios a sufrir ataques de phishing.",
"admin.service.iconTitle": "Habilitar el cambio de icono desde los Webhooks: ",
+ "admin.service.insecureTlsDesc": "Cuando es verdadero, cualquier solicitud de salida por HTTPS será aceptada incluso si posee certificados no verificados o autofirmados. Por ejemplo, webhooks de salida a un servidor con un certificado TLS autofirmado, utilizando cualquier dominio, será permitido. Tenga en cuenta que esto hace que estas conexiones susceptibles a los ataques hombre-en-el-medio.",
+ "admin.service.insecureTlsTitle": "Habilitar Conexiones de Salida Inseguras: ",
"admin.service.integrationAdmin": "Habilitar Integraciones sólo para administradores: ",
"admin.service.integrationAdminDesc": "Cuando es verdadero, las integraciones creadas por usuarios solo pueden ser creadas por administradores.",
"admin.service.listenAddress": "Dirección de escucha:",
@@ -932,6 +933,7 @@
"signup_user_completed.gitlab": "con GitLab",
"signup_user_completed.google": "con Google",
"signup_user_completed.lets": "Vamos a crear tu cuenta",
+ "signup_user_completed.none": "No está habilitado ningún método para crear usuarios. Por favor contacta a un administrador para obtener acceso.",
"signup_user_completed.onSite": "en {siteName}",
"signup_user_completed.or": "o",
"signup_user_completed.passwordLength": "Por favor ingresa al menos {min} caracteres",
@@ -1048,7 +1050,6 @@
"user.settings.advance.enabled": "habilitada(s)",
"user.settings.advance.feature": " Característica ",
"user.settings.advance.features": " Características ",
- "user.settings.advance.loc_preview": "Mostrar el idioma del usuario en la configuración de visualización",
"user.settings.advance.markdown_preview": "Mostrar la previsualización de mensajes escritos con markdown",
"user.settings.advance.off": "Encendido",
"user.settings.advance.on": "Apagado",
@@ -1129,10 +1130,12 @@
"user.settings.display.showNickname": "Mostrar el sobrenombre si existe, de lo contrario mostrar el nombre y apellido",
"user.settings.display.showUsername": "Mostrar el nombre de usuario (predeterminado)",
"user.settings.display.teammateDisplay": "Visualización del nombre de los integrantes",
+ "user.settings.display.theme.customTheme": "Tema Personalizado",
+ "user.settings.display.theme.describe": "Abrir para administrar tu tema",
+ "user.settings.display.theme.import": "Importar colores del tema desde Slack",
+ "user.settings.display.theme.themeColors": "Colores del Tema",
+ "user.settings.display.theme.title": "Tema",
"user.settings.display.title": "Configuración de Visualización",
- "user.settings.display.theme.customTheme": "Tema personalizado",
- "user.settings.display.theme.import": "Importar los colores de tema de Slack",
- "user.settings.display.theme.themeColors": "Selecciona un Tema",
"user.settings.general.checkEmail": "Revisa tu correo electrónico {email} para verificar la dirección.",
"user.settings.general.checkEmailNoAddress": "Revisa tu correo electrónico para verificar la dirección",
"user.settings.general.close": "Cerrar",
@@ -1201,7 +1204,6 @@
"user.settings.languages": "Cambiar Idioma",
"user.settings.languages.change": "Cambia el idioma con el que se muestra la intefaz de usuario",
"user.settings.modal.advanced": "Avanzada",
- "user.settings.modal.appearance": "Apariencia",
"user.settings.modal.confirmBtns": "Sí, Descartar",
"user.settings.modal.confirmMsg": "Tienes cambios sin guardar, ¿Estás seguro que los quieres descartar?",
"user.settings.modal.confirmTitle": "¿Descartar Cambios?",
@@ -1259,4 +1261,4 @@
"view_image_popover.download": "Descargar",
"view_image_popover.file": "Archivo {count} de {total}",
"view_image_popover.publicLink": "Obtener Enlace Público"
-}
+} \ No newline at end of file
diff --git a/web/static/images/postArrows.png b/web/static/images/postArrows.png
deleted file mode 100644
index 7b5919fc3..000000000
--- a/web/static/images/postArrows.png
+++ /dev/null
Binary files differ