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 = `
@@ -22,6 +24,13 @@ 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 = `
`;
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);