From bbd10eec6b8b46a7173d3be4dd7e05de212f8038 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Sun, 16 Aug 2026 22:56:09 +0200 Subject: Import Markdown into the editor Use a vendored marked to import Markdown documents into tinymce. --- public/javascripts/admin_interface.js | 39 ++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'public/javascripts/admin_interface.js') diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js index 8fe105a7..9b28eb06 100644 --- a/public/javascripts/admin_interface.js +++ b/public/javascripts/admin_interface.js @@ -16,7 +16,7 @@ $(document).ready(function () { promotion: false, menubar: false, plugins: 'code link lists visualblocks', - toolbar: 'bold italic underline | bullist numlist | link unlink | insertpageimage | blocks | code', + toolbar: 'bold italic underline | bullist numlist | link unlink | insertpageimage | importmarkdown | blocks | code', extended_valid_elements: 'aggregate[children|tags|limit|order_by|order_direction|partial|conditions],a[href|title|target|rel|class|data-gallery],img[class|src|alt|title|width|height|style|border]', relative_urls: false, entity_encoding: 'raw', @@ -39,6 +39,16 @@ $(document).ready(function () { cccms.inline_images.open(editor); } }); + + if (typeof marked !== 'undefined') { + editor.ui.registry.addButton('importmarkdown', { + text: ADMIN_STRINGS.import_markdown, + tooltip: ADMIN_STRINGS.import_markdown_tooltip, + onAction: function() { + cccms.markdown_import.open(editor); + } + }); + } } }); @@ -293,6 +303,33 @@ cccms = { } }, + markdown_import : { + open : function(editor) { + editor.windowManager.open({ + title: ADMIN_STRINGS.import_markdown, + size: 'large', + body: { + type: 'panel', + items: [ + { type: 'textarea', name: 'source', maximized: true, + placeholder: ADMIN_STRINGS.import_markdown_placeholder } + ] + }, + buttons: [ + { type: 'cancel', text: ADMIN_STRINGS.cancel }, + { type: 'submit', text: ADMIN_STRINGS.insert, primary: true } + ], + onSubmit: function(api) { + var source = api.getData().source; + if (source.trim() !== '') { + editor.insertContent(marked.parse(source)); + } + api.close(); + } + }); + } + }, + inline_images: { ensure_overlay: function() { if ($('#inline_image_picker').length) return; -- cgit v1.3