Клякса (blot) - это строительный блок документа для parchment. Их различные виды, и способы применения, и реализации можно посмотреть на моём онлайн редакторе quill.
Как можно будет увидеть ниже, этих строительных блоков достаточно много. И каждый из них существует, чтобы выполнять определённую роль в документе. О роли каждого blot-а я расскажу отдельно. А пока, вот все виды клякс в quilljs:
block
block/embed
break
container
cursor
embed
inline
scroll
text
Для того чтобы импортировать любой из этого списка blot, в новую переменную в JS, введи название blot-а после blots, например вот так:
Чтобы посмотреть полный список всех доступных blot-ов, введи в консоль браузера следующее:
Про предназначение каждого из блоков
Inline blot. Примеры использования данного блока это bold, italik, или что-нибудь подчёркнутое. Это самый простой блок, он просто оборачивает выделенный в заранее указанный тег с заранее указанными классами. И он может быть обёрнут вокруг другого inline блока.
Block blot. К примеру можно привести блок цитат, или блок кода, или заголовки. Важно понять как работает данный блок. Он не просто оборачивает в определённый тег выделенный блок, да именно блок, не текст, он его заменяет. То есть блоки block не могут быть внутри друг друга, как это есть с inline блоками.
Container blot. Они созданы для того, чтобы преодолеть не возможность предыдущих блоков встраиваться в другие. Хотя и не без своих нюансов. В других статьях, вы увидите, что нам придётся заранее указывать элементы которые могут быть друг-в-друге ;) Примером реализации таких блоков являются списки и таблицы.
Block/embed и embed. Работают так же как и обычные блоки, но с той лишь разницей, что контент который они встраивают не может быть отредактирован. Его можно перезагрузить или удалить, но не изменить. Это видео, формулы, изображения.
Scroll blot. Представляет собой главный контейнер для всех остальных. Что он из себя представляет? По умолчанию это DIV элемент с классом ql-editor. Который может содержать следующие типы blot-ов:
block
embed
container
Ещё одной важной особенностью данного blot-а является то, что конструктор первым параметром принимает специальный объект - регистр. Сейчас об регистрах quill рано говорить, но скажем так, каждый регистр это уникальный набор кнопок и форматеров для редактирования текста. То есть, на одной странице можно иметь несколько текстовых редакторов со своим уникальным функционалом.
Break blot. Это специальный нулевой-элемент. В Parchment библиотеке, каждый контейнер, у которого могут быть дети, должен иметь хотя бы одного. И под роль начального элемента создали этот blot.
Text blot. Представляет собой обычную обёртку вокруг текста
Cursor blot. Представляет собой вертикальную линию при редактировании. И знает, где и на каком блоке она находится.
Расширяем функционал blot-ов по умолчанию, их методы
В этой главе я собрал, все возможные методы для переопределения и набросал своих комментарий по поводу их работы. Сделал я это, ибо официальный сайт не обладает такой информацией, хотя его всё ещё можно найти через консоль браузера.
Как создать новый blot из старого или переопределить существующий
Для примера переопределения существующего blot-а я буду использовать block blot. Начнём с импорта.
Дальше, нужно определить новый функционал blot-а. В моём случае, я хочу чтобы вместо тега <p> использовался <div> и добавлялся класс по имени "txt". Вот так я это сделаю:
Это по части модификации blot-ов. Но как сделать новый? У любого quill-блока есть 3 переменные, которые используются для отличия одного блока от другого. Первый это tagName, второй blotName и третий className.
Для создания нового blot-а, нужно задать другое значение для blotName. Я продемонстрирую это на примере ссылок. Мы создадим 2 варианта ссылок:
Внутренние ссылки
Внешние ссылки
Ты наверное думаешь, что такое этот "форматер". Но по сути, я просто сделал кнопку для создания и удаления этого типа blot-а в редакторе.
В этой статье я разберу типы форматеров (formats) quilljs, и объясню некоторые нюансы работы с таблицами, шрифтами, изображениями и видео. Так же покажу как переопределить форматер(ql-formats) на примере ссылки
В этой статье я покажу как сделать собственный модуль для QuillJS. Этот модуль будет генерировать оглавление статьи. Так же покажу как включать и отключать модули.
Использованные термины
TailwindCSS фреймворк ⟶ Это CSS-фреймворк с открытым исходным кодом, созданный Адамом Уэтеном и поддерживаемый Tailwind Labs. Особенность этой библиотеки в том, что, она не предопределяет CSS-классы отдельных элементов. Вместо этого она предоставляет служебные классы, которые можно объединять для стилизации каждого элемента
Javascript ⟶ Это высокоуровневый, интерпретируемый язык программирования, который используется в основном для разработки веб-приложений. Он был создан в 1995 году и изначально предназначался для добавления интерактивности и динамики на веб-страницы.
CSS (Таблица каскадных стилей) ⟶ Это язык стилизации, который используется для описания внешнего вида и форматирования документов, написанных на HTML и XML (включая такие языки разметки, как SVG и XHTML). CSS позволяет веб-разработчикам и дизайнерам разделять содержание веб-страниц и их визуальное представление, что упрощает создание и поддержку сайтов.
JSON (JavaScript Object Notation) ⟶ Это лёгкий формат обмена данными, который легко читается и пишется человеком, а также легко парсится и генерируется программами. Он основан на подмножестве языков программирования JavaScript, но используется во множестве языков и технологий.
Релевантные вопросы
Почему бросил писать игры ?
Я бросил делать игры потому что это долго и нудно. И очень одиноко. И ещё, я не хотел пахать по 15 часов в день чтобы сделать какую-нибудь прибабаху для игры. Я жить ещё хочу :)
Текстовый редактор quill, что это
Это текстовый редактор, который работает по принципу WYSIWYG (What you see is what you get. Легковесный и легко расширяемый JS фреймворк. Отлично подходит для встраивания на сайты.
Как quill работает
Для того чтобы работать quill разбивает текст на, так называемые blot-ы (кляксы) и хранит их в специальном формате, называемом delta. Данный формат очень сильно напоминает JSON. Редактируют и модифицируют дельту, quill модули и форматеры, вне зависимости от того, как представленна разметка на сайте.