* main: (48 commits)
Improve layout and truncation
This is annoying
Fix summary
Remove index columns
Same treatment for the events index
New menu filters and navigates
Don't test for _Added by_ events
Indention
@collection is always available when card scoped
Style
Remove check for _Added by..._ line
The placeholder attribute is on the `house-md` element
Duh, no before destroy commit, but this is still not right!
No long transactions!
Don't display published event in threads
But feels more essentially part of the User, so list first
Not related to the other two
Missing controller
Style
Errant `bubbles` => `cards` replacement
...
# Conflicts:
# app/models/card.rb
# app/models/user.rb
# db/schema.rb
# db/schema_cache.yml
Is confusing since "source" already captures the origin of the notifications. It's
needed to interpret things at rendering time, so we can query things as needed there.
Instead of delegating. With a polymorphic relationship, relying on a certain
attribute implies doing things like aliasing "mentioner" to "creator" or similar.
* main:
Fix image icons
Revert "Merge pull request #345 from basecamp/cascade-layers"
Fine tune notifications states
Remove empty helper
Use an icon for the button
Show button on collection page and notif settings
Add involvement types to accesses
Extract a couple components
Add cascade layers to all CSS files
This provides a way to set the level of involvement that a user has with
a collection, and from which we determine the level of notifications to
send. Users can be access-only, watching, or being notified about
everything.
If you're access-only, you won't get an notifications. If you're
watching, you'll only get notifications for the items you're watching
(which includes the items you've been assigned, have commented on, etc).
If you're set to everything you'll get notifications about all activity
in that collection.
This change replaces our previous concept of subscriptions. Where
previously you'd subscribe to a collection to get notifications in it,
now you'll simply set the notification level on your access.
This introduces a more dynamic system of activity scoring, to improve
the way bubbles "bubble up" due to their activity. There are a few
different parts we can tune here, and it's likely we'll need to make
adjustments once we get a feel for how this works in practice.
The basic idea here is:
- We assign points for certain types of event that happen on a bubble. A
boost gets 1 point, a comment gets 10 points, and so on.
- These points decay over time, at a rate of 50% per day. So old
activity is worth much less than new activity. Bubbles should rise up
quickly when acted upon, bit will float back down if left idle.
- Some comments can score higher than others: the first comment from
each person on a bubble is worth more (20) because it signals that
more people are getting involved; and comments that follow a comment
by a different author are also worth more (15) because that signals
there's ongoing conversation between people, not just a series of
notes being left by one individual.
In terms of implementation, we persist the score on the bubble
whenever it changes, but we handle the decay on the client side. That
allows us to cache the bubble representation without having to
continually change it while its activity decays.
We also keep a separate `activity_score_order` attribute on the model.
This can be used to sort the bubbles in order of "most active", without
having to think about the decay.
To prevent people missing a notification they care about when we ship
the subscriptions feature, we'll start out with everything toggled on
(which matches the previous behaviour). People can then opt out as they
like.
* main: (27 commits)
Leave some space for the tray
Let's not assume it's a due date
Avoid overlap
Let's try without the big drag button, extend beyond the column a touch
Tighten labels
Match notification dot
Spacing
Add more context
Avoid leaving the tray open
This shouldn't be here
Paginate the read notifications
Add a test case
Split up a big view
Allow filtering by stage
Send beacon request on disconnect as well
Wire up notifications "Mark all as read" button
Add unread dot
Set state for when there are no new notifications
Move to right side, smooth transition
Open tray on click, stub mark-as-read button
...