Форматированный текст описаний
Описания задач и проектов — форматированный текст: заголовки, жирный, курсив, подчёркнутый, зачёркнутый, цвет текста, маркированные и нумерованные списки, ссылки. Хранится как безопасное подмножество HTML, которое пишет редактор интерфейса.
Сервер
Пакет internal/richtext:
Sanitize— оставляет только разрешённые теги (p,br,strong,em,u,s,h2–h4,ul,ol,li,blockquote,a,span,code,pre,mark,hr; синонимыb,i,strike,h1приводятся к ним) и атрибуты: у ссылки —hrefтолькоhttp(s),mailto:и пути приложения (ставитсяtarget="_blank" rel="noopener noreferrer"), вstyle— толькоcolorс безопасным значением (#hex,rgb()). Скрипты, стили, фреймы, обработчики событий и всё остальное выбрасываются. Текст без тегов (прежние описания) не меняется.ToText— читаемый текст: абзацы и заголовки с новой строки, пункты «- » / «1. ». Его получают помощник (get_task,get_project), длина описания считается по нему.
Где применяется: создание и правка задачи (tasks.normalizeDescription, не больше 10 000 символов текста), проекта (projects.normalizeProjectDescription, 5 000 символов), задачи шаблонов, план из шаблона, задачи автодействий. Потолок вместе с разметкой — 60 000 байт.
Помощник
«Сформулировать задачу» пишет описание в Markdown (жирный, списки), интерфейс переводит его в форматированный текст перед вставкой в редактор.