diff --git a/src/wrapper/commands.js b/src/wrapper/commands.js index 80deb05..1109373 100644 --- a/src/wrapper/commands.js +++ b/src/wrapper/commands.js @@ -15,6 +15,21 @@ function wrap2(begin, end) { return; } + // To keep inline inside a selected block, even at its edges, keep the original range instead of expanding it around the parent div. + if (begin === "" && end === "" && !range.collapsed) { + const preview = range.cloneContents(); + const blocks = "div,p,pre,blockquote,ul,ol,li,table,h1,h2,h3,h4,h5,h6"; + if (!preview.querySelector(blocks)) { + const code = document.createElement("code"); + code.appendChild(range.extractContents()); + range.insertNode(code); + range.selectNodeContents(code); + selection.removeAllRanges(); + selection.addRange(range); + return; + } + } + let startParent = range.startContainer.parentNode; if ( startParent !== base