You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.1 KiB
46 lines
1.1 KiB
import PropTypes from 'prop-types';
|
|
import React, { Component } from 'react';
|
|
import Link from 'Components/Link/Link';
|
|
|
|
class InlineMarkdown extends Component {
|
|
|
|
//
|
|
// Render
|
|
|
|
render() {
|
|
const {
|
|
className,
|
|
data
|
|
} = this.props;
|
|
|
|
// For now only replace links
|
|
const markdownBlocks = [];
|
|
if (data) {
|
|
const regex = RegExp(/\[(.+?)\]\((.+?)\)/g);
|
|
|
|
let endIndex = 0;
|
|
let match = null;
|
|
while ((match = regex.exec(data)) !== null) {
|
|
if (match.index > endIndex) {
|
|
markdownBlocks.push(data.substr(endIndex, match.index - endIndex));
|
|
}
|
|
markdownBlocks.push(<Link key={match.index} to={match[2]}>{match[1]}</Link>);
|
|
endIndex = match.index + match[0].length;
|
|
}
|
|
|
|
if (endIndex !== data.length) {
|
|
markdownBlocks.push(data.substr(endIndex, data.length - endIndex));
|
|
}
|
|
}
|
|
|
|
return <span className={className}>{markdownBlocks}</span>;
|
|
}
|
|
}
|
|
|
|
InlineMarkdown.propTypes = {
|
|
className: PropTypes.string,
|
|
data: PropTypes.string
|
|
};
|
|
|
|
export default InlineMarkdown;
|