Commit Graph

623 Commits

Author SHA1 Message Date
Jacob Karlsson a84d469c7d Remove old way of indenting forks 2020-03-22 22:06:07 +01:00
Jacob Karlsson 66627be257 Simplify repeated logic 2020-03-22 21:48:59 +01:00
Jacob Karlsson aae34fbfad Remove inner functions by combining them 2020-03-22 21:36:26 +01:00
Jacob Karlsson 3b1bdc9218 Fix off-by-1 error WAOW 2020-03-22 21:20:30 +01:00
Jacob Karlsson 7171732bc0 Remove old commented code 2020-03-22 20:58:27 +01:00
Jacob Karlsson dba4ec2955 Add basic fork styling 2020-03-22 20:54:48 +01:00
Justin Abrahms b5d37c7c8d Actually shift cards over, rather than just a minor indent. 2020-03-21 20:09:28 -07:00
Jacob Karlsson 7b05b78e52 Merge remote-tracking branch 'origin/master' into hide-forks 2020-03-21 14:43:37 +01:00
Christian Bundy bdcc127674 Fix crash when linking directly to private message
Problem: Trying to view a private message crashes the server and leaks a
bunch of memory. That's bad. This problem is caused by faulty handling
in the function that finds thread ancestors. There's some code that says
"if the next ancestor is a private message, just return the ancestors
that we know about", which returns nothing when we're looking up a
private post (because we can't identify *any* ancestors).

Solution: Ensure that we're only resolving the promise once in the
function by chaining `else if`s and ensure that we only return the
ancestor list if there are actually ancestor in it. If the ancestor list
is empty, we can just return the single message that we know about and
pass it off.
2020-03-20 11:33:18 -07:00
Cinnamon 6f3a13d144
Merge pull request #325 from christianbundy/indexing-error-message
Indexing error message
2020-03-17 18:59:08 -07:00
Christian Bundy 122ed68a82 Merge commit 'refs/pull/316/head' of github.com:fraction/oasis 2020-03-17 10:22:22 -07:00
Christian Bundy e5df3a1497 Rename errorView() to indexingView()
Problem: Since the `errorView()` has a refresh we can probably just call
it `indexingView()` and add the indexing-specific code.

Solution:  Rename `errorView()` to `indexingView()` and add a progress
bar for it.
2020-03-17 07:41:57 -07:00
Christian Bundy 1f050b18a4 Add auto-refreshing error page on indexing error
Problem: The indexing message is being thrown as an error, which is
pasted as plaintext, so we can't do a page refresh. This is frustrating
when you're waiting for the indexes to finish because you have to
manually refresh a bunch while you wait.

Solution: Use the prototype from @justinabrahms to add an HTML message
for the indexing error and automatically refresh the page every ten
seconds.
2020-03-17 07:24:46 -07:00
Justin Abrahms 5c2d536d92 An html error message. 2020-03-16 20:25:43 -07:00
KawaiiPunk f032cbcc7f
Added reference to "plain text" instead of just text 2020-03-12 19:44:28 +00:00
Nick Wynja c3a4474256 Merge branch 'master' of https://github.com/fraction/oasis into threads 2020-03-11 23:22:11 -04:00
Cinnamon dba544c9b5
Merge branch 'master' into add-profile-image-upload 2020-03-11 17:20:47 -07:00
Cinnamon d2cdef8244
Merge pull request #299 from christianbundy/indexing-error
Present error message while waiting for indexing
2020-03-11 16:03:56 -07:00
KawaiiPunk 4e27dd4b59
Added references to posts from yourself in Topics and Summaries 2020-03-11 21:54:22 +00:00
KawaiiPunk 836c5a06ed
Changed desription to mention that latest also includes posts from yourself 2020-03-11 21:47:40 +00:00
Christian Bundy 2c806af919
Merge pull request #311 from georgeowell/rearrange-settings
Rearrange settings
2020-03-11 07:10:34 -07:00
Christian Bundy 861dc76524
Merge pull request #309 from hng/feature/fix-popular-link
Fix link to popular view in navigation
2020-03-11 07:09:26 -07:00
Christian Bundy 228cab563d
Merge pull request #310 from georgeowell/view-thread-label
View thread label
2020-03-11 07:08:42 -07:00
Henning Schumann 076f5f21c1 Fixed link to popular view in navigation 2020-03-11 11:30:49 +01:00
KawaiiPunk 4232d0f05b
Moved peer connections to the top of settings 2020-03-11 09:26:02 +00:00
KawaiiPunk 850d1d2373
Rearranged settings in order of most likely use 2020-03-11 09:14:14 +00:00
KawaiiPunk daf82588ab
Tweaked edit your profile description to make it clearer 2020-03-11 08:55:29 +00:00
KawaiiPunk dc723595b4
Removed reference to "basic post" 2020-03-11 08:52:27 +00:00
KawaiiPunk e4dd883e2a
Changed reference to message to comment for consistency 2020-03-11 08:51:03 +00:00
Christian Bundy f3f8e3dda3
Merge pull request #307 from christianbundy/cherry-pick-2
finished spanish i18n
2020-03-10 20:16:50 -07:00
mario 8c3fc3f393 finished spanish i18n 2020-03-10 20:05:56 -07:00
mario cc4f6caef2 lands on /mentions instead of /public/popular/day 2020-03-10 20:02:00 -07:00
seekr fc2137381a
fix duplicate search for es 2020-03-10 14:49:47 -03:00
seekr 2117b9f76b
more updates to spanish 2020-03-10 11:31:27 -03:00
seekr 8fbbdaaaf4
started adding spanish translations 2020-03-10 10:01:06 -03:00
Nick Wynja 7e601ae35a Adds Threads view for seeing wider conversation 2020-03-10 08:42:56 -04:00
Christian Bundy f2cf067b67 Present error message while waiting for indexing
Problem: When our views are still indexing the database they apparently
don't respond over MuxRPC, which means that we're just waiting forever
until they finish. This means that people who are indexing the database
get an HTTP response that might take an hour to finish.

Solution: If we have more than 1 mebibyte of backlog, present an error
message explaining the situation and asking for a bit of patience.
2020-03-09 15:14:28 -07:00
Henning Schumann 15417422a4 Made "private/public" comment translatable 2020-03-09 12:19:01 +01:00
Henning Schumann 314033cdd0 Made content warning text field placeholder translatable 2020-03-09 11:57:21 +01:00
Christian Bundy a2e7f4ad6d
Merge pull request #293 from hng/feature/translations-de
Add German translations
2020-03-08 17:57:46 -07:00
Henning Schumann b86eeeb3e5 Finished up German translations :) 2020-03-08 19:26:36 +01:00
Cinnamon e7c38e3ec5
Merge pull request #285 from christianbundy/vanilla-markdown
Vanilla markdown
2020-03-06 11:57:08 -08:00
Henning Schumann d035b165fd Even more German translations 2020-03-06 17:17:00 +01:00
Jacob Karlsson 5c1cd759bc Fix bug with missing flatness 2020-03-06 17:00:06 +01:00
Jacob Karlsson e4a9548cda Add basic hiding of forks 2020-03-06 16:33:31 +01:00
Henning Schumann d628486ae1 More German translations 2020-03-05 21:22:20 +01:00
Henning Schumann 6aca504921 Merge remote-tracking branch 'upstream/master' into feature/translations-de 2020-03-05 19:53:53 +01:00
KawaiiPunk 3ed7a52d37
Specified "this post" rather than "the post" in /publish 2020-03-04 00:17:06 +00:00
Christian Bundy cb1cf5e87e Render vanilla Markdown with basic renderer
Problem: The SSB-Markdown library has some SSB-flavored quirks, like
messing with newline behavior, and is inappropriate for rendering plain
Markdown like the readme.

