import type { EventNames, EventData } from "../../components/app_context.js"; import NoteContext from "../../components/note_context.js"; import { openDialog } from "../../services/dialog.js"; import froca from "../../services/froca.js"; import BasicWidget from "../basic_widget.js"; import Container from "../containers/container.js"; const TPL = /*html*/`\ `; export default class PopupEditorDialog extends Container { private noteId?: string; constructor() { super(); setTimeout(() => { this.openPopupEditorEvent("f4sIt7iRg0Lc"); }, 750); } doRender() { // This will populate this.$widget with the content of the children. super.doRender(); // Now we wrap it in the modal. const $newWidget = $(TPL); const $modalHeader = $newWidget.find(".modal-title"); const $modalBody = $newWidget.find(".modal-body"); const children = this.$widget.children(); $modalHeader.append(children[0]); $modalBody.append(children.slice(1)); this.$widget = $newWidget; } async refresh() { if (!this.noteId) { console.warn("Popup editor noteId is not set, cannot refresh."); return false; } const note = await froca.getNote(this.noteId); if (!note) { console.warn(`Popup editor note with ID ${this.noteId} not found.`); return false; } const noteContext = new NoteContext("_popup-editor"); await noteContext.setNote(note.noteId); await this.handleEventInChildren("activeContextChanged", { noteContext }); return true; } async openPopupEditorEvent(noteId: string) { this.noteId = noteId; if (await this.refresh()) { const $dialog = await openDialog(this.$widget); $dialog.on("shown.bs.modal", () => { // Reduce the z-index of modals so that ckeditor popups are properly shown on top of it. // The backdrop instance is not shared so it's OK to make a one-off modification. $("body > .modal-backdrop").css("z-index", "998"); $dialog.css("z-index", "999"); }); } } handleEventInChildren(name: T, data: EventData): Promise | null { // Avoid events related to the current tab interfere with our popup. if (["noteSwitched", "noteSwitchedAndActivated"].includes(name)) { return Promise.resolve(); } return super.handleEventInChildren(name, data); } }