mirror of
https://github.com/xoofx/markdig.git
synced 2026-02-10 14:00:05 +00:00
Question: is there any example code for creating collapsible/accordion content? #626
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @aaronamm on GitHub (Sep 25, 2023).
Hello everyone, I would like to create an extension to generate collapsible/accordion content.
Given this example:
We have Markdown content as:
I want it to be rendered to HTML as:
For Remark (the Node.js implementation project), I can make a custom plugin as the following code:
https://github.com/codesanook/only-minidisc-static-site/blob/main/only-minidisc/plugins/remark-collapse/index.js#L26-L43
However, I still couldn't find something like
markdownAST.childrennodes that I can loop to create a pair of summary and details tags.I would be glad if you could give me some suggestions or example code that I can create a Markdig extension to render a collapsible/accordion content.
Thank you so much.
@aaronamm commented on GitHub (Sep 28, 2023):
DefinitionList extension might be a good one to be applied to what I need.
DefinitionListParser
CC @xoofx I would be glad if you could give some suggestion/idea.
Thanks.
@xoofx commented on GitHub (Sep 28, 2023):
You can use the various
MarkdownObject.Descendantsextension methods to navigate the tree structure.The main problem you will face is that a header
# headerdoesn't form a block with the rest of your paragraph in CommonMark, so these are treated separately as consecutive blocks (aHeaderBlockand aParagraphBlock). That means that you need to navigate the siblings blocks in order to find the next header (that is of same level 1). In order to navigate siblings, you might have to go to the parent, which should be aContainerBlock, find theHeaderBlockthat you were processing for, and iterate on the following siblings from the parent.Then you might want to create your own kind of
ContainerBlockto wrap the header and the following paragraph into it, and then create associatedHtmlRenderer, and add it to the Html renderers when configuring the pipeline for rendering.It is still quite some work.
@aaronamm commented on GitHub (Oct 2, 2023):
@xoofx thank you so much. Your suggestion is very useful. I think I've got all required information to create collapsible content.