mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-13 22:54:42 -04:00
Add slide mode with reveal.js
Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
parent
29565f8f89
commit
36e445e631
70 changed files with 1225 additions and 323 deletions
|
@ -11,6 +11,7 @@ import { LineKeys } from '../types'
|
|||
import { buildTransformer } from '../utils/html-react-transformer'
|
||||
import { calculateNewLineNumberMapping } from '../utils/line-number-mapping'
|
||||
import convertHtmlToReact from '@hedgedoc/html-to-react'
|
||||
import { Document } from 'domhandler'
|
||||
|
||||
/**
|
||||
* Renders markdown code into react elements
|
||||
|
@ -18,24 +19,19 @@ import convertHtmlToReact from '@hedgedoc/html-to-react'
|
|||
* @param markdownCode The markdown code that should be rendered
|
||||
* @param markdownIt The configured {@link MarkdownIt markdown it} instance that should render the code
|
||||
* @param replacers A function that provides a list of {@link ComponentReplacer component replacers}
|
||||
* @param onBeforeRendering A callback that gets executed before the rendering
|
||||
* @param onAfterRendering A callback that gets executed after the rendering
|
||||
* @param preprocessNodes A function that processes nodes after parsing the html code that is generated by markdown it.
|
||||
* @return The React DOM that represents the rendered markdown code
|
||||
*/
|
||||
export const useConvertMarkdownToReactDom = (
|
||||
markdownCode: string,
|
||||
markdownIt: MarkdownIt,
|
||||
replacers: () => ComponentReplacer[],
|
||||
onBeforeRendering?: () => void,
|
||||
onAfterRendering?: () => void
|
||||
replacers: ComponentReplacer[],
|
||||
preprocessNodes?: (nodes: Document) => Document
|
||||
): ValidReactDomElement[] => {
|
||||
const oldMarkdownLineKeys = useRef<LineKeys[]>()
|
||||
const lastUsedLineId = useRef<number>(0)
|
||||
|
||||
return useMemo(() => {
|
||||
if (onBeforeRendering) {
|
||||
onBeforeRendering()
|
||||
}
|
||||
const html = markdownIt.render(markdownCode)
|
||||
const contentLines = markdownCode.split('\n')
|
||||
const { lines: newLines, lastUsedLineId: newLastUsedLineId } = calculateNewLineNumberMapping(
|
||||
|
@ -46,12 +42,7 @@ export const useConvertMarkdownToReactDom = (
|
|||
oldMarkdownLineKeys.current = newLines
|
||||
lastUsedLineId.current = newLastUsedLineId
|
||||
|
||||
const currentReplacers = replacers()
|
||||
const transformer = currentReplacers.length > 0 ? buildTransformer(newLines, currentReplacers) : undefined
|
||||
const rendering = convertHtmlToReact(html, { transform: transformer })
|
||||
if (onAfterRendering) {
|
||||
onAfterRendering()
|
||||
}
|
||||
return rendering
|
||||
}, [onBeforeRendering, markdownIt, markdownCode, replacers, onAfterRendering])
|
||||
const transformer = replacers.length > 0 ? buildTransformer(newLines, replacers) : undefined
|
||||
return convertHtmlToReact(html, { transform: transformer, preprocessNodes: preprocessNodes })
|
||||
}, [markdownIt, markdownCode, replacers, preprocessNodes])
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue