import { t } from "../../services/i18n.js"; import toastService from "../../services/toast.js"; import utils from "../../services/utils.js"; import appContext from "../../components/app_context.js"; import BasicWidget from "../basic_widget.js"; import shortcutService from "../../services/shortcuts.js"; import server from "../../services/server.js"; const TPL = ` `; export default class MarkdownImportDialog extends BasicWidget { constructor() { super(); this.lastOpenedTs = 0; } doRender() { this.$widget = $(TPL); this.$importTextarea = this.$widget.find('.markdown-import-textarea'); this.$importButton = this.$widget.find('.markdown-import-button'); this.$importButton.on('click', () => this.sendForm()); this.$widget.on('shown.bs.modal', () => this.$importTextarea.trigger('focus')); shortcutService.bindElShortcut(this.$widget, 'ctrl+return', () => this.sendForm()); } async convertMarkdownToHtml(markdownContent) { const {htmlContent} = await server.post('other/render-markdown', { markdownContent }); const textEditor = await appContext.tabManager.getActiveContext().getTextEditor(); const viewFragment = textEditor.data.processor.toView(htmlContent); const modelFragment = textEditor.data.toModel(viewFragment); textEditor.model.insertContent(modelFragment, textEditor.model.document.selection); toastService.showMessage(t("markdown_import.import_success")); } async pasteMarkdownIntoTextEvent() { await this.importMarkdownInlineEvent(); // BC with keyboard shortcuts command } async importMarkdownInlineEvent() { if (appContext.tabManager.getActiveContextNoteType() !== 'text') { return; } if (utils.isElectron()) { const {clipboard} = utils.dynamicRequire('electron'); const text = clipboard.readText(); this.convertMarkdownToHtml(text); } else { utils.openDialog(this.$widget); } } async sendForm() { const text = this.$importTextarea.val(); this.$widget.modal('hide'); await this.convertMarkdownToHtml(text); this.$importTextarea.val(''); } }