wp/wp-includes/js/tinymce/plugins/lists/plugin.js
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
--- a/wp/wp-includes/js/tinymce/plugins/lists/plugin.js	Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-includes/js/tinymce/plugins/lists/plugin.js	Mon Oct 14 17:39:30 2019 +0200
@@ -1,813 +1,1114 @@
-/**
- * plugin.js
- *
- * Copyright, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+(function () {
+var lists = (function () {
+  'use strict';
 
-/*global tinymce:true */
-/*eslint consistent-this:0 */
-
-tinymce.PluginManager.add('lists', function(editor) {
-	var self = this;
+  var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
 
-	function isListNode(node) {
-		return node && (/^(OL|UL|DL)$/).test(node.nodeName);
-	}
-
-	function isFirstChild(node) {
-		return node.parentNode.firstChild == node;
-	}
+  var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
 
-	function isLastChild(node) {
-		return node.parentNode.lastChild == node;
-	}
+  var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
 
-	function isTextBlock(node) {
-		return node && !!editor.schema.getTextBlockElements()[node.nodeName];
-	}
-
-	editor.on('init', function() {
-		var dom = editor.dom, selection = editor.selection;
+  var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');
 
-		/**
-		 * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with
-		 * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans
-		 * added to them since they can be restored after a dom operation.
-		 *
-		 * So this: <p><b>|</b><b>|</b></p>
-		 * becomes: <p><b><span data-mce-type="bookmark">|</span></b><b data-mce-type="bookmark">|</span></b></p>
-		 *
-		 * @param  {DOMRange} rng DOM Range to get bookmark on.
-		 * @return {Object} Bookmark object.
-		 */
-		function createBookmark(rng) {
-			var bookmark = {};
+  var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');
+
+  var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');
+
+  var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
 
-			function setupEndPoint(start) {
-				var offsetNode, container, offset;
-
-				container = rng[start ? 'startContainer' : 'endContainer'];
-				offset = rng[start ? 'startOffset' : 'endOffset'];
-
-				if (container.nodeType == 1) {
-					offsetNode = dom.create('span', {'data-mce-type': 'bookmark'});
-
-					if (container.hasChildNodes()) {
-						offset = Math.min(offset, container.childNodes.length - 1);
-
-						if (start) {
-							container.insertBefore(offsetNode, container.childNodes[offset]);
-						} else {
-							dom.insertAfter(offsetNode, container.childNodes[offset]);
-						}
-					} else {
-						container.appendChild(offsetNode);
-					}
-
-					container = offsetNode;
-					offset = 0;
-				}
+  var isTextNode = function (node) {
+    return node && node.nodeType === 3;
+  };
+  var isListNode = function (node) {
+    return node && /^(OL|UL|DL)$/.test(node.nodeName);
+  };
+  var isListItemNode = function (node) {
+    return node && /^(LI|DT|DD)$/.test(node.nodeName);
+  };
+  var isTableCellNode = function (node) {
+    return node && /^(TH|TD)$/.test(node.nodeName);
+  };
+  var isBr = function (node) {
+    return node && node.nodeName === 'BR';
+  };
+  var isFirstChild = function (node) {
+    return node.parentNode.firstChild === node;
+  };
+  var isLastChild = function (node) {
+    return node.parentNode.lastChild === node;
+  };
+  var isTextBlock = function (editor, node) {
+    return node && !!editor.schema.getTextBlockElements()[node.nodeName];
+  };
+  var isBlock = function (node, blockElements) {
+    return node && node.nodeName in blockElements;
+  };
+  var isBogusBr = function (dom, node) {
+    if (!isBr(node)) {
+      return false;
+    }
+    if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
+      return true;
+    }
+    return false;
+  };
+  var isEmpty = function (dom, elm, keepBookmarks) {
+    var empty = dom.isEmpty(elm);
+    if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
+      return false;
+    }
+    return empty;
+  };
+  var isChildOfBody = function (dom, elm) {
+    return dom.isChildOf(elm, dom.getRoot());
+  };
+  var $_okk1ogljjgweckx = {
+    isTextNode: isTextNode,
+    isListNode: isListNode,
+    isListItemNode: isListItemNode,
+    isTableCellNode: isTableCellNode,
+    isBr: isBr,
+    isFirstChild: isFirstChild,
+    isLastChild: isLastChild,
+    isTextBlock: isTextBlock,
+    isBlock: isBlock,
+    isBogusBr: isBogusBr,
+    isEmpty: isEmpty,
+    isChildOfBody: isChildOfBody
+  };
 
-				bookmark[start ? 'startContainer' : 'endContainer'] = container;
-				bookmark[start ? 'startOffset' : 'endOffset'] = offset;
-			}
-
-			setupEndPoint(true);
-
-			if (!rng.collapsed) {
-				setupEndPoint();
-			}
-
-			return bookmark;
-		}
-
-		/**
-		 * Moves the selection to the current bookmark and removes any selection container wrappers.
-		 *
-		 * @param {Object} bookmark Bookmark object to move selection to.
-		 */
-		function moveToBookmark(bookmark) {
-			function restoreEndPoint(start) {
-				var container, offset, node;
-
-				function nodeIndex(container) {
-					var node = container.parentNode.firstChild, idx = 0;
+  var getNormalizedEndPoint = function (container, offset) {
+    var node = global$1.getNode(container, offset);
+    if ($_okk1ogljjgweckx.isListItemNode(container) && $_okk1ogljjgweckx.isTextNode(node)) {
+      var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0;
+      return {
+        container: node,
+        offset: textNodeOffset
+      };
+    }
+    return {
+      container: container,
+      offset: offset
+    };
+  };
+  var normalizeRange = function (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;
+  };
+  var $_a9cyhvgkjjgweckv = {
+    getNormalizedEndPoint: getNormalizedEndPoint,
+    normalizeRange: normalizeRange
+  };
 
-					while (node) {
-						if (node == container) {
-							return idx;
-						}
-
-						// Skip data-mce-type=bookmark nodes
-						if (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {
-							idx++;
-						}
-
-						node = node.nextSibling;
-					}
-
-					return -1;
-				}
-
-				container = node = bookmark[start ? 'startContainer' : 'endContainer'];
-				offset = bookmark[start ? 'startOffset' : 'endOffset'];
-
-				if (!container) {
-					return;
-				}
-
-				if (container.nodeType == 1) {
-					offset = nodeIndex(container);
-					container = container.parentNode;
-					dom.remove(node);
-				}
-
-				bookmark[start ? 'startContainer' : 'endContainer'] = container;
-				bookmark[start ? 'startOffset' : 'endOffset'] = offset;
-			}
-
-			restoreEndPoint(true);
-			restoreEndPoint();
-
-			var rng = dom.createRng();
-
-			rng.setStart(bookmark.startContainer, bookmark.startOffset);
-
-			if (bookmark.endContainer) {
-				rng.setEnd(bookmark.endContainer, bookmark.endOffset);
-			}
-
-			selection.setRng(rng);
-		}
-
-		function createNewTextBlock(contentNode, blockName) {
-			var node, textBlock, fragment = dom.createFragment(), hasContentNode;
-			var blockElements = editor.schema.getBlockElements();
+  var DOM = global$6.DOM;
+  var createBookmark = function (rng) {
+    var bookmark = {};
+    var setupEndPoint = function (start) {
+      var offsetNode, container, offset;
+      container = rng[start ? 'startContainer' : 'endContainer'];
+      offset = rng[start ? 'startOffset' : 'endOffset'];
+      if (container.nodeType === 1) {
+        offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });
+        if (container.hasChildNodes()) {
+          offset = Math.min(offset, container.childNodes.length - 1);
+          if (start) {
+            container.insertBefore(offsetNode, container.childNodes[offset]);
+          } else {
+            DOM.insertAfter(offsetNode, container.childNodes[offset]);
+          }
+        } else {
+          container.appendChild(offsetNode);
+        }
+        container = offsetNode;
+        offset = 0;
+      }
+      bookmark[start ? 'startContainer' : 'endContainer'] = container;
+      bookmark[start ? 'startOffset' : 'endOffset'] = offset;
+    };
+    setupEndPoint(true);
+    if (!rng.collapsed) {
+      setupEndPoint();
+    }
+    return bookmark;
+  };
+  var resolveBookmark = function (bookmark) {
+    function restoreEndPoint(start) {
+      var container, offset, node;
+      var nodeIndex = function (container) {
+        var node = container.parentNode.firstChild, idx = 0;
+        while (node) {
+          if (node === container) {
+            return idx;
+          }
+          if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
+            idx++;
+          }
+          node = node.nextSibling;
+        }
+        return -1;
+      };
+      container = node = bookmark[start ? 'startContainer' : 'endContainer'];
+      offset = bookmark[start ? 'startOffset' : 'endOffset'];
+      if (!container) {
+        return;
+      }
+      if (container.nodeType === 1) {
+        offset = nodeIndex(container);
+        container = container.parentNode;
+        DOM.remove(node);
+        if (!container.hasChildNodes() && DOM.isBlock(container)) {
+          container.appendChild(DOM.create('br'));
+        }
+      }
+      bookmark[start ? 'startContainer' : 'endContainer'] = container;
+      bookmark[start ? 'startOffset' : 'endOffset'] = offset;
+    }
+    restoreEndPoint(true);
+    restoreEndPoint();
+    var rng = DOM.createRng();
+    rng.setStart(bookmark.startContainer, bookmark.startOffset);
+    if (bookmark.endContainer) {
+      rng.setEnd(bookmark.endContainer, bookmark.endOffset);
+    }
+    return $_a9cyhvgkjjgweckv.normalizeRange(rng);
+  };
+  var $_2nx1i4gjjjgweckt = {
+    createBookmark: createBookmark,
+    resolveBookmark: resolveBookmark
+  };
 
-			if (editor.settings.forced_root_block) {
-				blockName = blockName || editor.settings.forced_root_block;
-			}
-
-			if (blockName) {
-				textBlock = dom.create(blockName);
-
-				if (textBlock.tagName === editor.settings.forced_root_block) {
-					dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
-				}
-
-				fragment.appendChild(textBlock);
-			}
-
-			if (contentNode) {
-				while ((node = contentNode.firstChild)) {
-					var nodeName = node.nodeName;
-
-					if (!hasContentNode && (nodeName != 'SPAN' || node.getAttribute('data-mce-type') != 'bookmark')) {
-						hasContentNode = true;
-					}
+  var DOM$1 = global$6.DOM;
+  var normalizeList = function (dom, ul) {
+    var sibling;
+    var parentNode = ul.parentNode;
+    if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
+      sibling = parentNode.previousSibling;
+      if (sibling && sibling.nodeName === 'LI') {
+        sibling.appendChild(ul);
+        if ($_okk1ogljjgweckx.isEmpty(dom, parentNode)) {
+          DOM$1.remove(parentNode);
+        }
+      } else {
+        DOM$1.setStyle(parentNode, 'listStyleType', 'none');
+      }
+    }
+    if ($_okk1ogljjgweckx.isListNode(parentNode)) {
+      sibling = parentNode.previousSibling;
+      if (sibling && sibling.nodeName === 'LI') {
+        sibling.appendChild(ul);
+      }
+    }
+  };
+  var normalizeLists = function (dom, element) {
+    global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {
+      normalizeList(dom, ul);
+    });
+  };
+  var $_ekd4wzgmjjgwecl1 = {
+    normalizeList: normalizeList,
+    normalizeLists: normalizeLists
+  };
 
-					if (blockElements[nodeName]) {
-						fragment.appendChild(node);
-						textBlock = null;
-					} else {
-						if (blockName) {
-							if (!textBlock) {
-								textBlock = dom.create(blockName);
-								fragment.appendChild(textBlock);
-							}
-
-							textBlock.appendChild(node);
-						} else {
-							fragment.appendChild(node);
-						}
-					}
-				}
-			}
-
-			if (!editor.settings.forced_root_block) {
-				fragment.appendChild(dom.create('br'));
-			} else {
-				// BR is needed in empty blocks on non IE browsers
-				if (!hasContentNode && (!tinymce.Env.ie || tinymce.Env.ie > 10)) {
-					textBlock.appendChild(dom.create('br', {'data-mce-bogus': '1'}));
-				}
-			}
-
-			return fragment;
-		}
+  var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
 
