Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return;
}
// if to replace the selection and the selection is not collapsed, remove the the content at selection first
if (option.replaceSelection && !range.collapsed) {
range.deleteContents();
}
let pos = Position.getStart(range);
let blockElement: BlockElement;
if (
option.insertOnNewLine &&
(blockElement = getBlockElementAtNode(contentDiv, pos.normalize().node))
) {
pos = new Position(blockElement.getEndNode(), PositionType.After);
} else {
pos = adjustNodeInsertPosition(contentDiv, node, pos);
}
let nodeForCursor = node.nodeType == NodeType.DocumentFragment ? node.lastChild : node;
range = createRange(pos);
range.insertNode(node);
if (option.updateCursor && nodeForCursor) {
rangeToRestore = createRange(
new Position(nodeForCursor, PositionType.After).normalize()
);
}
core.api.selectRange(core, rangeToRestore);
break;
case ContentPosition.Outside:
let nextInline = contentTraverser.getNextInlineElement();
startInline.applyStyle((element: HTMLElement) => {
styler(element);
if (!startNode) {
startNode = element;
}
endNode = element;
});
startInline = nextInline;
}
// When selectionStartNode/EndNode is set, it means there is DOM change. Re-create the selection
if (startNode && endNode) {
// Set the selection
core.api.select(core, startNode, PositionType.Before, endNode, PositionType.After);
}
}
onPluginEvent(event: PluginEvent) {
if (event.eventType == PluginEventType.KeyPress) {
let range = this.editor.getSelectionRange();
if (range && range.collapsed && this.editor.getElementAtCursor('A[href]')) {
let searcher = cacheGetContentSearcher(event, this.editor);
let inlineElement = searcher.getInlineElementBefore();
if (inlineElement instanceof LinkInlineElement) {
this.editor.select(
new Position(inlineElement.getContainerNode(), PositionType.After)
);
}
}
}
}
}
window.requestAnimationFrame(() => {
if (this._editor && this._editor.contains(node)) {
this._editor.select(node, PositionType.After);
this._editor.addUndoSnapshot();
}
});
} else {
editor.runAsync(() => {
let newContainer = editor.getElementAtCursor();
if (
contains(vtable.table, newContainer) &&
!contains(td, newContainer, true /*treatSameNodeAsContain*/)
) {
let newPos = targetTd
? new Position(targetTd, PositionType.Begin)
: new Position(vtable.table, isUp ? PositionType.Before : PositionType.After);
if (hasShiftKey) {
newPos =
newPos.node.nodeType == NodeType.Element && isVoidHtmlElement(newPos.node)
? new Position(
newPos.node,
newPos.isAtEnd ? PositionType.After : PositionType.Before
)
: newPos;
editor
.getSelection()
.setBaseAndExtent(anchorNode, anchorOffset, newPos.node, newPos.offset);
} else {
editor.select(newPos);
}
}
});
},
const inlineElementAfter = searcher.getInlineElementAfter();
if (
nodeId &&
nodeId.indexOf(this.pickerOptions.elementIdPrefix) == 0 &&
(inlineElementAfter == null || !(inlineElementAfter instanceof PartialInlineElement))
) {
const replacementNode = this.dataProvider.onRemove(nodeBeforeCursor, true);
if (replacementNode) {
this.replaceNode(nodeBeforeCursor, replacementNode);
if (this.isPendingInputEventHandling) {
this.editor.runAsync(() => {
this.editor.select(replacementNode, PositionType.After);
});
} else {
this.editor.select(replacementNode, PositionType.After);
}
} else {
this.editor.deleteNode(nodeBeforeCursor);
}
return true;
}
return false;
}
if (
option.insertOnNewLine &&
(blockElement = getBlockElementAtNode(contentDiv, pos.normalize().node))
) {
pos = new Position(blockElement.getEndNode(), PositionType.After);
} else {
pos = adjustNodeInsertPosition(contentDiv, node, pos);
}
let nodeForCursor = node.nodeType == NodeType.DocumentFragment ? node.lastChild : node;
range = createRange(pos);
range.insertNode(node);
if (option.updateCursor && nodeForCursor) {
rangeToRestore = createRange(
new Position(nodeForCursor, PositionType.After).normalize()
);
}
core.api.selectRange(core, rangeToRestore);
break;
case ContentPosition.Outside:
core.contentDiv.parentNode.insertBefore(node, contentDiv.nextSibling);
break;
}
return true;
};
editor.addUndoSnapshot(() => {
let firstNode: Node;
let lastNode: Node;
let contentTraverser = editor.getSelectionTraverser();
let inlineElement = contentTraverser && contentTraverser.currentInlineElement;
while (inlineElement) {
let nextInlineElement = contentTraverser.getNextInlineElement();
inlineElement.applyStyle((element, isInnerNode) => {
callback(element, isInnerNode);
firstNode = firstNode || element;
lastNode = element;
});
inlineElement = nextInlineElement;
}
if (firstNode && lastNode) {
editor.select(firstNode, PositionType.Before, lastNode, PositionType.After);
}
}, ChangeSource.Format);
}
handleEvent: (event, editor) => {
let shift = event.rawEvent.shiftKey;
let td = cacheGetTableCell(event, editor);
for (
let vtable = new VTable(td),
step = shift ? -1 : 1,
row = vtable.row,
col = vtable.col + step;
;
col += step
) {
if (col < 0 || col >= vtable.cells[row].length) {
row += step;
if (row < 0 || row >= vtable.cells.length) {
editor.select(vtable.table, shift ? PositionType.Before : PositionType.After);
break;
}
col = shift ? vtable.cells[row].length - 1 : 0;
}
let cell = vtable.getCell(row, col);
if (cell.td) {
editor.select(cell.td, PositionType.Begin);
break;
}
}
event.rawEvent.preventDefault();
},
};
editor.runAsync(() => {
let br = editor.getDocument().createElement('BR');
editor.insertNode(br);
editor.select(br, PositionType.After);
});
} else {