3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер

3 горизонтальные линии, бургер
Удалить все
ЗАГРУЗКА ...

Содержание



    Quill formats (ql-formats), как их переопределить и какие виды существуют

    Часы
    24.10.2024
    /
    Часы
    02.10.2025
    /
    Часы
    3 минуты
    Глазик
    848
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Теги:
    JS
    Quilljs

    Quill formats, что это такое и их виды

    Форматеры в quill, это набор правил, которые говорят, то как форматировать тот или иной blot, какие тултипы и стили применять. Quilljs, предоставляет широкий спектр в выборе типов форматирования текста (дальше я буду их называть форматеры). Виды форматеров в quill:
    1. formats/align
    2. formats/background
    3. formats/blockquote
    4. formats/bold
    5. formats/italic
    6. formats/strike​
    7. formats/underline
    8. formats/code
    9. formats/code-block
    10. formats/code-block-container
    11. formats/code-token
    12. formats/color
    13. formats/direction
    14. formats/font
    15. formats/formula
    16. formats/header
    17. formats/image
    18. formats/indent
    19. formats/link
    20. formats/list
    21. formats/list-container
    22. formats/script
    23. formats/size
    24. formats/table
    25. formats/table-body
    26. formats/table-container
    27. formats/table-row
    28. formats/video
    Для тех, кого интересует откуда я взял этот список, то на странице моего html-редактора откройте консоль браузера и введите Quill.imports. Вы увидите весь список того, что можно импортировать и соответственно переделать под свои нужды.
    Некоторые из них являются лишь составной частью и не могут использоваться в отрыве от других. Такими форматерами являются:
    1. formats/list-container
    2. formats/table-body
    3. formats/table-container
    4. formats/table-row
    5. formats/code-block
    6. formats/code-block-container
    7. formats/code-token
    Для некоторых разработан специльный модуль tooltip, при помощи которого некоторые форматеры вообще имеют смысл. Этот тултип работает и настроен для:
    1. formats/link
    2. formats/video
    3. formats/image
    4. formats/formula
    Можно сразу забежать в перёд и сказать что для любого кастомного редактора этот тултип будет бесполезен из-за того, что он намертво прикреплён к тем 4 форматерам. И нам придётся создавать его с нуля. Чем мы в этой статье и займёмся.

    Несколько слов о форматерах

    Про шрифт и его размер. Или то как переопределять форматеры с несколькими вариантами выбора

    Чтобы переписать и настроить свои шрифты потребуется поработать не только с html, но и с css стилями. Так, для начала нужно записать в белый список, все необходимые нам шрифты и размеры. Ну и конечно зарегистрировать изменения:
    let Font = Quill.import('formats/font') Font.whitelist = ['open-sans', 'roboto-slab', 'advent-pro'] Quill.register(Font, true) // Ага, размер шрифта, это аттрибутор. let Size = Quill.import('attributors/style/size') Size.whitelist = ['16px', '14px'] Quill.register(Size, true)
    После чего добавить/изменить форматеры на html страничке:
    <span class="ql-formats"> <select class="ql-font"> <option value="open-sans" selected>Open Sans</option> <option value="advent-pro">Advent Pro</option> <option value="roboto-slab">Roboto Slab</option> </select> <select class="ql-size"> <option value="16px" selected>16px</option> <option value="14px">14px</option> </select> </span>
    Теперь, необходимо добавить следующие стили:
    /* Font stuff */ #toolbar-container .ql-font span[data-label="Open Sans"]::before { font-family: var(--family-main_font); } #toolbar-container .ql-font span[data-label="Advent Pro"]::before { font-family: var(--family-acent_font); } #toolbar-container .ql-font span[data-label="Roboto Slab"]::before { font-family: var(--family-title_font); } .ql-font-open-sans { font-family: var(--family-main_font); } .ql-font-advent-pro { font-family: var(--family-acent_font); } .ql-font-roboto-slab { font-family: var(--family-title_font); } /*Size stuff */ #toolbar-container .ql-size span[data-value="16px"]::before { font-size: var(--size-main_font); } #toolbar-container .ql-size span[data-value="14px"]::before { font-size: var(--size-mini_font); } .ql-size-16px { font-size: var(--size-main_font) !important; } .ql-size-14px { font-size: var(--size-mini_font) !important; }
    После чего у вас будет работающий селектор шрифтов и размеров.

    Про таблицы, formats/table

    По умолчанию, quill не предоставляет никакого интерфейса или тултипа для создания таблиц. Вернее, можно только создать 1х1 табличку, что не очень то полезно. Тебе придётся самому добавлять возможность удаления и вставки рядов и столбцов.
    Чтобы получить возможность использовать таблицы, для начала нужно подключить соответствующий модуль.
    const quill = new Quill('#editor', { modules: { syntax: true, clipboard: true, table: true, // Подключаем модуль таблицы toolbar: { container: '#toolbar-container', } }, theme: 'snow', });
    Дальше нужно будет создать либо тултип, либо любой другой интерфейс для взаимодействия с модулем. Тут можно будет посмотреть на то, как я сделал тултип для таблиц.

    Про видео, formats/video

    По умолчанию, данный форматер поддерживает вставку видео через ссылку на соответствующий ресурс. Что на самом деле имеет некоторое преимущество перед вставкой непосредственного видеофайла.

    Про изображения, formats/image

    А вот изображения quill встраивает в саму страницу. С одной стороны это круто, можно сразу посмотреть как данное изображение будет выглядеть на сайте, а с другой это сильно увеличивает вес страницы, что сказывается на скорости, что в свою очередь сказывается на SEO показателях. Мне такой вариант, не подходит. Вот тут можно посмотреть как я переписал форматер для изображений под себя.

    Как сделать и(или) переопределить существующий форматер, на примере ссылки

    Это на самом деле очень просто. Нужно лишь следовать определённым правилам. Первое и основное правило, имя статической переменной blotName, того класса от которого вы наследуетесь, будет использоваться в качестве селектора при его нажатии. Сейчас объясню на примере такого форматера как ссылка.
    let Link = Quill.import('formats/link') class InternalLink extends Link { constructor(scroll, domNode){ super(scroll, domNode); domNode.addEventListener('click', (ev) => { domNode.setAttribute('ref', 'me') domNode.classList.add('internal_link') }) } } InternalLink.blotName = 'internal-link' Quill.register({'formats/internal-link': InternalLink})
    В данном кусочке кода, я определил новый форматер для внутренних ссылок. У него просто появится дополнительный класс, для стилизации например. Дальше я изменил blotName и обратите внимание на то, как я зарегистрировал форматер. По факту, это новый форматер не зависящий от старого.
    Что дальше? А дальше переходим на html-страницу и добавляем в твой toolbar соответствующий код:
    <span class="ql-formats"> <button class="ql-internal-link"></button> </span>
    Чтобы quill понял какой форматер использовать, нужно обозвать его соответствующим классом. Так же, потребуется иконка для кнопки, её можно добавить вот так:
    var icons = Quill.import("ui/icons"); icons["internal-link"] = readFile(`${PATH}PostEditor/img/paragraph.svg`)
    Это важно, quill использует svg файлы и в этот словарь иконок нужно отправлять не путь к файлу, а его содержимое.
    Я написал соответствующую функцию для чтения содержимого любых файлов. Чуть ниже я оставлю пример реализации.
    function readFile(file) { var rawFile = new XMLHttpRequest(); var result = "" rawFile.open("GET", file, false); rawFile.onreadystatechange = function () { if(rawFile.readyState === 4) { if(rawFile.status === 200 || rawFile.status == 0) { result = rawFile.responseText; } } } rawFile.send(null); return result }

    Не забудь поделиться, лайкнуть и оставить комментарий)

    Комментарии

    (0)

    captcha
    Отправить
    ЗАГРУЗКА ...
    Сейчас тут пусто. Буть первым (o゚v゚)ノ

    Другое

    Похожие статьи


    Всё о quill blots (кляксах)

    Часы
    24.10.2024
    /
    Часы
    02.10.2025
    Глазик
    491
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье я расскажу о том, какие виды blot-ов бывают, чем каждый из них отличается, как используется ( в том числе и примеры реализации данных quill blot-ов). А так …

    Как сделать/добавить кастомную(custom) ql-toolbar кнопку для quill редактора

    Часы
    25.10.2024
    /
    Часы
    02.10.2025
    Глазик
    498
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье я покажу как создавать кастомные кнопки для твоего quill редактора, custom toolbar buttons. Так же узнаешь как добавить выпадающий список для всё того же quill редактора.

    Как сделать custom quill модуль оглавления статьи

    Часы
    29.10.2024
    /
    Часы
    02.10.2025
    Глазик
    406
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье я покажу как сделать собственный модуль для QuillJS. Этот модуль будет генерировать оглавление статьи. Так же покажу как включать и отключать модули.

    Использованные термины


    Релевантные вопросы