-		function getSelectedListItems() {
-			return tinymce.grep(selection.getSelectedBlocks(), function(block) {
-				return /^(LI|DT|DD)$/.test(block.nodeName);
-			});
-		}
-
-		function splitList(ul, li, newBlock) {
-			var tmpRng, fragment, bookmarks, node;
-
-			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();
+  var getParentList = function (editor) {
+    var selectionStart = editor.selection.getStart(true);
+    return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));
+  };
+  var isParentListSelected = function (parentList, selectedBlocks) {
+    return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;
+  };
+  var findSubLists = function (parentList) {
+    return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {
+      return $_okk1ogljjgweckx.isListNode(elm);
+    });
+  };
+  var getSelectedSubLists = function (editor) {
+    var parentList = getParentList(editor);
+    var selectedBlocks = editor.selection.getSelectedBlocks();
+    if (isParentListSelected(parentList, selectedBlocks)) {
+      return findSubLists(parentList);
+    } else {
+      return global$5.grep(selectedBlocks, function (elm) {
+        return $_okk1ogljjgweckx.isListNode(elm) && parentList !== elm;
+      });
+    }
+  };
+  var findParentListItemsNodes = function (editor, elms) {
+    var listItemsElms = global$5.map(elms, function (elm) {
+      var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));
+      return parentLi ? parentLi : elm;
+    });
+    return global$7.unique(listItemsElms);
+  };
+  var getSelectedListItems = function (editor) {
+    var selectedBlocks = editor.selection.getSelectedBlocks();
+    return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {
+      return $_okk1ogljjgweckx.isListItemNode(block);
+    });
+  };
+  var getClosestListRootElm = function (editor, elm) {
+    var parentTableCell = editor.dom.getParents(elm, 'TD,TH');
+    var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();
+    return root;
+  };
+  var $_3xb1cggnjjgwecl3 = {
+    getParentList: getParentList,
+    getSelectedSubLists: getSelectedSubLists,
+    getSelectedListItems: getSelectedListItems,
+    getClosestListRootElm: getClosestListRootElm
+  };
 
