jodit
Version:
Jodit is an awesome and useful wysiwyg editor with filebrowser
73 lines (72 loc) • 2.78 kB
JavaScript
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
*/
import { INVISIBLE_SPACE_REG_EXP, SPACE_REG_EXP } from "../../core/constants.js";
import { Dom } from "../../core/dom/dom.js";
import { pluginSystem } from "../../core/global.js";
import { Plugin } from "../../core/plugin/plugin.js";
import "./config.js";
/**
* Show stat data - words and chars count
*/
export class stat extends Plugin {
constructor() {
super(...arguments);
this.charCounter = null;
this.wordCounter = null;
this.reInit = () => {
if (this.j.o.showCharsCounter && this.charCounter) {
this.j.statusbar.append(this.charCounter, true);
}
if (this.j.o.showWordsCounter && this.wordCounter) {
this.j.statusbar.append(this.wordCounter, true);
}
this.j.e.off('change keyup', this.calc).on('change keyup', this.calc);
this.calc();
};
this.calc = this.j.async.throttle(() => {
const text = this.j.text;
if (this.j.o.showCharsCounter && this.charCounter) {
let chars;
if (this.j.o.countHTMLChars) {
chars = this.j.value;
}
else {
if (this.j.o.countTextSpaces) {
chars = text
.replace(INVISIBLE_SPACE_REG_EXP(), '')
.replace(/[\r\n]/g, '');
}
else {
chars = text.replace(SPACE_REG_EXP(), '');
}
}
this.charCounter.textContent = this.j.i18n('Chars: %d', chars.length);
}
if (this.j.o.showWordsCounter && this.wordCounter) {
this.wordCounter.textContent = this.j.i18n('Words: %d', text
.replace(INVISIBLE_SPACE_REG_EXP(), '')
.split(SPACE_REG_EXP())
.filter((e) => e.length).length);
}
}, this.j.defaultTimeout);
}
/** @override */
afterInit() {
this.charCounter = this.j.c.span();
this.wordCounter = this.j.c.span();
this.j.e.on('afterInit changePlace afterAddPlace', this.reInit);
this.reInit();
}
/** @override */
beforeDestruct() {
Dom.safeRemove(this.charCounter);
Dom.safeRemove(this.wordCounter);
this.j.e.off('afterInit changePlace afterAddPlace', this.reInit);
this.charCounter = null;
this.wordCounter = null;
}
}
pluginSystem.add('stat', stat);