Quill — добавьте URL-адрес изображения вместо его загрузки

Я не профессионал в JS и использую редактор Quill Rich Text Editor для одного из наших проектов. Он работает хорошо, но когда я использую метод getContents() для получения его содержимого (с форматом Delta), он показывает изображения, как показано ниже:

{
  "insert": {
    "image": "data:image/png;base64,iVBORw0KGgoAA...=="
  }
}, ...

Я хочу дать редактору URL-адрес для изображений, когда я их добавляю, вместо того, чтобы загружать их. Я имею в виду, я хочу, чтобы при добавлении изображений отображалось поле ввода URL, а не открывалось диалоговое окно файла для выбора изображения. Например, что я делаю, когда добавляю видео:

введите здесь описание изображения

Как этого добиться? Должен ли я редактировать quill.js коды?


person H. Farid    schedule 05.01.2020    source источник


Ответы (3)


Ага. Я тоже не понимаю, как это не может быть проще. К сожалению, Quill все еще находится в версии 1.x. Может быть нормальным столкнуться с такими ситуациями. Но не беспокойтесь. Что касается вашего вопроса, я думаю, что это может вам помочь:

https://github.com/loagit/Quill-Examples-and-FAQ#quill-project-004---customizable-tooltip

Чтобы глубже вникнуть в тему, я предлагаю вам посмотреть весь этот репозиторий. Я надеюсь, что это поможет вам. Там много информации.

person Loa    schedule 12.01.2020
comment
Спасибо, но я искал код. Но нет проблем, теперь я использую шорткоды (например, WP) вот так: [img src=...] и я изменю это в своем PHP-скрипте. Если вы знаете какие-либо другие БЕСПЛАТНЫЕ текстовые редакторы для HTML и JS (лучше, чем Quill), поделитесь ими. Спасибо - person H. Farid; 12.01.2020
comment
@ H.Farid Есть много других хороших текстовых редакторов, но они следуют другому предложению. Quill следует идее использования Delta, представления данных в простом и удобочитаемом формате JSON, понятном для любого приложения. Другие издатели часто используют только HTML в качестве данных. Тем не менее, некоторые предоставляют инструменты перевода, чтобы получить его в других форматах. Я предлагаю вам поискать CKEditor и TinyMCE. Они также считаются отличными текстовыми редакторами с множеством функций и возможностей. Ах, я должен помнить, что ссылка, которую я дал вам, содержит код, показывающий, как делать то, что вы хотите. Просто откройте проект, чтобы увидеть. - person Loa; 12.01.2020
comment
Попробуйте прозу и сланец - person Vikram Sharma; 15.10.2020
comment
См. github.com/quilljs/quill/issues/2044. - person Shaya Ulman; 02.02.2021

Несмотря на то, что я опаздываю, я публикую ответ, так как это может помочь кому-то посетить здесь.

Вы можете определить собственный обработчик для параметра image. Что-то вроде этого подойдет.

//add the toolbar options
var myToolbar= [
    ['bold', 'italic', 'underline', 'strike'],       
    ['blockquote', 'code-block'],

    [{ 'color': [] }, { 'background': [] }],         
    [{ 'font': [] }],
    [{ 'align': [] }],

    ['clean'],                                        
    ['image'] //add image here
];


var quill = new Quill('#quill-container', {
    theme: 'snow',
    modules: {
        toolbar: {
            container: myToolbar,
            handlers: {
                image: imageHandler
            }
        }
    },
});


function imageHandler() {
    var range = this.quill.getSelection();
    var value = prompt('please copy paste the image url here.');
    if(value){
        this.quill.insertEmbed(range.index, 'image', value, Quill.sources.USER);
    }
}
person aimme    schedule 03.08.2020

Для тех, кто хочет взять URL-адрес из всплывающей подсказки пера, а не из подсказки.

Пользовательский обработчик изображений URL для React на основе этого комментария для biz-quill

function imageHandler() {
  const tooltip = this.quill.theme.tooltip;
  const originalSave = tooltip.save;
  const originalHide = tooltip.hide;

  tooltip.save = function () {
    const range = this.quill.getSelection(true);
    const value = this.textbox.value;
    if (value) {
      this.quill.insertEmbed(range.index, 'image', value, 'user');
    }
  };
  // Called on hide and save.
  tooltip.hide = function () {
    tooltip.save = originalSave;
    tooltip.hide = originalHide;
    tooltip.hide();
  };
  tooltip.edit('image');
  tooltip.textbox.placeholder = 'Embed URL';
}

И в ваших модулях Quill добавьте следующее:

export const modules = {
  toolbar: {
    container: '#toolbar',
    handlers: {
      undo: undoChange,
      redo: redoChange,
      imageHandler: imageHandler, //Add it here
    },
  },
  history: {
    delay: 500,
    maxStack: 100,
    userOnly: true,
  },
};

Вы можете создать собственный значок кнопки из svg следующим образом:

const CustomImageFromLink = () => (
  <svg class="svg-icon" viewBox="0 0 20 20">
    <path d="M18.555,15.354V4.592c0-0.248-0.202-0.451-0.45-0.451H1.888c-0.248,0-0.451,0.203-0.451,0.451v10.808c0,0.559,0.751,0.451,0.451,0.451h16.217h0.005C18.793,15.851,18.478,14.814,18.555,15.354 M2.8,14.949l4.944-6.464l4.144,5.419c0.003,0.003,0.003,0.003,0.003,0.005l0.797,1.04H2.8z M13.822,14.949l-1.006-1.317l1.689-2.218l2.688,3.535H13.822z M17.654,14.064l-2.791-3.666c-0.181-0.237-0.535-0.237-0.716,0l-1.899,2.493l-4.146-5.42c-0.18-0.237-0.536-0.237-0.716,0l-5.047,6.598V5.042h15.316V14.064z M12.474,6.393c-0.869,0-1.577,0.707-1.577,1.576s0.708,1.576,1.577,1.576s1.577-0.707,1.577-1.576S13.343,6.393,12.474,6.393 M12.474,8.645c-0.371,0-0.676-0.304-0.676-0.676s0.305-0.676,0.676-0.676c0.372,0,0.676,0.304,0.676,0.676S12.846,8.645,12.474,8.645"></path>
  </svg>
);

А затем просто добавьте его на панель инструментов, например:

  <button className="ql-imageHandler"> //class is ql-yourHandlerName
    <CustomImageFromLink /> //Your Icon Component
  </button>
person noobmaster69    schedule 16.03.2021
comment
Есть ли способ изменить текст URL-адреса посещения в левой подсказке? - person Picoral; 02.04.2021
comment
Есть много параметров, которые я видел, например, переопределение класса всплывающей подсказки или изменение жесткого закодированное значение. К сожалению, quill не дает вам такой возможности, но я нашел быстрый способ сделать это, если вы посмотрите на его класс, вы увидите (для изображения): .ql-snow .ql-tooltip::before { content: "Visit URL:"; line-height: 26px; margin-right: 8px; }. Так что просто добавьте .ql-snow .ql-tooltip::before { content: "New Label:" } в файл css, который вы импортируете на панели инструментов. - person noobmaster69; 02.04.2021