diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index 2c011f3770..e489bdd8d7 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -45,8 +45,9 @@ import ComposerHistoryManager from '../../../ComposerHistoryManager'; import MessageComposerStore from '../../../stores/MessageComposerStore'; import { getDisplayAliasForRoom } from '../../../Rooms'; -import {MATRIXTO_URL_PATTERN} from '../../../linkify-matrix'; +import {MATRIXTO_URL_PATTERN, MATRIXTO_MD_LINK_PATTERN} from '../../../linkify-matrix'; const REGEX_MATRIXTO = new RegExp(MATRIXTO_URL_PATTERN); +const REGEX_MATRIXTO_MARKDOWN_GLOBAL = new RegExp(MATRIXTO_MD_LINK_PATTERN, 'g'); import {asciiRegexp, shortnameToUnicode, emojioneList, asciiList, mapUnicodeToShort} from 'emojione'; const EMOJI_SHORTNAMES = Object.keys(emojioneList); @@ -778,6 +779,13 @@ export default class MessageComposerInput extends React.Component { sendTextFn = this.client.sendEmoteMessage; } + // Strip MD user mentions to preserve plaintext mention behaviour + // (MD links are very verbose and ugly) + contentText = contentText.replace(REGEX_MATRIXTO_MARKDOWN_GLOBAL, + (markdownLink, text, resource, prefix) => { + return prefix === '@' ? text : markdownLink; + }); + let sendMessagePromise; if (contentHTML) { sendMessagePromise = sendHtmlFn.call( diff --git a/src/linkify-matrix.js b/src/linkify-matrix.js index 01512a771a..e395b7986e 100644 --- a/src/linkify-matrix.js +++ b/src/linkify-matrix.js @@ -168,6 +168,8 @@ matrixLinkify.VECTOR_URL_PATTERN = "^(?:https?:\/\/)?(?:" + ")(#.*)"; matrixLinkify.MATRIXTO_URL_PATTERN = "^(?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!).*)"; +matrixLinkify.MATRIXTO_MD_LINK_PATTERN = + '\\[([^\\]]*)\\]\\((?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!)[^\\)]*)\\)'; matrixLinkify.MATRIXTO_BASE_URL= "https://matrix.to"; matrixLinkify.options = {