Solution: Since SSB-Markdown uses Markdown-It under the hood, we can use
the same library and just render our Markdown *without* the SSB-flavored
quirks. This gives us the ability to wrap text and avoid SSB-Markdown
problems without having to rewrite all of our Markdown.
2020-03-03 16:13:56 -08:00
KawaiiPunk d4cb2cf9e9
Changed "warning to "content warning" 2020-03-04 00:11:45 +00:00
KawaiiPunk 47aa7d3efb
Changed references to "messages" in /publish to "posts" 2020-03-04 00:04:20 +00:00
KawaiiPunk 107bee5e52
Added word public for emphasis on /publish 2020-03-04 00:00:00 +00:00
Christian Bundy 2e7cb4ad66 Remove readme and startup focus on configuration
Problem: A big chunk of both the readme and the startup output is
dedicated to configuration, which feels to me to be focused on
developers and advanced users rather than beginners who just want to try
using Oasis.

Solution: Move readme configuration info to its own file and hide all
config output (except one line) behind `--debug`. While doing this I
noticed that we're `require()`ing a few modules that we don't need
before setting `process.env.DEBUG`, which I've reorganized so that we
don't accidentally disable debug mode for those modules.
2020-03-01 11:39:01 -08:00
Christian Bundy 1f6f635935 Remove debugging cruft
Problem: I have debug mode manually enabled and have `console.log()`
calls sprinkled through the code and I'm doing `require("crypto")` too
many times.

Solution: Remove debugging cruft so that we don't have a perma-debug
mode.
2020-03-01 11:19:23 -08:00
Christian Bundy 02d6d5adac Add profile image upload
Problem: We can set our name and profile description but profile images
are expected by most people and supported by most clients and we don't
have them. A profile without an image can sometimes lack the intimacy
you'd get if you let people upload profile images that they can use as a
visual avatar.

Solution: Add profile image upload to the Edit Profile page and add a
bunch of plumbing for `ssb.blobs.add()` to add the blob and publish a
message setting it as a profile image.
2020-03-01 11:11:09 -08:00
Cinnamon 3c1453db33
Merge pull request #270 from christianbundy/fix-extended
Fix Extended page sorting posts incorrectly
2020-02-28 14:53:28 -08:00
Christian Bundy 9d3553352f Show channel as text appended to posts
Problem: Other clients render a `channel` property, which is basically a
way to add a single hashtag to your post, but Oasis doesn't support
that. This means that someone might post "this is fun!" under the
channel #running and people using Oasis would just see "this is fun!"
without any context.

Solution: Add the hashtag to the bottom of the post, which visually
looks the same as someone adding two newlines and a hashtag to the end
of the text in their post.
2020-02-27 17:21:23 -08:00
Christian Bundy dcd995140b Fix Extended page sorting posts incorrectly
Problem: The Extended page is sorting by received timestamp, not
asserted timestamp.

Solution: Find the `Date.now` and replace it with `Date.now()`, which
refers to the current date instead of `undefined`, which is what you get
if you try to `JSON.stringify(Date.now)`.
2020-02-27 16:53:41 -08:00
Cinnamon e9fc29c592
Merge branch 'master' into edit-profile 2020-02-27 14:05:37 -08:00
Cinnamon f9a787bef0
Merge pull request #260 from christianbundy/fix-dta-queries
Fix queries with an unused `{index: "DTA"}` option
2020-02-27 14:02:43 -08:00
Cinnamon 763c9f7672
Merge pull request #262 from christianbundy/existing-oasis
Detect existing Oasis server running on interface
2020-02-27 14:01:21 -08:00
Cinnamon 2e59c0e994
Merge pull request #263 from christianbundy/hide-blocked-search
Hide search results from blocked feeds
2020-02-27 14:00:27 -08:00
Christian Bundy 927026937c Add hashtag support to search
Problem: Searching for a hashtag should bring you to the hashtag page,
and the hashtag page should have some useful information about which
page you're on instead of just showing you the messages.

