![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В вебфорумостроительстве есть типичная холиварная тема: Плоские темы vs Древовидные темы. У того и другого подходов есть свои плюсы и минусы, мы их здесь обсуждать не будем.
Почти все почтовые клиенты сходятся в том, что email относится к Древовидным. (Единственное известное мне исключение — Gmail, который считает, что к Плоским.)
Далее, почти все клиенты, умеющие группировать письма, отображают их в виде, натурально, леса. Где сообщения — вершины, а рёбра выражают тот факт, что одно сообщение является ответом на другое (в терминах заголовка In-Reply-To
).
Внимание, вопрос! Что не так на этой картинке?
Проблема в том, что в реальном мире никто не называет множество связанных сообщений «деревом». В английском языке это thread, в русском — цепочка. И то, и другое суть структуры линейные.
И действительно, среднее количество непосредственных ответов на письмо где-то в районе единицы.
Выглядит всё это типично вот так:
−⃞ Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов ├─−⃞ Re: Отображение цепочки ответов │ └─−⃞ Re: Отображение цепочки ответов │ └─−⃞ Re: Отображение цепочки ответов │ └─ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов └─ Re: Отображение цепочки ответов
Это ведёт к тому, что, когда у тебя в почтовом клиенте какая-нибудь достаточно оживлённая переписка, то к концу третьего дня уже либо горизонтальный скроллинг на две страницы, либо просто сабжекта не видно. (Не то чтобы в нём что-то полезное когда-нибудь было написано, но всё же!)
Как надо делать:
- Основной кейс: Сообщения, составляющие цепочку без разветвлений, должны отображаться вертикальным списком.
- Но только начиная со второго. Чтобы первое позволяло свернуть всю цепочку.
- Fallback: Если у сообщения более одного ответа, то тогда отображаем его родителем, ответы — дочерними строчками, и далее к ним применяется предыдущее правило.
Примерно вот так:
−⃞ Отображение цепочки ответов ├ Re: Отображение цепочки ответов ├ Re: Отображение цепочки ответов −⃞ Re: Отображение цепочки ответов ├─−⃞ Re: Отображение цепочки ответов │ ├ Re: Отображение цепочки ответов │ ├ Re: Отображение цепочки ответов │ └ Re: Отображение цепочки ответов └─−⃞ Re: Отображение цепочки ответов ├ Re: Отображение цепочки ответов ├ Re: Отображение цепочки ответов └ Re: Отображение цепочки ответов
Ну и далее нужно, если сабжект ответа более чем на 90% совпадает с сабжектом исходного письма, то вместо него показывать первую значащую строчку. (Это, правда, потребует уметь автоматически отличать и игнорировать приветствия.)