const createPatternSet = (patterns: Pattern[]): PatternSet => { return { inlinePatterns: sortPatterns(Arr.filter(patterns, isInlinePattern)), blockPatterns: sortPatterns(Arr.filter(patterns, isBlockPattern)), replacementPatterns: Arr.filter(patterns, isReplacementPattern), }; };
const getMultipleToolbarsSetting = (editor: Editor) => { const keys = Obj.keys(editor.settings); const toolbarKeys = Arr.filter(keys, (key) => /^toolbar([1-9])$/.test(key)); const toolbars = Arr.map(toolbarKeys, (key) => editor.getParam(key, false, 'string')); const toolbarArray = Arr.filter(toolbars, (toolbar) => typeof toolbar === 'string'); return toolbarArray.length > 0 ? Option.some(toolbarArray) : Option.none(); };
const trimMenuItems = function (menuItems) { const menuItems2 = Arr.filter(menuItems, function (menuItem, i, menuItems) { return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]); }); return Arr.filter(menuItems2, function (menuItem, i, menuItems) { return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1; }); };
const cleanupMenu = function (namedMenuItems, removedMenuItems) { const menuItemsPass1 = Arr.filter(namedMenuItems, function (namedMenuItem) { return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false; }); const menuItemsPass2 = Arr.filter(menuItemsPass1, function (namedMenuItem, i, namedMenuItems) { return !isSeparator(namedMenuItem) || !isSeparator(namedMenuItems[i - 1]); }); return Arr.filter(menuItemsPass2, function (namedMenuItem, i, namedMenuItems) { return !isSeparator(namedMenuItem) || i > 0 && i < namedMenuItems.length - 1; }); };
const moveToCeFalseVertically = function (direction: LineWalker.VDirection, editor, walkerFn, range: Range) { let caretPosition, linePositions, nextLinePositions; let closestNextLineRect, caretClientRect, clientX; let dist1, dist2, contentEditableFalseNode; contentEditableFalseNode = getSelectedNode(range); caretPosition = CaretUtils.getNormalizedRangeEndPoint(direction, editor.getBody(), range); linePositions = walkerFn(editor.getBody(), LineWalker.isAboveLine(1), caretPosition); nextLinePositions = Arr.filter(linePositions, LineWalker.isLine(1)); caretClientRect = ArrUtils.last(caretPosition.getClientRects()); if (isBeforeContentEditableFalse(caretPosition) || CaretUtils.isBeforeTable(caretPosition)) { contentEditableFalseNode = caretPosition.getNode(); } if (isAfterContentEditableFalse(caretPosition) || CaretUtils.isAfterTable(caretPosition)) { contentEditableFalseNode = caretPosition.getNode(true); } if (!caretClientRect) { return null; } clientX = caretClientRect.left; closestNextLineRect = LineUtils.findClosestClientRect(nextLinePositions, clientX); if (closestNextLineRect) { if (isContentEditableFalse(closestNextLineRect.node)) { dist1 = Math.abs(clientX - closestNextLineRect.left); dist2 = Math.abs(clientX - closestNextLineRect.right); return CefUtils.showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true); } } if (contentEditableFalseNode) { const caretPositions = LineWalker.positionsUntil(direction, editor.getBody(), LineWalker.isAboveLine(1), contentEditableFalseNode); closestNextLineRect = LineUtils.findClosestClientRect(Arr.filter(caretPositions, LineWalker.isLine(1)), clientX); if (closestNextLineRect) { return CefUtils.renderRangeCaret(editor, closestNextLineRect.position.toRange(), true); } closestNextLineRect = ArrUtils.last(Arr.filter(caretPositions, LineWalker.isLine(0))); if (closestNextLineRect) { return CefUtils.renderRangeCaret(editor, closestNextLineRect.position.toRange(), true); } } };
const removeTrailingBr = function (elm) { const allBrs = SelectorFilter.descendants(elm, 'br'); const brs = Arr.filter(getLastChildren(elm).slice(-1), ElementType.isBr); if (allBrs.length === brs.length) { Arr.each(brs, Remove.remove); } };
const normalizePlugins = function (plugins) { const pluginNames = Type.isArray(plugins) ? plugins.join(' ') : plugins; const trimmedPlugins = Arr.map(Type.isString(pluginNames) ? pluginNames.split(' ') : [ ], Strings.trim); return Arr.filter(trimmedPlugins, function (item) { return item.length > 0; }); };
const fromMenuItems = function (type) { const filteredTargets = Arr.filter(targets, function (target) { return target.type === type; }); return toMenuItems(filteredTargets); };
const getClosestCell = (getYAxisValue: GetAxisValue, isTargetCorner: IsTargetCorner, table: HTMLElement, x: number, y: number): Option<HTMLElement> => { const cells = SelectorFilter.descendants(Element.fromDom(table), 'td,th').map((e) => e.dom()); const corners = Arr.filter(getCorners(getYAxisValue, cells), (corner) => isTargetCorner(corner, y)); return findClosestCorner(corners, x, y).map((corner) => { return corner.cell; }); };
Arr.each(formats.split(','), (format) => { formatChangeItems[format].callbacks = Arr.filter(formatChangeItems[format].callbacks, (c) => { return c !== callback; }); if (formatChangeItems[format].callbacks.length === 0) { delete formatChangeItems[format]; } });