-while ($row = $query->fetch()) {
- $rowuser = new User("profile/{$row->author}");
- print '<li>';
- printf('<strong>%s</strong> <small class="date">%s</small>',
- $rowuser->html, showdate(preg_split('/\D/', $row->created))
- );
- printf("\n\t".'<a href="/%s">%s</a>', $row->page, $row->subject);
- if ($row->closed) {
- print ' <em>(opgelost)</em>';
+print '<dl class="replies">';
+
+$prev = NULL;
+foreach ($rows as $i => $row) {
+ $next = $rows[$i + 1] ?? NULL;
+
+ if ($next and $next->issue === $row->issue
+ and preg_match('/\A(?:<p><img[^>]*><\/p>)+\z/', $row->message)) {
+ # postpone related image to the following message
+ $next->message = $row->message . $next->message;
+ continue;
+ }
+
+ if (!$prev or $prev->issue !== $row->issue or $prev->author !== $row->author
+ or !preg_match('/\A<p><img/', $prev->message)) {
+ print '<dt>';
+ if (!$prev or $prev->issue !== $row->issue) {
+ printf('<a href="/%s">%s</a>', $row->page, $row->subject);
+ if ($row->closed) {
+ print ' <em>(opgelost)</em>';
+ }
+ }
+ print '<span class="right">';
+ if ($row->author and $rowuser = new User("profile/{$row->author}")) {
+ printf('<strong>%s</strong> ', $rowuser->html);
+ }
+ printf('<small class="date">%s</small>',
+ showdate(preg_split('/\D/', $row->created))
+ );
+ print "</span>";
+ print '</dt>';