diff --git a/src/public/app/components/app_context.ts b/src/public/app/components/app_context.ts index 8c62a5586..61e3ecd2e 100644 --- a/src/public/app/components/app_context.ts +++ b/src/public/app/components/app_context.ts @@ -25,6 +25,7 @@ import type { default as NoteContext, GetTextEditorCallback } from "./note_conte import type { ContextMenuEvent } from "../menus/context_menu.js"; import type TypeWidget from "../widgets/type_widgets/type_widget.js"; import type EditableTextTypeWidget from "../widgets/type_widgets/editable_text.js"; +import type FAttribute from "../entities/fattribute.js"; interface Layout { getRootWidget: (appContext: AppContext) => RootWidget; @@ -245,7 +246,7 @@ export type CommandMappings = { toggleZenMode: CommandData; - updateAttributeList: CommandData & { attributes: Attribute[] }; + updateAttributeList: CommandData & { attributes: FAttribute[] }; saveAttributes: CommandData; reloadAttributes: CommandData; refreshNoteList: CommandData & { noteId: string }; diff --git a/src/public/app/widgets/dialogs/confirm.ts b/src/public/app/widgets/dialogs/confirm.ts index 70de19647..83c4c43d2 100644 --- a/src/public/app/widgets/dialogs/confirm.ts +++ b/src/public/app/widgets/dialogs/confirm.ts @@ -28,7 +28,7 @@ const TPL = ` `; -type ConfirmDialogCallback = (val: false | ConfirmDialogOptions) => void; +export type ConfirmDialogCallback = (val?: false | ConfirmDialogOptions) => void; export interface ConfirmDialogOptions { confirmed: boolean; diff --git a/src/public/app/widgets/dialogs/info.js b/src/public/app/widgets/dialogs/info.ts similarity index 71% rename from src/public/app/widgets/dialogs/info.js rename to src/public/app/widgets/dialogs/info.ts index 454f7e2ee..621a76096 100644 --- a/src/public/app/widgets/dialogs/info.js +++ b/src/public/app/widgets/dialogs/info.ts @@ -1,7 +1,9 @@ +import type { EventData } from "../../components/app_context.js"; import { t } from "../../services/i18n.js"; import utils from "../../services/utils.js"; import BasicWidget from "../basic_widget.js"; import { Modal } from "bootstrap"; +import type { ConfirmDialogCallback } from "./confirm.js"; const TPL = ` `; export default class InfoDialog extends BasicWidget { + + private resolve: ConfirmDialogCallback | null; + private modal!: bootstrap.Modal; + private $originallyFocused!: JQuery | null; + private $infoContent!: JQuery; + private $okButton!: JQuery; + constructor() { super(); @@ -31,7 +40,7 @@ export default class InfoDialog extends BasicWidget { doRender() { this.$widget = $(TPL); - this.modal = Modal.getOrCreateInstance(this.$widget); + this.modal = Modal.getOrCreateInstance(this.$widget[0]); this.$infoContent = this.$widget.find(".info-dialog-content"); this.$okButton = this.$widget.find(".info-dialog-ok-button"); @@ -51,10 +60,17 @@ export default class InfoDialog extends BasicWidget { this.$okButton.on("click", () => this.modal.hide()); } - showInfoDialogEvent({ message, callback }) { + showInfoDialogEvent({ message, callback }: EventData<"showInfoDialog">) { this.$originallyFocused = $(":focus"); - this.$infoContent.text(message); + if (typeof message === "string") { + this.$infoContent.text(message); + } else if (Array.isArray(message)) { + this.$infoContent.html(message[0]); + } else { + this.$infoContent.html(message as HTMLElement); + } + utils.openDialog(this.$widget); diff --git a/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js b/src/public/app/widgets/ribbon_widgets/owned_attribute_list.ts similarity index 83% rename from src/public/app/widgets/ribbon_widgets/owned_attribute_list.js rename to src/public/app/widgets/ribbon_widgets/owned_attribute_list.ts index 8addb139a..0d7794b39 100644 --- a/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js +++ b/src/public/app/widgets/ribbon_widgets/owned_attribute_list.ts @@ -2,6 +2,7 @@ import { t } from "../../services/i18n.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js"; import AttributeDetailWidget from "../attribute_widgets/attribute_detail.js"; import AttributeEditorWidget from "../attribute_widgets/attribute_editor.js"; +import type { CommandListenerData } from "../../components/app_context.js"; const TPL = `
@@ -13,17 +14,22 @@ const TPL = ` margin-bottom: 2px; position: relative; } - + .attribute-list-editor p { margin: 0 !important; } - +
`; export default class OwnedAttributeListWidget extends NoteContextAwareWidget { + + private attributeDetailWidget: AttributeDetailWidget; + private attributeEditorWidget: AttributeEditorWidget; + private $title!: JQuery; + get name() { return "ownedAttributes"; } @@ -44,7 +50,7 @@ export default class OwnedAttributeListWidget extends NoteContextAwareWidget { getTitle() { return { - show: !this.note.isLaunchBarConfig(), + show: !this.note?.isLaunchBarConfig(), title: t("owned_attribute_list.owned_attributes"), icon: "bx bx-list-check" }; @@ -68,7 +74,7 @@ export default class OwnedAttributeListWidget extends NoteContextAwareWidget { await this.attributeEditorWidget.refresh(); } - async updateAttributeListCommand({ attributes }) { + async updateAttributeListCommand({ attributes }: CommandListenerData<"updateAttributeList">) { await this.attributeEditorWidget.updateAttributeList(attributes); } diff --git a/src/public/app/widgets/ribbon_widgets/script_executor.js b/src/public/app/widgets/ribbon_widgets/script_executor.ts similarity index 89% rename from src/public/app/widgets/ribbon_widgets/script_executor.js rename to src/public/app/widgets/ribbon_widgets/script_executor.ts index 0b324d1d8..ec59468b0 100644 --- a/src/public/app/widgets/ribbon_widgets/script_executor.js +++ b/src/public/app/widgets/ribbon_widgets/script_executor.ts @@ -1,6 +1,7 @@ import NoteContextAwareWidget from "../note_context_aware_widget.js"; import keyboardActionService from "../../services/keyboard_actions.js"; import { t } from "../../services/i18n.js"; +import type FNote from "../../entities/fnote.js"; const TPL = `
@@ -16,13 +17,17 @@ const TPL = `
- +
`; export default class ScriptExecutorWidget extends NoteContextAwareWidget { + + private $executeButton!: JQuery; + private $executeDescription!: JQuery; + isEnabled() { return ( super.isEnabled() && @@ -33,7 +38,7 @@ export default class ScriptExecutorWidget extends NoteContextAwareWidget { } isTriliumSqlite() { - return this.note.mime === "text/x-sqlite;schema=trilium"; + return this.note?.mime === "text/x-sqlite;schema=trilium"; } getTitle() { @@ -53,7 +58,7 @@ export default class ScriptExecutorWidget extends NoteContextAwareWidget { this.$executeDescription = this.$widget.find(".execute-description"); } - async refreshWithNote(note) { + async refreshWithNote(note: FNote) { const executeTitle = note.getLabelValue("executeButton") || (this.isTriliumSqlite() ? t("script_executor.execute_query") : t("script_executor.execute_script")); this.$executeButton.text(executeTitle);