var lists = (function (domGlobals) {
var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');
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');
var isTextNode = function (node) {
return node && node.nodeType === 3;
var isListNode = function (node) {
return node && /^(OL|UL|DL)$/.test(node.nodeName);
var isOlUlNode = function (node) {
return node && /^(OL|UL)$/.test(node.nodeName);
var isListItemNode = function (node) {
return node && /^(LI|DT|DD)$/.test(node.nodeName);
var isDlItemNode = function (node) {
return node && /^(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 (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
var isEmpty = function (dom, elm, keepBookmarks) {
var empty = dom.isEmpty(elm);
if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
var isChildOfBody = function (dom, elm) {
return dom.isChildOf(elm, dom.getRoot());
isDlItemNode: isDlItemNode,
isListItemNode: isListItemNode,
isTableCellNode: isTableCellNode,
isFirstChild: isFirstChild,
isLastChild: isLastChild,
isTextBlock: isTextBlock,
isChildOfBody: isChildOfBody
var getNormalizedPoint = function (container, offset) {
if (NodeType.isTextNode(container)) {
var node = global$1.getNode(container, offset);
if (NodeType.isTextNode(node)) {
offset: offset >= container.childNodes.length ? node.data.length : 0
} else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {
container: node.previousSibling,
offset: node.previousSibling.data.length
} else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {
container: node.nextSibling,
var normalizeRange = function (rng) {
var outRng = rng.cloneRange();
var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);
outRng.setStart(rangeStart.container, rangeStart.offset);
var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);
outRng.setEnd(rangeEnd.container, rangeEnd.offset);
getNormalizedPoint: getNormalizedPoint,
normalizeRange: normalizeRange
var createBookmark = function (rng) {
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);
container.insertBefore(offsetNode, container.childNodes[offset]);
DOM.insertAfter(offsetNode, container.childNodes[offset]);
container.appendChild(offsetNode);
bookmark[start ? 'startContainer' : 'endContainer'] = container;
bookmark[start ? 'startOffset' : 'endOffset'] = offset;
var resolveBookmark = function (bookmark) {
function restoreEndPoint(start) {
var container, offset, node;
var nodeIndex = function (container) {
var node = container.parentNode.firstChild, idx = 0;
if (node === container) {
if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
container = node = bookmark[start ? 'startContainer' : 'endContainer'];
offset = bookmark[start ? 'startOffset' : 'endOffset'];
if (container.nodeType === 1) {
offset = nodeIndex(container);
container = container.parentNode;
if (!container.hasChildNodes() && DOM.isBlock(container)) {
container.appendChild(DOM.create('br'));
bookmark[start ? 'startContainer' : 'endContainer'] = container;
bookmark[start ? 'startOffset' : 'endOffset'] = offset;
var rng = DOM.createRng();
rng.setStart(bookmark.startContainer, bookmark.startOffset);
if (bookmark.endContainer) {
rng.setEnd(bookmark.endContainer, bookmark.endOffset);
return Range.normalizeRange(rng);
createBookmark: createBookmark,
resolveBookmark: resolveBookmark
var constant = function (value) {
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
return !f.apply(null, args);
var never = constant(false);
var always = constant(true);
var call = function (thunk) {
getOrDie: function (msg) {
throw new Error(msg || 'error: getOrDie called on none.');
getOrNull: constant(null),
getOrUndefined: constant(undefined),
toString: constant('none()')
var some = function (a) {
var constant_a = constant(a);
var bind = function (f) {
getOrUndefined: constant_a,
return 'some(' + a + ')';
equals_: function (o, elementEq) {
return o.fold(never, function (b) {
var from = function (value) {
return value === null || value === undefined ? NONE : some(value);
var typeOf = function (x) {
if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
var isType = function (type) {
return function (value) {
return typeOf(value) === type;
var isString = isType('string');
var isArray = isType('array');
var isBoolean = isType('boolean');
var isFunction = isType('function');
var isNumber = isType('number');
var nativeSlice = Array.prototype.slice;
var nativePush = Array.prototype.push;
var map = function (xs, f) {
for (var i = 0; i < len; i++) {
var each = function (xs, f) {
for (var i = 0, len = xs.length; i < len; i++) {
var filter = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var groupBy = function (xs, f) {
for (var i = 0, len = xs.length; i < len; i++) {
if (group.length !== 0) {
var foldl = function (xs, f, acc) {
var find = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var flatten = function (xs) {
for (var i = 0, len = xs.length; i < len; ++i) {
throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
nativePush.apply(r, xs[i]);
var bind = function (xs, f) {
var reverse = function (xs) {
var r = nativeSlice.call(xs, 0);
var head = function (xs) {
return xs.length === 0 ? Option.none() : Option.some(xs[0]);
var last = function (xs) {
return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
var from$1 = isFunction(Array.from) ? Array.from : function (x) {
return nativeSlice.call(x);
var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();
var path = function (parts, scope) {
var o = scope !== undefined && scope !== null ? scope : Global;
for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
var resolve = function (p, scope) {
var parts = p.split('.');
return path(parts, scope);
var unsafe = function (name, scope) {
return resolve(name, scope);
var getOrDie = function (name, scope) {
var actual = unsafe(name, scope);
if (actual === undefined || actual === null) {
throw new Error(name + ' not available on this browser');
var Global$1 = { getOrDie: getOrDie };
var htmlElement = function (scope) {
return Global$1.getOrDie('HTMLElement', scope);
var isPrototypeOf = function (x) {
var scope = resolve('ownerDocument.defaultView', x);
return htmlElement(scope).prototype.isPrototypeOf(x);
var HTMLElement = { isPrototypeOf: isPrototypeOf };
var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
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 NodeType.isListNode(elm);