Андреем Семинь
Мы на Пропеллер столкнулись с множеством различий между Chance.js и популярными текстовыми редакторами. Мы также нашли некоторые проблемы, такие как управление глубиной списка и многоуровневые элементы в списках. Самая большая разница – это неспособность использовать ярлыки для запуска списка по умолчанию. Удивительно, что вам нужно самостоятельно реализовать эту логику.
Как всегда, есть плагин Доступно для добавления поддержки для ярлыков, которые вы используете. Я также хочу обратиться к Проект-JS-Autolist-Plugin как источник вдохновения. По какой-то причине этот плагин не работал, когда мы пробовали это. Поэтому мы придумали наше собственное решение, которое теперь представлено в этом посте.
Эта проблема
Откройте Google Docs, Word365, или любой, который вы используете. Попробуйте ввести * а затем введите пространство Отказ Груз! Вы начали неупорядоченный список. Хорошая особенность, чтобы иметь, верно?
Если мы попробуем точно такой же трюк с конфигурацией deft.js по умолчанию, мы получим ничего, кроме простого текста.
Давайте изменим это!
Решение
Для реализации этой функции нам необходимо отслеживать последние три нажатых кнопки. Почему три? Ну, это потому, что самая длинная комбинация персонажей, нам нужна для поддержки, это 1 + пространство что ровно три прессы.
Для начала давайте реализуем логику для хранения этих прессов. Здесь мы бы использовали простой массив с именем История Отказ Этот массив будет хранить значение ключа, которая была нажата. Мы определенно не хотим обрабатывать какие-либо ключевые прессы с модификаторами, такими как Сдвиг , Alt и так далее. Мы можем использовать встроенный встроенный Keybindingutil.hascommandmodifier Функция для выполнения проверки для любого модификатора.
DoveS.js раскрывает КДУЩЬЮ Событие для нас в KeybindingFN функция опоры. Мы собираемся проверить, нужно ли начать список здесь. Если это так, нам нужно вернуть так называемый RapacyEditorCommand , что является строкой. Также, чтобы извлечь выгоду из команд уровня ОС нам нужно добавить getdefaultkeybinding Функция вызова как осенний случай.
Нам нужно проверить, является ли нажатой нажатой клавишу пространство Отказ Если так, мы бы провели наши чеки против История множество. Мы проверяем, есть ли у нас подходящий набор ранее нажатых клавиш – * Для неупорядоченного списка и 1 для упорядоченного. Если мы найдем совпадение, мы возвращаем команду (строку), которая будет обработана позже.
Теперь нам нужно реализовать HandlekeCommand Функция опор и передать его в редактор. Логика довольно проста. Если мы получим одну из наших пользовательских команд, мы проверяем, следует ли начать список на текущем блоке. Так вот скелет HandlekeCommand функция.
Чтобы проверить, хорошо ли мы запускаем список, мы проверяем, если выбранный в данный момент блок удовлетворяет все три из следующих правил:
- Тип блока –
неуверенные - Блок имеет
Глубина0. - Блок имеет
*или1как текст
Давайте завернемся с кодом:
Теперь мы можем поймать точный случай, когда Drawn.js должен начать список! Теперь пришло время реализовать Stortlist функция.
Прежде всего, нам нужно сопоставить наши пользовательские команды в определенный стиль списка. Это означает, что нам нужно начать неупорядоченный список для Начальный неупорядный список команда.
Начнем заказанный список для заказанный список команда. Далее нам нужно обновить стиль блока к выбранному типу. Для этого мы бы использовали Toggleblocktype Функция Richotils Модуль, который приходит как часть проекта.
Далее нам нужно заменить ярлык текста, который мы введены с пустой строкой. Чтобы сделать это, нам нужно позвонить в replacelext Метод Модификатор модуль. Этот метод требует диапазона выбора, чтобы определить, что нужно заменить. Нам нужно получить выбор из блока и обновить его, чтобы иметь FocumentOffset значение равно длине блока. Эта комбинация означает, что мы хотим заменить весь текст, который мы вошли.
Большой! Теперь нам нужно обновить наш локальный редактор штата с новым состоянием, который мы получаем от Stortlist функция. Итак, давайте принесем все это вместе!
OK! Мы почти закончили! Но есть еще один момент, который нам нужно справиться. В некоторых случаях, когда один из наших пользовательских команд пожара, мы не должны запускать список на основе вывода наплевать в должности функция. Нам нужно обрабатывать вставку пространства вручную.
Для реализации деталей GetSelecedBlock Метод, проверить мой предыдущий пост На этом черновике.
Для этого мы можем захотеть использовать метод, называемый InsertText из Модификатор модуль. Очевидно, что он используется для создания нового состояния контента с предоставленным текстом, вставленным в него. Как всегда, нам необходимо предоставить текущее состояние контента, текущее состояние выбора и текст, который мы хотим вставить (одно место в нашем случае).
Нам нужно добавить призыв к этой функции для нашего HandlekeCommand функция. Так вот окончательная версия этого:
Если вы прочитали этот пост до всех, вы также можете проверить мой предыдущий пост О проекте.js чары. Вы можете также применить его к вашему проекту.
Оригинал: “https://www.freecodecamp.org/news/how-to-create-ordered-and-unordered-lists-in-draft-js-with-a-shortcut-5de34a1a570f/”