mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-15 23:54:42 -04:00
Add toc sidebar+dropdown (#272)
* Replace markdown-it-table-of-contents with markdown-it-toc-done-right Co-authored-by: Erik Michelson <github@erik.michelson.eu> Co-authored-by: Philip Molares <philip.molares@udo.edu> Extract render window code Co-authored-by: Erik Michelson <github@erik.michelson.eu> Co-authored-by: Philip Molares <philip.molares@udo.edu> add new package fix stickyness Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> show toc sidebar only if there is enough space Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * add min height class Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Move markdown toc into own component Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * add sidebar buttons Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Use other button color Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Change name of component Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Fix merge issues and make toc work again Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * pin dependencies Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * remove blank line Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * pin dependency Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Fix anchors Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Add use memo Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de> * Add change log entry for removal of custom slugify
This commit is contained in:
parent
8ab7776a82
commit
50b04c8403
17 changed files with 505 additions and 110 deletions
|
@ -0,0 +1,52 @@
|
|||
import React, { useRef, useState } from 'react'
|
||||
import { Dropdown } from 'react-bootstrap'
|
||||
import useResizeObserver from 'use-resize-observer'
|
||||
import { TocAst } from '../../../external-types/markdown-it-toc-done-right/interface'
|
||||
import { ForkAwesomeIcon } from '../../common/fork-awesome/fork-awesome-icon'
|
||||
import { ShowIf } from '../../common/show-if/show-if'
|
||||
import { MarkdownRenderer } from '../markdown-renderer/markdown-renderer'
|
||||
import { MarkdownToc } from '../markdown-toc/markdown-toc'
|
||||
|
||||
interface RenderWindowProps {
|
||||
content: string
|
||||
wide?: boolean
|
||||
}
|
||||
|
||||
export const MarkdownRenderWindow: React.FC<RenderWindowProps> = ({ content, wide }) => {
|
||||
const [tocAst, setTocAst] = useState<TocAst>()
|
||||
const renderer = useRef<HTMLDivElement>(null)
|
||||
const { width } = useResizeObserver({ ref: renderer })
|
||||
|
||||
const realWidth = width || 0
|
||||
|
||||
return (
|
||||
<div className={'bg-light flex-fill pb-5 flex-row d-flex min-h-100'} ref={renderer}>
|
||||
<div className={'col-md'}/>
|
||||
<MarkdownRenderer
|
||||
className={'flex-fill'}
|
||||
content={content}
|
||||
wide={wide}
|
||||
onTocChange={(tocAst) => setTocAst(tocAst)}/>
|
||||
|
||||
<div className={`col-md d-flex flex-column ${realWidth < 1280 ? 'justify-content-end' : ''}`}>
|
||||
<ShowIf condition={realWidth >= 1280 && !!tocAst}>
|
||||
<MarkdownToc ast={tocAst as TocAst} sticky={true}/>
|
||||
</ShowIf>
|
||||
<ShowIf condition={realWidth < 1280 && !!tocAst}>
|
||||
<div className={'markdown-toc-sidebar-button'}>
|
||||
<Dropdown drop={'up'}>
|
||||
<Dropdown.Toggle id="toc-overlay-button" variant={'secondary'} className={'no-arrow'}>
|
||||
<ForkAwesomeIcon icon={'bars'}/>
|
||||
</Dropdown.Toggle>
|
||||
<Dropdown.Menu>
|
||||
<div className={'p-2'}>
|
||||
<MarkdownToc ast={tocAst as TocAst}/>
|
||||
</div>
|
||||
</Dropdown.Menu>
|
||||
</Dropdown>
|
||||
</div>
|
||||
</ShowIf>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue