Каков наилучший способ изменить текст в событии изменения текста в Quill? - PullRequest
0 голосов
/ 02 апреля 2019

Мы пытаемся встроить отслеживание изменений в Quill, что включает проверку пользовательского ввода, а затем изменение документа.Например, если пользователь удаляет некоторый текст, мы отменяем удаление, а затем применяем атрибут track-deletion.Вот упрощенный пример того, что мы делаем:

quill.on('text-change', (delta, oldContents, source) => {
  if (source !== 'user') return;

  const trackChangesDelta = delta.invert(oldContents);

  trackChangesDelta.ops.forEach((op) => {
    if (op.insert) op.attributes['track-deletion'] = true;
    // Also handle tracked insertions, etc...
  });

  quill.updateContents(trackChangesDelta);
});

Этот подход в основном работает, но встречается в некоторых несколько странных случаях:

  • Если у меня есть текст foo, и я выделяю текст, а затем набираю букву o, я ожидаю, что будет удалено все слово, а затем вставка o.Вместо этого пергамент, по-видимому, «оптимизирует» операционную систему и вместо этого делает пару удалений по обе стороны от середины o

  • Если я выделю и заменю текст в начале абзаца, затем вставленная буква идет в конец удаления, но мой курсор остается в неправильном месте

Я думаю обе эти проблемы являются признаками фактачто мы выполняем text-change в пределах text-change, и мне было интересно, есть ли лучший (более синхронный?) способ подключения к жизненному циклу документа Quill.

Например,Вторая проблема, которую мы имеем, решается с помощью setTimeout, чтобы позволить документу Quill завершить обработку text-change до того, как мы применяем наши изменения дорожки, но это приводит к некоторому другому нервному поведению.

В идеале, я 'Я хотел бы поймать text-change еще до того, как он был применен к документу, но, насколько я могу судить, ни Перо, ни Пергамент не предлагают подходящего крючка?

...