-			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);
-			}
-
-			dom.insertAfter(newBlock, ul);
-
-			if (dom.isEmpty(li.parentNode)) {
-				removeAndKeepBookmarks(li.parentNode);
-			}
-
-			dom.remove(li);
-
-			if (dom.isEmpty(ul)) {
-				dom.remove(ul);
-			}
-		}
-
-		function mergeWithAdjacentLists(listBlock) {
-			var sibling, node;
+  var global$8 = tinymce.util.Tools.resolve('tinymce.Env');
 
-			sibling = listBlock.nextSibling;
-			if (sibling && isListNode(sibling) && sibling.nodeName == listBlock.nodeName) {
-				while ((node = sibling.firstChild)) {
-					listBlock.appendChild(node);
-				}
-
-				dom.remove(sibling);
-			}
-
-			sibling = listBlock.previousSibling;
-			if (sibling && isListNode(sibling) && sibling.nodeName == listBlock.nodeName) {
-				while ((node = sibling.firstChild)) {
-					listBlock.insertBefore(node, listBlock.firstChild);
-				}
-
-				dom.remove(sibling);
-			}
-		}
-
-		/**
-		 * 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 (dom.isEmpty(parentNode)) {
-							dom.remove(parentNode);
-						}
-					}
-				}
-
-				// 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) {
-			var ul = li.parentNode, ulParent = ul.parentNode, newBlock;
+  var DOM$2 = global$6.DOM;
+  var createNewTextBlock = function (editor, contentNode, blockName) {
+    var node, textBlock;
+    var fragment = DOM$2.createFragment();
+    var hasContentNode;
+    var blockElements = editor.schema.getBlockElements();
+    if (editor.settings.forced_root_block) {
+      blockName = blockName || editor.settings.forced_root_block;
+    }
+    if (blockName) {
+      textBlock = DOM$2.create(blockName);
+      if (textBlock.tagName === editor.settings.forced_root_block) {
+        DOM$2.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
+      }
+      if (!$_okk1ogljjgweckx.isBlock(contentNode.firstChild, blockElements)) {
+        fragment.appendChild(textBlock);
+      }
+    }
+    if (contentNode) {
+      while (node = contentNode.firstChild) {
+        var nodeName = node.nodeName;
+        if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
+          hasContentNode = true;
+        }
+        if ($_okk1ogljjgweckx.isBlock(node, blockElements)) {
+          fragment.appendChild(node);
+          textBlock = null;
+        } else {
+          if (blockName) {
+            if (!textBlock) {
+              textBlock = DOM$2.create(blockName);
+              fragment.appendChild(textBlock);
+            }
+            textBlock.appendChild(node);
+          } else {
+            fragment.appendChild(node);
+          }
+        }
+      }
+    }
+    if (!editor.settings.forced_root_block) {
+      fragment.appendChild(DOM$2.create('br'));
+    } else {
+      if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {
+        textBlock.appendChild(DOM$2.create('br', { 'data-mce-bogus': '1' }));
+      }
+    }
+    return fragment;
+  };
+  var $_kbc02gqjjgwecl9 = { createNewTextBlock: createNewTextBlock };
 
-			function removeEmptyLi(li) {
-				if (dom.isEmpty(li)) {
-					dom.remove(li);
-				}
-			}
-
-			if (li.nodeName == 'DD') {
-				dom.rename(li, 'DT');
-				return true;
-			}
-
-			if (isFirstChild(li) && isLastChild(li)) {
-				if (ulParent.nodeName == "LI") {
-					dom.insertAfter(li, ulParent);
-					removeEmptyLi(ulParent);
-					dom.remove(ul);
-				} else if (isListNode(ulParent)) {
-					dom.remove(ul, true);
-				} else {
-					ulParent.insertBefore(createNewTextBlock(li), ul);
-					dom.remove(ul);
-				}
-
-				return true;
-			} else if (isFirstChild(li)) {
-				if (ulParent.nodeName == "LI") {
-					dom.insertAfter(li, ulParent);
-					li.appendChild(ul);
-					removeEmptyLi(ulParent);
-				} else if (isListNode(ulParent)) {
-					ulParent.insertBefore(li, ul);
-				} else {
-					ulParent.insertBefore(createNewTextBlock(li), ul);
-					dom.remove(li);
-				}
-
-				return true;
-			} else if (isLastChild(li)) {
-				if (ulParent.nodeName == "LI") {
-					dom.insertAfter(li, ulParent);
-				} else if (isListNode(ulParent)) {
-					dom.insertAfter(li, ul);
-				} else {
-					dom.insertAfter(createNewTextBlock(li), ul);
-					dom.remove(li);
-				}
+  var DOM$3 = global$6.DOM;
+  var splitList = function (editor, ul, li, newBlock) {
+    var tmpRng, fragment, bookmarks, node;
+    var removeAndKeepBookmarks = function (targetNode) {
+      global$5.each(bookmarks, function (node) {
+        targetNode.parentNode.insertBefore(node, li.parentNode);
+      });
+      DOM$3.remove(targetNode);
+    };
+    bookmarks = DOM$3.select('span[data-mce-type="bookmark"]', ul);
+    newBlock = newBlock || $_kbc02gqjjgwecl9.createNewTextBlock(editor, li);
+    tmpRng = DOM$3.createRng();
+    tmpRng.setStartAfter(li);
+    tmpRng.setEndAfter(ul);
+    fragment = tmpRng.extractContents();
+    for (node = fragment.firstChild; node; node = node.firstChild) {
+      if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
+        DOM$3.remove(node);
+        break;
+      }
+    }
+    if (!editor.dom.isEmpty(fragment)) {
+      DOM$3.insertAfter(fragment, ul);
+    }
+    DOM$3.insertAfter(newBlock, ul);
+    if ($_okk1ogljjgweckx.isEmpty(editor.dom, li.parentNode)) {
+      removeAndKeepBookmarks(li.parentNode);
+    }
+    DOM$3.remove(li);
+    if ($_okk1ogljjgweckx.isEmpty(editor.dom, ul)) {
+      DOM$3.remove(ul);
+    }
+  };
+  var $_fikiq7gpjjgwecl5 = { splitList: splitList };
 
-				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;
-			}
-
-			return false;
-		}
-
-		function indent(li) {
-			var sibling, newList;
-
-			function mergeLists(from, to) {
-				var node;
-
-				if (isListNode(from)) {
-					while ((node = li.lastChild.firstChild)) {
-						to.appendChild(node);
-					}
-
-					dom.remove(from);
-				}
-			}
-
-			if (li.nodeName == 'DT') {
-				dom.rename(li, 'DD');
-				return true;
-			}
-
-			sibling = li.previousSibling;
-
-			if (sibling && isListNode(sibling)) {
-				sibling.appendChild(li);
-				return true;
-			}
-
-			if (sibling && sibling.nodeName == 'LI' && isListNode(sibling.lastChild)) {
-				sibling.lastChild.appendChild(li);
-				mergeLists(li.lastChild, sibling.lastChild);
-				return true;
-			}
-
-			sibling = li.nextSibling;
+  var DOM$4 = global$6.DOM;
+  var removeEmptyLi = function (dom, li) {
+    if ($_okk1ogljjgweckx.isEmpty(dom, li)) {
+      DOM$4.remove(li);
+    }
+  };
+  var outdent = function (editor, li) {
+    var ul = li.parentNode;
+    var ulParent, newBlock;
+    if (ul) {
+      ulParent = ul.parentNode;
+    } else {
+      removeEmptyLi(editor.dom, li);
+      return true;
+    }
+    if (ul === editor.getBody()) {
+      return true;
+    }
+    if (li.nodeName === 'DD') {
+      DOM$4.rename(li, 'DT');
+      return true;
+    }
+    if ($_okk1ogljjgweckx.isFirstChild(li) && $_okk1ogljjgweckx.isLastChild(li)) {
+      if (ulParent.nodeName === 'LI') {
+        DOM$4.insertAfter(li, ulParent);
+        removeEmptyLi(editor.dom, ulParent);
+        DOM$4.remove(ul);
+      } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+        DOM$4.remove(ul, true);
+      } else {
+        ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+        DOM$4.remove(ul);
+      }
+      return true;
+    } else if ($_okk1ogljjgweckx.isFirstChild(li)) {
+      if (ulParent.nodeName === 'LI') {
+        DOM$4.insertAfter(li, ulParent);
+        li.appendChild(ul);
+        removeEmptyLi(editor.dom, ulParent);
+      } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+        ulParent.insertBefore(li, ul);
+      } else {
+        ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+        DOM$4.remove(li);
+      }
+      return true;
+    } else if ($_okk1ogljjgweckx.isLastChild(li)) {
+      if (ulParent.nodeName === 'LI') {
+        DOM$4.insertAfter(li, ulParent);
+      } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+        DOM$4.insertAfter(li, ul);
+      } else {
+        DOM$4.insertAfter($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+        DOM$4.remove(li);
+      }
+      return true;
+    }
+    if (ulParent.nodeName === 'LI') {
+      ul = ulParent;
+      newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI');
+    } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+      newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI');
+    } else {
+      newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li);
+    }
+    $_fikiq7gpjjgwecl5.splitList(editor, ul, li, newBlock);
+    $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, ul.parentNode);
+    return true;
+  };
+  var outdentSelection = function (editor) {
+    var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+    if (listElements.length) {
+      var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng());
+      var i = void 0, y = void 0;
+      var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+      i = listElements.length;
+      while (i--) {
+        var node = listElements[i].parentNode;
+        while (node && node !== root) {
+          y = listElements.length;
+          while (y--) {
+            if (listElements[y] === node) {
+              listElements.splice(i, 1);
+              break;
+            }
+          }
+          node = node.parentNode;
+        }
+      }
+      for (i = 0; i < listElements.length; i++) {
+        if (!outdent(editor, listElements[i]) && i === 0) {
+          break;
+        }
+      }
+      editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+      editor.nodeChanged();
+      return true;
+    }
+  };
+  var $_6pbactghjjgweckp = {
+    outdent: outdent,
+    outdentSelection: outdentSelection
+  };
 
-			if (sibling && isListNode(sibling)) {
-				sibling.insertBefore(li, sibling.firstChild);
-				return true;
-			}
-
-			if (sibling && sibling.nodeName == 'LI' && isListNode(li.lastChild)) {
-				return false;
-			}
-
-			sibling = li.previousSibling;
-			if (sibling && sibling.nodeName == 'LI') {
-				newList = dom.create(li.parentNode.nodeName);
-				sibling.appendChild(newList);
-				newList.appendChild(li);
-				mergeLists(li.lastChild, newList);
-				return true;
-			}
-
-			return false;
-		}
-
-		function indentSelection() {
-			var listElements = getSelectedListItems();
-
-			if (listElements.length) {
-				var bookmark = createBookmark(selection.getRng(true));
-
-				for (var i = 0; i < listElements.length; i++) {
-					if (!indent(listElements[i]) && i === 0) {
-						break;
-					}
-				}
-
-				moveToBookmark(bookmark);
-				editor.nodeChanged();
-
-				return true;
-			}
-		}
-
-		function outdentSelection() {
-			var listElements = getSelectedListItems();
-
-			if (listElements.length) {
-				var bookmark = createBookmark(selection.getRng(true));
-				var i, y, root = editor.getBody();
-
-				i = listElements.length;
-				while (i--) {
-					var node = listElements[i].parentNode;
-
-					while (node && node != root) {
-						y = listElements.length;
-						while (y--) {
-							if (listElements[y] === node) {
-								listElements.splice(i, 1);
-								break;
-							}
-						}
-
-						node = node.parentNode;
-					}
-				}
-
-				for (i = 0; i < listElements.length; i++) {
-					if (!outdent(listElements[i]) && i === 0) {
-						break;
-					}
-				}
-
-				moveToBookmark(bookmark);
-				editor.nodeChanged();
-
-				return true;
-			}
-		}
-
-		function applyList(listName) {
-			var rng = selection.getRng(true), bookmark = createBookmark(rng), listItemName = 'LI';
-
-			listName = listName.toUpperCase();
-
-			if (listName == 'DL') {
-				listItemName = 'DT';
-			}
-
-			function getSelectedTextBlocks() {
-				var textBlocks = [], root = editor.getBody();
-
-				function getEndPointNode(start) {
-					var container, offset;
-
-					container = rng[start ? 'startContainer' : 'endContainer'];
-					offset = rng[start ? 'startOffset' : 'endOffset'];
-
-					// Resolve node index
-					if (container.nodeType == 1) {
-						container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
-					}
-
-					while (container.parentNode != root) {
-						if (isTextBlock(container)) {
-							return container;
-						}
-
-						if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
-							return container;
-						}
-
-						container = container.parentNode;
-					}
-
-					return container;
-				}
-
-				var startNode = getEndPointNode(true);
-				var endNode = getEndPointNode();
-				var block, siblings = [];
-
-				for (var node = startNode; node; node = node.nextSibling) {
-					siblings.push(node);
-
-					if (node == endNode) {
-						break;
-					}
-				}
-
-				tinymce.each(siblings, function(node) {
-					if (isTextBlock(node)) {
-						textBlocks.push(node);
-						block = null;
-						return;
-					}
-
-					if (dom.isBlock(node) || node.nodeName == 'BR') {
-						if (node.nodeName == 'BR') {
-							dom.remove(node);
-						}
-
-						block = null;
-						return;
-					}
-
-					var nextSibling = node.nextSibling;
-					if (tinymce.dom.BookmarkManager.isBookmarkNode(node)) {
-						if (isTextBlock(nextSibling) || (!nextSibling && node.parentNode == root)) {
-							block = null;
-							return;
-						}
-					}
-
-					if (!block) {
-						block = dom.create('p');
-						node.parentNode.insertBefore(block, node);
-						textBlocks.push(block);
-					}
-
-					block.appendChild(node);
-				});
-
-				return textBlocks;
-			}
-
-			tinymce.each(getSelectedTextBlocks(), function(block) {
-				var listBlock, sibling;
-
-				sibling = block.previousSibling;
-				if (sibling && isListNode(sibling) && sibling.nodeName == listName) {
-					listBlock = sibling;
-					block = dom.rename(block, listItemName);
-					sibling.appendChild(block);
-				} else {
-					listBlock = dom.create(listName);
-					block.parentNode.insertBefore(listBlock, block);
-					listBlock.appendChild(block);
-					block = dom.rename(block, listItemName);
-				}
-
-				mergeWithAdjacentLists(listBlock);
-			});
-
-			moveToBookmark(bookmark);
-		}
-
-		function removeList() {
-			var bookmark = createBookmark(selection.getRng(true)), root = editor.getBody();
-
-			tinymce.each(getSelectedListItems(), function(li) {
-				var node, rootList;
-
-				if (dom.isEmpty(li)) {
-					outdent(li);
-					return;
-				}
-
-				for (node = li; node && node != root; node = node.parentNode) {
-					if (isListNode(node)) {
-						rootList = node;
-					}
-				}
-
-				splitList(rootList, li);
-			});
+  var updateListStyle = function (dom, el, detail) {
+    var type = detail['list-style-type'] ? detail['list-style-type'] : null;
+    dom.setStyle(el, 'list-style-type', type);
+  };
+  var setAttribs = function (elm, attrs) {
+    global$5.each(attrs, function (value, key) {
+      elm.setAttribute(key, value);
+    });
+  };
+  var updateListAttrs = function (dom, el, detail) {
+    setAttribs(el, detail['list-attributes']);
+    global$5.each(dom.select('li', el), function (li) {
+      setAttribs(li, detail['list-item-attributes']);
+    });
+  };
+  var updateListWithDetails = function (dom, el, detail) {
+    updateListStyle(dom, el, detail);
+    updateListAttrs(dom, el, detail);
+  };
+  var removeStyles = function (dom, element, styles) {
+    global$5.each(styles, function (style) {
+      var _a;
+      return dom.setStyle(element, (_a = {}, _a[style] = '', _a));
+    });
+  };
+  var getEndPointNode = function (editor, rng, start, root) {
+    var container, offset;
+    container = rng[start ? 'startContainer' : 'endContainer'];
+    offset = rng[start ? 'startOffset' : 'endOffset'];
+    if (container.nodeType === 1) {
+      container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
+    }
+    if (!start && $_okk1ogljjgweckx.isBr(container.nextSibling)) {
+      container = container.nextSibling;
+    }
+    while (container.parentNode !== root) {
+      if ($_okk1ogljjgweckx.isTextBlock(editor, container)) {
+        return container;
+      }
+      if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
+        return container;
+      }
+      container = container.parentNode;
+    }
+    return container;
+  };
+  var getSelectedTextBlocks = function (editor, rng, root) {
+    var textBlocks = [], dom = editor.dom;
+    var startNode = getEndPointNode(editor, rng, true, root);
+    var endNode = getEndPointNode(editor, rng, false, root);
+    var block;
+    var siblings = [];
+    for (var node = startNode; node; node = node.nextSibling) {
+      siblings.push(node);
+      if (node === endNode) {
+        break;
+      }
+    }
+    global$5.each(siblings, function (node) {
+      if ($_okk1ogljjgweckx.isTextBlock(editor, node)) {
+        textBlocks.push(node);
+        block = null;
+        return;
+      }
+      if (dom.isBlock(node) || $_okk1ogljjgweckx.isBr(node)) {
+        if ($_okk1ogljjgweckx.isBr(node)) {
+          dom.remove(node);
+        }
+        block = null;
+        return;
+      }
+      var nextSibling = node.nextSibling;
+      if (global$4.isBookmarkNode(node)) {
+        if ($_okk1ogljjgweckx.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {
+          block = null;
+          return;
+        }
+      }
+      if (!block) {
+        block = dom.create('p');
+        node.parentNode.insertBefore(block, node);
+        textBlocks.push(block);
+      }
+      block.appendChild(node);
+    });
+    return textBlocks;
+  };
+  var hasCompatibleStyle = function (dom, sib, detail) {
+    var sibStyle = dom.getStyle(sib, 'list-style-type');
+    var detailStyle = detail ? detail['list-style-type'] : '';
+    detailStyle = detailStyle === null ? '' : detailStyle;
+    return sibStyle === detailStyle;
+  };
+  var applyList = function (editor, listName, detail) {
+    if (detail === void 0) {
+      detail = {};
+    }
+    var rng = editor.selection.getRng(true);
+    var bookmark;
+    var listItemName = 'LI';
+    var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+    var dom = editor.dom;
+    if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
+      return;
+    }
+    listName = listName.toUpperCase();
+    if (listName === 'DL') {
+      listItemName = 'DT';
+    }
+    bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+    global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {
+      var listBlock, sibling;
+      sibling = block.previousSibling;
+      if (sibling && $_okk1ogljjgweckx.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {
+        listBlock = sibling;
+        block = dom.rename(block, listItemName);
+        sibling.appendChild(block);
+      } else {
+        listBlock = dom.create(listName);
+        block.parentNode.insertBefore(listBlock, block);
+        listBlock.appendChild(block);
+        block = dom.rename(block, listItemName);
+      }
+      removeStyles(dom, block, [
+        'margin',
+        'margin-right',
+        'margin-bottom',
+        'margin-left',
+        'margin-top',
+        'padding',
+        'padding-right',
+        'padding-bottom',
+        'padding-left',
+        'padding-top'
+      ]);
+      updateListWithDetails(dom, listBlock, detail);
+      mergeWithAdjacentLists(editor.dom, listBlock);
+    });
+    editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+  };
+  var removeList = function (editor) {
+    var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+    var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+    var listItems = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+    var emptyListItems = global$5.grep(listItems, function (li) {
+      return editor.dom.isEmpty(li);
+    });
+    listItems = global$5.grep(listItems, function (li) {
+      return !editor.dom.isEmpty(li);
+    });
+    global$5.each(emptyListItems, function (li) {
+      if ($_okk1ogljjgweckx.isEmpty(editor.dom, li)) {
+        $_6pbactghjjgweckp.outdent(editor, li);
+        return;
+      }
+    });
+    global$5.each(listItems, function (li) {
+      var node, rootList;
+      if (li.parentNode === editor.getBody()) {
+        return;
+      }
+      for (node = li; node && node !== root; node = node.parentNode) {
+        if ($_okk1ogljjgweckx.isListNode(node)) {
+          rootList = node;
+        }
+      }
+      $_fikiq7gpjjgwecl5.splitList(editor, rootList, li);
+      $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, rootList.parentNode);
+    });
+    editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+  };
+  var isValidLists = function (list1, list2) {
+    return list1 && list2 && $_okk1ogljjgweckx.isListNode(list1) && list1.nodeName === list2.nodeName;
+  };
+  var hasSameListStyle = function (dom, list1, list2) {
+    var targetStyle = dom.getStyle(list1, 'list-style-type', true);
+    var style = dom.getStyle(list2, 'list-style-type', true);
+    return targetStyle === style;
+  };
+  var hasSameClasses = function (elm1, elm2) {
+    return elm1.className === elm2.className;
+  };
+  var shouldMerge = function (dom, list1, list2) {
+    return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);
+  };
+  var mergeWithAdjacentLists = function (dom, listBlock) {
+    var sibling, node;
+    sibling = listBlock.nextSibling;
+    if (shouldMerge(dom, listBlock, sibling)) {
+      while (node = sibling.firstChild) {
+        listBlock.appendChild(node);
+      }
+      dom.remove(sibling);
+    }
+    sibling = listBlock.previousSibling;
+    if (shouldMerge(dom, listBlock, sibling)) {
+      while (node = sibling.lastChild) {
+        listBlock.insertBefore(node, listBlock.firstChild);
+      }
+      dom.remove(sibling);
+    }
+  };
+  var updateList = function (dom, list, listName, detail) {
+    if (list.nodeName !== listName) {
+      var newList = dom.rename(list, listName);
+      updateListWithDetails(dom, newList, detail);
+    } else {
+      updateListWithDetails(dom, list, detail);
+    }
+  };
+  var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
+    if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
+      removeList(editor);
+    } else {
+      var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+      global$5.each([parentList].concat(lists), function (elm) {
+        updateList(editor.dom, elm, listName, detail);
+      });
+      editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+    }
+  };
+  var hasListStyleDetail = function (detail) {
+    return 'list-style-type' in detail;
+  };
+  var toggleSingleList = function (editor, parentList, listName, detail) {
+    if (parentList === editor.getBody()) {
+      return;
+    }
+    if (parentList) {
+      if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
+        removeList(editor);
+      } else {
+        var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+        updateListWithDetails(editor.dom, parentList, detail);
+        mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
+        editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+      }
+    } else {
+      applyList(editor, listName, detail);
+    }
+  };
+  var toggleList = function (editor, listName, detail) {
+    var parentList = $_3xb1cggnjjgwecl3.getParentList(editor);
+    var selectedSubLists = $_3xb1cggnjjgwecl3.getSelectedSubLists(editor);
+    detail = detail ? detail : {};
+    if (parentList && selectedSubLists.length > 0) {
+      toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
+    } else {
+      toggleSingleList(editor, parentList, listName, detail);
+    }
+  };
+  var $_aek3i3gejjgwecki = {
+    toggleList: toggleList,
+    removeList: removeList,
+    mergeWithAdjacentLists: mergeWithAdjacentLists
+  };
 
-			moveToBookmark(bookmark);
-		}
-
-		function toggleList(listName) {
-			var parentList = dom.getParent(selection.getStart(), 'OL,UL,DL');
-
-			if (parentList) {
-				if (parentList.nodeName == listName) {
-					removeList(listName);
-				} else {
-					var bookmark = createBookmark(selection.getRng(true));
-					mergeWithAdjacentLists(dom.rename(parentList, listName));
-					moveToBookmark(bookmark);
-				}
-			} else {
-				applyList(listName);
-			}
-		}
-
-		function queryListCommandState(listName) {
-			return function() {
-				var parentList = dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
-
-				return parentList && parentList.nodeName == listName;
-			};
-		}
-
-		self.backspaceDelete = function(isForward) {
-			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;
-				}
-
-				nonEmptyBlocks = editor.schema.getNonEmptyElements();
-				walker = new tinymce.dom.TreeWalker(rng.startContainer);
-
-				while ((node = walker[isForward ? 'next' : 'prev']())) {
-					if (node.nodeName == 'LI' && !node.hasChildNodes()) {
-						return node;
-					}
-
-					if (nonEmptyBlocks[node.nodeName]) {
-						return node;
-					}
+  var findNextCaretContainer = function (editor, rng, isForward, root) {
+    var node = rng.startContainer;
+    var offset = rng.startOffset;
+    var nonEmptyBlocks, walker;
+    if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {
+      return node;
+    }
+    nonEmptyBlocks = editor.schema.getNonEmptyElements();
+    if (node.nodeType === 1) {
+      node = global$1.getNode(node, offset);
+    }
+    walker = new global$2(node, root);
+    if (isForward) {
+      if ($_okk1ogljjgweckx.isBogusBr(editor.dom, node)) {
+        walker.next();
+      }
+    }
+    while (node = walker[isForward ? 'next' : 'prev2']()) {
+      if (node.nodeName === 'LI' && !node.hasChildNodes()) {
+        return node;
+      }
+      if (nonEmptyBlocks[node.nodeName]) {
+        return node;
+      }
+      if (node.nodeType === 3 && node.data.length > 0) {
+        return node;
+      }
+    }
+  };
+  var hasOnlyOneBlockChild = function (dom, elm) {
+    var childNodes = elm.childNodes;
+    return childNodes.length === 1 && !$_okk1ogljjgweckx.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
+  };
+  var unwrapSingleBlockChild = function (dom, elm) {
+    if (hasOnlyOneBlockChild(dom, elm)) {
+      dom.remove(elm.firstChild, true);
+    }
+  };
+  var moveChildren = function (dom, fromElm, toElm) {
+    var node, targetElm;
+    targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
+    unwrapSingleBlockChild(dom, fromElm);
+    if (!$_okk1ogljjgweckx.isEmpty(dom, fromElm, true)) {
+      while (node = fromElm.firstChild) {
+        targetElm.appendChild(node);
+      }
+    }
+  };
+  var mergeLiElements = function (dom, fromElm, toElm) {
+    var node, listNode;
+    var ul = fromElm.parentNode;
+    if (!$_okk1ogljjgweckx.isChildOfBody(dom, fromElm) || !$_okk1ogljjgweckx.isChildOfBody(dom, toElm)) {
+      return;
+    }
+    if ($_okk1ogljjgweckx.isListNode(toElm.lastChild)) {
+      listNode = toElm.lastChild;
+    }
+    if (ul === toElm.lastChild) {
+      if ($_okk1ogljjgweckx.isBr(ul.previousSibling)) {
+        dom.remove(ul.previousSibling);
+      }
+    }
+    node = toElm.lastChild;
+    if (node && $_okk1ogljjgweckx.isBr(node) && fromElm.hasChildNodes()) {
+      dom.remove(node);
+    }
+    if ($_okk1ogljjgweckx.isEmpty(dom, toElm, true)) {
+      dom.$(toElm).empty();
+    }
+    moveChildren(dom, fromElm, toElm);
+    if (listNode) {
+      toElm.appendChild(listNode);
+    }
+    dom.remove(fromElm);
+    if ($_okk1ogljjgweckx.isEmpty(dom, ul) && ul !== dom.getRoot()) {
+      dom.remove(ul);
+    }
+  };
+  var mergeIntoEmptyLi = function (editor, fromLi, toLi) {
+    editor.dom.$(toLi).empty();
+    mergeLiElements(editor.dom, fromLi, toLi);
+    editor.selection.setCursorLocation(toLi);
+  };
+  var mergeForward = function (editor, rng, fromLi, toLi) {
+    var dom = editor.dom;
+    if (dom.isEmpty(toLi)) {
+      mergeIntoEmptyLi(editor, fromLi, toLi);
+    } else {
+      var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+      mergeLiElements(dom, fromLi, toLi);
+      editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+    }
+  };
+  var mergeBackward = function (editor, rng, fromLi, toLi) {
+    var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+    mergeLiElements(editor.dom, fromLi, toLi);
+    var resolvedBookmark = $_2nx1i4gjjjgweckt.resolveBookmark(bookmark);
+    editor.selection.setRng(resolvedBookmark);
+  };
+  var backspaceDeleteFromListToListCaret = function (editor, isForward) {
+    var dom = editor.dom, selection = editor.selection;
+    var selectionStartElm = selection.getStart();
+    var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+    var li = dom.getParent(selection.getStart(), 'LI', root);
+    var ul, rng, otherLi;
+    if (li) {
+      ul = li.parentNode;
+      if (ul === editor.getBody() && $_okk1ogljjgweckx.isEmpty(dom, ul)) {
+        return true;
+      }
+      rng = $_a9cyhvgkjjgweckv.normalizeRange(selection.getRng(true));
+      otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
+      if (otherLi && otherLi !== li) {
+        if (isForward) {
+          mergeForward(editor, rng, otherLi, li);
+        } else {
+          mergeBackward(editor, rng, li, otherLi);
+        }
+        return true;
+      } else if (!otherLi) {
+        if (!isForward && $_aek3i3gejjgwecki.removeList(editor)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  };
+  var removeBlock = function (dom, block, root) {
+    var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);
+    dom.remove(block);
+    if (parentBlock && dom.isEmpty(parentBlock)) {
+      dom.remove(parentBlock);
+    }
+  };
+  var backspaceDeleteIntoListCaret = function (editor, isForward) {
+    var dom = editor.dom;
+    var selectionStartElm = editor.selection.getStart();
+    var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+    var block = dom.getParent(selectionStartElm, dom.isBlock, root);
+    if (block && dom.isEmpty(block)) {
+      var rng = $_a9cyhvgkjjgweckv.normalizeRange(editor.selection.getRng(true));
+      var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
+      if (otherLi_1) {
+        editor.undoManager.transact(function () {
+          removeBlock(dom, block, root);
+          $_aek3i3gejjgwecki.mergeWithAdjacentLists(dom, otherLi_1.parentNode);
+          editor.selection.select(otherLi_1, true);
+          editor.selection.collapse(isForward);
+        });
+        return true;
+      }
+    }
+    return false;
+  };
+  var backspaceDeleteCaret = function (editor, isForward) {
+    return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
+  };
+  var backspaceDeleteRange = function (editor) {
+    var selectionStartElm = editor.selection.getStart();
+    var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+    var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);
+    if (startListParent || $_3xb1cggnjjgwecl3.getSelectedListItems(editor).length > 0) {
+      editor.undoManager.transact(function () {
+        editor.execCommand('Delete');
+        $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, editor.getBody());
+      });
+      return true;
+    }
+    return false;
+  };
+  var backspaceDelete = function (editor, isForward) {
+    return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);
+  };
+  var setup = function (editor) {
+    editor.on('keydown', function (e) {
+      if (e.keyCode === global$3.BACKSPACE) {
+        if (backspaceDelete(editor, false)) {
+          e.preventDefault();
+        }
+      } else if (e.keyCode === global$3.DELETE) {
+        if (backspaceDelete(editor, true)) {
+          e.preventDefault();
+        }
+      }
+    });
+  };
+  var $_brhyezgajjgweck7 = {
+    setup: setup,
+    backspaceDelete: backspaceDelete
+  };
 
-					if (node.nodeType == 3 && node.data.length > 0) {
-						return node;
-					}
-				}
-			}
-
-			function mergeLiElements(fromElm, toElm) {
-				var node, listNode, ul = fromElm.parentNode;
-
-				if (isListNode(toElm.lastChild)) {
-					listNode = toElm.lastChild;
-				}
-
-				node = toElm.lastChild;
-				if (node && node.nodeName == 'BR' && fromElm.hasChildNodes()) {
-					dom.remove(node);
-				}
-
-				if (dom.isEmpty(toElm)) {
-					dom.$(toElm).empty();
-				}
-
-				if (!dom.isEmpty(fromElm)) {
-					while ((node = fromElm.firstChild)) {
-						toElm.appendChild(node);
-					}
-				}
-
-				if (listNode) {
-					toElm.appendChild(listNode);
-				}
-
-				dom.remove(fromElm);
-
-				if (dom.isEmpty(ul)) {
-					dom.remove(ul);
-				}
-			}
-
-			if (selection.isCollapsed()) {
-				var li = dom.getParent(selection.getStart(), 'LI');
-
-				if (li) {
-					var rng = selection.getRng(true);
-					var otherLi = dom.getParent(findNextCaretContainer(rng, isForward), 'LI');
-
-					if (otherLi && otherLi != li) {
-						var bookmark = createBookmark(rng);
+  var get = function (editor) {
+    return {
+      backspaceDelete: function (isForward) {
+        $_brhyezgajjgweck7.backspaceDelete(editor, isForward);
+      }
+    };
+  };
+  var $_nb3yvg9jjgweck5 = { get: get };
 
-						if (isForward) {
-							mergeLiElements(otherLi, li);
-						} else {
-							mergeLiElements(li, otherLi);
-						}
-
-						moveToBookmark(bookmark);
-
-						return true;
-					} else if (!otherLi) {
-						if (!isForward && removeList(li.parentNode.nodeName)) {
-							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;
-				}
-			}
-
-			if (isHandled) {
-				editor.fire('ExecCommand', {command: e.command});
-				e.preventDefault();
-				return true;
-			}
-		});
-
-		editor.addCommand('InsertUnorderedList', function() {
-			toggleList('UL');
-		});
-
-		editor.addCommand('InsertOrderedList', function() {
-			toggleList('OL');
-		});
-
-		editor.addCommand('InsertDefinitionList', function() {
-			toggleList('DL');
-		});
+  var DOM$5 = global$6.DOM;
+  var mergeLists = function (from, to) {
+    var node;
+    if ($_okk1ogljjgweckx.isListNode(from)) {
+      while (node = from.firstChild) {
+        to.appendChild(node);
+      }
+      DOM$5.remove(from);
+    }
+  };
+  var indent = function (li) {
+    var sibling, newList, listStyle;
+    if (li.nodeName === 'DT') {
+      DOM$5.rename(li, 'DD');
+      return true;
+    }
+    sibling = li.previousSibling;
+    if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) {
+      sibling.appendChild(li);
+      return true;
+    }
+    if (sibling && sibling.nodeName === 'LI' && $_okk1ogljjgweckx.isListNode(sibling.lastChild)) {
+      sibling.lastChild.appendChild(li);
+      mergeLists(li.lastChild, sibling.lastChild);
+      return true;
+    }
+    sibling = li.nextSibling;
+    if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) {
+      sibling.insertBefore(li, sibling.firstChild);
+      return true;
+    }
+    sibling = li.previousSibling;
+    if (sibling && sibling.nodeName === 'LI') {
+      newList = DOM$5.create(li.parentNode.nodeName);
+      listStyle = DOM$5.getStyle(li.parentNode, 'listStyleType');
+      if (listStyle) {
+        DOM$5.setStyle(newList, 'listStyleType', listStyle);
+      }
+      sibling.appendChild(newList);
+      newList.appendChild(li);
+      mergeLists(li.lastChild, newList);
+      return true;
+    }
+    return false;
+  };
+  var indentSelection = function (editor) {
+    var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+    if (listElements.length) {
+      var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+      for (var i = 0; i < listElements.length; i++) {
+        if (!indent(listElements[i]) && i === 0) {
+          break;
+        }
+      }
+      editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+      editor.nodeChanged();
+      return true;
+    }
+  };
+  var $_3rkwagtjjgweclf = { indentSelection: indentSelection };
 
-		editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState('UL'));
-		editor.addQueryStateHandler('InsertOrderedList', queryListCommandState('OL'));
-		editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState('DL'));
-
-		editor.on('keydown', function(e) {
-			// Check for tab but not ctrl/cmd+tab since it switches browser tabs
-			if (e.keyCode != 9 || tinymce.util.VK.metaKeyPressed(e)) {
-				return;
-			}
+  var queryListCommandState = function (editor, listName) {
+    return function () {
+      var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
+      return parentList && parentList.nodeName === listName;
+    };
+  };
+  var register = function (editor) {
+    editor.on('BeforeExecCommand', function (e) {
+      var cmd = e.command.toLowerCase();
+      var isHandled;
+      if (cmd === 'indent') {
+        if ($_3rkwagtjjgweclf.indentSelection(editor)) {
+          isHandled = true;
+        }
+      } else if (cmd === 'outdent') {
+        if ($_6pbactghjjgweckp.outdentSelection(editor)) {
+          isHandled = true;
+        }
+      }
+      if (isHandled) {
+        editor.fire('ExecCommand', { command: e.command });
+        e.preventDefault();
+        return true;
+      }
+    });
+    editor.addCommand('InsertUnorderedList', function (ui, detail) {
+      $_aek3i3gejjgwecki.toggleList(editor, 'UL', detail);
+    });
+    editor.addCommand('InsertOrderedList', function (ui, detail) {
+      $_aek3i3gejjgwecki.toggleList(editor, 'OL', detail);
+    });
+    editor.addCommand('InsertDefinitionList', function (ui, detail) {
+      $_aek3i3gejjgwecki.toggleList(editor, 'DL', detail);
+    });
+    editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));
+    editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));
+    editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));
+  };
+  var $_blnfs1gsjjgwecld = { register: register };
 
-			if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
-				e.preventDefault();
+  var shouldIndentOnTab = function (editor) {
+    return editor.getParam('lists_indent_on_tab', true);
+  };
+  var $_8obsbgvjjgweclk = { shouldIndentOnTab: shouldIndentOnTab };
 
-				if (e.shiftKey) {
-					outdentSelection();
-				} else {
-					indentSelection();
-				}
-			}
-		});
-	});
+  var setupTabKey = function (editor) {
+    editor.on('keydown', function (e) {
+      if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {
+        return;
+      }
+      if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
+        e.preventDefault();
+        if (e.shiftKey) {
+          $_6pbactghjjgweckp.outdentSelection(editor);
+        } else {
+          $_3rkwagtjjgweclf.indentSelection(editor);
+        }
+      }
+    });
+  };
+  var setup$1 = function (editor) {
+    if ($_8obsbgvjjgweclk.shouldIndentOnTab(editor)) {
+      setupTabKey(editor);
+    }
+    $_brhyezgajjgweck7.setup(editor);
+  };
+  var $_ees9z9gujjgwecli = { setup: setup$1 };
 
-	editor.addButton('indent', {
-		icon: 'indent',
-		title: 'Increase indent',
-		cmd: 'Indent',
-		onPostRender: function() {
-			var ctrl = this;
-
-			editor.on('nodechange', function() {
-				var blocks = editor.selection.getSelectedBlocks();
-				var disable = false;
-
-				for (var i = 0, l = blocks.length; !disable && i < l; i++) {
-					var tag = blocks[i].nodeName;
-
-					disable = (tag == 'LI' && isFirstChild(blocks[i]) || tag == 'UL' || tag == 'OL' || tag == 'DD');
-				}
+  var findIndex = function (list, predicate) {
+    for (var index = 0; index < list.length; index++) {
+      var element = list[index];
+      if (predicate(element)) {
+        return index;
+      }
+    }
+    return -1;
+  };
+  var listState = function (editor, listName) {
+    return function (e) {
+      var ctrl = e.control;
+      editor.on('NodeChange', function (e) {
+        var tableCellIndex = findIndex(e.parents, $_okk1ogljjgweckx.isTableCellNode);
+        var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;
+        var lists = global$5.grep(parents, $_okk1ogljjgweckx.isListNode);
+        ctrl.active(lists.length > 0 && lists[0].nodeName === listName);
+      });
+    };
+  };
+  var indentPostRender = function (editor) {
+    return function (e) {
+      var ctrl = e.control;
+      editor.on('nodechange', function () {
+        var listItemBlocks = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+        var disable = listItemBlocks.length > 0 && $_okk1ogljjgweckx.isFirstChild(listItemBlocks[0]);
+        ctrl.disabled(disable);
+      });
+    };
+  };
+  var register$1 = function (editor) {
+    var hasPlugin = function (editor, plugin) {
+      var plugins = editor.settings.plugins ? editor.settings.plugins : '';
+      return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;
+    };
+    if (!hasPlugin(editor, 'advlist')) {
+      editor.addButton('numlist', {
+        active: false,
+        title: 'Numbered list',
+        cmd: 'InsertOrderedList',
+        onPostRender: listState(editor, 'OL')
+      });
+      editor.addButton('bullist', {
+        active: false,
+        title: 'Bullet list',
+        cmd: 'InsertUnorderedList',
+        onPostRender: listState(editor, 'UL')
+      });
+    }
+    editor.addButton('indent', {
+      icon: 'indent',
+      title: 'Increase indent',
+      cmd: 'Indent',
+      onPostRender: indentPostRender(editor)
+    });
+  };
+  var $_s7o0sgwjjgweclm = { register: register$1 };
 
-				ctrl.disabled(disable);
-			});
-		}
-	});
+  global.add('lists', function (editor) {
+    $_ees9z9gujjgwecli.setup(editor);
+    $_s7o0sgwjjgweclm.register(editor);
+    $_blnfs1gsjjgwecld.register(editor);
+    return $_nb3yvg9jjgweck5.get(editor);
+  });
+  function Plugin () {
+  }
 
-	editor.on('keydown', function(e) {
-		if (e.keyCode == tinymce.util.VK.BACKSPACE) {
-			if (self.backspaceDelete()) {
-				e.preventDefault();
-			}
-		} else if (e.keyCode == tinymce.util.VK.DELETE) {
-			if (self.backspaceDelete(true)) {
-				e.preventDefault();
-			}
-		}
-	});
-});
+  return Plugin;
+
+}());
+})();