mirror of
https://github.com/owncast/owncast.git
synced 2024-12-25 10:38:28 +03:00
44 lines
916 B
TypeScript
44 lines
916 B
TypeScript
/* eslint-disable class-methods-use-this */
|
|
import { ChildrenNode, Matcher, MatchResponse, Node } from 'interweave';
|
|
import React from 'react';
|
|
|
|
export interface CustomProps {
|
|
children: React.ReactNode;
|
|
key: string;
|
|
}
|
|
|
|
interface options {
|
|
highlightString: string;
|
|
}
|
|
|
|
export class ChatMessageHighlightMatcher extends Matcher {
|
|
match(str: string): MatchResponse<{}> | null {
|
|
const { highlightString } = this.options as options;
|
|
|
|
if (!highlightString) {
|
|
return null;
|
|
}
|
|
|
|
const result = str.match(highlightString);
|
|
|
|
if (!result) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
index: result.index!,
|
|
length: result[0].length,
|
|
match: result[0],
|
|
valid: true,
|
|
};
|
|
}
|
|
|
|
replaceWith(children: ChildrenNode, props: CustomProps): Node {
|
|
const { key } = props;
|
|
return React.createElement('mark', { key }, children);
|
|
}
|
|
|
|
asTag(): string {
|
|
return 'mark';
|
|
}
|
|
}
|