X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c519f707e82693cfe6d392c04dd8e2efaeca24ca..refs/pull/3693/head:/resources/js/wysiwyg/plugins-details.js diff --git a/resources/js/wysiwyg/plugins-details.js b/resources/js/wysiwyg/plugins-details.js index d787373c7..44a0a35ab 100644 --- a/resources/js/wysiwyg/plugins-details.js +++ b/resources/js/wysiwyg/plugins-details.js @@ -2,6 +2,7 @@ * @param {Editor} editor * @param {String} url */ +import {blockElementTypes} from "./util"; function register(editor, url) { @@ -64,13 +65,13 @@ function register(editor, url) { editor.insertContent(details.outerHTML); editor.focus(); - const domDetails = editor.dom.select(`[data-id="${id}"]`); - if (!domDetails.length) { - const firstChild = domDetails.find('doc-root > *'); + const domDetails = editor.dom.select(`[data-id="${id}"]`)[0] || null; + if (domDetails) { + const firstChild = domDetails.querySelector('doc-root > *'); if (firstChild) { - firstChild[0].focus(); + firstChild.focus(); } - domDetails.removeAttr('data-id'); + domDetails.removeAttribute('data-id'); } }); @@ -217,14 +218,26 @@ function ensureDetailsWrappedInEditable(detailsEl) { unwrapDetailsEditable(detailsEl); detailsEl.attr('contenteditable', 'false'); - const wrap = tinymce.html.Node.create('doc-root', {contenteditable: 'true'}); + const rootWrap = tinymce.html.Node.create('doc-root', {contenteditable: 'true'}); + let previousBlockWrap = null; + for (const child of detailsEl.children()) { - if (child.name !== 'summary') { - wrap.append(child); + if (child.name === 'summary') continue; + const isBlock = blockElementTypes.includes(child.name); + + if (!isBlock) { + if (!previousBlockWrap) { + previousBlockWrap = tinymce.html.Node.create('p'); + rootWrap.append(previousBlockWrap); + } + previousBlockWrap.append(child); + } else { + rootWrap.append(child); + previousBlockWrap = null; } } - detailsEl.append(wrap); + detailsEl.append(rootWrap); } /**