mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-06 19:47:04 +03:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import * as React from "react";
|
|
|
|
export interface NoticeTextSelectionProps {
|
|
icon?: string;
|
|
text: string;
|
|
idSuffix: string;
|
|
onClick?: (event: React.MouseEvent) => unknown;
|
|
children?: React.ReactNode;
|
|
}
|
|
|
|
export interface NoticeTextSelectionState {
|
|
|
|
}
|
|
|
|
class NoticeTextSelectionComponent extends React.Component<NoticeTextSelectionProps, NoticeTextSelectionState> {
|
|
|
|
constructor(props: NoticeTextSelectionProps) {
|
|
super(props);
|
|
}
|
|
|
|
render(): React.ReactElement {
|
|
const style: React.CSSProperties = {};
|
|
if (this.props.onClick) {
|
|
style.cursor = "pointer";
|
|
style.textDecoration = "underline"
|
|
}
|
|
|
|
return (
|
|
<tr id={"sponsorTimesInfoMessage" + this.props.idSuffix}
|
|
onClick={this.props.onClick}
|
|
style={style}
|
|
className="sponsorTimesInfoMessage">
|
|
|
|
<td>
|
|
{this.props.icon ?
|
|
<img src={chrome.runtime.getURL(this.props.icon)} className="sponsorTimesInfoIcon" />
|
|
: null}
|
|
|
|
<span>
|
|
{this.getTextElements(this.props.text)}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
);
|
|
}
|
|
|
|
private getTextElements(text: string): Array<string | React.ReactElement> {
|
|
const elements: Array<string | React.ReactElement> = [];
|
|
const textParts = text.split(/(?=\s+)/);
|
|
for (const textPart of textParts) {
|
|
if (textPart.match(/^\s*http/)) {
|
|
elements.push(
|
|
<a href={textPart} target="_blank" rel="noreferrer">
|
|
{textPart}
|
|
</a>
|
|
);
|
|
} else {
|
|
elements.push(textPart);
|
|
}
|
|
|
|
}
|
|
|
|
return elements;
|
|
}
|
|
}
|
|
|
|
export default NoticeTextSelectionComponent; |