MOBILE-3748 rte: Remove arrow keys override
parent
5e37ed03d1
commit
dee6c915f8
|
@ -175,7 +175,6 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterViewInit,
|
||||||
this.editorElement.onkeyup = () => this.onChange();
|
this.editorElement.onkeyup = () => this.onChange();
|
||||||
this.editorElement.onpaste = () => this.onChange();
|
this.editorElement.onpaste = () => this.onChange();
|
||||||
this.editorElement.oninput = () => this.onChange();
|
this.editorElement.oninput = () => this.onChange();
|
||||||
this.editorElement.onkeydown = event => this.moveCursor(event);
|
|
||||||
|
|
||||||
// Use paragraph on enter.
|
// Use paragraph on enter.
|
||||||
document.execCommand('DefaultParagraphSeparator', false, 'p');
|
document.execCommand('DefaultParagraphSeparator', false, 'p');
|
||||||
|
@ -374,64 +373,6 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterViewInit,
|
||||||
this.contentChanged.emit(this.control?.value);
|
this.contentChanged.emit(this.control?.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* On key down function to move the cursor.
|
|
||||||
* https://stackoverflow.com/questions/6249095/how-to-set-caretcursor-position-in-contenteditable-element-div
|
|
||||||
*
|
|
||||||
* @param event The event.
|
|
||||||
*/
|
|
||||||
moveCursor(event: KeyboardEvent): void {
|
|
||||||
if (!this.rteEnabled || !this.editorElement) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.key != 'ArrowLeft' && event.key != 'ArrowRight') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stopBubble(event);
|
|
||||||
|
|
||||||
const move = event.key === 'ArrowLeft' ? -1 : +1;
|
|
||||||
const cursor = this.getCurrentCursorPosition(this.editorElement);
|
|
||||||
|
|
||||||
this.setCurrentCursorPosition(this.editorElement, cursor + move);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of chars from the beggining where is placed the cursor.
|
|
||||||
*
|
|
||||||
* @param parent Parent where to get the position from.
|
|
||||||
* @returns Position in chars.
|
|
||||||
*/
|
|
||||||
protected getCurrentCursorPosition(parent: Node): number {
|
|
||||||
const selection = window.getSelection();
|
|
||||||
|
|
||||||
let charCount = -1;
|
|
||||||
|
|
||||||
if (selection?.focusNode && parent.contains(selection.focusNode)) {
|
|
||||||
let node: Node | null = selection.focusNode;
|
|
||||||
charCount = selection.focusOffset;
|
|
||||||
|
|
||||||
while (node) {
|
|
||||||
if (node.isSameNode(parent)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node.previousSibling) {
|
|
||||||
node = node.previousSibling;
|
|
||||||
charCount += (node.textContent || '').length;
|
|
||||||
} else {
|
|
||||||
node = node.parentNode;
|
|
||||||
if (node === null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return charCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the caret position on the character number.
|
* Set the caret position on the character number.
|
||||||
*
|
*
|
||||||
|
@ -446,6 +387,7 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterViewInit,
|
||||||
* @param node Node where to start.
|
* @param node Node where to start.
|
||||||
* @param range Previous calculated range.
|
* @param range Previous calculated range.
|
||||||
* @param chars Object with counting of characters (input-output param).
|
* @param chars Object with counting of characters (input-output param).
|
||||||
|
* @param chars.count Count of characters.
|
||||||
* @returns Selection range.
|
* @returns Selection range.
|
||||||
*/
|
*/
|
||||||
const setRange = (node: Node, range: Range, chars: { count: number }): Range => {
|
const setRange = (node: Node, range: Range, chars: { count: number }): Range => {
|
||||||
|
|
Loading…
Reference in New Issue