Quill — это редактор форматированного текста, который предоставляет дельты изменений. Таким образом, вы можете построить довольно сложную систему ревизий документов в браузере.
Давайте сначала рассмотрим, как вы используете Quill.
Quill в JavaScript
Возможно множество настроек панели инструментов.
Как получить контент
Обычный текст
перо.getText()
HTML
quill.root.innerHTML
Дельта
Внося изменение как Quill Delta,
quill.getContents()
События
Можно прослушивать события, и обычно вам нужен HTML,
Изменить текст
Изменение выбора
Смена редактора
Сравнение редакций документов
Если вы сохранили содержимое различных редакций документа как дельту,
quill.getContents()
Затем вы можете сравнить версии, используя:
var diff = oldContent.diff(newContent);
Тем самым снова получив дельту.
Чтобы раскрасить разницу, используйте:
Скомпонуйте старый контент с цветовой разницей
var Adjusted = oldContent.compose(diff);
И отобразите отслеживаемые изменения в редакторе,
quill_diff.setContents(скорректировано);
Этот код адаптирован из Codepen Joe Pietruch.
Государственная библиотека супергосударства
superstate — это маленькая эффективная библиотека состояний, которая различает состояние и черновик.
Сначала вы определяете начальное состояние,
const text = superstate('
‹p›Hello World!‹/p›
‹p›Некоторый начальный ‹сильный›жирный‹/сильный› текст ‹/p›‹p›‹br›‹/ р›
')
Затем вы создаете черновик с помощью эскиза.
text.sketch('
‹p›Hello World!‹/p›
‹p›Некоторый начальный ‹strong›жирный‹/strong› текст ‹/p›
‹p›И ‹em›курсив‹/em›сцена‹/p›‹p›‹br›‹/p›
')
И вы публикуете его в штате с помощью publish
текст.опубликовать()
Используя суперсостояние вместе с приведенным выше кодом для сравнения версий документа, мы можем пересматривать документ, отслеживать изменения, а затем сохранять новую версию в состояние.
Постоянство
Когда вы работаете в браузере, вы должны автоматически сохранять свою работу, если она занимает больше нескольких минут.
Вы можете сделать это с суперсостоянием, используя адаптер localStorage,
import { superstate } from '@superstate/core'
import { ls } from '@superstate/adapters'
const text = superstate(').use([< br /> ls('doc'), // 'doc' — это ключ localStorage
])
И теперь каждое изменение состояния сохраняется в локальном хранилище. Это не относится к черновикам, если только вы не создадите состояние с помощью:
const count = superstate(0).use([ls(‘count’, { draft: true })])
Чего не хватает для полной системы версий?
Мы должны добавить компонент для принятия/отклонения выделенного изменения в редакторе.
Этот дизайн станет частью всей системы управления документами с рабочими процессами написания и редактирования.