Приоритет/Серьезность:
Средний
Платформа:
Операционная система
- Windows 11
Браузер
- Google Chrome 139.0.7258.128
Discourse
028c90dd5e7a2799ea5b6e963f71fc0222681943
Описание:
Текст, скопированный из некоторых источников, может храниться в буфере обмена в отформатированном виде (тип text/html) в дополнение к обычному тексту (тип text/plain).
При вставке текста в редактор, если в буфере обмена присутствует форматированный тип данных, используется именно он, а не обычный текст.
По умолчанию пробелы в HTML-контенте сжимаются. Это поведение можно контролировать с помощью CSS-свойства white-space.
При вставке в редактор в режиме «редактор с форматированием» свойство white-space CSS для данных из буфера обмена не учитывается. В результате пробелы всегда сжимаются в вставленном содержимом. В случаях, когда исходный контент имел свойство white-space, установленное в значение pre, это приводит к тому, что вставленный текст становится трудно читаемым и некорректным в ситуациях, когда пробелы в исходном контенте имели техническое значение.
Шаги для воспроизведения:
- Создайте HTML-файл со следующим содержимым:
<html> <body> <span style="white-space: pre">foo bar </span> </body> </html> - Откройте файл в вашем веб-браузере.
Обратите внимание, что пробелы в содержимом страницы не сжимаются:foo bar - Скопируйте содержимое веб-страницы.
- Откройте редактор публикации.
- Переключите редактор в режим «редактор с форматированием».
- Вставьте скопированное содержимое.
Вместо сохранения того же формата, что и у скопированного содержимого, пробелы вставленного текста были сжаты:
foo bar
Дополнительная информация:
Я вижу, что ProseMirror поддерживает white-space: pre:
Ошибка не возникает при использовании редактора в режиме «редактор Markdown».
Ошибка не возникает, если содержимое вставляется в блок кода вместо обычного режима редактора. Действительно, во многих случаях наиболее уместно размещать контент, использующий что-то вроде white-space: pre, внутри блока кода. Однако довольно распространена ситуация, когда пользователи применяют форматирование постфактум: добавляют контент в редактор, выделяют его, а затем используют панель инструментов редактора для применения форматирования (в отличие от альтернативного подхода — создания блока кода до добавления контента).
Я обнаружил полезный инструмент для просмотра необработанных данных содержимого буфера обмена:
Мне удалось воспроизвести ошибку на try.discourse.org в режиме «безопасный режим».
