import { t } from "../../services/i18n.js"; import utils, { escapeQuotes } from "../../services/utils.js"; import treeService from "../../services/tree.js"; import importService from "../../services/import.js"; import options from "../../services/options.js"; import BasicWidget from "../basic_widget.js"; import { Modal, Tooltip } from "bootstrap"; import type { EventData } from "../../components/app_context.js"; const TPL = ` `; export default class UploadAttachmentsDialog extends BasicWidget { private parentNoteId: string | null; private modal!: bootstrap.Modal; private $form!: JQuery; private $noteTitle!: JQuery; private $fileUploadInput!: JQuery; private $uploadButton!: JQuery; private $shrinkImagesCheckbox!: JQuery; constructor() { super(); this.parentNoteId = null; } doRender() { this.$widget = $(TPL); this.modal = Modal.getOrCreateInstance(this.$widget[0]); this.$form = this.$widget.find(".upload-attachment-form"); this.$noteTitle = this.$widget.find(".upload-attachment-note-title"); this.$fileUploadInput = this.$widget.find(".upload-attachment-file-upload-input"); this.$uploadButton = this.$widget.find(".upload-attachment-button"); this.$shrinkImagesCheckbox = this.$widget.find(".shrink-images-checkbox"); this.$form.on("submit", () => { // disabling so that import is not triggered again. this.$uploadButton.attr("disabled", "disabled"); if (this.parentNoteId) { this.uploadAttachments(this.parentNoteId); } return false; }); this.$fileUploadInput.on("change", () => { if (this.$fileUploadInput.val()) { this.$uploadButton.removeAttr("disabled"); } else { this.$uploadButton.attr("disabled", "disabled"); } }); Tooltip.getOrCreateInstance(this.$widget.find('[data-bs-toggle="tooltip"]')[0], { html: true }); } async showUploadAttachmentsDialogEvent({ noteId }: EventData<"showUploadAttachmentsDialog">) { this.parentNoteId = noteId; this.$fileUploadInput.val("").trigger("change"); // to trigger upload button disabling listener below this.$shrinkImagesCheckbox.prop("checked", options.is("compressImages")); this.$noteTitle.text(await treeService.getNoteTitle(this.parentNoteId)); utils.openDialog(this.$widget); } async uploadAttachments(parentNoteId: string) { const files = Array.from(this.$fileUploadInput[0].files ?? []); // shallow copy since we're resetting the upload button below function boolToString($el: JQuery): "true" | "false" { return ($el.is(":checked") ? "true" : "false"); } const options = { shrinkImages: boolToString(this.$shrinkImagesCheckbox) }; this.modal.hide(); await importService.uploadFiles("attachments", parentNoteId, files, options); } }