diff --git a/src/linkify-matrix.js b/src/linkify-matrix.js index 6bbea77733..328cb98888 100644 --- a/src/linkify-matrix.js +++ b/src/linkify-matrix.js @@ -169,11 +169,18 @@ matrixLinkify.VECTOR_URL_PATTERN = "^(?:https?:\/\/)?(?:" + "(?:www\\.)?(?:riot|vector)\\.im/(?:app|beta|staging|develop)/" + ")(#.*)"; -matrixLinkify.MATRIXTO_URL_PATTERN = "^(?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!).*)"; +matrixLinkify.MATRIXTO_URL_PATTERN = "^(?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/([#@!+].*)"; matrixLinkify.MATRIXTO_MD_LINK_PATTERN = - '\\[([^\\]]*)\\]\\((?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!)[^\\)]*)\\)'; + '\\[([^\\]]*)\\]\\((?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/([#@!+][^\\)]*)\\)'; matrixLinkify.MATRIXTO_BASE_URL= baseUrl; +const matrixToEntityMap = { + '@': '#/user/', + '#': '#/room/', + '!': '#/room/', + '+': '#/group/', +}; + matrixLinkify.options = { events: function(href, type) { switch (type) { @@ -204,24 +211,20 @@ matrixLinkify.options = { case 'userid': case 'groupid': return matrixLinkify.MATRIXTO_BASE_URL + '/#/' + href; - default: - var m; + default: { // FIXME: horrible duplication with HtmlUtils' transform tags - m = href.match(matrixLinkify.VECTOR_URL_PATTERN); + let m = href.match(matrixLinkify.VECTOR_URL_PATTERN); if (m) { return m[1]; } m = href.match(matrixLinkify.MATRIXTO_URL_PATTERN); if (m) { const entity = m[1]; - if (entity[0] === '@') { - return '#/user/' + entity; - } else if (entity[0] === '#' || entity[0] === '!') { - return '#/room/' + entity; - } + if (matrixToEntityMap[entity[0]]) return matrixToEntityMap[entity[0]] + entity; } return href; + } } },