Files
Haven/plugins
Amnibro b729a7aad1 fix(braid): keep main channels out of sub-channel cards (#5507)
* fix(braid): keep main channels out of sub-channel cards

_markRuns marked a channel card run from "is my neighbour also a
.channel-item", with no notion of parentage, so any unbroken run of rows
became one card. The first main channel after another channel's
sub-channels continued their card, and read as belonging to a tag it has
no relation to. Reported on both the web client and the Android app.

A card is now a family: siblings under one parent, or a parent followed
by its own subs. famOf() keys a sub row by dataset.parentId and a main
row by "main". joinsRun() continues a run only inside one key, or from a
parent into its own subs, so sub -> main always breaks the card. The
sub-tag-label row carries the same parentId, so a tag stays with the
subs it labels.

Version 1.7 -> 1.8.

* fix(braid): a main channel always starts its own card

Follow-up to review: the first rule still let two adjacent main channels
share a card. A main channel now always begins a new group, so it can
never sit inside a run that reads as a sub-channel family. A card is a
main channel plus its own subs, or a run of sibling subs, or the DM list.

joinsRun() continues a run only into a sub row: from that sub's parent,
or from a sibling sub with the same parentId. Anything into a main row
breaks. DM rows keep grouping among themselves.

* fix(braid): a tag header takes over the grouping, so its channels read flat

Matches the Android app. When sub-channels are re-grouped under their own
tag header, the header already carries the grouping, so indenting the rows
under it as well claims the sub arrow for channels that only look nested
because of where they sit.

Rows the core marks with data-sub-tag (exactly those under a tag label)
get data-braid-flat, and the arrow is painted over with # in Braid form.
Private subs keep their lock, since only a literal arrow is replaced, and
a sub shown directly beneath its parent with no header still keeps it.
Purely cosmetic and scoped to data-braid-form, so toggling the form off
restores the original glyph with no DOM left behind.
2026-09-01 00:59:34 -04:00
..