Проблема с рендерингом Markdown при изображении, окруженном HTML

Да, я думаю, что это, вероятно, лучший вариант. Я начал работу над этим ещё в июне 2020 года, но в итоге это потребовало слишком много усилий, и мне пришлось переключиться на другие проекты. У меня было несколько подходов к разрешению URL-адресов вида upload:// в тегах <img… ни один из них не идеален. Из моих заметок:


Вариант 1 реализации:

В конвейере markdown разбирать содержимое каждого html_block (немного злоупотребляя библиотекой xss.js) и обрабатывать любые теги изображений с атрибутами src вида upload://.

Плюсы: всё в конвейере markdown, такая обработка выполняется только для токенов html_block

Минусы: довольно некорректное использование санитайзера xss.js. Это может быть не идеальный парсер HTML5

Этот вариант можно улучшить, используя на сервере стандартную реализацию DOM на JavaScript (например, jsdom), но это кажется довольно громоздким решением.

Вариант 2 реализации:

Разрешить атрибуты src вида upload:// на всём протяжении конвейера markdown, а затем заменить их позже. На клиенте это на самом деле довольно просто — мы уже асинхронно заменяли URL-адреса upload:// после обработки. На сервере это требует дополнительного шага обработки с использованием Nokogiri.

Плюсы: парсер соответствует стандартам HTML5

Минусы: различная реализация на клиенте и сервере, немного усложняет конвейер


Я думаю, что вариант 2, вероятно, стоит выбрать. Тогда нам нужно будет обновить задачу pull_hotlinked_images, чтобы она сохраняла теги <img, не заменяя их на Markdown. Надеюсь, скоро у меня найдётся время вернуться к этому :crossed_fingers:

4 лайка