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.
During the #2607 upgrade, strictly local collections got left out of the
listening set. (Because they did not have any outgoing subscriptions.)
This led to personal collections not being available on the frontend.
Here, we add upgrade logic for adding those back to our listening set again.
If a user had explicitly left a personal collection (instead of deleted it, for
whatever reason), they will have to leave it again. This case seems much more
rare than the "my collection is gone" one.
Events always pass through these, adding to the stack trace on-crash.
This information is practically never useful, however. Adding !. leaves
these cores out of the traces.
(Re)subscribing gets us a %contacts update, containing the full set of
contacts as it currently exists.
Previously, we would fully delete our local state, only to recreate it
using the data from the update.
Now, we never delete existing data, instead only creating if we don't
have it yet, and adding, removing or recreating contacts if they
changed.
In the future, we'll want an easy way to turn two contacts into an %edit
diff, to let us apply correct semantics to individual contacts, too.
Instead, %bundle and %add if we don't have the group locally yet,
or %add and %remove whatever the difference is between the local group
and the group as specified in the %path update.
In both, we make clear that the wire is always of the /@/group/^ form,
and alias the "group path" portion of the wire for clarity.
For kick, more obviously reuse the same wire, don't reconstruct it.
For watch-nack, only delete from the synced map if the source of the
watch-nack is still relevant. While we don't expect this to be relevant
considering current mode of operation, this does protect us against
strange cases.
Deletion retains its old behavior: can only be done by group owner, and
propagates.
Removing can now always be done by anyone, and works using
link-listen-hook: removing the collections from the set of ones we're
interested in, no longer syncing or showing up in the sidebar.
Instead of going purely off metadata, we now track the collections we're
listening to, and allow the user to remove collections from that list.
This allows us to remove/ignore collections, without mutilating group
assocations locally.
We were taking care not to re-add something to our data store if we
already had it in there, but were still sending out an update
regardless.
With this, we only send out an update if we weren't previously aware
of the content.
Adds a disabled check during link submission to prevent duplicates.
Also fixes an unmarked bug where 'linkValid' was not being reset to
false on submission, allowing for submitting blank links after one
correct link has been submitted.
This commit introduces some refactoring of localStorage logic, copy
changes and a rearrangement of the launch welcome message to the top
of the screen.
Makes it so that |cancel %force skips the next thing in the queue if
you're not in the middle of something. If you are in the middle of
something, it skips the thing you're in the middle of (just like naked
|cancel).
This should resolve issues where |cancel doesn't drain the queue.
If you entered the web dojo and hit Backspace immediately,
it would still process it as a valid key but pass the whole key forward.
This adds a conditional to ignore the key in those cases.
Considering some of the options here were atoms, not cells, $% wasn't
appropriate, and led to *etyp:abi:ethereum resulting in ford %ride execution
failure. Simply using $? instead would result in a fish-loop, so here we split
the atom cases from the tagged union ones with a $@.
Previously, the pretty-printing for %incoming and %outgoing results was hanging
on to and displaying irrelevant type information: "_list_ of subscriptions",
"wire with _head and tail_", and so on.
Here, we move to producing tangs, instead of vases, and print those. For the
%incoming and %outgoing cases, we print a line for every subscription, sorting
them by path and wire respectively, and giving clean, easily readable output.
If chats with identical resource paths were created, that would result
in chat-hook seeing updates twice.
These "/mailbox wire sub to local chat-store" subscriptions aren't
created by the current logic anymore, and as such any existing ones
should be eradicated.
Introduced in #2546, the new functionality seems able to induce weird
behavior causing messages to be processed twice. Disabling this
functionality on the frontend until that has been fixed.
When you were looking at your own card in another group,
it would say "Remove from" group. This is from an arbitrarily strict
ternary check that adminOpt catches
for us, so we just check if the ship is us.
Before we saw if window.ship was in the path of the group.
If you're a star or higher, you'll match many group paths that you don't
own. This strengthens the check.
We were looking for the box in our contacts object, not the associated
group, so if you had a group and chat with the same name,
you'd see nicknames, but in no other situations. This commit rectifies
that by safely polling for the associated group of the chat.
* origin/mp/publish/new-button:
publish: prevent submission of empty notes
publish: add responsive width for new post button
Signed-off-by: Jared Tobin <jared@tlon.io>
* origin/m/chat-groupify-extra:
chat-view: %delete even without association
frontend: apply ec6c2ed69 to link, publish, groups
chat fe: clarify copy
chat fe: support adding chat to existing group
chat fe: invite search with/out ships
chat-view: allow %groupify into existing group
chat-view: add docs for %create action
Signed-off-by: Jared Tobin <jared@tlon.io>
When a ship breaches, we remove all messages that have yet to be
delivered to an app (eg if it's not yet started). We also add
|gall-sear to do this manually, but this shouldn't be needed in normal
operation.
Finally, to unblock ~zod and ~bus on mainnet, we sear one particular
ship automatically on loading hood. It cannot be done manually because
no userpace changes can be made until it's unblocked.
Previously, running %delete had a hard dependency on a (metadata-store)
association being present for the chat. If a remotely-hosted chat got
deleted, that would delete the association, preventing us from deleting
the chat for ourselves.
Now, we simply neglect to do related metadata deletions if no
association was present in the first place.
Using the updated chat-view %groupify action. Groupifying without
selecting a group creates a new group based off the chat. Selecting a
group first makes that the target of the group, and allows you to
specify whether to merge ships from the chat into the group.
This lets you specify whether or not you want to include ships in search
results for the InviteSearch component, as is already possible for
groups. This enables group-only searching, as will be used by the next
commit.
Also modifies the placeholder text based on what is included in the
search results.
In many cases running without %force is insufficient because ford
crashes while unsubscribing. This should fix some cases of OTAs being
received but not processed.
We have three stacks: the hoon stack, bar stack, and duct stack. This
turns the bar stack to a list of ducts and adds it to the hoon stack.
This tells you the ducts of the moves that caused the move where you
crashed.
See:
recover: dig: intr
crud: %belt event failed
bail: intr
bar-stack
~[
~[/g/use/spider/~zod/build/~.dojo_0v5ogno.5anji.vn3f6.4gs7t.6r2ft /d //term/1]
~[/d //term/1]
~[/g/use/spider/~zod/find/~.dojo_0v5ogno.5anji.vn3f6.4gs7t.6r2ft /d //term/1]
~[/g/use/dojo/~zod/out/~zod/spider/drum/wool /d //term/1]
~[/d //term/1]
~[/g/use/dojo/~zod/drum/hand /d //term/1]
~[/g/use/hood/~zod/out/~zod/dojo/drum/phat/~zod/dojo /d //term/1]
~[/d //term/1]
~[//term/1]
]
call: failed
/~zod/home/~2020.3.17..23.14.11..50e0/sys/vane/ford:<[6.128 3].[6.220 5]>
/~zod/home/~2020.3.17..23.14.11..50e0/sys/vane/ford:<[6.129 3].[6.220 5]>
/~zod/home/~2020.3.17..23.14.11..50e0/sys/vane/ford:<[6.132 3].[6.220 5]>
...
Gives you a poor man's progress bar. For example, to determine how much
of an OTA you've downloaded from your sponsor, run:
|ames-sift (sein:title our now our)
|ames-verb %rcv
and then to turn it off:
|ames-verb