+
+ editor.serializer.addNodeFilter('doc-root', function(elms) {
+ for (const el of elms) {
+ el.unwrap();
+ }
+ });
+}
+
+/**
+ * @param {tinymce.html.Node} detailsEl
+ */
+function ensureDetailsWrappedInEditable(detailsEl) {
+ unwrapDetailsEditable(detailsEl);
+
+ detailsEl.attr('contenteditable', 'false');
+ const rootWrap = tinymce.html.Node.create('doc-root', {contenteditable: 'true'});
+ let previousBlockWrap = null;
+
+ for (const child of detailsEl.children()) {
+ 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(rootWrap);
+}
+
+/**
+ * @param {tinymce.html.Node} detailsEl
+ */
+function unwrapDetailsEditable(detailsEl) {
+ detailsEl.attr('contenteditable', null);
+ let madeUnwrap = false;
+ for (const child of detailsEl.children()) {
+ if (child.name === 'doc-root') {
+ child.unwrap();
+ madeUnwrap = true;
+ }
+ }
+
+ if (madeUnwrap) {
+ unwrapDetailsEditable(detailsEl);
+ }