diff --git a/src/public/javascripts/dialogs/markdown_import.js b/src/public/javascripts/dialogs/markdown_import.js new file mode 100644 index 000000000..e0c7b1dd7 --- /dev/null +++ b/src/public/javascripts/dialogs/markdown_import.js @@ -0,0 +1,63 @@ +import libraryLoader from "../services/library_loader.js"; +import infoService from "../services/info.js"; +import utils from "../services/utils.js"; +import noteDetailTextService from "../services/note_detail_text.js"; + +const $markdownImportDialog = $('#markdown-import-dialog'); +const $markdownImportTextarea = $('#markdown-import-textarea'); +const $markdownImportButton = $('#markdown-import-button'); + +async function convertMarkdownToHtml(text) { + await libraryLoader.requireLibrary(libraryLoader.COMMONMARK); + + const reader = new commonmark.Parser(); + const writer = new commonmark.HtmlRenderer(); + const parsed = reader.parse(text); + + const result = writer.render(parsed); + + const textEditor = noteDetailTextService.getEditor(); + const viewFragment = textEditor.data.processor.toView(result); + const modelFragment = textEditor.data.toModel(viewFragment); + + textEditor.model.insertContent(modelFragment, textEditor.model.document.selection); + + infoService.showMessage("Markdown content has been imported into the document."); +} + +async function importMarkdownInline() { + if (utils.isElectron()) { + const {clipboard} = require('electron'); + const text = clipboard.readText(); + + convertMarkdownToHtml(text); + } + else { + $("input[name='search-text']").focus(); + + glob.activeDialog = $markdownImportDialog; + + $markdownImportDialog.modal(); + } +} + +async function sendForm() { + const text = $markdownImportTextarea.val(); + + $markdownImportDialog.modal('hide'); + + await convertMarkdownToHtml(text); + + $markdownImportTextarea.val(''); +} + +$markdownImportButton.click(sendForm); + +$markdownImportDialog.bind('keydown', 'ctrl+return', sendForm); + +// for CKEditor integration (button on block toolbar) +window.glob.importMarkdownInline = importMarkdownInline; + +export default { + importMarkdownInline +}; \ No newline at end of file diff --git a/src/public/javascripts/services/bootstrap.js b/src/public/javascripts/services/bootstrap.js index de53d697e..e873c4dcc 100644 --- a/src/public/javascripts/services/bootstrap.js +++ b/src/public/javascripts/services/bootstrap.js @@ -6,6 +6,7 @@ import noteSourceDialog from '../dialogs/note_source.js'; import recentChangesDialog from '../dialogs/recent_changes.js'; import optionsDialog from '../dialogs/options.js'; import sqlConsoleDialog from '../dialogs/sql_console.js'; +import markdownImportDialog from '../dialogs/markdown_import.js'; import cloning from './cloning.js'; import contextMenu from './tree_context_menu.js'; diff --git a/src/public/javascripts/services/note_detail_text.js b/src/public/javascripts/services/note_detail_text.js index 6dc25b0ad..8a8393427 100644 --- a/src/public/javascripts/services/note_detail_text.js +++ b/src/public/javascripts/services/note_detail_text.js @@ -1,14 +1,8 @@ import libraryLoader from "./library_loader.js"; import noteDetailService from './note_detail.js'; -import utils from "./utils.js"; -import infoService from "./info.js"; const $component = $('#note-detail-text'); -const $markdownImportDialog = $('#markdown-import-dialog'); -const $markdownImportTextarea = $('#markdown-import-textarea'); -const $markdownImportButton = $('#markdown-import-button'); - let textEditor = null; async function show() { @@ -49,59 +43,10 @@ function getEditor() { return textEditor; } -async function convertMarkdownToHtml(text) { - await libraryLoader.requireLibrary(libraryLoader.COMMONMARK); - - const reader = new commonmark.Parser(); - const writer = new commonmark.HtmlRenderer(); - const parsed = reader.parse(text); - - const result = writer.render(parsed); - - const viewFragment = textEditor.data.processor.toView(result); - const modelFragment = textEditor.data.toModel(viewFragment); - - textEditor.model.insertContent(modelFragment, textEditor.model.document.selection); - - infoService.showMessage("Markdown content has been imported into the document."); -} - -async function importMarkdownInline() { - if (utils.isElectron()) { - const {clipboard} = require('electron'); - const text = clipboard.readText(); - - convertMarkdownToHtml(text); - } - else { - $("input[name='search-text']").focus(); - - glob.activeDialog = $markdownImportDialog; - - $markdownImportDialog.modal(); - } -} - -async function sendMarkdownDialog() { - const text = $markdownImportTextarea.val(); - - $markdownImportDialog.modal('hide'); - - await convertMarkdownToHtml(text); - - $markdownImportTextarea.val(''); -} - function onNoteChange(func) { textEditor.model.document.on('change:data', func); } -$markdownImportButton.click(sendMarkdownDialog); - -$markdownImportDialog.bind('keydown', 'ctrl+return', sendMarkdownDialog); - -window.glob.importMarkdownInline = importMarkdownInline; - export default { show, getEditor,