]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/tinymce/plugins/lists/plugin.js
WordPress 4.3.1
[autoinstalls/wordpress.git] / wp-includes / js / tinymce / plugins / lists / plugin.js
index d7d15d80d90fc0a30c20fa8c7417933dbc221f6f..e476abcdc2fcb066e868176d1ae75d9db3917c37 100644 (file)
@@ -1,8 +1,8 @@
 /**
  * plugin.js
  *
- * Copyright, Moxiecode Systems AB
  * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
  *
  * License: http://www.tinymce.com/license
  * Contributing: http://www.tinymce.com/contributing
@@ -207,16 +207,30 @@ tinymce.PluginManager.add('lists', function(editor) {
                }
 
                function splitList(ul, li, newBlock) {
-                       var tmpRng, fragment;
+                       var tmpRng, fragment, bookmarks, node;
 
-                       var bookmarks = dom.select('span[data-mce-type="bookmark"]', ul);
+                       function removeAndKeepBookmarks(targetNode) {
+                               tinymce.each(bookmarks, function(node) {
+                                       targetNode.parentNode.insertBefore(node, li.parentNode);
+                               });
+
+                               dom.remove(targetNode);
+                       }
 
+                       bookmarks = dom.select('span[data-mce-type="bookmark"]', ul);
                        newBlock = newBlock || createNewTextBlock(li);
                        tmpRng = dom.createRng();
                        tmpRng.setStartAfter(li);
                        tmpRng.setEndAfter(ul);
                        fragment = tmpRng.extractContents();
 
+                       for (node = fragment.firstChild; node; node = node.firstChild) {
+                               if (node.nodeName == 'LI' && dom.isEmpty(node)) {
+                                       dom.remove(node);
+                                       break;
+                               }
+                       }
+
                        if (!dom.isEmpty(fragment)) {
                                dom.insertAfter(fragment, ul);
                        }
@@ -224,14 +238,14 @@ tinymce.PluginManager.add('lists', function(editor) {
                        dom.insertAfter(newBlock, ul);
 
                        if (dom.isEmpty(li.parentNode)) {
-                               tinymce.each(bookmarks, function(node) {
-                                       li.parentNode.parentNode.insertBefore(node, li.parentNode);
-                               });
-
-                               dom.remove(li.parentNode);
+                               removeAndKeepBookmarks(li.parentNode);
                        }
 
                        dom.remove(li);
+
+                       if (dom.isEmpty(ul)) {
+                               dom.remove(ul);
+                       }
                }
 
                function mergeWithAdjacentLists(listBlock) {
@@ -336,23 +350,21 @@ tinymce.PluginManager.add('lists', function(editor) {
                                }
 
                                return true;
-                       } else {
-                               if (ulParent.nodeName == 'LI') {
-                                       ul = ulParent;
-                                       newBlock = createNewTextBlock(li, 'LI');
-                               } else if (isListNode(ulParent)) {
-                                       newBlock = createNewTextBlock(li, 'LI');
-                               } else {
-                                       newBlock = createNewTextBlock(li);
-                               }
-
-                               splitList(ul, li, newBlock);
-                               normalizeList(ul.parentNode);
+                       }
 
-                               return true;
+                       if (ulParent.nodeName == 'LI') {
+                               ul = ulParent;
+                               newBlock = createNewTextBlock(li, 'LI');
+                       } else if (isListNode(ulParent)) {
+                               newBlock = createNewTextBlock(li, 'LI');
+                       } else {
+                               newBlock = createNewTextBlock(li);
                        }
 
-                       return false;
+                       splitList(ul, li, newBlock);
+                       normalizeList(ul.parentNode);
+
+                       return true;
                }
 
                function indent(li) {
@@ -709,14 +721,22 @@ tinymce.PluginManager.add('lists', function(editor) {
                        }
                };
 
-               editor.addCommand('Indent', function() {
-                       if (!indentSelection()) {
-                               return true;
+               editor.on('BeforeExecCommand', function(e) {
+                       var cmd = e.command.toLowerCase(), isHandled;
+
+                       if (cmd == "indent") {
+                               if (indentSelection()) {
+                                       isHandled = true;
+                               }
+                       } else if (cmd == "outdent") {
+                               if (outdentSelection()) {
+                                       isHandled = true;
+                               }
                        }
-               });
 
-               editor.addCommand('Outdent', function() {
-                       if (!outdentSelection()) {
+                       if (isHandled) {
+                               editor.fire('ExecCommand', {command: e.command});
+                               e.preventDefault();
                                return true;
                        }
                });
@@ -738,7 +758,12 @@ tinymce.PluginManager.add('lists', function(editor) {
                editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState('DL'));
 
                editor.on('keydown', function(e) {
-                       if (e.keyCode == 9 && editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
+                       // Check for tab but not ctrl/cmd+tab since it switches browser tabs
+                       if (e.keyCode != 9 || tinymce.util.VK.metaKeyPressed(e)) {
+                               return;
+                       }
+
+                       if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
                                e.preventDefault();
 
                                if (e.shiftKey) {