Merge pull request #2197 from TriliumNext/ck_patch

fix(ckeditor5): scroll to selection after undo/redo to keep cursor in view
This commit is contained in:
Elian Doran 2025-06-07 12:15:02 +03:00 committed by GitHub
commit af698550fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 2 deletions

View File

@ -27,6 +27,7 @@ import "@triliumnext/ckeditor5-math/index.css";
import CodeBlockToolbar from "./plugins/code_block_toolbar.js";
import CodeBlockLanguageDropdown from "./plugins/code_block_language_dropdown.js";
import MoveBlockUpDownPlugin from "./plugins/move_block_updown.js";
import ScrollOnUndoRedoPlugin from "./plugins/scroll_on_undo_redo.js"
/**
* Plugins that are specific to Trilium and not part of the CKEditor 5 core, included in both text editors but not in the attribute editor.
@ -46,7 +47,8 @@ const TRILIUM_PLUGINS: typeof Plugin[] = [
SyntaxHighlighting,
CodeBlockLanguageDropdown,
CodeBlockToolbar,
MoveBlockUpDownPlugin
MoveBlockUpDownPlugin,
ScrollOnUndoRedoPlugin
];
/**

View File

@ -14,7 +14,7 @@ export default class InsertDateTimePlugin extends Plugin {
tooltip: true
} );
// enable internal link only if the editor is not read only
// enable only if the editor is not read only
view.bind('isEnabled').to(editor, 'isReadOnly', isReadOnly => !isReadOnly);
view.on('execute', () => {

View File

@ -0,0 +1,18 @@
import { Plugin } from 'ckeditor5';
export default class ScrollOnUndoRedoPlugin extends Plugin {
init() {
const editor = this.editor;
const scrollToSelection = () => {
// Ensure scroll happens in sync with DOM updates
requestAnimationFrame(() => {
editor.editing.view.scrollToTheSelection();
});
};
// Scroll to selection after undo/redo to keep cursor in view
editor.commands.get('undo')?.on('execute', scrollToSelection);
editor.commands.get('redo')?.on('execute', scrollToSelection);
}
}