Merge pull request #4176 from matrix-org/travis/linkify-rooms
Fix room alias references in topics
This commit is contained in:
commit
9836a7a655
3 changed files with 29 additions and 9 deletions
|
@ -23,7 +23,6 @@ import ReplyThread from "./components/views/elements/ReplyThread";
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
import highlight from 'highlight.js';
|
|
||||||
import * as linkify from 'linkifyjs';
|
import * as linkify from 'linkifyjs';
|
||||||
import linkifyMatrix from './linkify-matrix';
|
import linkifyMatrix from './linkify-matrix';
|
||||||
import _linkifyElement from 'linkifyjs/element';
|
import _linkifyElement from 'linkifyjs/element';
|
||||||
|
@ -467,11 +466,12 @@ export function bodyToHtml(content, highlights, opts={}) {
|
||||||
/**
|
/**
|
||||||
* Linkifies the given string. This is a wrapper around 'linkifyjs/string'.
|
* Linkifies the given string. This is a wrapper around 'linkifyjs/string'.
|
||||||
*
|
*
|
||||||
* @param {string} str
|
* @param {string} str string to linkify
|
||||||
* @returns {string}
|
* @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options
|
||||||
|
* @returns {string} Linkified string
|
||||||
*/
|
*/
|
||||||
export function linkifyString(str) {
|
export function linkifyString(str, options = linkifyMatrix.options) {
|
||||||
return _linkifyString(str);
|
return _linkifyString(str, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -489,10 +489,11 @@ export function linkifyElement(element, options = linkifyMatrix.options) {
|
||||||
* Linkify the given string and sanitize the HTML afterwards.
|
* Linkify the given string and sanitize the HTML afterwards.
|
||||||
*
|
*
|
||||||
* @param {string} dirtyHtml The HTML string to sanitize and linkify
|
* @param {string} dirtyHtml The HTML string to sanitize and linkify
|
||||||
|
* @param {object} [options] Options for linkifyString. Default: linkifyMatrix.options
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
export function linkifyAndSanitizeHtml(dirtyHtml) {
|
export function linkifyAndSanitizeHtml(dirtyHtml, options = linkifyMatrix.options) {
|
||||||
return sanitizeHtml(linkifyString(dirtyHtml), sanitizeHtmlParams);
|
return sanitizeHtml(linkifyString(dirtyHtml, options), sanitizeHtmlParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {baseUrl} from "./utils/permalinks/SpecPermalinkConstructor";
|
import {baseUrl} from "./utils/permalinks/SpecPermalinkConstructor";
|
||||||
import {tryTransformPermalinkToLocalHref} from "./utils/permalinks/Permalinks";
|
import {tryTransformEntityToPermalink, tryTransformPermalinkToLocalHref} from "./utils/permalinks/Permalinks";
|
||||||
|
|
||||||
function matrixLinkify(linkify) {
|
function matrixLinkify(linkify) {
|
||||||
// Text tokens
|
// Text tokens
|
||||||
|
@ -221,7 +221,7 @@ matrixLinkify.options = {
|
||||||
case 'userid':
|
case 'userid':
|
||||||
case 'groupid':
|
case 'groupid':
|
||||||
default: {
|
default: {
|
||||||
return tryTransformPermalinkToLocalHref(href);
|
return tryTransformEntityToPermalink(href);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -290,6 +290,25 @@ export function isPermalinkHost(host: string): boolean {
|
||||||
return getPermalinkConstructor().isPermalinkHost(host);
|
return getPermalinkConstructor().isPermalinkHost(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms an entity (permalink, room alias, user ID, etc) into a local URL
|
||||||
|
* if possible. If the given entity is not found to be valid enough to be converted
|
||||||
|
* then a null value will be returned.
|
||||||
|
* @param {string} entity The entity to transform.
|
||||||
|
* @returns {string|null} The transformed permalink or null if unable.
|
||||||
|
*/
|
||||||
|
export function tryTransformEntityToPermalink(entity: string): string {
|
||||||
|
if (!entity) return null;
|
||||||
|
|
||||||
|
// Check to see if it is a bare entity for starters
|
||||||
|
if (entity[0] === '#' || entity[0] === '!') return makeRoomPermalink(entity);
|
||||||
|
if (entity[0] === '@') return makeUserPermalink(entity);
|
||||||
|
if (entity[0] === '+') return makeGroupPermalink(entity);
|
||||||
|
|
||||||
|
// Then try and merge it into a permalink
|
||||||
|
return tryTransformPermalinkToLocalHref(entity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms a permalink (or possible permalink) into a local URL if possible. If
|
* Transforms a permalink (or possible permalink) into a local URL if possible. If
|
||||||
* the given permalink is found to not be a permalink, it'll be returned unaltered.
|
* the given permalink is found to not be a permalink, it'll be returned unaltered.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue