Since we're rendering according to the local timezone, we'll need to
include events that fall before or after the specific date on the
server, as they might get be inside the current day in the client's
timezone. So let's just grab a window of events either side of today,
and then hide anything that falls outside the client's day.
* main:
Don't round up in time distance expression
Tidy Gemfile
Banner for draft state
Drafts should always use the dashed outline wherever they're displayed
Unnecessary parens
Use distance to nearest edge
Simplify overlap logic
Fix divider drag jankiness
Use cache-friendly "time ago"
positionedClass -> installedClass
Pull out moveDividerTo
Before comes before After
DividerElement -> Divider
Clean up divider-controller
Drag bubble divider
Previously when a notification was read, we'd remove it from the list.
This will often be fine, but if there were more unread notifications
that hadn't been loaded yet (because there were too many for the initial
page) then the list could become empty when really there are still more
items to show.
So instead of removing the items when they're read, we can reload the
list with the new page of items. This should allow the older
notifications to come into view when necessary.
This will cause each filtered view to stay updated as the items in the
buckets change.
For filters that are specific to buckets, we listen to broadcasts on
those buckets; for filters on "All projects" we listen instead for
broadcasts on an account-specific channel. This is so that "All
projects" views will be aware of any new buckets that are added, while
also avoid unnecessary refreshes from buckets that are filtered out.