TinyMCE, показывать количество символов вместо количества слов

Название говорит само за себя. Как заставить TinyMCE показывать количество символов вместо количества слов?

5 ответов

Решение

Напишите свой собственный плагин.

Следующее решение основано на этой статье. charactercount Плагин подсчитывает фактические символы, которые видит пользователь, все HTML и скрытые символы игнорируются.

Плагин для подсчета символов:

tinymce.PluginManager.add('charactercount', function (editor) {
  var self = this;

  function update() {
    editor.theme.panel.find('#charactercount').text(['Characters: {0}', self.getCount()]);
  }

  editor.on('init', function () {
    var statusbar = editor.theme.panel && editor.theme.panel.find('#statusbar')[0];

    if (statusbar) {
      window.setTimeout(function () {
        statusbar.insert({
          type: 'label',
          name: 'charactercount',
          text: ['Characters: {0}', self.getCount()],
          classes: 'charactercount',
          disabled: editor.settings.readonly
        }, 0);

        editor.on('setcontent beforeaddundo', update);

        editor.on('keyup', function (e) {
            update();
        });
      }, 0);
    }
  });

  self.getCount = function () {
    var tx = editor.getContent({ format: 'raw' });
    var decoded = decodeHtml(tx);
    var decodedStripped = decoded.replace(/(<([^>]+)>)/ig, "").trim();
    var tc = decodedStripped.length;
    return tc;
  };

  function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
  }
});

CSS-твики:

/* Optional: Adjust the positioning of the character count text. */
label.mce-charactercount {
margin: 2px 0 2px 2px;
padding: 8px;
}

/* Optional: Remove the html path code from the status bar. */
.mce-path {
    display: none !important;
}

Инициализация TinyMCE (с использованием jQuery)

$('textarea.tinymce').tinymce({
  plugins: "charactercount",
  statusbar: true,
  init_instance_callback: function (editor) {
    $('.mce-tinymce').show('fast');
    $(editor.getContainer()).find(".mce-path").css("display", "none");
  }
  // ...
});

пс. Используйте JS Minifier.

Плагин wordcount теперь может считать и показывать символы:

Нажатие Word Count в строке состояния переключает подсчет слов и символов.

По умолчанию режим "слова", но довольно просто эмулировать щелчок в строке состояния, чтобы переключить его.

Измените конфигурацию вашего редактора следующим образом:

tinymce.init({
   plugins: "wordcount",

   // ... 

   init_instance_callback: function (editor) {
      $(editor.getContainer()).find('button.tox-statusbar__wordcount').click();  // if you use jQuery
   }
});

Вот и все. У вас есть количество символов сейчас.

    init_instance_callback: function (editor) {
editor.on('change', function (e) {
                var length = editor.contentDocument.body.innerText.length;
            });
}

На init добавьте это. длина - это длина вашего персонажа. Теперь вам нужно скрыть количество слов и прикрепить новую строку со счетчиком символов.

Я смог настроить плагин wordcount для отображения символов по умолчанию, создав собственную версию серебряной темы. Похоже, в TinyMCE 5.1.6 способ рендеринга плагинов задан в файле темы. Конфигурация TinyMCE:

{
    selector: '.tinymce',
    theme: 'silver-custom',
    ...
}

Файл темы является копией themes/silver/theme.js и должен загружаться после TinyMCE.

Изменения:

 ...
 function Theme () {
      global$1.add('silver-custom', function (editor) {
 ...

а также

...
var renderWordCount = function (editor, providersBackstage) {
    ...
    store: {
        mode: 'memory',
        initialValue: {
        mode: 'characters',
        ...
}
...

Я использую этот в производстве https://gist.github.com/imanilchaudhari/5a121ea6420eb4b8aa7ee70a5f7074e3 с 2017 года. Этот плагин хорош.

Сначала я думал , что счетчик charword поставляется со встроенными плагинами tinymce, но позже обнаружил, что это пользовательский плагин.

Он покажет количество символов в нижней строке состояния.

Другие вопросы по тегам