import React from 'react';
import ReactMarkdown from 'react-markdown';
import { blinkElem } from '~/client/util/blink-section-header';
import { addSmoothScrollEvent } from '~/client/util/smooth-scroll';
import { CustomWindow } from '~/interfaces/global';
import { RendererOptions } from '~/services/renderer/renderer';
import { useCurrentPathname, useInterceptorManager } from '~/stores/context';
import { useEditorSettings } from '~/stores/editor';
import { useViewOptions } from '~/stores/renderer';
import loggerFactory from '~/utils/logger';
// import RevisionBody from './RevisionBody';
import katexStyles from '../CommonStyles/katex.module.scss';
const logger = loggerFactory('components:Page:RevisionRenderer');
// function getHighlightedBody(body: string, _keywords: string | string[]): string {
// const normalizedKeywordsArray: string[] = [];
// const keywords = (typeof _keywords === 'string') ? [_keywords] : _keywords;
// if (keywords.length === 0) {
// return body;
// }
// // !!TODO!!: add test code refs: https://redmine.weseek.co.jp/issues/86841
// // Separate keywords
// // - Surrounded by double quotation
// // - Split by both full-width and half-width spaces
// // [...keywords.match(/"[^"]+"|[^\u{20}\u{3000}]+/ug)].forEach((keyword, i) => {
// keywords.forEach((keyword, i) => {
// if (keyword === '') {
// return;
// }
// const k = keyword
// .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // escape regex operators
// .replace(/(^"|"$)/g, ''); // for phrase (quoted) keyword
// normalizedKeywordsArray.push(k);
// });
// const normalizedKeywords = `(${normalizedKeywordsArray.join('|')})`;
// const keywordRegxp = new RegExp(`${normalizedKeywords}(?!(.*?"))`, 'ig'); // prior https://regex101.com/r/oX7dq5/1
// let keywordRegexp2 = keywordRegxp;
// // for non-chrome browsers compatibility
// try {
// eslint-disable-next-line regex/invalid, max-len
// keywordRegexp2 = new RegExp(`(?)))`, 'ig'); // inferior (this doesn't work well when html tags exist a lot) https://regex101.com/r/Dfi61F/1
// }
// catch (err) {
// logger.debug('Failed to initialize regex:', err);
// }
// const highlighter = (str) => { return str.replace(keywordRegxp, '$&') }; // prior
// const highlighter2 = (str) => { return str.replace(keywordRegexp2, '$&') }; // inferior
// const insideTagRegex = /<[^<>]*>/g;
// const betweenTagRegex = />([^<>]*)< around
// const insideTagStrs = body.match(insideTagRegex);
// const betweenTagMatches = Array.from(body.matchAll(betweenTagRegex));
// let returnBody = body;
// const isSafeHtml = insideTagStrs?.length === betweenTagMatches.length + 1; // to check whether is safe to join
// if (isSafeHtml) {
// // highlight
// const betweenTagStrs: string[] = betweenTagMatches.map(match => highlighter(match[1])); // get only grouped part (exclude >< around)
// const arr: string[] = [];
// insideTagStrs.forEach((str, i) => {
// arr.push(str);
// arr.push(betweenTagStrs[i]);
// });
// returnBody = arr.join('');
// }
// else {
// // inferior highlighter
// returnBody = highlighter2(body);
// }
// return returnBody;
// }
type Props = {
rendererOptions: RendererOptions,
markdown: string,
pagePath: string,
highlightKeywords?: string | string[],
additionalClassName?: string,
}
const RevisionRenderer = (props: Props): JSX.Element => {
const {
rendererOptions, markdown, pagePath, highlightKeywords, additionalClassName,
} = props;
return (
{markdown}
);
// const [html, setHtml] = useState('');
// const { data: interceptorManager } = useInterceptorManager();
// const { data: editorSettings } = useEditorSettings();
// const { data: currentPathname } = useCurrentPathname();
// const currentRenderingContext = useMemo(() => {
// return {
// markdown,
// parsedHTML: '',
// pagePath,
// renderDrawioInRealtime: editorSettings?.renderDrawioInRealtime,
// currentPathname: decodeURIComponent(currentPathname ?? '/'),
// };
// }, [editorSettings?.renderDrawioInRealtime, markdown, pagePath]);
// const renderHtml = useCallback(async() => {
// if (interceptorManager == null) {
// return;
// }
// const context = currentRenderingContext;
// await interceptorManager.process('preRender', context);
// await interceptorManager.process('prePreProcess', context);
// context.markdown = growiRenderer.preProcess(context.markdown, context);
// await interceptorManager.process('postPreProcess', context);
// context.parsedHTML = growiRenderer.process(context.markdown, context);
// await interceptorManager.process('prePostProcess', context);
// context.parsedHTML = growiRenderer.postProcess(context.parsedHTML, context);
// const isMarkdownEmpty = context.markdown.trim().length === 0;
// if (highlightKeywords != null && !isMarkdownEmpty) {
// context.parsedHTML = getHighlightedBody(context.parsedHTML, highlightKeywords);
// }
// await interceptorManager.process('postPostProcess', context);
// await interceptorManager.process('preRenderHtml', context);
// setHtml(context.parsedHTML);
// }, [currentRenderingContext, growiRenderer, highlightKeywords, interceptorManager]);
// useEffect(() => {
// if (interceptorManager == null) {
// return;
// }
// renderHtml()
// .then(() => {
// // const HeaderLink = document.getElementsByClassName('revision-head-link');
// // const HeaderLinkArray = Array.from(HeaderLink);
// // addSmoothScrollEvent(HeaderLinkArray as HTMLAnchorElement[], blinkElem);
// // interceptorManager.process('postRenderHtml', currentRenderingContext);
// });
// }, [currentRenderingContext, interceptorManager, renderHtml]);
// const config = props.appContainer.getConfig();
// const isMathJaxEnabled = !!config.env.MATHJAX;
// return (
//
// );
// const [html, setHtml] = useState('');
// const { data: interceptorManager } = useInterceptorManager();
// const { data: editorSettings } = useEditorSettings();
// const { data: currentPathname } = useCurrentPathname();
// const currentRenderingContext = useMemo(() => {
// return {
// markdown,
// parsedHTML: '',
// pagePath,
// renderDrawioInRealtime: editorSettings?.renderDrawioInRealtime,
// currentPathname: decodeURIComponent(currentPathname ?? '/'),
// };
// }, [editorSettings?.renderDrawioInRealtime, markdown, pagePath]);
// const renderHtml = useCallback(async() => {
// if (interceptorManager == null) {
// return;
// }
// const context = currentRenderingContext;
// await interceptorManager.process('preRender', context);
// await interceptorManager.process('prePreProcess', context);
// context.markdown = growiRenderer.preProcess(context.markdown, context);
// await interceptorManager.process('postPreProcess', context);
// context.parsedHTML = growiRenderer.process(context.markdown, context);
// await interceptorManager.process('prePostProcess', context);
// context.parsedHTML = growiRenderer.postProcess(context.parsedHTML, context);
// const isMarkdownEmpty = context.markdown.trim().length === 0;
// if (highlightKeywords != null && !isMarkdownEmpty) {
// context.parsedHTML = getHighlightedBody(context.parsedHTML, highlightKeywords);
// }
// await interceptorManager.process('postPostProcess', context);
// await interceptorManager.process('preRenderHtml', context);
// setHtml(context.parsedHTML);
// }, [currentRenderingContext, growiRenderer, highlightKeywords, interceptorManager]);
// useEffect(() => {
// if (interceptorManager == null) {
// return;
// }
// renderHtml()
// .then(() => {
// // const HeaderLink = document.getElementsByClassName('revision-head-link');
// // const HeaderLinkArray = Array.from(HeaderLink);
// // addSmoothScrollEvent(HeaderLinkArray as HTMLAnchorElement[], blinkElem);
// // interceptorManager.process('postRenderHtml', currentRenderingContext);
// });
// }, [currentRenderingContext, interceptorManager, renderHtml]);
// return (
//
// );
};
export default RevisionRenderer;