2 releases
0.1.1 | Apr 23, 2024 |
---|---|
0.1.0 | Apr 8, 2024 |
#1209 in Text processing
22KB
177 lines
mdbook-tocjs
A mdbook preprocessor which adds extra js and css file for ToC hydration.
This preprocessor does not actually preprocess contents of each chapters. Rather, it adds additional toc.js
& toc.css
file to be used to hydrate ToC(Table of Contents) block and wing.
The ToC block and wing
Two formats of ToC are available: block and wing.
The block format ToC will be generated at a position where you want to place it. On the above image, "Table of Contents" below the main title is the block ToC.
The wing format ToC will be generated at a left side of a post. It will be floating with scroll. Also when you place mouse over the wing, horizontal bars are converting into literals:
Install
cargo install mdbook-tocjs
Use
In a markdown file of a post where you want to make a ToC, include lines like:
<div id="tock"></div>
<div id="tocw"></div>
With node whose id is "tock", the preprocessor formats toc.js
to be able to make a ToC block under the node.
With node whose id is "tocw", the preprocessor formats toc.js
to be able to make a ToC wing of the post.
You can change actual ids with configuration settings in book.toml
.
Arguments
Inside the toc.js
, toc building methods have some optional arguments. You can pass these options using html's dataset property.
<div id="tock" data-use_number=true data-block_title="Table of Contents"></div>
Above code will make ToC block with number prefix for each title and with a top title of "Table of Contents".
Here are available options: (option: type(default) / details)
- use_number: bool(false) / Use number prefix? / for both of
block
andwing
- block_title: str("Titles") / top title of
block
ToC - use_title_name: bool(false) / Use post's title for top title of
wing
ToC - root_title: str("Title") / top title of
wing
ToC - bar_unit_size: Int(8) / unit size of bar in
wing
ToC - wing_left_margin: Int(4) / left margin of
wing
ToC
Configuration
Default setting (in book.toml
):
[preprocessor.tocjs]
save_dir = "lib"
theme_dir = "theme"
block_marker_id = "tock"
wing_marker_id = "tocw"
base_url = "/"
save_dir
The directory where toc.js
and toc.css
file will be added to.
This directory is relative to the book's src
directory.
🪧 Mind that the
mdbook serve
watchessrc
directory. Once you startmdbook serve
command then change any contents undersrc
directory, the preprocessor may recreate the files and this would lead to a repeat loop of watch and serve. To prevent this, make a .gitignore file at the book's root directory and add thesave_dir
which is joined aftersrc
directory.
theme_dir
The book's theme directory. The preprocessor automatically creates/revise head.hbs
file under this directory. Please make sure to match this setting with your [output.html]
's theme
setting.
The created head.hbs
would look like this:
<link rel="stylesheet" href="/lib/toc.css">
<script src="/lib/toc.js"></script>
block_marker_id and wing_marker_id
Literals to be used as nodes' ids in the raw markdown file. The preprocessor formats toc.js
file to be matched with them.
base_url
Sync base url. It's used in head.hbs
.
More Customization?
You can also use additional-js
and additional-css
for more customization. In this case, manually clone and reivse the toc.js
and toc.css
file.
See Also
Dev log
- Version
0.1.0
to0.1.1
- added
base_url
to configuration.
- added
Dependencies
~11–22MB
~326K SLoC