: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
if (!editor.dom.isEmpty(fragment)) {
DOM$1.insertAfter(fragment, ul);
DOM$1.insertAfter(newBlock, ul);
if (NodeType.isEmpty(editor.dom, li.parentNode)) {
removeAndKeepBookmarks(li.parentNode);
if (NodeType.isEmpty(editor.dom, ul)) {
var SplitList = { splitList: splitList };
var outdentDlItem = function (editor, item) {
} else if (is$1(item, 'dt')) {
parent(item).each(function (dl) {
return SplitList.splitList(editor, dl.dom(), item.dom());
var indentDlItem = function (item) {
var dlIndentation = function (editor, indentation, dlItems) {
if (indentation === 'Indent') {
each(dlItems, indentDlItem);
each(dlItems, function (item) {
return outdentDlItem(editor, item);
var selectionIndentation = function (editor, indentation) {
var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);
var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);
if (lists.length || dlItems.length) {
var bookmark = editor.selection.getBookmark();
listsIndentation(editor, lists, indentation);
dlIndentation(editor, indentation, dlItems);
editor.selection.moveToBookmark(bookmark);
editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));
var indentListSelection = function (editor) {
return selectionIndentation(editor, 'Indent');
var outdentListSelection = function (editor) {
return selectionIndentation(editor, 'Outdent');
var flattenListSelection = function (editor) {
return selectionIndentation(editor, 'Flatten');
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) {
return dom.setStyle(element, (_a = {}, _a[style] = '', _a));
var getEndPointNode = function (editor, rng, start, root) {
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 && NodeType.isBr(container.nextSibling)) {
container = container.nextSibling;
while (container.parentNode !== root) {
if (NodeType.isTextBlock(editor, container)) {
if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
container = container.parentNode;
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);
for (var node = startNode; node; node = node.nextSibling) {
global$5.each(siblings, function (node) {
if (NodeType.isTextBlock(editor, node)) {
if (dom.isBlock(node) || NodeType.isBr(node)) {
if (NodeType.isBr(node)) {
var nextSibling = node.nextSibling;
if (global$4.isBookmarkNode(node)) {
if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {
node.parentNode.insertBefore(block, node);
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) {
var rng = editor.selection.getRng(true);
var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));
if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
listName = listName.toUpperCase();
bookmark = Bookmark.createBookmark(rng);
global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {
sibling = block.previousSibling;
if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {
block = dom.rename(block, listItemName);
sibling.appendChild(block);
listBlock = dom.create(listName);
block.parentNode.insertBefore(listBlock, block);
listBlock.appendChild(block);
block = dom.rename(block, listItemName);
removeStyles(dom, block, [
updateListWithDetails(dom, listBlock, detail);
mergeWithAdjacentLists(editor.dom, listBlock);
editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
var isValidLists = function (list1, list2) {
return list1 && list2 && NodeType.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) {
sibling = listBlock.nextSibling;
if (shouldMerge(dom, listBlock, sibling)) {
while (node = sibling.firstChild) {
listBlock.appendChild(node);
sibling = listBlock.previousSibling;
if (shouldMerge(dom, listBlock, sibling)) {
while (node = sibling.lastChild) {
listBlock.insertBefore(node, listBlock.firstChild);
var updateList = function (dom, list, listName, detail) {
if (list.nodeName !== listName) {
var newList = dom.rename(list, listName);
updateListWithDetails(dom, newList, detail);
updateListWithDetails(dom, list, detail);
var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
flattenListSelection(editor);
var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
global$5.each([parentList].concat(lists), function (elm) {
updateList(editor.dom, elm, listName, detail);
editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
var hasListStyleDetail = function (detail) {
return 'list-style-type' in detail;
var toggleSingleList = function (editor, parentList, listName, detail) {
if (parentList === editor.getBody()) {
if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
flattenListSelection(editor);
var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
updateListWithDetails(editor.dom, parentList, detail);
mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
applyList(editor, listName, detail);
var toggleList = function (editor, listName, detail) {
var parentList = Selection.getParentList(editor);
var selectedSubLists = Selection.getSelectedSubLists(editor);
detail = detail ? detail : {};
if (parentList && selectedSubLists.length > 0) {
toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
toggleSingleList(editor, parentList, listName, detail);
mergeWithAdjacentLists: mergeWithAdjacentLists
var DOM$2 = global$6.DOM;
var normalizeList = function (dom, ul) {
var parentNode = ul.parentNode;
if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
sibling = parentNode.previousSibling;
if (sibling && sibling.nodeName === 'LI') {
if (NodeType.isEmpty(dom, parentNode)) {
DOM$2.remove(parentNode);
DOM$2.setStyle(parentNode, 'listStyleType', 'none');
if (NodeType.isListNode(parentNode)) {
sibling = parentNode.previousSibling;
if (sibling && sibling.nodeName === 'LI') {
var normalizeLists = function (dom, element) {
global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {
normalizeList: normalizeList,
normalizeLists: normalizeLists
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)) {
nonEmptyBlocks = editor.schema.getNonEmptyElements();
if (node.nodeType === 1) {
node = global$1.getNode(node, offset);
walker = new global$2(node, root);
if (NodeType.isBogusBr(editor.dom, node)) {
while (node = walker[isForward ? 'next' : 'prev2']()) {
if (node.nodeName === 'LI' && !node.hasChildNodes()) {
if (nonEmptyBlocks[node.nodeName]) {
if (node.nodeType === 3 && node.data.length > 0) {
var hasOnlyOneBlockChild = function (dom, elm) {
var childNodes = elm.childNodes;
return childNodes.length === 1 && !NodeType.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) {
targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
unwrapSingleBlockChild(dom, fromElm);
if (!NodeType.isEmpty(dom, fromElm, true)) {
while (node = fromElm.firstChild) {
targetElm.appendChild(node);
var mergeLiElements = function (dom, fromElm, toElm) {
var ul = fromElm.parentNode;
if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {
if (NodeType.isListNode(toElm.lastChild)) {
listNode = toElm.lastChild;
if (ul === toElm.lastChild) {
if (NodeType.isBr(ul.previousSibling)) {
dom.remove(ul.previousSibling);
if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {
if (NodeType.isEmpty(dom, toElm, true)) {
moveChildren(dom, fromElm, toElm);
toElm.appendChild(listNode);
var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));
var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];
each(nestedLists, function (list) {
if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {
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) {
mergeIntoEmptyLi(editor, fromLi, toLi);
var bookmark = Bookmark.createBookmark(rng);
mergeLiElements(dom, fromLi, toLi);
editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
var mergeBackward = function (editor, rng, fromLi, toLi) {
var bookmark = Bookmark.createBookmark(rng);
mergeLiElements(editor.dom, fromLi, toLi);
var resolvedBookmark = Bookmark.resolveBookmark(bookmark);
editor.selection.setRng(resolvedBookmark);
var backspaceDeleteFromListToListCaret = function (editor, isForward) {
var dom = editor.dom, selection = editor.selection;
var selectionStartElm = selection.getStart();
var root = Selection.getClosestListRootElm(editor, selectionStartElm);
var li = dom.getParent(selection.getStart(), 'LI', root);
if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {
rng = Range.normalizeRange(selection.getRng(true));
otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
if (otherLi && otherLi !== li) {
mergeForward(editor, rng, otherLi, li);
mergeBackward(editor, rng, li, otherLi);
flattenListSelection(editor);
var removeBlock = function (dom, block, root) {
var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);
if (parentBlock && dom.isEmpty(parentBlock)) {
var backspaceDeleteIntoListCaret = function (editor, isForward) {
var selectionStartElm = editor.selection.getStart();
var root = Selection.getClosestListRootElm(editor, selectionStartElm);
var block = dom.getParent(selectionStartElm, dom.isBlock, root);
if (block && dom.isEmpty(block)) {
var rng = Range.normalizeRange(editor.selection.getRng(true));
var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
editor.undoManager.transact(function () {
removeBlock(dom, block, root);
ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);
editor.selection.select(otherLi_1, true);
editor.selection.collapse(isForward);
var backspaceDeleteCaret = function (editor, isForward) {
return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
var backspaceDeleteRange = function (editor) {
var selectionStartElm = editor.selection.getStart();
var root = Selection.getClosestListRootElm(editor, selectionStartElm);
var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);
if (startListParent || Selection.getSelectedListItems(editor).length > 0) {
editor.undoManager.transact(function () {
editor.execCommand('Delete');
NormalizeLists.normalizeLists(editor.dom, editor.getBody());