fix(toc): honour toc_header/level in single-wiki config + div.toc on export
Two TOC bugs: 1. :NuwikiTOC ignored toc_header / toc_header_level (always "= Contents =" at level 1). In the single-wiki shorthand the server only carried file_extension/syntax from the top-level options into the synthesized wiki; every other per-wiki key (toc_header, toc_header_level, links_header, html_path, auto_export, …) was dropped. Add single_wiki_from_value(), which re-parses the top-level object as a full RawWiki (injecting root from wiki_root), so all per-wiki keys set at the top level flow through. Wired into from_init_params + apply_change. 2. HTML export put class="toc" on the <hN> element, but upstream vimwiki (and its stylesheet) wraps the TOC heading in <div class="toc">…</div>. render_heading now emits the div wrapper, matching upstream so .toc CSS applies. With (1) fixed, detection also works for a custom toc_header. Tests: single_wiki_shorthand_honours_top_level_per_wiki_keys (config), toc_header_heading_wrapped_in_div_toc + non_toc_heading_not_wrapped (renderer). Full suite 572 passed; clippy clean; config-parity goldens match. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -253,6 +253,33 @@ fn heading_id_matches_anchor_link_href() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn toc_header_heading_wrapped_in_div_toc() {
|
||||
// The TOC section heading gets a `<div class="toc">` wrapper (vimwiki
|
||||
// scheme) so `.toc` stylesheet rules apply. The class is on the div, not
|
||||
// the heading.
|
||||
let doc = VimwikiSyntax::new().parse("== Contents ==\n");
|
||||
let out = HtmlRenderer::new()
|
||||
.with_toc_header("Contents")
|
||||
.render_to_string(&doc)
|
||||
.unwrap();
|
||||
assert!(
|
||||
out.contains("<div class=\"toc\"><h2 id=\"Contents\">Contents</h2></div>"),
|
||||
"got: {out}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn non_toc_heading_not_wrapped() {
|
||||
let doc = VimwikiSyntax::new().parse("== Intro ==\n");
|
||||
let out = HtmlRenderer::new()
|
||||
.with_toc_header("Contents")
|
||||
.render_to_string(&doc)
|
||||
.unwrap();
|
||||
assert!(out.contains("<h2 id=\"Intro\">Intro</h2>"), "got: {out}");
|
||||
assert!(!out.contains("class=\"toc\""), "got: {out}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn interwiki_numbered_link() {
|
||||
let out = render("[[wiki1:Page]]\n");
|
||||
|
||||
Reference in New Issue
Block a user