UNPKG

jodit

Version:

Jodit is an awesome and useful wysiwyg editor with filebrowser

105 lines (104 loc) 3.4 kB
/*! * 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/dom.js"; import { css } from "../../../../core/helpers/utils/css.js"; import { SourceEditor } from "../sourceEditor.js"; export class TextAreaEditor extends SourceEditor { constructor() { super(...arguments); this.autosize = this.j.async.debounce(() => { this.instance.style.height = 'auto'; this.instance.style.height = this.instance.scrollHeight + 'px'; }, this.j.defaultTimeout); } init(editor) { this.instance = editor.c.element('textarea', { class: 'jodit-source__mirror', dir: editor.o.direction === 'rtl' ? 'rtl' : undefined }); this.container.appendChild(this.instance); editor.e .on(this.instance, 'mousedown keydown touchstart input', editor.async.debounce(this.toWYSIWYG, editor.defaultTimeout)) .on('setMinHeight.source', (minHeightD) => { css(this.instance, 'minHeight', minHeightD); }) .on(this.instance, 'change keydown mousedown touchstart input', this.autosize) .on('afterSetMode.source', this.autosize) .on(this.instance, 'mousedown focus', (e) => { editor.e.fire(e.type, e); }); this.autosize(); this.onReady(); } destruct() { Dom.safeRemove(this.instance); } getValue() { return this.instance.value; } setValue(raw) { this.instance.value = raw; } insertRaw(raw) { const value = this.getValue(); if (this.getSelectionStart() >= 0) { const startPos = this.getSelectionStart(), endPos = this.getSelectionEnd(); this.setValue(value.substring(0, startPos) + raw + value.substring(endPos, value.length)); } else { this.setValue(value + raw); } } getSelectionStart() { return this.instance.selectionStart; } getSelectionEnd() { return this.instance.selectionEnd; } setSelectionRange(start, end = start) { this.instance.setSelectionRange(start, end); } get isFocused() { return this.instance === this.j.od.activeElement; } focus() { this.instance.focus(); } blur() { this.instance.blur(); } setPlaceHolder(title) { this.instance.setAttribute('placeholder', title); } setReadOnly(isReadOnly) { if (isReadOnly) { this.instance.setAttribute('readonly', 'true'); } else { this.instance.removeAttribute('readonly'); } } selectAll() { this.instance.select(); } replaceUndoManager() { const { history } = this.jodit; this.j.e.on(this.instance, 'keydown', (e) => { if ((e.ctrlKey || e.metaKey) && e.key === 'z') { if (e.shiftKey) { history.redo(); } else { history.undo(); } this.setSelectionRange(this.getValue().length); return false; } }); } }