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

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

Содержание



    Как сделать кастомные/custom quill toolbar кнопки, quilljs

    Часы
    25.10.2024
    /
    Часы
    02.10.2025
    /
    Часы
    2 минуты
    Глазик
    409
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0

    Добавляем кастомную кнопку

    Добавить кнопку в toolbar очень просто. Quill имеет специальный словарь, где хранит иконки для своего интерфейса. Чтобы получить доступ к этому словарю импортируй:
    var icons = Quill.import("ui/icons");
    Теперь можно получить и сохранить любую SVG иконку. Чтобы добавить свою иконку, нужно сохранить её содержание. Для чтения содержания любого файла, я создал соответствующую функцию readFile:
    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 } icons["attention"] = readFile(`${PATH}PostEditor/img/blockAttention.svg`)
    После чего можно её использовать. Но как, спросишь ты? Quill использует специальные наименования. Чтобы иконка была применена, необходимо добавить соответствующий класс-селектор. Конкретно в моём примере это будет выглядеть вот так:
    <button class="ql-attention"></button>
    Чтобы от кнопки был хоть минимальный толк, можно привязать к ней специальный обработчик. Этот обработчик имеет точно такое же имя, как и имя кнопки. Вот так данный обработчик добавляется:
    const quill = new Quill('#editor', { modules: { toolbar: { container: '#toolbar-container', handlers: { //... другие обработчики 'attention': (value) => { // value в данном случае значит либо кнопка нажата - true, или нет - false if (value){ // некоторая логика }else{ // некоторая логика } } } } }, theme: 'snow', });

    Добавляем кастомный выпадающий список

    С выпадающим списком чуть по сложнее и я сейчас объясню почему. Всё дело в том, что quill активно налегает на CSS селекторы и без должной настройки стилей вы никуда не продвинетесь. Плюс я считаю, что тебе может потребоваться пару моих трюков, чтобы заставить работать селекторы правильно.
    Это важно. Я не импортирую стили quill-а, ибо на моём сайте они выглядят странно. Да и принципы WYSIWYG редактора нарушается. Если вкратце, то что видишь, то и будет отображаться на итоговой странице. В моём случае, когда я писал в редакторе, то итоговая статья выглядит по другому. И чтобы этот эффект убрать, я полностью избавился от стилей со стороны QuillJS
    HTML код будет выглядеть вот так:
    <span class="ql-formats"> <select class="ql-type"> <option id="type-1" value="type-1" selected>Type One</option> <option id="type-2" value="type-2">Type Two</option> <option id="type-3" value="type-3">Type Three</option> </select> </span>
    Дальше нужно добавить несколько стилей. Тебе возможно и не придётся их добавлять, ибо возможно такова особенность МОЕГО сайта, но если ничего не отображается, добавь этих стилей:
    select.ql-type { background-color: #000; border: 2px solid white; padding: 5px; color: var(--ui_text_color); } select.ql-type > option{ background-color: #fff; } .ql-type{ /* По умолчанию quill добавляет display: none */ display: block !important; max-width: 150px; }
    Теперь всё работает, только не совсем. Ты можешь заметить как выбранный по умолчанию элемент не меняется. Возможно, где-то в глубине исходного кода quill это и можно как-то исправить и настроить, но я такой возможности не нашёл. Поэтому ловите обработчик, как и в первом случае, при создании одной кнопки:
    const quill = new Quill('#editor', { modules: { toolbar: { container: '#toolbar-container', handlers: { // Другие обработчики 'type': (value)=>{ // Сначала убираем selected аттрибут со всех кнопок document.querySelector(`#${value}`).parentElement.querySelectorAll('option').forEach( (option) => { option.removeAttribute('selected') }) // Потом добавляем к выбранному selected document.querySelector(`#${value}`).setAttribute('selected', true) } } } }, theme: 'snow', });
    Айдишник не обязательно проставлять, но таким вот, не хитрым образом можно докрутить работу выпадающего списка в quill. Значение value в данном случае - это значение аттрибута тега <option>.
    А у меня всё, надеюсь статья была полезна и нужна тебе. Все примеры кастомных кнопок ты сможешь найти на моём онлайн веб quill редакторе. Ну а теперь точно пока (^∀^●)ノシ

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

    Комментарии

    (0)

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

    Другое

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


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

    Часы
    24.10.2024
    /
    Часы
    02.10.2025
    Глазик
    707
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье я разберу типы форматеров (formats) quilljs, и объясню некоторые нюансы работы с таблицами, шрифтами, изображениями и видео. Так же покажу как переопределить форматер(ql-formats) на примере ссылки

    Как сделать собственный quill link tooltip(тултип для ссылок)

    Часы
    25.10.2024
    /
    Часы
    02.10.2025
    Глазик
    454
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье ты найдёшь пример того как реализовать свой quill tooltip/тултип для вставки ссылок и поймёшь как это вообще работает

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

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

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


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