Merge branch 'master' of https://github.com/mattermost/platform
Этот коммит содержится в:
@@ -19,8 +19,8 @@ Learn More
|
||||
<li/>Make a pull request: http://www.mattermost.org/contribute-to-mattermost/</li>
|
||||
</ul>
|
||||
|
||||
Installing the Mattermost
|
||||
=========================
|
||||
Installing Mattermost
|
||||
=====================
|
||||
|
||||
You're installing "Mattermost Alpha", a pre-released version intended for an early look at what we're building. While SpinPunch runs this version internally, it's not recommended for production deployments since we can't guarantee API stability or backwards compatibility until our production release.
|
||||
|
||||
|
||||
21
api/team.go
21
api/team.go
@@ -275,11 +275,24 @@ func emailTeams(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
subjectPage := NewServerTemplatePage("find_teams_subject", c.GetSiteURL())
|
||||
bodyPage := NewServerTemplatePage("find_teams_body", c.GetSiteURL())
|
||||
|
||||
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
|
||||
l4g.Error("An error occured while sending an email in emailTeams err=%v", err)
|
||||
}
|
||||
if result := <-Srv.Store.Team().GetTeamsForEmail(email); result.Err != nil {
|
||||
c.Err = result.Err
|
||||
} else {
|
||||
teams := result.Data.([]*model.Team)
|
||||
|
||||
w.Write([]byte(model.MapToJson(m)))
|
||||
// the template expects Props to be a map with team names as the keys
|
||||
props := make(map[string]string)
|
||||
for _, team := range teams {
|
||||
props[team.Name] = team.Name
|
||||
}
|
||||
bodyPage.Props = props
|
||||
|
||||
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
|
||||
l4g.Error("An error occured while sending an email in emailTeams err=%v", err)
|
||||
}
|
||||
|
||||
w.Write([]byte(model.MapToJson(m)))
|
||||
}
|
||||
}
|
||||
|
||||
func inviteMembers(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -17,11 +17,20 @@ var NavbarDropdown = React.createClass({
|
||||
e.preventDefault();
|
||||
client.logout();
|
||||
},
|
||||
blockToggle: false,
|
||||
componentDidMount: function() {
|
||||
UserStore.addTeamsChangeListener(this._onChange);
|
||||
|
||||
var self = this;
|
||||
$(this.refs.dropdown.getDOMNode()).on('hide.bs.dropdown', function(e) {
|
||||
self.blockToggle = true;
|
||||
setTimeout(function(){self.blockToggle = false;}, 100);
|
||||
});
|
||||
},
|
||||
componentWillUnmount: function() {
|
||||
UserStore.removeTeamsChangeListener(this._onChange);
|
||||
|
||||
$(this.refs.dropdown.getDOMNode()).off('hide.bs.dropdown');
|
||||
},
|
||||
_onChange: function() {
|
||||
if (this.isMounted()) {
|
||||
@@ -75,7 +84,7 @@ var NavbarDropdown = React.createClass({
|
||||
|
||||
return (
|
||||
<ul className="nav navbar-nav navbar-right">
|
||||
<li className="dropdown">
|
||||
<li ref="dropdown" className="dropdown">
|
||||
<a href="#" className="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
|
||||
<span className="dropdown__icon" dangerouslySetInnerHTML={{__html: Constants.MENU_ICON }} />
|
||||
</a>
|
||||
@@ -108,7 +117,11 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
toggleDropdown: function(e) {
|
||||
$('.team__header').find('.dropdown-toggle').trigger('click');
|
||||
if (this.refs.dropdown.blockToggle) {
|
||||
this.refs.dropdown.blockToggle = false;
|
||||
return;
|
||||
}
|
||||
$('.team__header').find('.dropdown-toggle').dropdown('toggle');
|
||||
},
|
||||
|
||||
render: function() {
|
||||
@@ -131,7 +144,7 @@ module.exports = React.createClass({
|
||||
<div className="team__name">{ this.props.teamDisplayName }</div>
|
||||
</div>
|
||||
</a>
|
||||
<NavbarDropdown teamType={this.props.teamType} />
|
||||
<NavbarDropdown ref="dropdown" teamType={this.props.teamType} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user