71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
/*!
|
|
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
* Copyright (c) 2013-2025 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
*/
|
|
import { Dom } from "../../core/dom/index.js";
|
|
import { pluginSystem } from "../../core/global.js";
|
|
import { Config } from "../../config.js";
|
|
/**
|
|
* After loading the page into the editor once the focus is set
|
|
*/
|
|
Config.prototype.autofocus = false;
|
|
/**
|
|
* Cursor position after autofocus
|
|
*/
|
|
Config.prototype.cursorAfterAutofocus = 'end';
|
|
/**
|
|
* Save current selection on blur event
|
|
*/
|
|
Config.prototype.saveSelectionOnBlur = true;
|
|
export function focus(editor) {
|
|
if (editor.o.saveSelectionOnBlur) {
|
|
editor.e
|
|
.on('blur', () => {
|
|
if (editor.isEditorMode()) {
|
|
editor.s.save(true);
|
|
}
|
|
})
|
|
.on('focus', () => {
|
|
editor.s.restore();
|
|
});
|
|
}
|
|
const focus = () => {
|
|
editor.s.focus();
|
|
if (editor.o.cursorAfterAutofocus === 'end') {
|
|
const lastTextNode = Dom.last(editor.editor, node => Dom.isText(node));
|
|
if (lastTextNode) {
|
|
editor.s.setCursorIn(lastTextNode, false);
|
|
}
|
|
}
|
|
};
|
|
editor.e.on('afterInit', () => {
|
|
if (editor.o.autofocus) {
|
|
if (editor.defaultTimeout) {
|
|
editor.async.setTimeout(focus, 300);
|
|
}
|
|
else {
|
|
focus();
|
|
}
|
|
}
|
|
});
|
|
editor.e.on('afterInit afterAddPlace', () => {
|
|
editor.e
|
|
.off(editor.editor, 'mousedown.autofocus')
|
|
.on(editor.editor, 'mousedown.autofocus', (e) => {
|
|
if (editor.isEditorMode() &&
|
|
e.target &&
|
|
Dom.isBlock(e.target) &&
|
|
!e.target.childNodes.length) {
|
|
if (editor.editor === e.target) {
|
|
editor.s.focus();
|
|
}
|
|
else {
|
|
editor.s.setCursorIn(e.target);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
pluginSystem.add('focus', focus);
|