PLT-4307 - fix !channel link hrefs. (#4122)
* PLT-4307 - fix !channel link hrefs. * Fix style.
Этот коммит содержится в:
коммит произвёл
enahum
родитель
49c6b42d38
Коммит
29a3706ec3
@@ -7,6 +7,7 @@ import ChannelStore from 'stores/channel_store.jsx';
|
|||||||
import EmojiStore from 'stores/emoji_store.jsx';
|
import EmojiStore from 'stores/emoji_store.jsx';
|
||||||
import PreferenceStore from 'stores/preference_store.jsx';
|
import PreferenceStore from 'stores/preference_store.jsx';
|
||||||
import {Preferences} from 'utils/constants.jsx';
|
import {Preferences} from 'utils/constants.jsx';
|
||||||
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
|
|
||||||
import PostMessageView from './post_message_view.jsx';
|
import PostMessageView from './post_message_view.jsx';
|
||||||
@@ -37,7 +38,8 @@ export default class PostMessageContainer extends React.Component {
|
|||||||
enableFormatting: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'formatting', true),
|
enableFormatting: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'formatting', true),
|
||||||
mentionKeys,
|
mentionKeys,
|
||||||
usernameMap: UserStore.getProfilesUsernameMap(),
|
usernameMap: UserStore.getProfilesUsernameMap(),
|
||||||
channelNamesMap: ChannelStore.getChannelNamesMap()
|
channelNamesMap: ChannelStore.getChannelNamesMap(),
|
||||||
|
team: TeamStore.getCurrent()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,6 +97,7 @@ export default class PostMessageContainer extends React.Component {
|
|||||||
mentionKeys={this.state.mentionKeys}
|
mentionKeys={this.state.mentionKeys}
|
||||||
usernameMap={this.state.usernameMap}
|
usernameMap={this.state.usernameMap}
|
||||||
channelNamesMap={this.state.channelNamesMap}
|
channelNamesMap={this.state.channelNamesMap}
|
||||||
|
team={this.state.team}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ export default class PostMessageView extends React.Component {
|
|||||||
enableFormatting: React.PropTypes.bool.isRequired,
|
enableFormatting: React.PropTypes.bool.isRequired,
|
||||||
mentionKeys: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,
|
mentionKeys: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,
|
||||||
usernameMap: React.PropTypes.object.isRequired,
|
usernameMap: React.PropTypes.object.isRequired,
|
||||||
channelNamesMap: React.PropTypes.object.isRequired
|
channelNamesMap: React.PropTypes.object.isRequired,
|
||||||
|
team: React.PropTypes.object.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps) {
|
shouldComponentUpdate(nextProps) {
|
||||||
@@ -56,7 +57,8 @@ export default class PostMessageView extends React.Component {
|
|||||||
siteURL: Utils.getSiteURL(),
|
siteURL: Utils.getSiteURL(),
|
||||||
mentionKeys: this.props.mentionKeys,
|
mentionKeys: this.props.mentionKeys,
|
||||||
usernameMap: this.props.usernameMap,
|
usernameMap: this.props.usernameMap,
|
||||||
channelNamesMap: this.props.channelNamesMap
|
channelNamesMap: this.props.channelNamesMap,
|
||||||
|
team: this.props.team
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ const cjkPattern = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-
|
|||||||
// be handled by a special click handler (Utils.handleFormattedTextClick)
|
// be handled by a special click handler (Utils.handleFormattedTextClick)
|
||||||
// - channelNamesMap - An object mapping channel display names to channels. If provided, !channel mentions will be replaced with
|
// - channelNamesMap - An object mapping channel display names to channels. If provided, !channel mentions will be replaced with
|
||||||
// links to the relevant channel.
|
// links to the relevant channel.
|
||||||
|
// - team - The current team.
|
||||||
export function formatText(text, inputOptions) {
|
export function formatText(text, inputOptions) {
|
||||||
let output = text;
|
let output = text;
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ export function doFormatText(text, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.channelNamesMap) {
|
if (options.channelNamesMap) {
|
||||||
output = autolinkChannelMentions(output, tokens, options.channelNamesMap);
|
output = autolinkChannelMentions(output, tokens, options.channelNamesMap, options.team);
|
||||||
}
|
}
|
||||||
|
|
||||||
output = autolinkEmails(output, tokens);
|
output = autolinkEmails(output, tokens);
|
||||||
@@ -204,16 +205,20 @@ function autolinkAtMentions(text, tokens, usernameMap) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function autolinkChannelMentions(text, tokens, channelNamesMap) {
|
function autolinkChannelMentions(text, tokens, channelNamesMap, team) {
|
||||||
function channelMentionExists(c) {
|
function channelMentionExists(c) {
|
||||||
return Boolean(channelNamesMap[c]);
|
return Boolean(channelNamesMap[c]);
|
||||||
}
|
}
|
||||||
function addToken(channelName, mention, displayName) {
|
function addToken(channelName, mention, displayName) {
|
||||||
const index = tokens.size;
|
const index = tokens.size;
|
||||||
const alias = `MM_CHANNELMENTION${index}`;
|
const alias = `MM_CHANNELMENTION${index}`;
|
||||||
|
let href = '#';
|
||||||
|
if (team) {
|
||||||
|
href = '/' + team.name + '/channels/' + channelName;
|
||||||
|
}
|
||||||
|
|
||||||
tokens.set(alias, {
|
tokens.set(alias, {
|
||||||
value: `<a class='mention-link' href='#' data-channel-mention="${channelName}">${displayName}</a>`,
|
value: `<a class='mention-link' href="${href}" data-channel-mention="${channelName}">${displayName}</a>`,
|
||||||
originalText: mention
|
originalText: mention
|
||||||
});
|
});
|
||||||
return alias;
|
return alias;
|
||||||
|
|||||||
@@ -1374,6 +1374,7 @@ export function handleFormattedTextClick(e) {
|
|||||||
browserHistory.push(linkAttribute.value);
|
browserHistory.push(linkAttribute.value);
|
||||||
}
|
}
|
||||||
} else if (channelMentionAttribute) {
|
} else if (channelMentionAttribute) {
|
||||||
|
e.preventDefault();
|
||||||
browserHistory.push('/' + TeamStore.getCurrent().name + '/channels/' + channelMentionAttribute.value);
|
browserHistory.push('/' + TeamStore.getCurrent().name + '/channels/' + channelMentionAttribute.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user