Merge branch 'release-1.3'
Этот коммит содержится в:
31
CHANGELOG.md
31
CHANGELOG.md
@@ -1,16 +1,31 @@
|
|||||||
# Mattermost Changelog
|
# Mattermost Changelog
|
||||||
|
|
||||||
## UNDER DEVELOPMENT Release v1.3.0
|
## Release v1.3.0
|
||||||
|
|
||||||
The "UNDER DEVELOPMENT" section of the Mattermost changelog appears in the product's `master` branch to note key changes committed to master and are on their way to the next stable release. When a stable release is pushed the "UNDER DEVELOPMENT" heading is removed from the final changelog of the release.
|
Release date: 2015-12-16
|
||||||
|
|
||||||
- **Release candidate anticipated:** 2015-12-10
|
### Release Highlights
|
||||||
- **Final release anticipated:** 2015-12-16
|
|
||||||
|
#### iOS App
|
||||||
|
|
||||||
|
- New [Mattermost iOS App](https://github.com/mattermost/ios) now available for iPhone, iPad, and iPod Touch
|
||||||
|
- New [Mattermost Push Notification Service](https://github.com/mattermost/push-proxy) to relay notifications to custom iOS applications
|
||||||
|
|
||||||
|
#### Search Upgrades
|
||||||
|
|
||||||
|
- Jump to search results in archives using new message permalinks
|
||||||
|
- It's easier to find what you're looking for with improved auto-complete in search
|
||||||
|
|
||||||
|
#### Advanced Formatting
|
||||||
|
|
||||||
|
- Express more in symbols, with new emoji auto-complete
|
||||||
|
- Express more in numbers, with rendering of mathematical expressions using Latex (start code blocks with ```latex)
|
||||||
|
- Personalize your look with new custom font settings under **Account Settings** > **Display** > **Display Font**
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
|
|
||||||
Authentication
|
Authentication
|
||||||
- Documented unofficial GitHub SSO support using GitLab UI
|
- Added unofficial SSO support for GitHub.com and GitHub Enterprise using GitLab UI
|
||||||
|
|
||||||
Archives
|
Archives
|
||||||
- Added permalink feature that lets users link to a post in the message archives
|
- Added permalink feature that lets users link to a post in the message archives
|
||||||
@@ -35,13 +50,12 @@ Performance
|
|||||||
- Refactored the center channel
|
- Refactored the center channel
|
||||||
|
|
||||||
Messaging & Comments
|
Messaging & Comments
|
||||||
- Added "Help" link for messaging
|
|
||||||
- Removed the @all mention
|
|
||||||
- Added Markdown support for task lists
|
- Added Markdown support for task lists
|
||||||
|
- Added "Help" link for messaging
|
||||||
- Added ability to preview a Markdown message before sending (enabled via Account Settings -> Advanced -> Preview pre-release features)
|
- Added ability to preview a Markdown message before sending (enabled via Account Settings -> Advanced -> Preview pre-release features)
|
||||||
|
|
||||||
Onboarding
|
Onboarding
|
||||||
- Added various small improvements to the tutorial
|
- Minor upgrades to tutorial
|
||||||
|
|
||||||
User Interface
|
User Interface
|
||||||
- Visually combined sequential messages from the same user
|
- Visually combined sequential messages from the same user
|
||||||
@@ -52,6 +66,7 @@ User Interface
|
|||||||
|
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
|
|
||||||
|
- Removed the @all mention to keep users from accidentally spamming team sites
|
||||||
- Fixed bug where the member list only showed "20" members for channels with more than 20 members
|
- Fixed bug where the member list only showed "20" members for channels with more than 20 members
|
||||||
- Fixed bug where the channel sidebar didn't order correctly on Postgres databases
|
- Fixed bug where the channel sidebar didn't order correctly on Postgres databases
|
||||||
- Fixed bug where search results did not highlight when searching with quotation marks, wildcard, or in: and from: modifiers
|
- Fixed bug where search results did not highlight when searching with quotation marks, wildcard, or in: and from: modifiers
|
||||||
|
|||||||
@@ -1062,5 +1062,7 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||||
|
w.Header().Set("Expires", "0")
|
||||||
w.Write([]byte(posts.ToJson()))
|
w.Write([]byte(posts.ToJson()))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ VOLUME /var/lib/mysql
|
|||||||
WORKDIR /mattermost
|
WORKDIR /mattermost
|
||||||
|
|
||||||
# Copy over files
|
# Copy over files
|
||||||
ADD https://github.com/mattermost/platform/releases/download/v1.3.0-rc1/mattermost.tar.gz /
|
ADD https://github.com/mattermost/platform/releases/download/v1.3.0/mattermost.tar.gz /
|
||||||
RUN tar -zxvf /mattermost.tar.gz --strip-components=1 && rm /mattermost.tar.gz
|
RUN tar -zxvf /mattermost.tar.gz --strip-components=1 && rm /mattermost.tar.gz
|
||||||
ADD config_docker.json /
|
ADD config_docker.json /
|
||||||
ADD docker-entry.sh /
|
ADD docker-entry.sh /
|
||||||
|
|||||||
@@ -586,7 +586,7 @@ export default class EmailSettings extends React.Component {
|
|||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.sendPushNotifications}
|
disabled={!this.state.sendPushNotifications}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Location of the push notification server.'}</p>
|
<p className='help-text'>{'Location of Mattermost push notification service you can set up behind your firewall using https://github.com/mattermost/push-proxy. For testing you can use https://push.mattermost.com, which connects to the sample Mattermost iOS app in the public Apple AppStore. Please do not use test service for production deployments.'}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -233,7 +233,8 @@ export default class PostsView extends React.Component {
|
|||||||
window.requestAnimationFrame(() => {
|
window.requestAnimationFrame(() => {
|
||||||
// If separator exists scroll to it. Otherwise scroll to bottom.
|
// If separator exists scroll to it. Otherwise scroll to bottom.
|
||||||
if (this.refs.newMessageSeparator) {
|
if (this.refs.newMessageSeparator) {
|
||||||
this.refs.newMessageSeparator.scrollIntoView();
|
var objDiv = this.refs.postlist;
|
||||||
|
objDiv.scrollTop = this.refs.newMessageSeparator.offsetTop; //scrolls node to top of Div
|
||||||
} else {
|
} else {
|
||||||
this.refs.postlist.scrollTop = this.refs.postlist.scrollHeight;
|
this.refs.postlist.scrollTop = this.refs.postlist.scrollHeight;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ export default class SearchResultsItem extends React.Component {
|
|||||||
|
|
||||||
handleFocusRHSClick(e) {
|
handleFocusRHSClick(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
EventHelpers.emitPostFocusRightHandSideFromSearch(this.props.post, this.props.isMentionSearch);
|
||||||
EventHelpers.emitPostFocusRightHandSideEvent(this.props.post);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
|
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
|
||||||
import ChannelStore from '../stores/channel_store.jsx';
|
import ChannelStore from '../stores/channel_store.jsx';
|
||||||
import PostStore from '../stores/post_store.jsx';
|
import PostStore from '../stores/post_store.jsx';
|
||||||
|
import SearchStore from '../stores/search_store.jsx';
|
||||||
import Constants from '../utils/constants.jsx';
|
import Constants from '../utils/constants.jsx';
|
||||||
const ActionTypes = Constants.ActionTypes;
|
const ActionTypes = Constants.ActionTypes;
|
||||||
import * as AsyncClient from '../utils/async_client.jsx';
|
import * as AsyncClient from '../utils/async_client.jsx';
|
||||||
import * as Client from '../utils/client.jsx';
|
import * as Client from '../utils/client.jsx';
|
||||||
import * as Utils from '../utils/utils.jsx';
|
|
||||||
|
|
||||||
export function emitChannelClickEvent(channel) {
|
export function emitChannelClickEvent(channel) {
|
||||||
AsyncClient.getChannels(true);
|
AsyncClient.getChannels(true);
|
||||||
@@ -39,28 +39,27 @@ export function emitPostFocusEvent(postId) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function emitPostFocusRightHandSideEvent(post) {
|
export function emitPostFocusRightHandSideFromSearch(post, isMentionSearch) {
|
||||||
Client.getPost(
|
Client.getPost(
|
||||||
post.channel_id,
|
post.channel_id,
|
||||||
post.id,
|
post.id,
|
||||||
(data) => {
|
(data) => {
|
||||||
AppDispatcher.handleServerAction({
|
AppDispatcher.handleServerAction({
|
||||||
type: ActionTypes.RECIEVED_POST_SELECTED,
|
type: ActionTypes.RECIEVED_POST_SELECTED,
|
||||||
post_list: data
|
post_list: data,
|
||||||
|
from_search: SearchStore.getSearchTerm()
|
||||||
});
|
});
|
||||||
|
|
||||||
AppDispatcher.handleServerAction({
|
AppDispatcher.handleServerAction({
|
||||||
type: ActionTypes.RECIEVED_SEARCH,
|
type: ActionTypes.RECIEVED_SEARCH,
|
||||||
results: null
|
results: null,
|
||||||
|
is_mention_search: isMentionSearch
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
AsyncClient.dispatchError(err, 'getPost');
|
AsyncClient.dispatchError(err, 'getPost');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
var postChannel = ChannelStore.get(post.channel_id);
|
|
||||||
Utils.switchChannel(postChannel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function emitLoadMorePostsEvent() {
|
export function emitLoadMorePostsEvent() {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ body {
|
|||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
background: $body-bg;
|
background: $body-bg;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
&.white {
|
&.white {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|||||||
@@ -209,6 +209,7 @@ body.ios {
|
|||||||
@include flex(1 1 auto);
|
@include flex(1 1 auto);
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
.post-list-holder-by-time {
|
.post-list-holder-by-time {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|||||||
@@ -54,9 +54,7 @@
|
|||||||
@media screen and (max-width: 960px) {
|
@media screen and (max-width: 960px) {
|
||||||
|
|
||||||
.sidebar--right {
|
.sidebar--right {
|
||||||
width: 400px;
|
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
right: 0;
|
|
||||||
@include translateX(100%);
|
@include translateX(100%);
|
||||||
|
|
||||||
&.move--left {
|
&.move--left {
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
|
||||||
.sidebar--right {
|
.sidebar--right {
|
||||||
position: absolute;
|
position: fixed;
|
||||||
width: 400px;
|
width: 400px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
@include single-transition(transform, 0.5s, ease);
|
@include single-transition(transform, 0.5s, ease);
|
||||||
right: -400px;
|
@include translateX(400px);
|
||||||
|
|
||||||
&.move--left {
|
&.move--left {
|
||||||
right: 0;
|
@include translateX(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
.post-body {
|
.post-body {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user