X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/wordpress.git/blobdiff_plain/8d3bb1a5dcfdea9857d3c88c3751f09593e34dc8..ef91a7f4f3c6468973e192335a27ec0e0faca0b5:/wp-includes/js/tinymce/plugins/lists/plugin.js diff --git a/wp-includes/js/tinymce/plugins/lists/plugin.js b/wp-includes/js/tinymce/plugins/lists/plugin.js index 4a778ff0..ae9a2297 100644 --- a/wp-includes/js/tinymce/plugins/lists/plugin.js +++ b/wp-includes/js/tinymce/plugins/lists/plugin.js @@ -26,6 +26,10 @@ tinymce.PluginManager.add('lists', function(editor) { return node && (/^(OL|UL|DL)$/).test(node.nodeName) && isChildOfBody(node); } + function isListItemNode(node) { + return node && /^(LI|DT|DD)$/.test(node.nodeName); + } + function isFirstChild(node) { return node.parentNode.firstChild == node; } @@ -42,6 +46,33 @@ tinymce.PluginManager.add('lists', function(editor) { return elm === editor.getBody(); } + function isTextNode(node) { + return node && node.nodeType === 3; + } + + function getNormalizedEndPoint(container, offset) { + var node = tinymce.dom.RangeUtils.getNode(container, offset); + + if (isListItemNode(container) && isTextNode(node)) { + var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0; + return {container: node, offset: textNodeOffset}; + } + + return {container: container, offset: offset}; + } + + function normalizeRange(rng) { + var outRng = rng.cloneRange(); + + var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset); + outRng.setStart(rangeStart.container, rangeStart.offset); + + var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset); + outRng.setEnd(rangeEnd.container, rangeEnd.offset); + + return outRng; + } + editor.on('init', function() { var dom = editor.dom, selection = editor.selection; @@ -163,7 +194,7 @@ tinymce.PluginManager.add('lists', function(editor) { rng.setEnd(bookmark.endContainer, bookmark.endOffset); } - selection.setRng(rng); + selection.setRng(normalizeRange(rng)); } function createNewTextBlock(contentNode, blockName) { @@ -224,7 +255,7 @@ tinymce.PluginManager.add('lists', function(editor) { function getSelectedListItems() { return tinymce.grep(selection.getSelectedBlocks(), function(block) { - return /^(LI|DT|DD)$/.test(block.nodeName); + return isListItemNode(block); }); } @@ -298,33 +329,34 @@ tinymce.PluginManager.add('lists', function(editor) { } } - /** - * Normalizes the all lists in the specified element. - */ - function normalizeList(element) { - tinymce.each(tinymce.grep(dom.select('ol,ul', element)), function(ul) { - var sibling, parentNode = ul.parentNode; - - // Move UL/OL to previous LI if it's the only child of a LI - if (parentNode.nodeName == 'LI' && parentNode.firstChild == ul) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName == 'LI') { - sibling.appendChild(ul); - - if (isEmpty(parentNode)) { - dom.remove(parentNode); - } + function normalizeLists(element) { + tinymce.each(tinymce.grep(dom.select('ol,ul', element)), normalizeList); + } + + function normalizeList(ul) { + var sibling, parentNode = ul.parentNode; + + // Move UL/OL to previous LI if it's the only child of a LI + if (parentNode.nodeName == 'LI' && parentNode.firstChild == ul) { + sibling = parentNode.previousSibling; + if (sibling && sibling.nodeName == 'LI') { + sibling.appendChild(ul); + + if (isEmpty(parentNode)) { + dom.remove(parentNode); } + } else { + dom.setStyle(parentNode, 'listStyleType', 'none'); } + } - // Append OL/UL to previous LI if it's in a parent OL/UL i.e. old HTML4 - if (isListNode(parentNode)) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName == 'LI') { - sibling.appendChild(ul); - } + // Append OL/UL to previous LI if it's in a parent OL/UL i.e. old HTML4 + if (isListNode(parentNode)) { + sibling = parentNode.previousSibling; + if (sibling && sibling.nodeName == 'LI') { + sibling.appendChild(ul); } - }); + } } function outdent(li) { @@ -394,7 +426,7 @@ tinymce.PluginManager.add('lists', function(editor) { } splitList(ul, li, newBlock); - normalizeList(ul.parentNode); + normalizeLists(ul.parentNode); return true; } @@ -664,6 +696,7 @@ tinymce.PluginManager.add('lists', function(editor) { } splitList(rootList, li); + normalizeLists(rootList.parentNode); }); moveToBookmark(bookmark); @@ -711,118 +744,135 @@ tinymce.PluginManager.add('lists', function(editor) { return false; } - self.backspaceDelete = function(isForward) { - function findNextCaretContainer(rng, isForward) { - var node = rng.startContainer, offset = rng.startOffset; - var nonEmptyBlocks, walker; + function findNextCaretContainer(rng, isForward) { + var node = rng.startContainer, offset = rng.startOffset; + var nonEmptyBlocks, walker; - if (node.nodeType == 3 && (isForward ? offset < node.data.length : offset > 0)) { - return node; - } + if (node.nodeType == 3 && (isForward ? offset < node.data.length : offset > 0)) { + return node; + } - nonEmptyBlocks = editor.schema.getNonEmptyElements(); - if (node.nodeType == 1) { - node = tinymce.dom.RangeUtils.getNode(node, offset); - } + nonEmptyBlocks = editor.schema.getNonEmptyElements(); + if (node.nodeType == 1) { + node = tinymce.dom.RangeUtils.getNode(node, offset); + } - walker = new tinymce.dom.TreeWalker(node, editor.getBody()); + walker = new tinymce.dom.TreeWalker(node, editor.getBody()); - // Delete at