fix local markdown resource missing tabs and title setting

This commit is contained in:
lix-2026
2026-05-24 03:01:34 +08:00
parent 6904588055
commit 6df74fb4e0
10 changed files with 132 additions and 17 deletions
@@ -2769,12 +2769,19 @@ pub fn resolve_local_markdown_page_aggregate(
let block_count = content.as_array().map(|blocks| blocks.len()).unwrap_or(0) as u64;
let page_subtree = markdown_page_subtree(document_id, &title, &content);
let workspace_id = local_workspace_id(&canonical_root);
let page_options = metadata
let page_options_value = metadata
.page_options
.get(document_id)
.or_else(|| metadata.page_options.get(&markdown_file.relative_path))
.or_else(|| metadata.page_options.get(&markdown_file.relative_path));
let mut page_options = page_options_value
.map(page_options_from_metadata)
.unwrap_or_default();
if page_options_value
.and_then(page_options_hide_title_header_value)
.is_none()
{
page_options.hide_title_header = true;
}
let character_count = parsed.body.chars().count() as u64;
let word_count = parsed
.body
@@ -6696,9 +6703,19 @@ fn page_options_from_metadata(value: &Value) -> PageOptions {
{
options.protect_editing = protect_editing;
}
if let Some(hide_title_header) = page_options_hide_title_header_value(value) {
options.hide_title_header = hide_title_header;
}
options
}
fn page_options_hide_title_header_value(value: &Value) -> Option<bool> {
value
.get("hideTitleHeader")
.or_else(|| value.get("hide_title_header"))
.and_then(Value::as_bool)
}
pub(crate) fn local_workspace_id(root: &Path) -> String {
if let Ok(manifest) = load_local_workspace_manifest(root) {
if !manifest.workspace_id.trim().is_empty() {
@@ -8294,7 +8311,7 @@ mod tests {
std::fs::write(root.join("README.md"), "# Local Options\n").expect("write md");
std::fs::write(
root.join(".mnote").join("page-options.json"),
r#"{"version":1,"pages":{"local-md:README.md":{"wideLayout":true,"showToc":true,"showHeadingNumbers":true}}}"#,
r#"{"version":1,"pages":{"local-md:README.md":{"wideLayout":true,"showToc":true,"showHeadingNumbers":true,"hideTitleHeader":false}}}"#,
)
.expect("write options");
let root_uri = format!("file://{}", root.display());
@@ -8304,6 +8321,7 @@ mod tests {
assert!(aggregate.layout.page_options.wide_layout);
assert!(aggregate.layout.page_options.show_toc);
assert!(aggregate.layout.page_options.show_heading_numbers);
assert!(!aggregate.layout.page_options.hide_title_header);
let _ = std::fs::remove_dir_all(&root);
}
@@ -10236,6 +10254,7 @@ fn main() {}
let aggregate = resolve_local_markdown_page_aggregate(&root_uri, "local-md:File~20Name.md")
.expect("aggregate");
assert_eq!(aggregate.title, "File Name");
assert!(aggregate.layout.page_options.hide_title_header);
let _ = std::fs::remove_dir_all(&root);
}