Merging from master
Этот коммит содержится в:
28
README.md
28
README.md
@@ -60,7 +60,7 @@ Local Machine Setup (Docker)
|
|||||||
3. When docker is done fetching the image, open http://localhost:8065/ in your browser.
|
3. When docker is done fetching the image, open http://localhost:8065/ in your browser.
|
||||||
|
|
||||||
### Arch ###
|
### Arch ###
|
||||||
1. Install docker using the following commands:
|
1. Install Docker using the following commands:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
pacman -S docker
|
pacman -S docker
|
||||||
@@ -70,13 +70,13 @@ Local Machine Setup (Docker)
|
|||||||
newgrp docker
|
newgrp docker
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start docker container:
|
2. Start Docker container:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
|
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
|
||||||
```
|
```
|
||||||
|
|
||||||
3. When docker is done fetching the image, open http://localhost:8065/ in your browser.
|
3. When Docker is done fetching the image, open http://localhost:8065/ in your browser.
|
||||||
|
|
||||||
### Additional Notes ###
|
### Additional Notes ###
|
||||||
- If you want to work with the latest master from the repository (i.e. not a stable release) you can run the cmd:
|
- If you want to work with the latest master from the repository (i.e. not a stable release) you can run the cmd:
|
||||||
@@ -85,7 +85,7 @@ Local Machine Setup (Docker)
|
|||||||
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform:dev
|
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
- Instructions on how to update your docker image are found below.
|
- Instructions on how to update your Docker image are found below.
|
||||||
|
|
||||||
- If you wish to remove mattermost-dev use:
|
- If you wish to remove mattermost-dev use:
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ Local Machine Setup (Docker)
|
|||||||
AWS Elastic Beanstalk Setup (Docker)
|
AWS Elastic Beanstalk Setup (Docker)
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
1. Create a new elastic beanstalk docker application using the [Dockerrun.aws.zip](docker/0.6/Dockerrun.aws//Dockerrun.aws.zip) file provided.
|
1. Create a new Elastic Beanstalk Docker application using the [Dockerrun.aws.zip](docker/0.6/Dockerrun.aws//Dockerrun.aws.zip) file provided.
|
||||||
1. From the AWS console select Elastic Beanstalk.
|
1. From the AWS console select Elastic Beanstalk.
|
||||||
2. Select "Create New Application" from the top right.
|
2. Select "Create New Application" from the top right.
|
||||||
3. Name the application and press next.
|
3. Name the application and press next.
|
||||||
@@ -125,7 +125,7 @@ AWS Elastic Beanstalk Setup (Docker)
|
|||||||
Configuration Settings
|
Configuration Settings
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
There are a few configuration settings you might want to adjust when setting up your instance of Mattermost. You can edit them in [config/config.json](config/config.json) or [docker/0.6/config_docker.json](docker/0.6/config_docker.json) if you're running a docker instance.
|
There are a few configuration settings you might want to adjust when setting up your instance of Mattermost. You can edit them in [config/config.json](config/config.json) or [docker/0.6/config_docker.json](docker/0.6/config_docker.json) if you're running a Docker instance.
|
||||||
|
|
||||||
* *EmailSettings*:*ByPassEmail* - If this is set to true, then users on the system will not need to verify their email addresses when signing up. In addition, no emails will ever be sent.
|
* *EmailSettings*:*ByPassEmail* - If this is set to true, then users on the system will not need to verify their email addresses when signing up. In addition, no emails will ever be sent.
|
||||||
* *ServiceSettings*:*UseLocalStorage* - If this is set to true, then your Mattermost server will store uploaded files in the storage directory specified by *StorageDirectory*. *StorageDirectory* must be set if *UseLocalStorage* is set to true.
|
* *ServiceSettings*:*UseLocalStorage* - If this is set to true, then your Mattermost server will store uploaded files in the storage directory specified by *StorageDirectory*. *StorageDirectory* must be set if *UseLocalStorage* is set to true.
|
||||||
@@ -171,34 +171,34 @@ Email Setup (Optional)
|
|||||||
3. The service should restart automatically. Verify the Mattermost service is running with `ps -A`
|
3. The service should restart automatically. Verify the Mattermost service is running with `ps -A`
|
||||||
4. Current logged in users will not be affected, but upon logging out or session expiration users will be required to verify their email address.
|
4. Current logged in users will not be affected, but upon logging out or session expiration users will be required to verify their email address.
|
||||||
|
|
||||||
Upgrading Mattermost
|
Upgrading Mattermost Preview
|
||||||
---------------------
|
----------------------------
|
||||||
|
|
||||||
### Docker ###
|
### Docker ###
|
||||||
To upgrade your docker image to the latest release (NOTE: this will destroy all data in the docker container):
|
To upgrade your Docker image to a preview of the latest stable release (NOTE: this will erase all data in the Docker container, including the database):
|
||||||
|
|
||||||
1. Stop your docker container by running:
|
1. Stop your Docker container by running:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
docker stop mattermost-dev
|
docker stop mattermost-dev
|
||||||
```
|
```
|
||||||
2. Delete your docker container by running:
|
2. Delete your Docker container by running:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
docker rm mattermost-dev
|
docker rm mattermost-dev
|
||||||
```
|
```
|
||||||
3. Update your docker image by running:
|
3. Update your Docker image by running:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
docker pull mattermost/platform
|
docker pull mattermost/platform
|
||||||
```
|
```
|
||||||
4. Start your docker container by running:
|
4. Start your Docker container by running:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
|
docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform
|
||||||
```
|
```
|
||||||
|
|
||||||
To upgrade to the latest master from the repository replace `mattermost/platform` with `mattermost/platform:dev` in the above instructions.
|
To upgrade to the latest development build on master from the repository replace `mattermost/platform` with `mattermost/platform:dev` in the instructions 3) and 4) above.
|
||||||
|
|
||||||
Contributing
|
Contributing
|
||||||
------------
|
------------
|
||||||
|
|||||||
23
requirements.md
Обычный файл
23
requirements.md
Обычный файл
@@ -0,0 +1,23 @@
|
|||||||
|
# Requirements
|
||||||
|
|
||||||
|
## Web Client
|
||||||
|
|
||||||
|
Supported Operating Systems and Browsers:
|
||||||
|
|
||||||
|
- PC: Windows 7, Windows 8 (Chrome 43+, Firefox 38+, Internet Explorer 10+)
|
||||||
|
- Mac: OS 10 (Safari 7, Chrome 43+)
|
||||||
|
- Linux: Arch 4.0.0 (Chrome 43+)
|
||||||
|
- iPhone 4s and higher (Safari on iOS 8.3+, Chrome 43+)
|
||||||
|
- Android 5 and higher (Chrome 43+)
|
||||||
|
|
||||||
|
## Server
|
||||||
|
|
||||||
|
While the pre-released version of Mattermost is not currently supported in production, the intention from the product team is to support:
|
||||||
|
|
||||||
|
- Ubuntu
|
||||||
|
- Debian
|
||||||
|
- CentOS
|
||||||
|
- RedHat Enterprise Linux
|
||||||
|
- Oracle Linux
|
||||||
|
|
||||||
|
The Mattermost roadmap does not currently include production support for Fedora, FreeBSD or Arch Linux.
|
||||||
@@ -47,6 +47,13 @@ module.exports = React.createClass({
|
|||||||
results: null
|
results: null
|
||||||
});
|
});
|
||||||
|
|
||||||
|
AppDispatcher.handleServerAction({
|
||||||
|
type: ActionTypes.RECIEVED_SEARCH_TERM,
|
||||||
|
term: null,
|
||||||
|
do_search: false,
|
||||||
|
is_mention_search: false
|
||||||
|
});
|
||||||
|
|
||||||
AppDispatcher.handleServerAction({
|
AppDispatcher.handleServerAction({
|
||||||
type: ActionTypes.RECIEVED_POST_SELECTED,
|
type: ActionTypes.RECIEVED_POST_SELECTED,
|
||||||
results: null
|
results: null
|
||||||
|
|||||||
@@ -23,6 +23,13 @@ var RhsHeaderSearch = React.createClass({
|
|||||||
results: null
|
results: null
|
||||||
});
|
});
|
||||||
|
|
||||||
|
AppDispatcher.handleServerAction({
|
||||||
|
type: ActionTypes.RECIEVED_SEARCH_TERM,
|
||||||
|
term: null,
|
||||||
|
do_search: false,
|
||||||
|
is_mention_search: false
|
||||||
|
});
|
||||||
|
|
||||||
AppDispatcher.handleServerAction({
|
AppDispatcher.handleServerAction({
|
||||||
type: ActionTypes.RECIEVED_POST_SELECTED,
|
type: ActionTypes.RECIEVED_POST_SELECTED,
|
||||||
results: null
|
results: null
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
confirmButton = <a className={confirmButtonClass} onClick={this.props.submit}>Save</a>;
|
confirmButton = <a className={confirmButtonClass} onClick={this.props.submit}>Save</a>;
|
||||||
}
|
}
|
||||||
|
var helpText = 'Upload a profile picture in either JPG or PNG format, at least ' + config.ProfileWidth + 'px in width and ' + config.ProfileHeight + 'px height.'
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
return (
|
return (
|
||||||
@@ -58,6 +59,9 @@ module.exports = React.createClass({
|
|||||||
<li className='setting-list-item'>
|
<li className='setting-list-item'>
|
||||||
{img}
|
{img}
|
||||||
</li>
|
</li>
|
||||||
|
<li className='setting-list-item'>
|
||||||
|
{helpText}
|
||||||
|
</li>
|
||||||
<li className='setting-list-item'>
|
<li className='setting-list-item'>
|
||||||
{serverError}
|
{serverError}
|
||||||
{clientError}
|
{clientError}
|
||||||
|
|||||||
@@ -133,10 +133,10 @@ module.exports = React.createClass({
|
|||||||
<div>
|
<div>
|
||||||
<div className='modal-header'>
|
<div className='modal-header'>
|
||||||
<button type='button' className='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>×</span></button>
|
<button type='button' className='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>×</span></button>
|
||||||
<h4 className='modal-title' ref='title'><i className='modal-back'></i>Feature Settings</h4>
|
<h4 className='modal-title' ref='title'><i className='modal-back'></i>Advanced Features</h4>
|
||||||
</div>
|
</div>
|
||||||
<div ref='wrapper' className='user-settings'>
|
<div ref='wrapper' className='user-settings'>
|
||||||
<h3 className='tab-header'>Feature Settings</h3>
|
<h3 className='tab-header'>Advanced Features</h3>
|
||||||
<div className='divider-dark first'/>
|
<div className='divider-dark first'/>
|
||||||
{valetSection}
|
{valetSection}
|
||||||
<div className='divider-dark'/>
|
<div className='divider-dark'/>
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
var tabs = [];
|
var tabs = [];
|
||||||
tabs.push({name: 'feature', uiName: 'Features', icon: 'glyphicon glyphicon-wrench'});
|
|
||||||
tabs.push({name: 'import', uiName: 'Import', icon: 'glyphicon glyphicon-upload'});
|
tabs.push({name: 'import', uiName: 'Import', icon: 'glyphicon glyphicon-upload'});
|
||||||
|
tabs.push({name: 'feature', uiName: 'Advanced', icon: 'glyphicon glyphicon-wrench'});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='modal fade' ref='modal' id='team_settings' role='dialog' tabIndex='-1' aria-hidden='true'>
|
<div className='modal fade' ref='modal' id='team_settings' role='dialog' tabIndex='-1' aria-hidden='true'>
|
||||||
|
|||||||
@@ -271,11 +271,12 @@ function getYoutubeEmbed(link) {
|
|||||||
iframe.setAttribute('src',
|
iframe.setAttribute('src',
|
||||||
'https://www.youtube.com/embed/' +
|
'https://www.youtube.com/embed/' +
|
||||||
div.id +
|
div.id +
|
||||||
'?autoplay=1&autohide=1&border=0&wmode=opaque&enablejsapi=1');
|
'?autoplay=1&autohide=1&border=0&wmode=opaque&fs=1&enablejsapi=1');
|
||||||
iframe.setAttribute('width', '480px');
|
iframe.setAttribute('width', '480px');
|
||||||
iframe.setAttribute('height', '360px');
|
iframe.setAttribute('height', '360px');
|
||||||
iframe.setAttribute('type', 'text/html');
|
iframe.setAttribute('type', 'text/html');
|
||||||
iframe.setAttribute('frameborder', '0');
|
iframe.setAttribute('frameborder', '0');
|
||||||
|
iframe.setAttribute('allowfullscreen', 'allowfullscreen');
|
||||||
|
|
||||||
div.parentNode.replaceChild(iframe, div);
|
div.parentNode.replaceChild(iframe, div);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,6 +200,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.search__clear {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#navbar {
|
#navbar {
|
||||||
|
|||||||
@@ -50,6 +50,8 @@
|
|||||||
config = {};
|
config = {};
|
||||||
}
|
}
|
||||||
config.SiteName = '{{ .SiteName }}';
|
config.SiteName = '{{ .SiteName }}';
|
||||||
|
config.ProfileWidth = '{{ .Props.ProfileWidth }}'
|
||||||
|
config.ProfileHeight = '{{ .Props.ProfileHeight }}'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="/static/js/bundle.js"></script>
|
<script src="/static/js/bundle.js"></script>
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ func NewHtmlTemplatePage(templateName string, title string) *HtmlTemplatePage {
|
|||||||
|
|
||||||
props := make(map[string]string)
|
props := make(map[string]string)
|
||||||
props["AnalyticsUrl"] = utils.Cfg.ServiceSettings.AnalyticsUrl
|
props["AnalyticsUrl"] = utils.Cfg.ServiceSettings.AnalyticsUrl
|
||||||
|
props["ProfileHeight"] = fmt.Sprintf("%v", utils.Cfg.ImageSettings.ProfileHeight)
|
||||||
|
props["ProfileWidth"] = fmt.Sprintf("%v", utils.Cfg.ImageSettings.ProfileWidth)
|
||||||
return &HtmlTemplatePage{TemplateName: templateName, Title: title, SiteName: utils.Cfg.ServiceSettings.SiteName, Props: props}
|
return &HtmlTemplatePage{TemplateName: templateName, Title: title, SiteName: utils.Cfg.ServiceSettings.SiteName, Props: props}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user