[1mdiff --git a/50_bubble.py b/50_bubble.py[m
[1mindex e357a9b..bfd7fab 100644[m
[1m--- a/50_bubble.py[m
[1m+++ b/50_bubble.py[m
[36m@@ -524,7 +524,7 @@[m [mBubble is open source:[m
page += """[m
[m
[31m-Posts and comments are composed of "segments". There can be any number of segments, and the order of segments can be freely changed in the composer. There are four types of segments:[m
[32m+[m[32mPosts and comments are composed of "segments". There can be any number of segments, and the order of existing segments can be freely changed in the composer. There are four types of segments:[m
[m
[36m@@ -533,10 +533,18 @@[m [mPosts and comments are composed of "segments". There can be any number of segmen[m
[m
When viewing the post page, each of these segments are visible in their entirety. In various other places, a shortened "feed preview" is shown instead. The composer shows a preview of both the shortened version and the full page contents before you can publish the post.[m
[m
[31m-The formatting of the post is altered for Tinylogs: all headings are converted to level 3.[m
[31m-[m
When making a new post, what you enter in the "New post" prompt becomes the body text of the post and the title will be left blank. You can then edit the post to add a title, if necessary. However, if you begin the text entered into the prompt with a level 1 heading (#), that first line will be extracted and used as the post title. In issue tracker subspaces, the first line is always used as the issue title.[m
[m
[32m+[m[32m### Mentioning Users, Issues and Commits[m
[32m+[m
[32m+[m[32mYou can use an "@username" mention to notify another user about your post or comment. Multiple users can be notified in the same message. Usernames are case-insensitive, so you don't have to capitalize the @-mention exactly like the user's name is capitalized.[m
[32m+[m
[32m+[m[32mWhile Bubble does not support private/direct messages, you can make a post in your "u/" subspace, flag it as omitted from All Posts and feeds, and mention one or more users who you wish to communicate with. This way the conversation at least does not clutter the front page or subspace feeds.[m
[32m+[m
[32m+[m[32mIn an issue tracker, you can refer to other issues by their ID number, for instance "#123". A link to the mentioned issue appears automatically, and a cross reference will also appear in the mentioned issue's comment history.[m
[32m+[m
[32m+[m[32mIf an issue tracker is linked with a Git repository, you can also refer to individual Git commits by their SHA hash simply by writing out (the beginning of) the hash.[m
[32m+[m
[m
Because Gemini limits the amount of data per request to 1024 bytes, it is unsuitable for uploading files to the server. Therefore, Bubble supports a protocol called Titan for uploading files.[m
[36m@@ -566,13 +574,55 @@[m [mTitan uploads always deal with the actual contents of the post/segments, so spec[m
[m
When editing segments in the draft composer, you may sometimes accidentally submit the input and overwrite the contents, losing some text that you meant to keep in there. While Bubble does not currently keep a history of past edited versions, your client may be able to help you. If you navigate backwards, the old contents of the segment may be found in a cached copy of the page.[m
[m
[32m+[m[32m## Notifications[m
[32m+[m
[32m+[m[32mIn addition to the usual @-mentions, comments and likes, you can be notified about new posts in a thread you were part of, and you can follow users, subspaces, and individual posts to be notified of new comments and/or posts in/by them. There are also notifications for new polls and issues that have been closed. Each of these notification types can be individually enabled or disabled.[m
[32m+[m[32m=> /settings/notif Check out the list of options in Settings.[m
[32m+[m
[32m+[m[32mWhen clicking on a notification in Dashboard or elsewhere, it is automatically hidden.However, the notification "/notif/" links remain valid for up to one week, during which you can access a particular notification multiple times.[m
[32m+[m[32m=> /notif/history Past notifications can be viewed in the Notification History.[m
[32m+[m
[32m+[m[32m### Emails and "Do Not Disturb"[m
[32m+[m
[32m+[m[32mBubble supports email notifications to keep you informed about activity in a timely fashion. Enabling this is optional, but it can be argued that an integral part of a communication tool is proactively keeping people in the loop about noteworthy events.[m
[32m+[m
[32m+[m[32mThe emailing frequency is user-configurable, so you can choose how often emails about unseen notifications are sent. Furthermore, to prevent emails from being sent at inconvenient times, you can set an exclusion range. For example, a reasonable night hour range could be "21-03" (inclusive; the first emails would start arriving at 4 in the morning).[m
[32m+[m
[32m+[m[32m### Per-Post Notifications[m
[32m+[m
[32m+[m[32mFeed entries sometimes have a 🔔 icon. This means at least one of your unread notifications is about that post. When viewing such a post, the relevant notifications are listed right there under Actions, so you check them off and/or clear them more conveniently.[m
[32m+[m
[m
[m
[31m-## Filtering Feeds and Content[m
[32m+[m[32m## Feeds[m
[32m+[m
[32m+[m[32mThe front page's feed can be switched between "All Posts" and "Followed" in your Settings.[m
[32m+[m
[32m+[m[32mSorting by 🔥 Hotness orders the posts based on how much time has passed since the latest comment in the discussion thread and how many different people have commented. The actual number of comments has no influence. The idea is to keep active discussion threads near the top of the feed.[m
[32m+[m
[32m+[m[32m### Tag Filtering[m
[32m+[m
[32m+[m[32mThe front page feed, subspaces, user feeds, and issue trackers can all be filtered based on tags applied on posts.[m
[32m+[m
[32m+[m[32m### Gemlogging with Gemini/Atom Feeds[m
[32m+[m
[32m+[m[32mUser subspaces ("u/" prefix) are intended for personal posts. Each individual post can be either included in or omitted from Gemini/Atom feeds using the toggles in the composer. In Settings, you can set which mode is the default. By omitting a post from Gemini/Atom feeds, it effectively becomes a microblog post that only appears in Tinylogs and on Bubble itself. This way, you can publish your "u/" Gemini/Atom feed as a gemlog that contains longer-form posts, while still being able to have short-form posts, too.[m
[32m+[m
[32m+[m[32mYou can use tag filtering to have more specialized feeds. You are free to tag your posts however you like.[m
[32m+[m
[32m+[m[32mThe post title that is set in the composer will be used as-is in Gemini/Atom feeds. If the title is missing, a truncated version of the post contents are used instead.[m
[32m+[m
[32m+[m[32mA convenient action link is provided to submit your "u/" Gemini feed and your individual posts to the Antenna aggregator. Antenna submission does not happen automatically so you retain control of when and if the submission is done.[m
[32m+[m
[32m+[m[32m### Tinylogs[m
[32m+[m
[32m+[m[32mThe formatting of posts is altered when viewing them via Tinylog: all headings are converted to level 3.[m
[32m+[m
[32m+[m[32m## Following and Muting[m
[m
You can follow and mute posts, subspaces, and users to customize their visibility and notifications about them. In Settings, you can choose whether the front page feed shows all posts — except mutes ones — or just posts from followed subspaces and users.[m
[m
[36m@@ -590,9 +640,51 @@[m [mMuting is private, too. No one can see what you have muted, or who has muted the[m
[m
[31m-### Tag Filtering[m
[32m+[m[32m## Subspaces[m
[m
[31m-The front page feed, subspaces, user feeds, and issue trackers can all be filtered based on tags applied on posts.[m
[32m+[m[32m### Moderation[m
[32m+[m
[32m+[m[32mEvery subspace must have at least one moderator assigned to it, or otherwise the subspace is locked into read-only mode.[m
[32m+[m
[32m+[m[32mModerators are able to delete posts and comments, and edit titles of posts. They cannot edit the contents of posts, though.[m
[32m+[m
[32m+[m[32mPosts can be moved between subspaces. Moderators can move any post in their subspace to another subspace, and post authors can always move their own posts elsewhere. Moving a post does not break URLs because post IDs are unique, and a URL that uses the old subspace name will be redirected to the new location. However, issue tracker posts cannot be moved due to per-subspace issue ID numbering.[m
[32m+[m
[32m+[m[32mA moderator of a subspace can assign any other user as an additional moderator of the subspace. Each moderator has the same access rights, regardless of who originally created the subspace.[m
[32m+[m
[32m+[m[32m### Issue Trackers[m
[32m+[m
[32m+[m[32mIndividual subspaces can be used as issue trackers instead of regular posting. Issue trackers differ from regular subspaces in that each post will be assigned a unique ID number, and each issue has an open/closed status. One can also reference issues in the same tracker just by writing the ID number preceded by a hash:[m
[32m+[m
[32m+[m[32m> Also see #123.[m
[32m+[m
[32m+[m[32mSubspace moderators can enable or disable issue tracking mode in an empty subspace.[m
[32m+[m
[32m+[m[32mBubble instance administrators are able to attach a Git repository to an issue tracker. This causes a bare clone of the repository to be fetched and periodically updated. Git commits that reference issues in their log messages will automatically appear in the relevant issue's discussion history, and when Git commit hashes are detected in issues and issue tracker comments, links to the commits are automatically displayed.[m
[32m+[m
[32m+[m[32mUse of tags is recommended in issue trackers, for example to make a distinction between features and bugs. The list of issues can be filtered based on tags for easier navigation.[m
[32m+[m
[32m+[m[32m## Account Recovery[m
[32m+[m
[32m+[m[32mOccasionally people lose their client certificates and thus also lose access to their Bubble account. Contacting the administrator is fine for account recovery but it also has some significant drawbacks. For example, the administrator may not be able to verify that the account actually belongs to you. To facilitate account recovery, there is an automated certificate recovery feature.[m
[32m+[m[32m=> /settings/certs You can go to your account settings and set a Recovery URL.[m
[32m+[m[32mThen, when disaster has struck and you've lost your registered certificates, you can do the following:[m
[32m+[m
[32m+[m[32m* 1. Make your new certificate available as a PEM file at the previously configured URL. Do NOT include the private key — that is not meant to be published under any conditions.[m
[32m+[m[32m* 2. Activate the same certificate in your Gemini client on the Bubble front page.[m
[32m+[m[32m* 3. Select the "Recover certificate" option and enter your user name.[m
[32m+[m[32m* 4. Bubble downloads the certificate from your recovery URL. If (and only if) it matches the client certificate active in your client, the certificate will be registered to the account.[m
[32m+[m[32m* 5. For privacy reasons, remove the certificate at the recovery URL.[m
[32m+[m
[32m+[m[32mIf you have a place where you can publish files on Gemini, such as your own capsule, it is recommended to always have the recovery URL configured. It's a good idea to use a directory and/or file name that doesn't currently exist and is unlikely to be easily guessed. In any case, this URL should only point to an existing file while you are recovering your account. You probably don't want to keep your client certificate published otherwise.[m
[32m+[m
[32m+[m[32m## Restricting Access[m
[32m+[m
[32m+[m[32mAn important use case for Bubble is providing individuals and small groups of people a personal publishing platform or a private space. For this purpose, user registration can be closed, and there are admin actions to create new users, generate random passwords, and revoke certificates.[m
[32m+[m
[32m+[m[32mThe frontpage
configuration option defines a static Gemtext page that is shown to unregistered visitors. This page is the only thing unregistered visitors are able to see.[m
[32m+[m
[32m+[m[32mThe user.subspaces
configuration option controls whether users can create new subspaces, in case the admin wants the subspaces to remain a fixed set of categories, for example.[m
"""[m
return page[m
[m
[1mdiff --git a/composer.py b/composer.py[m
[1mindex 5f7bda7..dd3c10f 100644[m
[1m--- a/composer.py[m
[1m+++ b/composer.py[m
[36m@@ -374,7 +374,7 @@[m [mdef make_composer_page(session):[m
page += f'=> {segment.url} {segment.content}\n'[m
page += f'=> {seg_link}/{segment.id} ✏️ Edit label\n'[m
[m
[31m- page += f"=> {session.path}move-segment/{segment.id} ↕︎ Move/remove\n"[m
[32m+[m[32m page += f"=> {session.path}move-segment/{segment.id} ↕︎ Move/actions\n"[m
[m
if len(segments):[m
page += f'\n'[m
text/plain
This content has been proxied by September (3851b).