feat(in_app_help): support folder icons

This commit is contained in:
Elian Doran
2025-02-22 12:30:35 +02:00
parent 017fba518d
commit 97bc103e76
3 changed files with 49 additions and 8 deletions

View File

@@ -0,0 +1,41 @@
import { describe, expect, expectTypeOf, it } from "vitest";
import { parseNoteMeta } from "./in_app_help.js";
import type NoteMeta from "./meta/note_meta.js";
describe("In-app help", () => {
it("preserves custom folder icon", () => {
const meta: NoteMeta = {
"isClone": false,
"noteId": "yoAe4jV2yzbd",
"notePath": [
"OkOZllzB3fqN",
"yoAe4jV2yzbd"
],
"title": "Features",
"notePosition": 40,
"prefix": null,
"isExpanded": false,
"type": "text",
"mime": "text/html",
"attributes": [
{
"type": "label",
"name": "iconClass",
"value": "bx bx-star",
"isInheritable": false,
"position": 10
}
],
"format": "html",
"attachments": [],
"dirFileName": "Features",
"children": []
};
const item = parseNoteMeta(meta, "/");
const icon = item.attributes?.find((a) => a.name === "iconClass");
expect(icon?.value).toBe("bx bx-star");
});
});

View File

@@ -33,7 +33,7 @@ function parseNoteMetaFile(noteMetaFile: NoteMetaFile): HiddenSubtreeItem[] {
return parsedMetaRoot.children ?? [];
}
function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeItem {
export function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeItem {
let iconClass: string = "bx bx-file";
const item: HiddenSubtreeItem = {
id: `_help_${noteMeta.noteId}`,
@@ -42,6 +42,12 @@ function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeIt
attributes: []
};
// Handle folder notes
if (!noteMeta.dataFileName) {
iconClass = "bx bx-folder";
item.type = "book";
}
// Handle attributes
for (const attribute of noteMeta.attributes ?? []) {
if (attribute.name === "iconClass") {
@@ -58,12 +64,6 @@ function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeIt
}
}
// Handle folder notes
if (!noteMeta.dataFileName) {
iconClass = "bx bx-folder";
item.type = "book";
}
// Handle text notes
if (noteMeta.type === "text" && noteMeta.dataFileName) {
const docPath = `${docNameRoot}/${path.basename(noteMeta.dataFileName, ".html")}`

View File

@@ -20,7 +20,7 @@ export default interface NoteMeta {
mime?: string;
/** 'html' or 'markdown', applicable to text notes only */
format?: "html" | "markdown";
dataFileName: string;
dataFileName?: string;
dirFileName?: string;
/** this file should not be imported (e.g., HTML navigation) */
noImport?: boolean;