* origin/lf/unread-day-indicators:
chat-fe: fix unreadnotice position on mobile
chat-fe: add unread and day indicators
Signed-off-by: Jared Tobin <jared@tlon.io>
* liam-fitzgerald/lf/publish-del-edit:
chat-fe: move cancel button below comment edit
publish-js: lift editing state to comment list
publish: fix check on edit-comment delta
publish-js: avoid unnecessary scrollbars on note view
publish-js: allow deletion and editing of comments
publish: use @tas for comment ref in marks
Signed-off-by: Jared Tobin <jared@tlon.io>
* origin/king-handle-ames-exception:
king: handle IOError from recvFrom in ames.
king: increment version for new pill
Signed-off-by: Jared Tobin <jared@tlon.io>
When a group is left, the permissions no longer exist and the mailbox
subscription is kicked. Before attempting to resubscribe, we simply
check if we still have permissions and if not, leave the chat.
* origin/ed/chore-update-contributing:
contributing.md: removed interface dev instructions from root-level doc, integrated into existing interface-specific doc
contributing.md: added more pre-req detail to the beginning of the edit
contributing.md: Added a new section outlining how to develop urbit's interface
Signed-off-by: Jared Tobin <jared@tlon.io>
* liam-fitzgerald/mp/chat/firefox-take-2:
chat-fe: more FF scrollback fixes
chat-fe: fix index issue with pending messages
chat-fe: correct FF scroll behaviour
chat: scrollToBottom on mount for FF
chat: only scrolltobottom if first backlog grab
chat: add firefox-specific chat window
Signed-off-by: Jared Tobin <jared@tlon.io>
* origin/m/link-perf:
link-listen-hook: partially revert 05e6519
link fe: refactor message display into component
link fe: more informative "empty list" display
link-view: in pagination logic, only +lent once
link: minimal initial view result
link-view: add some hints to aid profiling
Signed-off-by: Jared Tobin <jared@tlon.io>
To produce message elements we iterate over pendingMessage ++ messages,
but to check whether they're adjacent to a message by the same author,
we index back into messages, which produces incorrect results when
pendingMessages is nonEmpty
* origin/fix-chat-autojoin:
chat-js: fix auto-join and a chatSynced error
chat-js: fix issue with autojoining
Signed-off-by: Jared Tobin <jared@tlon.io>
Previously, if filtering subscriptions turned up no results, nothing was
printed. With this change, we explicitly print "no matching subscriptions"
instead.
We weren't accounting for backlog subscriptions with non-zero message
indexes in their wires. Now, we look through all of our outgoing
subscriptions to identify relevant backlog subscriptions, and leave all
of those.
The more proper fix here is to not include message indexes in the wire
in the first place, since we don't ever reuse that anywhere. But that's
a more invasive change, so we just leave a TODO for it instead.
Previously, we were removing the relevant entry from the `synced` map
before calling `+pull-wire`, which requires an entry to still be there.
This lead to subscriptions not actually being pulled, commonly leading
to "subscribe wire not unique" errors on re-join.
In addition to fixing that, `%remove` actions now try to pull the
subscription regardless of whether they have an entry in the `synced`
map or not. `%leave` is always safe, and we might want to clean up
subscriptions that shouldn't be there anymore in the first place.
Makes the rules that set both a background and foreground color come
last in the CSS, increasing their specificity. Changes the highlight to a
lighter grey, to better stand out. Correctly aligns highlights with code
block backgrounds.
Fixes#2684
the root container had height: 100% but also a margin-top set on it. This
caused unnecessary scrollbars to appear when the content did not
actually overflow the container.
Firefox treats the reflow in the scroll container weirdly so for the
scrollback case, we save the position to restore later, when the backlog
messages come in. For the 'locked at bottom' case we add a new state
variable and rescroll based on that.
Previously, if a room was navigated to directly, the resubscribe message
would show before the chatSynced state was loaded. Initialises
chatSynced as null and checks it is not null before showing the
resubscribe message.
On initial load, instead of getting the first 25 links for every
collection, only get their totals and unread counts. This drastically
reduces the pageload time.
Updates the frontend to match:
- Handle initial results without link content.
- Dynamically load in collection's links, even for page 0.
If the initial 20 messages doesn't cause the messages container to
overflow then the backlog will never be requested, making scrollback
impossible. This is due to making the container have position:relative
in order to display an overlay inside it. Fixed by unconditionally
requesting the first page of backlog on load.
Refactored the patp autocomplete into a reusable component, and then
used that to add the DM popover interface. Also introduces some
performance improvements for the popover.
Triggers invitee suggestions after one character of input. To
compensate for the potential explosion of suggestions, we
tighten our group searching criteria and truncate the
ship suggestions on short searches. Also addresses a bug where names of
groups were not being downcased before search.
Fixes#2635
Hide and shows profile overlay on sigil click. Shows the overlay for 2
seconds after click. If the user moves their mouse into the overlay then
it will remain open as long as the mouse is inside the overlay.
Adds a profile overlay to display information about the user on hover.
Also adds the svgClass prop to the sigil component, to allow setting
classes directly on the sigil svg.
Instead of auto-watching a new collection when it gets added to group
associations, require that the user explicitly choose to view it.
Of course, creation counts as opting in, so watch the collections we
create by default.
Improve the UX of the loading spinner that shows when you have a new
note, by displaying it until we receive the new note in the
subscription, instead of until the poke succeeds.
Empty groups caused the padding on the first group to be too large.
Filter the groups before we map over them so that we can set padding
properly.
Fixes#2674
Shows the spinner whilst joining a channel, both manually and from a
url. Also fixes an issue where a newly joined channel may be navigated
away from automatically.
Runs the snippet through ReactMarkdown instead of rendering it as text.
We restrict the allowed nodes in the render to pure text, so the snippet is not
overly visually heavy.
This is an attempt to fix the ames driver so that it reestablishes
a socket after a socket error. This should theoretically fix the
"ames dcoesn't work after computer sleeps" issue, so that when the
os closses a socket, we detect this in waitPacket and attempt to
reestablish the socket.
Closes#2190
Previously we were checking for a title for the association by accessing
a non-existent property of the key we were using to iterate through
the object. What we want to do is access the iterated object to find
that title, and so this commit does that.
`at` is for when you expect an array of a certain exact structure. If it
has extra elements, that indicates you were mistaken about the strucutre,
so it should fail to match.
I've moved the slightly edited interface development instructions from the root controbuting.md doc, over to the one located in pkg/interface. I've made sure to ensure any precvious information in the interface contributing doc has been matched or expanded upon in the new writing, which is a incrementally more thorough, and assumes a lower level of build-tooling knowledge.
When changing description, some pre-metadata refactors were resulting in
permanently broken calls to the API. This accesses our resource object
correctly.
This commit pulls the spinner out of the header bar -- and
reincorporates it as a component that hooks into local state when
awaiting a new prop, or disabling an input.
Before, when we got new props for the metadata of the notebook, all the
fields would flash blank or to previous inputs. This rewrites the
update function to be more atomic with how it edits state,
which seems to correct the behaviour to avoid blank fields and disable fields
correctly.
By using an array, not a set, we stop deduplicating our group index,
pushing redundant information instead. When searching, this prevents a
component fail state where it cannot search a non-existent index for
matches.
RFC 2396 specifies that segments must be zero or more pchars.[1] We were
deviating from this by requiring at least one pchar per segment.
With this change, we support /some//path, and no longer lose the
trailing slash in /some/path/.
[1]: https://tools.ietf.org/html/rfc2396#section-3.3
In the wild, ships that were live pre-OS1 still had launch subscriptions
open to the clock on the /tile path, instead of the currently-used
/clocktile path. Additionally, launch state for the clock tile seemed
incomplete.
Here, we simply re-%add the clock to launch.
Note that launch currently does not clean up old subscriptions on
path change. For the pre-OS1 case, the old path is no longer in use,
rendering the subscription harmless. For cases where the correct
subscription was already in place, it'll print a %watch-wire-not-unique,
but doesn't do any harm besides that.
Previously, when the refresh-rate timer activated, and the thread from
the previous activation was still running, we would kill it and start
a new one. For low refresh rates, on slower machines, nodes, or network
connections, this could cause the update to never conclude.
Here we add a timeout-time to eth-watcher's config. If the refresh-rate
timer activates, and a thread exists, but hasn't been running for at
least the specified timeout-time yet, we simply take no action, and wait
for the next refresh timer.
Note that we opted for "at least timeout-time", instead of killing &
restarting directly after the specified timeout-time has passed, to
avoid having to handle an extra timer flow.
In the +on-load logic, we configure the timeout-time for existing
watchdogs as six times the refresh-rate. We want to set
azimuth-tracker's timeout-time to ~m30, and don't care much about other,
less-likely-to-be-active use cases of eth-watcher.
A syntax typo led the array for nested notebooks to not have paths
pushed into it. Only the last item in the group would be pushed into the
array. This commit fixes that typo.
Across every OS1 module (including the launch/home screen context) I edited some padding/margin/sizing for navigational elements for consistency across paging.