mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	feat(in_app_help): contextual help for book types
This commit is contained in:
		@@ -4,9 +4,11 @@ import ListOrGridView from "../widgets/view_widgets/list_or_grid_view.js";
 | 
				
			|||||||
import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
 | 
					import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
 | 
				
			||||||
import type ViewMode from "../widgets/view_widgets/view_mode.js";
 | 
					import type ViewMode from "../widgets/view_widgets/view_mode.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type ViewTypeOptions = "list" | "grid" | "calendar";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class NoteListRenderer {
 | 
					export default class NoteListRenderer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private viewType: string;
 | 
					    private viewType: ViewTypeOptions;
 | 
				
			||||||
    public viewMode: ViewMode | null;
 | 
					    public viewMode: ViewMode | null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor($parent: JQuery<HTMLElement>, parentNote: FNote, noteIds: string[], showNotePath: boolean = false) {
 | 
					    constructor($parent: JQuery<HTMLElement>, parentNote: FNote, noteIds: string[], showNotePath: boolean = false) {
 | 
				
			||||||
@@ -27,14 +29,14 @@ export default class NoteListRenderer {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #getViewType(parentNote: FNote): string {
 | 
					    #getViewType(parentNote: FNote): ViewTypeOptions {
 | 
				
			||||||
        const viewType = parentNote.getLabelValue("viewType");
 | 
					        const viewType = parentNote.getLabelValue("viewType");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!["list", "grid", "calendar"].includes(viewType || "")) {
 | 
					        if (!["list", "grid", "calendar"].includes(viewType || "")) {
 | 
				
			||||||
            // when not explicitly set, decide based on the note type
 | 
					            // when not explicitly set, decide based on the note type
 | 
				
			||||||
            return parentNote.type === "search" ? "list" : "grid";
 | 
					            return parentNote.type === "search" ? "list" : "grid";
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return viewType as string;
 | 
					            return viewType as ViewTypeOptions;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
import appContext from "../../components/app_context.js";
 | 
					import appContext, { type EventData } from "../../components/app_context.js";
 | 
				
			||||||
import type { NoteType } from "../../entities/fnote.js";
 | 
					import type { NoteType } from "../../entities/fnote.js";
 | 
				
			||||||
import { t } from "../../services/i18n.js";
 | 
					import { t } from "../../services/i18n.js";
 | 
				
			||||||
import type { ViewScope } from "../../services/link.js";
 | 
					import type { ViewScope } from "../../services/link.js";
 | 
				
			||||||
 | 
					import type { ViewTypeOptions } from "../../services/note_list_renderer.js";
 | 
				
			||||||
import NoteContextAwareWidget from "../note_context_aware_widget.js";
 | 
					import NoteContextAwareWidget from "../note_context_aware_widget.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TPL = `
 | 
					const TPL = `
 | 
				
			||||||
@@ -10,8 +11,7 @@ const TPL = `
 | 
				
			|||||||
</button>
 | 
					</button>
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const byNoteType: Record<NoteType, string | null> = {
 | 
					const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
 | 
				
			||||||
    book: null,
 | 
					 | 
				
			||||||
    canvas: null,
 | 
					    canvas: null,
 | 
				
			||||||
    code: null,
 | 
					    code: null,
 | 
				
			||||||
    contentWidget: null,
 | 
					    contentWidget: null,
 | 
				
			||||||
@@ -30,6 +30,12 @@ const byNoteType: Record<NoteType, string | null> = {
 | 
				
			|||||||
    webView: null
 | 
					    webView: null
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const byBookType: Record<ViewTypeOptions, string | null> = {
 | 
				
			||||||
 | 
					    list: null,
 | 
				
			||||||
 | 
					    grid: null,
 | 
				
			||||||
 | 
					    calendar: "fDGg7QcJg3Xm"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class ContextualHelpButton extends NoteContextAwareWidget {
 | 
					export default class ContextualHelpButton extends NoteContextAwareWidget {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private helpNoteIdToOpen?: string | null;
 | 
					    private helpNoteIdToOpen?: string | null;
 | 
				
			||||||
@@ -41,8 +47,10 @@ export default class ContextualHelpButton extends NoteContextAwareWidget {
 | 
				
			|||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (this.note && byNoteType[this.note.type]) {
 | 
					        if (this.note && this.note.type !== "book" && byNoteType[this.note.type]) {
 | 
				
			||||||
            this.helpNoteIdToOpen = byNoteType[this.note.type];
 | 
					            this.helpNoteIdToOpen = byNoteType[this.note.type];
 | 
				
			||||||
 | 
					        } else if (this.note && this.note.type === "book") {
 | 
				
			||||||
 | 
					            this.helpNoteIdToOpen = byBookType[this.note.getAttributeValue("label", "viewType") as ViewTypeOptions ?? ""]
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return !!this.helpNoteIdToOpen;
 | 
					        return !!this.helpNoteIdToOpen;
 | 
				
			||||||
@@ -73,4 +81,10 @@ export default class ContextualHelpButton extends NoteContextAwareWidget {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) {
 | 
				
			||||||
 | 
					        if (this.note?.type === "book" && loadResults.getAttributeRows().find((attr) => attr.noteId === this.noteId && attr.name === "viewType")) {
 | 
				
			||||||
 | 
					            this.refresh();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,10 @@ const TPL = `
 | 
				
			|||||||
        margin-bottom: 0.5em;
 | 
					        margin-bottom: 0.5em;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    body.desktop .calendar-container .fc-toolbar.fc-header-toolbar {
 | 
				
			||||||
 | 
					        padding-right: 5em;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .calendar-container .fc-toolbar-title {
 | 
					    .calendar-container .fc-toolbar-title {
 | 
				
			||||||
        font-size: 1.3rem;
 | 
					        font-size: 1.3rem;
 | 
				
			||||||
        font-weight: normal;
 | 
					        font-weight: normal;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user