Solution: Add code so that if you search for a hashtag you're brought to
that page, and display some useful help text at the top of the page
explaining the hashtag page. While ensuring that the hashtag page showed
posts from around the network (instead of only people you're following)
I fixed the popular page so that it has the same behavior again (fixing
a regression) and filtered out gatherings (fixing *another* regression)
on the popular page. These probably should've happened in another commit
but I got carried away. :/

Happy to split this commit into two if it hurts to bundle the popular
fixes with the hashtag fix, but I'm low on energy and want to at least
open a PR in case it doesn't bother anyone.
2020-02-27 12:14:29 -08:00
Christian Bundy 340f2842fa Hide search results from blocked feeds
Problem: The search results weren't hiding results from blocked feeds.

Solution: Add `socialFilter()` to ensure that all blocked feeds are
removed from search results as the first step in the stream processing.
2020-02-26 15:26:40 -08:00
Christian Bundy ddf57b227f Detect existing Oasis server running on interface
Problem: Sometimes you try to run Oasis twice and the second time you
run the program it blows up in your face about the port being taken.
Most other software just focuses or reopens the window instead of
throwing errors at you.

Solution: Implement `/.well-known/oasis` as a sanity check to see
whether the thing listening on the HTTP port. If it replies "oasis" then
we can open the tab (unless `config.open === false`) and avoid throwing
the error.
2020-02-26 14:11:14 -08:00
Christian Bundy 3686113043 Add profile edit page
Problem: An SSB client should allow you to declare your own name, but
Oasis didn't support that behavior at all.

Solution: Add a basic 'Edit Profile' page that lets you set your name
and description. This doesn't implement profile images because I had
limited time and didn't want to think about encoding formats, but it's
worth mentioning that I remember something about binary uploads with the
default form encoding actually send 3 times as much data because of
escapes or something? This might not effect us because we're on
localhost, but I want to make a note that this isn't implemented yet.

This also makes a small change regarding the `<label>` element --
previously we were writing them as siblings to the input and using the
`for` attribute to target the input, but while messing with the CSS I
tried putting them directly in the `label()` and it ends up having the
same effect with less code.
2020-02-26 13:45:40 -08:00
Christian Bundy 7db90bd5e9 Fix queries with an unused `{index: "DTA"}` option
Problem: Trying to use the DTA index when using SSB-Query doesn't work,
because that index only exists on SSB-Backlinks.

Solution: Change the filter to ensure that we're sorted by the asserted
timestamp and ignoring messages from the future. The SSB-Backlinks
plugin was taking the minimum between `.value.timestamp` and `timestamp`
but since we're not using SSB-Backlinks in this query (or maybe at all?)
we get to make our own little hacky query. Cel taught me that the
`$sort` option causes problems here because it buffers the entire result
in memory before doing the sort. Boo. Instead we just need to reference
the property that we want to be sorted by with some operation, even if
it does nothing (like `{ $gt: null }`), but since we're filtering time
travelers we actually need `{ $lge: Date.now() }` there anyway.
2020-02-26 12:16:02 -08:00
Daan Wynen 7ec64e04bf Add config documentation (addresses #254). 2020-02-23 12:09:51 +01:00
Christian Bundy 3838987d55 Refactor default config loader
Problem: We load the default config with `require()`, which would allow
arbitrary JavaScript execution, are producing debug output everywhere
with `console.log()` statements, and don't have instructions for how to
write the config file. The config file is also `.config/**/config.json`,
and I think it would be helpful to specify that this is the **default**
config rather than any other kind of config.

Solution: Rename the config to `~/.config/oasis/default.json`, replace
the `require()` with `fs.readFile()`, remove `console.log()` for
debugging, and add some example JSON for how to use the config file.
2020-02-22 11:23:59 -08:00
Daan Wynen 35c42f6b95 Read settings from ~/.config/oasis/config.json
This should give pretty much expected behaviour. Each config value
can be set by three sources:

1. By command-line argument. If it is not given, then
2. By config file. Or, lastly
3. By default value in the source code.

I can't test that the config file is searched and read from the right
place on windows or macOS, but on linux it works.
2020-02-22 10:32:50 +01:00
Christian Bundy ed5e6e5f61 Add support for Unix socket with noauth
Problem: We're doing tons of unnecessary cryptography by encrypting the
connection between the "client" and "server", which are often running in
the same process.

Solution: Instead of connecting to the SSB service over TCP and
encrypting the stream, just connect over a socket (supported on Windows,
macOS, and Linux) and don't bother encrypting anything. This is what
Patchwork and Patchbay do already, and since our secret is at
`~/.ssb/secret` then we should be comfortable with `~/.ssb/socket` being
a trusted file where access implies authentication.

Local tests suggest that when sodium-native is available, this commit
reduces the time to render the 'Popular (Day)' page by 17%, but when we
have to fall back to JavaScript cryptography the same page now takes 30%
less time to render. My intuition is that this improvement is more
dramatic on mobile, but requires further testing before we can pat
ourselves on the back too much. :)
2020-02-21 09:23:46 -08:00
Christian Bundy 293dcabe68 Update SSB-Mentions and remove workaround
Problem: We've been using a workaround to filter the results of
SSB-Mentions, but that's just been fixed upstream and so we don't need
the workaround anymore.

Solution: Update the SSB-Mentions package and remove the workaround.
2020-02-19 14:38:10 -08:00
Christian Bundy a775c99421 Remove private posts from public views
Problem: During the SSB-Query refactor I used `{ private: false }` in an
attempt to hide private messages, but apparently this option is only
available via SSB-Backlinks, so it was ignored without any warning (!).
This allowed private messages to be displayed in public views.

Solution: Remove the unused option and add a filter to public views that
ensures that private messages are always hidden.
2020-02-19 10:27:06 -08:00
Cinnamon 6f5de95d01
Merge pull request #230 from christianbundy/no-messages-by-type
Replace messagesByType() with SSB-Query read
2020-02-18 21:24:14 -08:00
Cinnamon 96e60868cd
Merge pull request #234 from christianbundy/no-img-border
Remove image border
2020-02-18 21:20:18 -08:00
Cinnamon cef75354ae
Merge pull request #236 from christianbundy/no-private-mentions-page
Remove private messages from Mentions
2020-02-18 12:31:01 -08:00
Cinnamon 545944a73e
Merge pull request #235 from christianbundy/friendly-EADDRINUSE
Add friendly EADDRINUSE error message
2020-02-18 12:27:36 -08:00
Christian Bundy b22f458da1 Remove private messages from Mentions
Problem: Private messages should only be showing up in the Private page,
not the Mentions page, but right now they're showing up in Mentions.

Solution: Add a check to ensure that Mentions doesn't have any private
messages.
2020-02-18 11:44:40 -08:00
Christian Bundy 00943affea Add friendly EADDRINUSE error message
Problem: When the port was already taken by another process we've been
dumping a big esoteric error message that really isn't helpful for most
people.

Solution: Catch the error and give our users a friendly error message
with a suggestion on how to run Oasis on another port.
2020-02-18 11:34:21 -08:00
Cinnamon 6c6c46e4be
Merge pull request #233 from christianbundy/publish-redirect-latest
Redirect to Latest after publishing new message
2020-02-18 11:19:31 -08:00
Christian Bundy a0449cefe0 Remove image border
Problem: I added an image border to try to make it easier to see the
boundaries of images but it's not really necessary and at least one
person didn't love it, which is grounds for removal.

Solution: Get it out of here! This commit removes the image border and
also removes a random `console.log()` that shouldn't have been left in
`src/index.js`.
2020-02-18 11:15:43 -08:00
Jonathan Dahan 16f19e85fb
Merge pull request #232 from christianbundy/add-version
Add Oasis version to settings
2020-02-18 14:03:41 -05:00
Cinnamon 4a24e7a663
Merge pull request #223 from christianbundy/summaries-page
Create 'Summaries' page for new summary view
2020-02-18 10:56:28 -08:00
Christian Bundy 97c71be4bd Redirect to Latest after publishing new message
Problem: After publishing a message you were redirected to the Popular
view, which wasn't good feedback that your message had been published.

Solution: After publishing a new message, redirect to the Latest view.
2020-02-18 10:52:37 -08:00
Christian Bundy 8088a9aa8b Add Oasis version to settings
Problem: It was impossible to tell which version of Oasis you're
running, which makes it hard to know when you need to update.

Solution: Put the version in the settings so it's easy to reference.
2020-02-18 10:44:36 -08:00
Christian Bundy aa6f797937 Replace messagesByType() with SSB-Query read
Problem: The `messagesByType()` queries don't let us sort by asserted
time, which means that we can get messages from a long time ago that
just ended up on our computer.

Solution: Use SSB-Query everywhere. The query syntax isn't really my
favorite but it lets us make declarative queries that respect the
asserted timestamp instead of just the received timestamp.
2020-02-17 17:11:18 -08:00
Christian Bundy 99c51b4a12 Redirect search to SSB references
Problem: There wasn't an easy way to copy and paste a message ID, feed
ID, or blob ID and get directed to that page in Oasis.

Solution: When someone pastes one of the above into the search, just
redirect the browser to the correct page rather than searching for that
text.
2020-02-17 12:46:37 -08:00
Christian Bundy 58b4d419f7 Create 'Summaries' page for new summary view
Problem: Until we have a way to change the view of each page, it seems
to me that each of the views that we're experimenting with should be on
their own page rather than modifying the existing pages to add more
functionality. I'm also noticing that I can't process all of the
information that's on the screen when the new horizontal layout is used,
and I think we would benefit from using the previous layout
consistently.

Solution: Move the summary view to its own page so that we can continue
to iterate on it without modifying the popular view, which is already
complex, and revert the style changes to maintain consistency with the
rest of the linear design (threads go downward, indentation denotes
sub-threads, etc).
2020-02-17 12:08:03 -08:00
Jonathan Dahan 5b37240067
Merge pull request #218 from christianbundy/fix-like
Fix likes not working with Patchwork as server
2020-02-17 11:43:48 -05:00
Vincent Ahrend 2e7bc4739b Add code style fixes 2020-02-17 12:57:01 +01:00
Vincent Ahrend 6977cc3ee3 Show a preview of comments in post listings 2020-02-16 20:14:23 +01:00
Christian Bundy 3abd28ade2 Fix likes not working with Patchwork as server
Problem: Recently we refactored the code so that we calls over MuxRPC
used promises, which was incompatible with the client-side SSB-Tangle
plugin that was expecting a callback. While debugging this error, I also
noticed that our `{ ws: { http: false } }` code wasn't doing anything,
and that our connection error handler was handling all kinds of
unrelated errors that would make debug more difficult.

Solution: Use `util.promisify()` to convert the callback-style function
into a promise-style function, remove the unused SSB-WS code, and reduce
the scope of the error catcher so that it'll continue to output errors
unless they're "cannot connect to sbot".
2020-02-16 10:24:42 -08:00
Cinnamon e9a7cc5fa1
Merge pull request #215 from christianbundy/default-about
No more `null` for unknown names and descriptions
2020-02-14 20:49:02 -08:00
Christian Bundy 21c19ed70a No more `null` for unknown names and descriptions
Problem: When we couldn't figure out someone's name or description we
were using `null`, which got coerced to a string and ended up with us
calling people `"@null"`. Not ideal!

Solution: Support a use-case where someone doesn't have a profile
description or a name, and use the first 8 characters of their public
key for their name if they haven't set a name themselves.
2020-02-14 13:58:59 -08:00
Christian Bundy 876ba89947 Hide custom publish behind publish menu
Problem: The new custom publish was called 'Manual mode', which I'm
afraid isn't super easy to understand for people who don't already know
SSB. The custom publishing page didn't follow the same conventions as
other pages, either.

Solution: Hide the custom publish mode behind the publish page, with a
warning that it's for 'advanced users', and ensure that it uses the same
conventions and visual styles as other pages and code around the app.
2020-02-14 12:33:26 -08:00
Daan Wynen 5c038e70a3 [WIP] raw json submission form 2020-02-14 20:50:36 +01:00
Christian Bundy 8a9e260728 Fix publish not working without content warning
Problem: The new content warning code was applying a content warning to
all posts, which tried to publish an invalid content warning `""` and
threw an error.

Solution: Only publish a content warning if it's a string with non-zero
length.
2020-02-13 15:55:41 -08:00
Cinnamon 3f78b98a30
Merge pull request #206 from christianbundy/fix-popular
Fix popular page to only show posts from following
2020-02-12 17:43:35 -08:00
Cinnamon dc4e0fed91
Merge pull request #207 from christianbundy/no-private-mentions
Remove automatic mentions from private threads
2020-02-12 17:42:10 -08:00
Christian Bundy 81f83e0e7b Use color emoji in Markdown posts
Problem: Emoji from Markdown posts were being displayed in the default
font, which doesn't always use color emoji.

Solution: Use the `.emoji` CSS class on those emoji to ensure that the
correct emoji font is used.
2020-02-12 12:25:55 -08:00
Christian Bundy 2bc3aed067 Remove automatic mentions from private threads
Problem: When replying to a private thread we already know who the
recipients are, and they're already going to get the notification, so
there's really no reason to add a mention.

Solution: Remove the mention when the message is private.
2020-02-12 11:00:23 -08:00
Christian Bundy 683f7ead9d Fix popular page to only show posts from following
Problem: Previously we were only counting likes from people you follow,
but showing messages from anyone. This was backward, and could
potentially show messages from blocked authors that were liked by people
you follow.

Solution: Move the `socialFilter()` invocation down the pipeline so that
it sorts the output messages, not the likes.
2020-02-12 10:36:28 -08:00
Henning Schumann 18fc02dc87 Started German translation 2020-02-12 16:47:09 +01:00
Christian Bundy 9f98ff41c8 Fix umbrella "message not found" and invalid msgs
Problem: Any error thrown while looking for thread ancestors was
throwing a "message not found" error, which was incorrect and useless.
This error caused me to his refresh repeatedly, not understanding that I
was publishing multiple messages. Super bad. While investigating this I
found that there's a slightly different problem where someone can post
an *invalid* message link, which we don't currently have handling for.

Solution: Only show that error when it's actually happening, and add
support for just ignoring when we see an invalid message link as `root`
or `fork`.
2020-02-11 20:14:48 -08:00
Christian Bundy bc5c242bfb Fix sources that didn't return promises
Problem: In the old `cooler.read()` implementation, sources returned
promises, but that isn't the case in the native SSB-Client promise
impelementation. This means that in at least one place, there's a bug
where it tries to call `.then()` on a non-promise.

Solution: Remove promise-based code from streams, which don't require
any special handling anymore.
2020-02-11 20:01:12 -08:00
Jonathan Dahan adfed1bead Add content warning publishing, fixes #191 2020-02-11 22:18:10 -05:00
Cinnamon 0cfd824677
Merge pull request #196 from christianbundy/ssb-client-promises
Replace cooler methods with SSB-Client promises
2020-02-11 17:55:36 -08:00
Christian Bundy 8071382874 Fix extended page so it doesn't show your posts
Problem: Your posts show up in Extended, which is unexpected because I'm
the center of my network, not some rando at the periphery.

Solution: Use the `socialFilter()` function to make sure that the
extended view only shows people in your extended network, not you. :)
2020-02-11 13:25:16 -08:00
Christian Bundy 1e28b29758 Replace cooler methods with SSB-Client promises
Problem: We started using `cooler.get()` and `cooler.read()` because it
was impossible to use promises with SSB-Client.

