: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
var TEXT = domGlobals.Node.TEXT_NODE;
var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
var ENTITY = domGlobals.Node.ENTITY_NODE;
var NOTATION = domGlobals.Node.NOTATION_NODE;
var is = function (element, selector) {
if (dom.nodeType !== ELEMENT$1) {
if (elem.matches !== undefined) {
return elem.matches(selector);
} else if (elem.msMatchesSelector !== undefined) {
return elem.msMatchesSelector(selector);
} else if (elem.webkitMatchesSelector !== undefined) {
return elem.webkitMatchesSelector(selector);
} else if (elem.mozMatchesSelector !== undefined) {
return elem.mozMatchesSelector(selector);
throw new Error('Browser lacks native selectors');
var eq = function (e1, e2) {
return e1.dom() === e2.dom();
var regularContains = function (e1, e2) {
return d1 === d2 ? false : d1.contains(d2);
var ieContains = function (e1, e2) {
return Node.documentPositionContainedBy(e1.dom(), e2.dom());
var browser = PlatformDetection$1.detect().browser;
var contains$1 = browser.isIE() ? ieContains : regularContains;
var parent = function (element) {
return Option.from(element.dom().parentNode).map(Element.fromDom);
var children = function (element) {
return map(element.dom().childNodes, Element.fromDom);
var child = function (element, index) {
var cs = element.dom().childNodes;
return Option.from(cs[index]).map(Element.fromDom);
var firstChild = function (element) {
return child(element, 0);
var lastChild = function (element) {
return child(element, element.dom().childNodes.length - 1);
var spot = Immutable('element', 'offset');
var before = function (marker, element) {
var parent$1 = parent(marker);
parent$1.each(function (v) {
v.dom().insertBefore(element.dom(), marker.dom());
var append = function (parent, element) {
parent.dom().appendChild(element.dom());
var before$1 = function (marker, elements) {
each(elements, function (x) {
var append$1 = function (parent, elements) {
each(elements, function (x) {
var remove = function (element) {
if (dom.parentNode !== null) {
dom.parentNode.removeChild(dom);
var name = function (element) {
var r = element.dom().nodeName;
var type = function (element) {
return element.dom().nodeType;
var isType$1 = function (t) {
return function (element) {
return type(element) === t;
var isElement = isType$1(ELEMENT);
var rawSet = function (dom, key, value) {
if (isString(value) || isBoolean(value) || isNumber(value)) {
dom.setAttribute(key, value + '');
domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
throw new Error('Attribute value was not simple');
var setAll = function (element, attrs) {
each$1(attrs, function (v, k) {
var clone = function (element) {
return foldl(element.dom().attributes, function (acc, attr) {
acc[attr.name] = attr.value;
var isSupported = function (dom) {
return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
var internalSet = function (dom, property, value) {
domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
throw new Error('CSS value must be a string: ' + value);
dom.style.setProperty(property, value);
var set = function (element, property, value) {
internalSet(dom, property, value);
var clone$1 = function (original, isDeep) {
return Element.fromDom(original.dom().cloneNode(isDeep));
var deep = function (original) {
return clone$1(original, true);
var shallowAs = function (original, tag) {
var nu = Element.fromTag(tag);
var attributes = clone(original);
var mutate = function (original, tag) {
var nu = shallowAs(original, tag);
var children$1 = children(original);
append$1(nu, children$1);
var joinSegment = function (parent, child) {
append(parent.item, child.list);
var joinSegments = function (segments) {
for (var i = 1; i < segments.length; i++) {
joinSegment(segments[i - 1], segments[i]);
var appendSegments = function (head$1, tail) {
lift2(last(head$1), head(tail), joinSegment);
var createSegment = function (scope, listType) {
list: Element.fromTag(listType, scope),
item: Element.fromTag('li', scope)
append(segment.list, segment.item);
var createSegments = function (scope, entry, size) {
for (var i = 0; i < size; i++) {
segments.push(createSegment(scope, entry.listType));
var populateSegments = function (segments, entry) {
for (var i = 0; i < segments.length - 1; i++) {
set(segments[i].item, 'list-style-type', 'none');
last(segments).each(function (segment) {
setAll(segment.list, entry.listAttributes);
setAll(segment.item, entry.itemAttributes);
append$1(segment.item, entry.content);
var normalizeSegment = function (segment, entry) {
if (name(segment.list) !== entry.listType) {
segment.list = mutate(segment.list, entry.listType);
setAll(segment.list, entry.listAttributes);
var createItem = function (scope, attr, content) {
var item = Element.fromTag('li', scope);
var appendItem = function (segment, item) {
append(segment.list, item);
var writeShallow = function (scope, cast, entry) {
var newCast = cast.slice(0, entry.depth);
last(newCast).each(function (segment) {
var item = createItem(scope, entry.itemAttributes, entry.content);
appendItem(segment, item);
normalizeSegment(segment, entry);
var writeDeep = function (scope, cast, entry) {
var segments = createSegments(scope, entry, entry.depth - cast.length);
populateSegments(segments, entry);
appendSegments(cast, segments);
return cast.concat(segments);
var composeList = function (scope, entries) {
var cast = foldl(entries, function (cast, entry) {
return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);
return head(cast).map(function (segment) {
var isList$1 = function (el) {
return is$1(el, 'OL,UL');
var hasFirstChildList = function (el) {
return firstChild(el).map(isList$1).getOr(false);
var hasLastChildList = function (el) {
return lastChild(el).map(isList$1).getOr(false);
var isIndented = function (entry) {
var isSelected = function (entry) {
var cloneItemContent = function (li) {
var children$1 = children(li);
var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;
return map(content, deep);
var createEntry = function (li, depth, isSelected) {
return parent(li).filter(isElement).map(function (list) {
content: cloneItemContent(li),
itemAttributes: clone(li),
listAttributes: clone(list),
var indentEntry = function (indentation, entry) {
var hasOwnProperty = Object.prototype.hasOwnProperty;
var shallow = function (old, nu) {
var baseMerge = function (merger) {
var objects = new Array(arguments.length);
for (var i = 0; i < objects.length; i++) {
objects[i] = arguments[i];
if (objects.length === 0) {
throw new Error('Can\'t merge zero objects');
for (var j = 0; j < objects.length; j++) {
var curObject = objects[j];
for (var key in curObject) {
if (hasOwnProperty.call(curObject, key)) {
ret[key] = merger(ret[key], curObject[key]);
var merge = baseMerge(shallow);
var cloneListProperties = function (target, source) {
target.listType = source.listType;
target.listAttributes = merge({}, source.listAttributes);
var previousSiblingEntry = function (entries, start) {
var depth = entries[start].depth;
for (var i = start - 1; i >= 0; i--) {
if (entries[i].depth === depth) {
return Option.some(entries[i]);
if (entries[i].depth < depth) {
var normalizeEntries = function (entries) {
each(entries, function (entry, i) {
previousSiblingEntry(entries, i).each(function (matchingEntry) {
cloneListProperties(entry, matchingEntry);
var Cell = function (initial) {
var clone = function () {
var parseItem = function (depth, itemSelection, selectionState, item) {
return firstChild(item).filter(isList$1).fold(function () {
itemSelection.each(function (selection) {
if (eq(selection.start, item)) {
selectionState.set(true);
var currentItemEntry = createEntry(item, depth, selectionState.get());
itemSelection.each(function (selection) {
if (eq(selection.end, item)) {
selectionState.set(false);
var childListEntries = lastChild(item).filter(isList$1).map(function (list) {
return parseList(depth, itemSelection, selectionState, list);
return currentItemEntry.toArray().concat(childListEntries);
return parseList(depth, itemSelection, selectionState, list);
var parseList = function (depth, itemSelection, selectionState, list) {
return bind(children(list), function (element) {
var parser = isList$1(element) ? parseList : parseItem;
var newDepth = depth + 1;
return parser(newDepth, itemSelection, selectionState, element);
var parseLists = function (lists, itemSelection) {
var selectionState = Cell(false);
return map(lists, function (list) {
entries: parseList(initialDepth, itemSelection, selectionState, list)
var global$8 = tinymce.util.Tools.resolve('tinymce.Env');
var createTextBlock = function (editor, contentNode) {
var blockElements = editor.schema.getBlockElements();
var fragment = dom.createFragment();
var node, textBlock, blockName, hasContentNode;
if (editor.settings.forced_root_block) {
blockName = editor.settings.forced_root_block;
textBlock = dom.create(blockName);
if (textBlock.tagName === editor.settings.forced_root_block) {
dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {
fragment.appendChild(textBlock);
while (node = contentNode.firstChild) {
var nodeName = node.nodeName;
if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
if (NodeType.isBlock(node, blockElements)) {
fragment.appendChild(node);
textBlock = dom.create(blockName);
fragment.appendChild(textBlock);
textBlock.appendChild(node);
fragment.appendChild(node);
if (!editor.settings.forced_root_block) {
fragment.appendChild(dom.create('br'));
if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {
textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));
var outdentedComposer = function (editor, entries) {
return map(entries, function (entry) {
var content = fromElements(entry.content);
return Element.fromDom(createTextBlock(editor, content.dom()));
var indentedComposer = function (editor, entries) {
normalizeEntries(entries);
return composeList(editor.contentDocument, entries).toArray();
var composeEntries = function (editor, entries) {
return bind(groupBy(entries, isIndented), function (entries) {
var groupIsIndented = head(entries).map(isIndented).getOr(false);
return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);
var indentSelectedEntries = function (entries, indentation) {
each(filter(entries, isSelected), function (entry) {
return indentEntry(indentation, entry);
var getItemSelection = function (editor) {
var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);
return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {
var listsIndentation = function (editor, lists, indentation) {
var entrySets = parseLists(lists, getItemSelection(editor));
each(entrySets, function (entrySet) {
indentSelectedEntries(entrySet.entries, indentation);
before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));
remove(entrySet.sourceList);
var DOM$1 = global$6.DOM;
var splitList = function (editor, ul, li) {
var tmpRng, fragment, bookmarks, node, newBlock;
var removeAndKeepBookmarks = function (targetNode) {
global$5.each(bookmarks, function (node) {
targetNode.parentNode.insertBefore(node, li.parentNode);
DOM$1.remove(targetNode);
bookmarks = DOM$1.select('span[data-mce-type="bookmark"]', ul);
newBlock = createTextBlock(editor, li);
tmpRng = DOM$1.createRng();
tmpRng.setStartAfter(li);
fragment = tmpRng.extractContents();
for (node = fragment.firstChild; node; node = node.firstChild) {