Solution: I made some downstream pull requests into the MuxRPC module
and the SSB-Client module, which means that both of them now natively
support promises. This commit removes the weird convenience methods and
replaces them with the native promise support, which should hopefully
make the code easier to read and write.
2020-02-11 13:20:50 -08:00
Joshua Kelly f7ab71e891 Changes /meta to /settings
Problem: meta was renamed in the UI to settings, but the URLs say meta

Solution: Rename them to /settings/*
2020-02-10 18:07:55 -08:00
Christian Bundy 410b97e9e4 Fix bug where others could still change your name
Problem: There was one missing component that would filter out nicknames
from other people. This caused a problem where we could get a name for a
feed but it could've been assigned by a friend, which we don't want
right now.

Solution: Ensure that the subject of the message is the same as the
author of the message.
2020-02-09 13:50:49 -08:00
Cinnamon 2295e7858a
Merge pull request #184 from christianbundy/get-about
Use custom getAbout() to replace SSB-About
2020-02-08 19:36:45 -08:00
Christian Bundy df11dc07bc Add basic robots.txt to keep search engines away
Problem: Search engines are controversial and my understanding is that
most people on SSB don't want their messages indexed by search engines.
If that's the case, we should probably disable it.

Solution: Add basic `robots.txt` file to ask search engines to stay away
and please don't save info. I'm concerned that, like `publicWebHosting`
redactions, it gives a false sense of privacy, but it seems like this is
probably what most people would want?
2020-02-08 19:04:08 -08:00
Christian Bundy e3c0b65e5c Use custom getAbout() to replace SSB-About
Problem: The SSB-About plugin is incompatible with our needs. More info
in the GitHub issue linked below and in the code comments.

Solution: Unfortunately, roll our own alternative to the SSB-About
plugin so that we can be 100% sure that it pulls the latest 'about'
published by an author about themselves and doesn't just skip `false`.
2020-02-08 18:50:06 -08:00
Cinnamon d944d8f711 Merge pull request #181 from christianbundy/public-option
Add --public option for public viewers
2020-02-08 16:07:18 -08:00
Christian Bundy 803538628c Fix and document `socialFilter()`
Problem: The `socialFilter()` function wasn't documented and contained a
bug where it wouldn't show your posts when `following = true`. This is
because you usually don't follow yourself, so `following = true` was
basically equivalent to `me = false`.

Solution: Add some documentation and resolve the bug by adding special
handling for when the message is from us *before* passing to the general
implementation for follow/block checking.

Resolves https://github.com/fraction/oasis/issues/155
Resolves https://github.com/fraction/oasis/issues/177
2020-02-08 11:13:51 -08:00
Christian Bundy 0236358dc8 Add --public option for public viewers
Problem: It's hard to show off Oasis or take screenshots without
respecting the `publicWebHosting` convention. While `publicWebHosting`
lacks a formal specification and I'm a bit confused about what its
boundaries are, it sounds like some of our friends would like to avoid
us publishing any of their content on the public web if we can avoid it.

Solution: Add --public option that turns Oasis into a public web viewer.
This makes it **slightly inconvenient** to see these public posts, but
should absolutely not be mistaken for a privacy guarantee. Only HTTP GET
endpoints are allowed, so random people can't publish or change
settings. The name, avatar, description, content warning, and message
contents are replaced with "Redacted", but again, this is all public
information that we can never provide real privacy for.

Resolves https://github.com/fraction/oasis/issues/48
2020-02-08 10:46:57 -08:00
Cinnamon 7ee77172f2
Merge branch 'master' into add-invite-code 2020-02-06 14:22:55 -08:00
Christian Bundy 20b8bd188b Re-add publish to nav menu
Problem: Publish was missing! Oops.

Solution: Re-add it.

Resolves https://github.com/fraction/oasis/issues/171
2020-02-06 11:44:37 -08:00
Cinnamon e6844eb1c4
Merge pull request #169 from christianbundy/fix-blob-sniff
Remove nosniff from blob URLs
2020-02-05 19:31:18 -08:00
Christian Bundy 0240401413 Remove nosniff from blob URLs
Problem: We use nosniff to keep the web browser from getting confused
about what kinds of content we're serving in Oasis, but this causes
problems for blob URLs that have arbitrary data.

Solution: Remove nosniff on blob URLs to let the browser figure out what
kind of content we're serving.

Resolves https://github.com/fraction/oasis/issues/138
2020-02-05 17:03:04 -08:00
Christian Bundy 602a495c7c Fix emoji and breaking space in main nav
Problem: The regular space in the sidebar emoji was breaking the line at
a specific viewport width and the emoji were being shown as the wrong
font.

Solution: Use a non-breaking space and `font-family: initial` for
full-color emoji instead of using the system font.

Resolves https://github.com/fraction/oasis/issues/150
Resolves https://github.com/fraction/oasis/issues/153
2020-02-05 14:35:30 -08:00
Cinnamon 8304dce44e
Merge pull request #161 from christianbundy/private-mentions-publish
Add view info for Private, Mentions, and Publish
2020-02-05 12:50:50 -08:00
Christian Bundy a642d20edd Fix socialFilter() to change `{ me = null }`
Problem: The socialFilter was hiding posts published by the user, which
felt weird and uncanny.

Solution: Fix the default so that `{ me }` isn't hidden from a view
unless the model specifically wants that to happen.

Resolves https://github.com/fraction/oasis/issues/156
2020-02-04 18:05:50 -08:00
Christian Bundy d212948833 Add view info for Private, Mentions, and Publish
Problem: The Private and Mentions page didn't have view labels yet, and
Publish should be its own page instead of being at the top of every
page.

Solution: Inspired by @cinnamon-bun's work to add friendly view labels,
plus a new Publish page.  This also moves the period selection from the
popular page into the view label, which felt better to me with the
previous `<section>` background. I also tried a different text format
for describing the pages, using a common form and using `<strong>` to
draw attention to any change from "Posts from people you follow, sorted
by recency" which feels like the expected default for most people.

@cinnamon-bun: To me this feels like a fun back-and-forth where I'm
riffing on your work and hoping that you do the same, but if it feels
wrong/rude please let me know. Trying to work on designs with a system
like C4 is super new for me and I wouldn't be surprised if there are
pain points to fix!

Resolves https://github.com/fraction/oasis/issues/160
2020-02-04 17:52:50 -08:00
Christian Bundy 547ceeeac9 Add basic follow-back invites to settings page
Problem: There was no way to onboard new users since we couldn't redeem
invites.

Solution: Add basic follow-back invites to the settings page. This takes
an invite string, runs it through invite.accept, and either returns the
error in full *or* redeems the invite quietly.
2020-02-04 15:03:05 -08:00
Cinnamon 351ee2a2b5 remove leftover console.log 2020-02-04 14:21:33 -08:00
Cinnamon b79ece89e6 add title to likes page 2020-02-04 13:59:54 -08:00
Cinnamon 479285d244 add help text explaining what is in each view 2020-02-04 13:30:28 -08:00
Christian Bundy de117f8416 Merge branch 'master' of github.com:fraction/oasis into add-i18n 2020-02-04 09:57:45 -08:00
Cinnamon ebdee55d80
Merge pull request #148 from christianbundy/add-topics-page
Add topics page
2020-02-04 09:45:33 -08:00
Cinnamon 7dfd84b65e
Merge pull request #146 from christianbundy/no-strangers
No strangers
2020-02-03 21:55:27 -08:00
Christian Bundy 1099395dfa Merge branch 'master' of github.com:fraction/oasis into add-i18n 2020-02-03 21:51:59 -08:00
Cinnamon 01d2ad7781
Merge pull request #133 from christianbundy/faster-following
Make 'Following' page way faster
2020-02-03 21:40:32 -08:00
Cinnamon 833e74ae8a
Merge pull request #141 from christianbundy/fix-search
Fix search hanging when querying 3 or fewer chars
2020-02-03 21:34:28 -08:00
Cinnamon 1a25b09cbc
Merge pull request #143 from christianbundy/fix-img
Fix /image/ URL returning a broken image
2020-02-03 21:25:43 -08:00
Cinnamon 4d00893981
Merge pull request #145 from christianbundy/fix-key-not-found
Make "key not found" error more useful
2020-02-03 21:19:46 -08:00
Christian Bundy 7f40a99799 Add 'Topics' page to show latest root posts
Problem: @masukomi pointed out that the 'latest' view doesn't show the
awesome slice of content that you'll see if you just look at root posts.

Solution: Let's experiment with them! This commit adds a 'Topics' page
that has the latest root posts from people you're following.
2020-02-02 16:54:37 -08:00
Christian Bundy e28095e27d Fix nav alignment on smaller screens
Problem: The nav is aligned to the left of the screen on mobile, which
feels off-center and unbalanced on mobile. https://github.com/fraction/oasis/issues/135

Solution: Center the menu to optimize for space around the links.
2020-02-02 16:43:15 -08:00
Christian Bundy c2ea8f7cb5 Hide strangers on popular+latest and hide blocked
Problem: We shouldn't be showing any strangers on the popular or latest
pages. We shouldn't be showing anyone who's been blocked on any of those
feeds.

Solution: Don't show blocked people on any pages and don't show
strangers on the popular / latest pages.
2020-02-02 16:37:49 -08:00
Christian Bundy 9258f4753c Make "key not found" error more useful
Problem: If the user tries to see a thread and the link points to a
message we don't have, then we don't have any way to display anything in
the thread. How could we even know which thread it's in?

Solution: Throw the error but make it more useful and fix the "non-error
thrown" verbiage that we've inherited from a dependency trying to throw
a non-error.
2020-02-02 15:36:15 -08:00
Christian Bundy d0e98b9663 Fix /image/ URL returning a broken image
Problem: I think during a refactor this code was changed and ended up
breaking the "fake image" that we return when the user doesn't have an
image. We also don't see image errors because they aren't in the browser
viewport if they return text and we don't `console.error()` our errors.

Solution: Fix the image code to return a PNG as a buffer and duplicate
errors to stderr.
2020-02-02 14:42:40 -08:00
Christian Bundy 5635b36074 Merge branch 'master' of github.com:fraction/oasis into fix-search 2020-02-02 12:24:06 -08:00
Christian Bundy b0103ad847 Fix search hanging when querying 3 or fewer chars
Problem: SSB-Search has a bug where too few characters just hangs the
search indefinitely and never returns. https://github.com/fraction/oasis/issues/107

Solution: Enforce a minimum length of 3 characters in the search. I
bumped into another bug where HyperScript, a dependency of HyperAxe,
doesn't support the `minlength` attribute, so I had to deploy a small
workaround for that too. The fixes aren't very pretty but they're better
than just ignoring the problem.
2020-02-02 12:20:47 -08:00
Christian Bundy edf87a70df Persist language in cookies and fix fork drop-down
Problem: The previous commits didn't persist language choices and the
drop-down's initial value wasn't respecting the language you selected.

Solution: Persist the language choice in a cookie, defaulting to
English, and build the drop-down with the selected language. This also
changes the word "Spanish" to "Español", and slightly refactors
`http.js` to accept *middleware* rather than just routes. This lets us
add other middleware, such as the language selection middleware added in
this commit.
2020-02-02 09:31:43 -08:00
bramdroid 7acd841f3f
Update i18n.js 2020-02-01 14:27:24 -08:00
Christian Bundy 5225deef39 Remove duplicate condition 2020-02-01 14:16:06 -08:00
Christian Bundy 339fbdcf6a Add super basic language selection
Problem: The previous commit added English as a language but didn't add
other languages or ways to switch between them.

Solution: Add the most primitive language selection possible and a few
small translations contributed by @bramdroid during a totally unrelated
conversation. This does not persist the language selection and doesn't
auto-select the current language from the dropdown, but those should be
easy to add in the future.
2020-02-01 14:08:37 -08:00
Christian Bundy 214ef3335e Add basic scaffolding for internationalization
Problem: It was impossible to do any internationalization because
strings were all embedded throughout Oasis.

Solution: Add an internationalization submodule that provides
language-specific strings for the text elements in views. In future
commits we can add language selection and fallbacks for when the
selected language doesn't support the text we need to have translated.
2020-02-01 13:20:22 -08:00
Christian Bundy 75b5beeb24 Make 'Following' page way faster
Problem: The 'Following' page was super slow because we were doing a
MuxRPC request on every single message.

Solution: Do one request to see who we have relationships with, filter
out the people we aren't following, and then check against that list
instead of doing a bunch of MuxRPC calls.

| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `curl http://localhost:3000/public/latest/following` | 500.9 ± 163.4 | 392.1 | 881.4 | 1.00 |
| `curl http://localhost:3456/public/latest/following` | 4663.7 ± 184.6 | 4438.6 | 5075.2 | 9.31 ± 3.06 |
2020-01-31 21:31:33 -08:00
Christian Bundy ff54db563a
Merge pull request #132 from fraction/no-follow-yourself
Remove follow button from your own profile
2020-01-31 21:05:54 -08:00
Cinnamon 12ad2c5834 Remove follow button from your own profile 2020-01-31 20:34:46 -08:00
Christian Bundy 0e9243eff0 Merge branch 'master' of github.com:fraction/oasis into view-markdown 2020-01-31 17:48:05 -08:00
Christian Bundy ede2a4efcc
Merge pull request #130 from fraction/reorder-navbar
Navbar refresh: reorder, rename, add emojis
2020-01-31 17:46:57 -08:00
Cinnamon b34fce33c2 Let navbar items wrap on narrow screen 2020-01-31 16:34:37 -08:00
Cinnamon fecee28dd4
Merge pull request #122 from christianbundy/faster-popular
Make 'Popular' page faster
2020-01-31 16:18:59 -08:00
Cinnamon 753b4512f7 Change Latest emoji from NEW to a rabbit 2020-01-31 16:08:07 -08:00
Cinnamon 71d96128bd Change header on meta page to "Settings" 2020-01-31 15:58:40 -08:00
Cinnamon 08479d47a6 Move profile link before mentions link 2020-01-31 15:56:06 -08:00
Cinnamon 4e53aca6d9 Adjust navbar links - reorder, rename, and add emojis 2020-01-31 15:51:32 -08:00
Cinnamon 0c6a2458b8
Merge pull request #123 from christianbundy/following
Add basic following page
2020-01-31 15:32:01 -08:00
Christian Bundy 01701d5119 Fix SVG rendering by setting content-type
Problem: Most browsers parse SVG files as XML and refuse to display it
in an `<img>` tag. It's usually unsafe to have browsers try to sniff the
file type themselves, because they can be tricked into running unsafe
code, so we want to set the file type ourselves in the server.

Solution: Use the Is-SVG library for a quick-n-dirty check for whether a
buffer is an SVG. If so, we set the file type accordingly.
2020-01-31 15:04:13 -08:00
Christian Bundy 02326867a1 Move Markdown handling from model module to view
Problem: The model code was doing our Markdown rendering, which feels to
me like a layer violation because *generally* the model is meant to be a
thin abstraction over the underlying database without any concept of the
presentation layer.

Solution: Move the Markdown renderer to the view module and manage
Markdown rendering in the presentation layer.
2020-01-31 14:39:18 -08:00
Christian Bundy ca2bc656f5 Add basic following page
Problem: We don't always want to see all of the messages on our
computer, sometimes we just want to see messages from the people we're
explicitly following. The 'Popular' and 'Latest' pages don't help with
that.

Solution: Add a super basic page that just shows the latest messages
from the people you're explicitly following.
2020-01-30 20:54:47 -08:00
Christian Bundy 10fd740ef7 Make 'Popular' page faster
Problem: The popular page is ungodly slow.

Solution: Make it faster! This is done by checking the timestamp before
the other constraints that we add to messages, which is mostly useful
because most messages that fail the filter will fail on the timestamp
check.
2020-01-30 18:15:22 -08:00
martingrondin d0d12bd83f Fixed capitalization on networking buttons on Meta page. 2020-01-30 02:04:49 -05:00
Christian Bundy 53c1a1ad94 Hide private messages from author profiles
Problem: Showing private posts on profiles is scary and may give people
the impression that these posts are visible.
https://github.com/fraction/oasis/issues/113

Solution: Hide private messages when rendering public profiles and
change the method name to be very clear that it only returns public
messages.
2020-01-28 17:15:48 -08:00
Christian Bundy ec3e4d489a Merge branch 'master' of github.com:fraction/oasis into conn-buttons 2020-01-28 10:25:42 -08:00
Christian Bundy b56b4bcd74 Update Flotilla to fix conn.stop bug
Problem: Stopping the networking would sometimes allow peers to remain
connected, which was confusing.

Solution: Upgrade to latest SSB-CONN to pull in a bugfix for this
behavior. Huge thanks to @staltz for the quick fix!
2020-01-28 10:22:24 -08:00
Christian Bundy 6735783b3f Fix sidebar moving along X axis on short pages
Problem: On short pages, like the search page, there's no scrollbar
gutter on the right side of the page, which moves everything a few
pixels to the right. After banging my head against this for an hour I finally
realized that it only happens when your viewport is taller than the
content on the page, which creates the scrollbar. This was reported as:
https://github.com/fraction/oasis/issues/96

Solution: Change the display so that we consistently show a scrollbar
gutter on the right side of the page regardless of whether we need it
(e.g. on very short pages or on very tall monitors). This means that
when we center the content on the page it won't move depending on the
height of the page, which was frustrating and janky.
2020-01-28 12:11:39 -05:00
Christian Bundy 03976b288d Solve inconsistent widths between pages
Problem: The `<section>` elements on some pages have different sizes,
which means that the sidebar is doing wonky stuff.

Solution: Make the sections all have a consistent width. Note that
there's still a few pixels of jank on the 'search' page, I'm not sure
why that's happening. The element inspector is reporting that everything
is the same width but that isn't true.
2020-01-28 12:11:39 -05:00
Christian Bundy 40c19c6a20 Add simple nav sidebar on large screens
Problem: Putting the navigation at the top of the screen makes it
impossible to use when you're scrolling through a page, which isn't a
good user experience. It was never meant to be permanent, and I think
everyone has pointed out that it's been a pain.

Solution: Super simple sidebar nav when people are on bigger screens.
This doesn't solve the problem on mobile, and it doesn't incorporate the
'popular' page's interval settings, but I think it's a step in the right
direction.
2020-01-28 12:11:39 -05:00
Jonathan Dahan d5e47a581d
Merge branch 'master' into caps 2020-01-28 16:22:39 +00:00
Jonathan Dahan 43f29e7658
Merge branch 'master' into favicon-dimensions 2020-01-28 16:05:26 +00:00
Christian Bundy ae08e0715f Use capitalization for Oasis links and buttons
Problem: Using all-lowercase-everything isn't really a standard around
the web and it might be better to use consistent capitalization. This
was brought up in: https://github.com/fraction/oasis/issues/98

Solution: This changes the main navigation to use links with the first
letter capitalized, like how Patchwork + Twitter + Mastodon + etc do it.
This means that we're consistently using sentence case everywhere, which
I think is our best option. Originally I tried experimenting with
all-caps for actions, which I found aesthetically pleasing, but you have
to reduce the font size to make it look good (bad!) and I was reading
that all-caps text is harder for friends with dyslexia or vision
impairments.
2020-01-27 15:48:13 -08:00
Christian Bundy 0e026e020c
Merge branch 'master' into favicon-dimensions 2020-01-27 13:33:00 -08:00
Christian Bundy b61d696a53
Merge branch 'master' into fix-tangle 2020-01-27 13:32:58 -08:00
Christian Bundy 4d1e505701 Change to only inject SSB-Tangle when necessary
Problem: We were overwriting SSB-Tangle with itself, which is fine, but
kind of confusing and requires some knowledge on what is and isn't safe
for Secret-Stack.

Solution: Only inject SSB-Tangle if it doesn't already exist, which
makes the code easier to reason about.
2020-01-27 12:06:33 -08:00
Christian Bundy 64a2ed135c Update CLI with more info on --offline
Problem: The --offline documentation doesn't mention that networking
status can be changed, which may give the false understanding that the
networking is permanently offline when you use that flag.

Solution: Add a note that mentions that the 'meta' page lets you change
your networking status, and that --offline is only applicable to the
starting state of Oasis.
2020-01-27 11:58:32 -08:00
Christian Bundy f40c6ff484 Fix connection restart behavior
Problem: It was starting then stopping, which isn't what we want.

Solution: Swap the lines and make sure that we stop, *then* start.
2020-01-27 11:52:29 -08:00
Christian Bundy 681e3c6755 Add buttons to 'meta' page to manage networking
Problem: Sometimes you want to disconnect from the network but you don't
want to have to restart Oasis with the `--offline` flag
(https://github.com/fraction/oasis/issues/89). Sometimes networking gets
stuck and you need to run the equivalent of `ssb gossip reconnect`
(https://github.com/fraction/oasis/issues/63).

Solution: Buttons on the 'meta' page that let you start, stop, or
restart SSB-CONN whenever you want. Note that this commit includes an
update to SSB-CONN, but this version and the previous version both have
a bug where hitting 'stop' twice in a row will throw an error. This
commit implements a workaround for the bug, but it's something we'll
want to remove later once the underlying bug is fixed.
2020-01-26 16:55:48 -08:00
Christian Bundy dec0f42b0f Fix tangle bug when Patchwork is used as a server
Problem: Patchwork is missing a plugin that we need to set the `branch`
property when posting a message. This property is important because it
helps us sort threads, so we're throwing an error when it isn't
available. See: https://github.com/fraction/oasis/issues/21

Solution: HACK THE ~~PLANET~~ API. This commit injects the plugin we
need via Oasis, which is a bit of a duct tape solution but it *is* a
solution.
2020-01-26 12:57:42 -08:00
Christian Bundy b6314309f6 Add some basic type info with JSDoc
Problem: When we don't have any documentation for variable types it's
difficult for both humans and machines to parse our code.

Solution: As discussed in https://github.com/fraction/oasis/issues/78,
adding some JSDoc information on function signatures would be a nice
step in the right direction and could make debugging easier.
2020-01-26 12:42:28 -08:00
Christian Bundy 502e5e400d Use ssb-backlinks to improve /inbox page load
Problem: The /inbox page was being rendered super slowly because it was
reading through tons of messages.

Solution: There isn't a way to query the database for "private messages
for me", although maybe there should be, but one way we can get
something close is querying for "messages that reference me". Every
message that's encrypted for us will have a `.value.content.recps`
property that includes our feed ID, so we just have to filter out the
public messages and we're about 4 times faster than the previous
implementation.

```console
$ hyperfine 'curl -I http://localhost:4515/inbox' 'curl -I http://localhost:3000/inbox'
Benchmark #1: curl -I http://localhost:4515/inbox
  Time (mean ± σ):      3.352 s ±  0.093 s    [User: 2.0 ms, System: 4.3 ms]
  Range (min … max):    3.231 s …  3.483 s    10 runs

Benchmark #2: curl -I http://localhost:3000/inbox
  Time (mean ± σ):     811.8 ms ±  88.3 ms    [User: 2.7 ms, System: 2.9 ms]
  Range (min … max):   709.1 ms … 972.5 ms    10 runs

Summary
  'curl -I http://localhost:3000/inbox' ran
    4.13 ± 0.46 times faster than 'curl -I http://localhost:4515/inbox'
```
2020-01-25 10:23:19 -08:00
Christian Bundy 416b715eb0 Fix incorrect comment, throw if no recipients 2020-01-24 14:26:33 -08:00
Christian Bundy 52a4d45217 Fix private reply with `recps` bug
Problem: Trying to reply to some messages sent with Patchbay fail
because the schema check is throwing an error.

Solution: When we encounter `recps` like `{ name, link }`, normalize it
to just `link` and publish a well-formed message that passes the schema
check.
2020-01-23 14:41:23 -08:00
Christian Bundy 5b97ed1913 Change favicon dimensions to fit in tab
Problem: Some of the icon was being clipped in my browser. I think that
this is because the SVG text actuall extends down under the line (like a
`g` or `y`).

Solution: Change SVG viewBox dimensions and SVG size to fit correctly.
2020-01-23 13:43:46 -08:00
Cinnamon b2e7652b31 Show peers by name, by host, or by key 2020-01-23 12:46:09 -08:00
Cinnamon a963248ed3
Merge branch 'master' into meta-names 2020-01-23 12:03:16 -08:00
Cinnamon 9064e2fe2b
Merge branch 'master' into common-good 2020-01-23 11:10:22 -08:00
Christian Bundy 817bfaa7e0 Add prototype for names in peer list 2020-01-22 17:29:14 -08:00
Cinnamon fffa827244 Add help text in Meta about peer connections 2020-01-22 15:19:00 -08:00
Jonathan Dahan e706a048b5 Create svg favicon 2020-01-22 16:23:13 -05:00
Christian Bundy b34b04c2c2 Experiment with common-good module 2020-01-21 16:22:19 -08:00
Christian Bundy 8656b2d18c
Merge branch 'master' into follow-unfollow 2020-01-14 08:54:08 -08:00
Jonathan Dahan 22bf2719be refactor follow and unfollow to share code 2020-01-14 11:32:33 -05:00
Stephen Solka d244bb29c5 filter messages outside time range 2020-01-12 20:39:42 +00:00
Christian Bundy 78b26f3de9 Fix follow button showing on own profile 2020-01-11 15:38:33 -08:00
Christian Bundy 4304178be6 Add follow and unfollow 2020-01-11 15:34:43 -08:00
Christian Bundy 2a6bcc993f Merge branch 'master' of github.com:fraction/oasis into mediator 2020-01-09 09:26:17 -08:00
Christian Bundy 9297b5f198 Separate SSB interface from model code 2020-01-09 09:04:46 -08:00
Christian Bundy ccbc877b8d Move cooler from directory to file 2020-01-09 08:46:39 -08:00
Christian Bundy b144aa378c Move cooler to submodule until refactor 2020-01-08 20:46:54 -08:00
Christian Bundy 0bd3ae42a4 Move controllers into src/index 2020-01-08 13:56:52 -08:00
Christian Bundy 4670ba6d93 Remove configure file 2020-01-08 13:35:20 -08:00
Christian Bundy bc2b9ea929 Change models to follow mediator pattern 2020-01-08 13:10:49 -08:00
Christian Bundy 99ffe1529a Change views to follow mediator pattern 2020-01-08 12:56:49 -08:00
Christian Bundy 0622d97e96 Replace pages with single controller file 2020-01-08 12:38:47 -08:00
Christian Bundy ca29986131 Move shebang from cli.js to index.js 2020-01-08 12:04:43 -08:00
Christian Bundy 5f528588b1 Change src directory to use mediator pattern 2020-01-08 08:37:52 -08:00
Cinnamon 2c46cbf6f2 Add CLI flag for offline mode (using temporary hack with globals) 2020-01-07 11:53:46 -08:00
Christian Bundy 09db160cd4 Merge branch 'private-comment' 2020-01-06 18:11:00 -08:00
Christian Bundy 4d0338a846 Add private publishing security measure 2020-01-06 17:05:41 -08:00
Christian Bundy 1220e12c7a Add automatic reconnection on failure
This automatically reconnects the client, starting an SSB service in the
background if the connection fails repeatedly.
2020-01-06 14:24:30 -08:00
Christian Bundy 950ad15f07 Fix missing space in comment language 2020-01-04 16:13:20 -08:00
Christian Bundy f0702894f8 Remove debugging console.log 2020-01-04 14:57:19 -08:00
Christian Bundy 0723077d19 Add comment response to private messages 2020-01-04 14:53:31 -08:00
Stephen Solka f288201850 yay for test cases. oops change require path 2020-01-01 14:12:04 -05:00
Stephen Solka 79e979708a Merge remote-tracking branch 'origin/master' 2020-01-01 14:01:56 -05:00
Stephen Solka d503a35ed3 move server by cooler. ready for future refactors 2020-01-01 14:01:28 -05:00
mycognosist dc103d6168 Add bottom margin to lift Comment button 2020-01-01 17:27:01 +00:00
Stephen Solka 4882934610 Add support for running oasis in a docker container 2020-01-01 10:07:41 -05:00
Christian Bundy 6d6fe9d268
Fix threading bug with mysterious messages 2019-12-29 15:10:45 -08:00
Christian Bundy 306c1642a3
Change order of 'comment' and 'reply' 2019-12-28 17:30:38 -08:00
Christian Bundy 9ef1920f1d
Change to disable replies to replies
There are very few reasons you'd ever want to do this and I think it's
more helpful to just disable it altogether. A reply should be thought of
as **creating a new thread**, and if you have a response to the thread
that's created then it should be posted as a **comment**.

Making a new thread as a response to an existing thread is an advanced
action and I think the simplicity is worth the small reduction in the
degrees of freedom for advanced users. Maybe I'll change my mind?
2019-12-28 16:47:22 -08:00
Christian Bundy 826c90b8af
Fix comments and rename 'reply all' to 'comment'
This changes some phrasing for clarity and adds some helpful
explanations when you're publishing a comment or a reply.

This also fixes comments on replies, which were previously just being
added as a sibling reply. This doesn't really matter because it has the
same layout in the UI and it's also very rare, but it allows us to have
separate threads for each reply.
2019-12-28 16:30:49 -08:00
Christian Bundy 42c72e7b8d
Change to make Sharp an optional dependency 2019-12-27 16:28:36 -08:00
Christian Bundy 96636685ae
Change to increase resolution of images 2019-12-16 12:37:11 -08:00
Christian Bundy 9db511f51f
Remove meta-table from profiles 2019-12-16 12:07:52 -08:00
Christian Bundy c0e491cec9
Fix profile regression 2019-12-16 11:25:08 -08:00
Christian Bundy 688627a462
Change replies to show full threads 2019-12-16 09:20:27 -08:00
Christian Bundy 733e0a4cfe
Fix like button focus 2019-12-16 08:11:58 -08:00
Christian Bundy 86aa4c5453
Change section view to reduce clutter 2019-12-15 18:22:51 -08:00
Christian Bundy ac3d2b58a0
Change styles to reduce visual noise
Big thanks for @cinnamon-bun for these suggestions!
2019-12-15 16:16:15 -08:00
Christian Bundy 3261648cb9
Fix like button hover 2019-12-15 15:25:22 -08:00
Christian Bundy 2ec97940df
Replace faux-shadow with thin border, change default theme 2019-12-15 14:08:38 -08:00
Christian Bundy 037e173fef
Remove message CSS class 2019-12-15 11:01:02 -08:00
Christian Bundy 2f565ceacf
Change to use more consistent size framework 2019-12-15 10:45:41 -08:00
Christian Bundy c3d650018a
Fix thread target highlight for private messages 2019-12-15 08:52:54 -08:00
Christian Bundy 5a0702c4dd
Add emoji to public publish 2019-12-14 17:07:44 -08:00
Christian Bundy 7cdf74c558
Add extra info for publish and search 2019-12-14 16:32:28 -08:00
Christian Bundy f9e22ae2a5
Change default theme to Tomorrow 2019-12-14 16:06:44 -08:00
Christian Bundy 6805d9e2a6
Change styles more 2019-12-14 14:50:54 -08:00
Christian Bundy 5ce9cca2d1
Change theme to have sections with color contrast
I think I was overusing borders and it gave the UI a wireframey skeleton
feel that wasn't very fleshed out. The dependence on thin borders also
caused trouble when using themes with low color contrast, since you'd
have thin lines that were *also* low-contrast. Bad!

Instead, I'm using a "card UI" style with varying colors, which I think
looks better (???) and seems to be more compatible with more themes.
Happy to roll this back if others don't dig it.
2019-12-14 13:29:04 -08:00
Christian Bundy 072b8160bb
Change style for content warnings 2019-12-13 14:25:39 -08:00
Christian Bundy 277f247be3
Fix form padding regressoin 2019-12-12 15:38:20 -08:00
Christian Bundy 3c78a6ac6c
Fix bug with uppercase in search query 2019-12-12 15:36:32 -08:00
Christian Bundy 122852a14c
Change form padding to margin 2019-12-12 15:32:50 -08:00
Christian Bundy 6205662831
Remove hacky workarounds for SSB-OOO bug
See: https://github.com/ssbc/ssb-ooo/pull/10
2019-12-12 14:37:50 -08:00
Christian Bundy c5284b0af4
Add styling for search box 2019-12-12 14:37:36 -08:00