From 6c7cf7d9b5f2faec03fe75881b5ec81e0ac851fd Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 31 Mar 2019 15:32:11 +0300 Subject: [PATCH 001/116] some initial documentation about configuration --- docs/CONFIGURATION.md | 85 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 docs/CONFIGURATION.md diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md new file mode 100644 index 00000000..5bb65aa1 --- /dev/null +++ b/docs/CONFIGURATION.md @@ -0,0 +1,85 @@ +# Pleroma-FE configuration and customization for instance administrators + +* *For user configuration, see USER_GUIDE.md* +* *For local development server configuration, see HACKING.md* + +## Where configuration is stored + +PleromaFE gets its configuration from several sources, in order of preference (the one above overrides ones below it) + +1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://git.pleroma.social/pleroma/pleroma/blob/develop/docs/config.md#frontend_configurations) +2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/static/config.json). +3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/src/modules/instance.js) ) + +## Instance-defaults + +Important note that some configurations are treated as "instance default" - it means user is able to change this configuration for themselves. Currently, defaults are only applied for new visitors and people who haven't changed the option in question. If you change some instance default option, there is a chance it won't affect some users. + +There's currently no mechanism for user-settings synchronization across several browsers, *user* essentially means *visitor*, most user settings are stored in local storage/IndexedDB and not tied to an account in any way. + +## Options + +### `theme` +Default theme used for new users. De-facto instance-default, user can change theme. + +### `background` +Default image background. Be aware of using too big images as they may take longer to load. Currently image is fitted with `background-size: cover` which means "scaled and cropped", currently left-aligned. De-facto instance default, user can choose their own background, if they remove their own background, instance default will be used instead. + +### `logo`, `logoMask`, `logoMargin` +Instance `logo`, could be any image, including svg. By default it assumes logo used will be monochrome-with-alpha one, this is done to be compatible with both light and dark themes, so that white logo designed with dark theme in mind won't be invisible over light theme, this is done via [CSS3 Masking](https://www.html5rocks.com/en/tutorials/masking/adobe/). Basically - it will take alpha channel of the image and fill non-transparent areas of it with solid color. If you really want colorful logo - it can be done by setting `logoMask` to `false`. + +`logoMargin` allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout. + +### `redirectRootNoLogin`, `redirectRootLogin` +These two settings should point to where FE should redirect visitor when they login/open up website root + +### `chatDisabled` +unused (?) + +### `showInstanceSpecificPanel` +This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel. + +### `scopeOptionsEnabled` +TODO deprecated in !633 + +### `formattingOptionsEnabled` +Enables rich text formatting (broken?) + +### `collapseMessageWithSubject` +Collapse post content when post has a subject line (content warning). Instance-default. + +### `scopeCopy` +Copy post scope (visibility) when replying to a post. Instance-default. + +### `subjectLineBehavior` +How to handle subject line (CW) when replying to a post. +* `"email"` - like EMail - prepend `re: ` to subject line if it doesn't already start with it. +* `"masto"` - lime Mastodon - copy it as is. +* `"noop"` - do not copy +Instance-default. + +### `postContentType` +Default text formatting option (????) + +### `alwaysShowSubjectInput` +`true` - will always show subject line input, `false` - only show when it's not empty (i.e. replying). To hide subject line input completely, set it to `false` and `subjectLineBehavior` to `"noop"` + +### `hidePostStats` and `hideUserStats` +Hide counters for posts and users respectively, i.e. hiding repeats/favorites counts for posts, hiding followers/friends counts for users. + +### `loginMethod` +`"password"` - show simple password field +`"token"` - show button to loken with a token (??????) +TODO more info about token login needed + +### `webPushNotifications` +Enables [PushAPI](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) - based notifications for users. Instance-default. + +### `noAttachmentLinks` +TODO ????? + +### `nsfwCensorImage` +Use custom image for NSFW'd images + +### `showFeaturesPanel` +Show panel showcasing instance features/settings to logged-out visitors From bda36c64c0bd7a6a3beb80bc986ca6ac035d6761 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 16 Jun 2019 21:53:00 +0300 Subject: [PATCH 002/116] User guide + updates --- docs/CONFIGURATION.md | 13 ++------- docs/USER_GUIDE.md | 67 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 docs/USER_GUIDE.md diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 5bb65aa1..bebf8c3b 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -39,12 +39,6 @@ unused (?) ### `showInstanceSpecificPanel` This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel. -### `scopeOptionsEnabled` -TODO deprecated in !633 - -### `formattingOptionsEnabled` -Enables rich text formatting (broken?) - ### `collapseMessageWithSubject` Collapse post content when post has a subject line (content warning). Instance-default. @@ -59,7 +53,7 @@ How to handle subject line (CW) when replying to a post. Instance-default. ### `postContentType` -Default text formatting option (????) +Default post formatting option (markdown/bbcode/plaintext/etc...) ### `alwaysShowSubjectInput` `true` - will always show subject line input, `false` - only show when it's not empty (i.e. replying). To hide subject line input completely, set it to `false` and `subjectLineBehavior` to `"noop"` @@ -69,14 +63,13 @@ Hide counters for posts and users respectively, i.e. hiding repeats/favorites co ### `loginMethod` `"password"` - show simple password field -`"token"` - show button to loken with a token (??????) -TODO more info about token login needed +`"token"` - show button to log in with external method (will redirect to login form, more details in BE documentation) ### `webPushNotifications` Enables [PushAPI](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) - based notifications for users. Instance-default. ### `noAttachmentLinks` -TODO ????? +**TODO Currently doesn't seem to be doing anything code-wise**, but implication is to disable adding links for attachments, which looks nicer but breaks compatibility with old GNU/Social servers. ### `nsfwCensorImage` Use custom image for NSFW'd images diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md new file mode 100644 index 00000000..fb750a66 --- /dev/null +++ b/docs/USER_GUIDE.md @@ -0,0 +1,67 @@ +> Be prepared for breaking changes, unexpected behavior and this user guide becoming obsolete and wrong. + +> If there was no insanity +> it would be necessary to create it. +> --Catbag + +# Pleroma-FE user guide + +Pleroma-FE user interface is modeled after Qvitter which is modeled after older Twitter design. It provides a simple 2-column interface for microblogging. While being simple by default it also provides many powerful customization options. + +## Posting, reading, basic functions. + +After registering and logging in you're presented with your timeline in right column and new post form with timeline list and notifications in the left column. + +When posting links will automatically become hyperlinks, @user@instnace.tld and @user like text will become mentions with link, #tag like text will become link to a tag. Mentioning someone will notify that user that you've mentioned them, there's no way around that except for not using @ in the beginning or referring to them in some other way. + +**Depending on your instance some of the options might not be available or have different defaults** + +Let's clear up some basic stuff. When you post something it's called a **post** or it could be called a **status** or even a **toot** or a **prööt** depending on whom you ask. Post has body/content but it also has some other stuff in it - from attachments, visibility scope, subject line. +* **Attachments** are fairly simple - you can attach any file to a post as long as the file is within maximum size limits. If you're uploading explicit material you can mark all of your attachments as sensitive (or add `#nsfw` tag) - it will hide the images and videos behind a warning so that it won't be displayed instantly. +* **Subject line** also known as **CW** (Content Warning) could be used as a header to the post and/or to warn others about contents of the post having something that might upset somebody or something among those lines. Several applications allow to hide post content leaving only subject line visible. As a side-effect using subject line will also mark your images as sensitive (see above). +* **Visiblity scope** this one is a bit complicated. Normally all posts are `public` (and this is the *only* option on some software like GNU/Social) but if you want it, you can make it your post `unlisted` which will prevent it from showing up on *Public Timeline* and *TWKN* but AFAIK it doesn't prevent it from showing up in search. `Followers only` (sometimes referred as `fo`) posts are only visible to **your** followers, it's implied to be used in conjunction with [locking your account down to only approved followers](#user-settings) since otherwise it doesn't provide much protection since anyone would be able to follow you and read the fo posts. Another problem with fo posts is that each post is visible to followers of the user posted, so if two users are having a conversations with followers only posts you'll probably see only one side of the conversation. `Direct` posts are direct "messages", they are just regular posts but visible only to people who are mentioned in the post, so be very careful when using direct messages since if you want to mention someone else they will also receive your message, but they won't receive all previous ones. Another note of advice - direct messages could potentially be read by instance admins and attachments in DMs are visible to anyone who has a link to the attachment, so using direct messages as a *secure* method of communication is ill-advised. +* **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to. + +Another note: PleromaFE provides a simplified way of posting, however there a lot of stuff going on inside and some other applications allow you to tweak the inmost details of a post - for example you can set "to" and "cc" fields without actually mentioning people, so if you see a post in your notifications that's supposedly not replying to you and doesn't have you in the mentions - it's probably one of those. + +#### Rich text + +By default new posts you make are plaintext, meaning you can't make text **bold** or add custom links or make lists or anything like that. However if your instance allows it you can use Markdown or BBCode or HTML to spice up your text, however there are certain limitations to what HTML tags and what features of Markdown you can use. + +this section will be expanded later + +### Other actions + +In addition to posting you can also *favorite* post also known as *liking* them and *repeat* posts (also known as *retweeting*, *boosting* and even *reprööting*). Favoriting a post increments a counter on it, notifies post author of your affection towards that post and also adds that post to your "favorited" posts list (in your own profile, "Favorites" tab). Reprööting a post does all that and also repeats this post to your followers and your profile page with a note "*user* repeated post". + +You can also delete your own posts (and posts of other people if you're a moderator, but it's slightly different as it won't delete posts by people on other instances) however it's not entirely reliable since deleting a post basically sends a notification "please delete this post" and it may or may not reach all instances, as well as client applications may or may not receive deletion notification from server so post will remain until entire data is refreshed. + +There's also an option to report a user via a post (if the feature is available on your instance) which could be used to notify your (and probably other instance's) admin that someone is being naughty. + +## Users + +When you see someone, you can click on their user picture to view their profile, and click on the userpic in that to see *full* profile. You can *follow* them, *mute* and *block* them. Following is self-explanatory, it adds them t your Home Timeline, lists you as a follower and gives you access to follower-only posts if they have any. Muting makes posts and notifications made by them very tiny, giving you an option to see the post if you're curious. However on clients other than PleromaFE their posts will be completely removed. *Blocking* a user removes them from your timeline and notifications and prevents them from following you (automatically unfollows them from you). + +Please note that some users can be "locked", meaning instead of following them you send a follow request they need to approve for you to become their follower. + +## Timelines + +Currently you have several timelines to browse trough: +* **Timeline** aka Home Timeline - this timeline contains all posts by people you follow and your own posts +* **Interactions** all interactions you've had with people on the network, basically same as notifications except grouped in convenient way - mentions separate from favorites with repeats separate from follows +* **Direct Messages** all posts with `direct` scope addressed to you or mentioning you. +* **Public Timelines** all posts made by users on instance you're on +* **The Whole Known Network** also known as **TWKN** or **Federated Timeline** - all posts on the network by everyone, almost. Due to nature of the network your instance may not know *all** the instances on the network, so only posts originating from known instances are shown there. + +## Other stuff + +By default you can see **ALL** posts made by other users on your Home Timeline, this contrast behavior of Twitter and Mastodon, which shows you only non-reply posts and replies to people you follow. You can set it up to replicate the said behavior, however the option is currently broken. + +You can view other people's profiles and search for users (top-right corner, person with a plus icon). Tag search is possible but not implemented properly yet, right now you can click on tag link in a post to see posts tagged with that post. + +You can also view posts you've favorited on your own profile, but you cannot see favorites by other people. + +Due to nature of how Pleroma (backend) operates you might see old posts appear as if they are new, this is because instance just learned about that post (i.e. your instance is younger that some other ones) and someone interacted with old post. Posts are sorted by date of when they are received, not date they have been posted because it's very easy to spoof the date, so a post claiming it "was" made in year 2077 could hand at top of your TL forever. + +# Customization and configuration +TODO From 5a70eda5e84bf749bbe6803c9d541a374850f61e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 16 Jun 2019 21:54:27 +0300 Subject: [PATCH 003/116] fix --- docs/USER_GUIDE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index fb750a66..7afeabc5 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -1,7 +1,9 @@ > Be prepared for breaking changes, unexpected behavior and this user guide becoming obsolete and wrong. > If there was no insanity +> > it would be necessary to create it. +> > --Catbag # Pleroma-FE user guide From ee9bacee7a515e3d6336495464cf5910cbab7ccc Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 11:37:03 +0000 Subject: [PATCH 004/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 7afeabc5..e1ba2f14 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -14,7 +14,11 @@ Pleroma-FE user interface is modeled after Qvitter which is modeled after older After registering and logging in you're presented with your timeline in right column and new post form with timeline list and notifications in the left column. -When posting links will automatically become hyperlinks, @user@instnace.tld and @user like text will become mentions with link, #tag like text will become link to a tag. Mentioning someone will notify that user that you've mentioned them, there's no way around that except for not using @ in the beginning or referring to them in some other way. +Posts will contain the text you are posting, but some content will be modified: + +1. Mentions: Mentions have the form of @user or @user@instance.tld. These will become links to the user's profile. In addition, the mentioned user will always get a notification about the post they have been mentioned in, so only mention users that you want to receive this message. +2. URLs: URLs like `http://example.com` will be automatically be turned into a clickable links. +3. Hashtags: Hashtags like #cofe will also be turned into links. **Depending on your instance some of the options might not be available or have different defaults** From 65520d7a01a3209f19c87c693aef32e0d1fbbec2 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 11:38:22 +0000 Subject: [PATCH 005/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index e1ba2f14..67c6bcbe 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -25,7 +25,18 @@ Posts will contain the text you are posting, but some content will be modified: Let's clear up some basic stuff. When you post something it's called a **post** or it could be called a **status** or even a **toot** or a **prööt** depending on whom you ask. Post has body/content but it also has some other stuff in it - from attachments, visibility scope, subject line. * **Attachments** are fairly simple - you can attach any file to a post as long as the file is within maximum size limits. If you're uploading explicit material you can mark all of your attachments as sensitive (or add `#nsfw` tag) - it will hide the images and videos behind a warning so that it won't be displayed instantly. * **Subject line** also known as **CW** (Content Warning) could be used as a header to the post and/or to warn others about contents of the post having something that might upset somebody or something among those lines. Several applications allow to hide post content leaving only subject line visible. As a side-effect using subject line will also mark your images as sensitive (see above). -* **Visiblity scope** this one is a bit complicated. Normally all posts are `public` (and this is the *only* option on some software like GNU/Social) but if you want it, you can make it your post `unlisted` which will prevent it from showing up on *Public Timeline* and *TWKN* but AFAIK it doesn't prevent it from showing up in search. `Followers only` (sometimes referred as `fo`) posts are only visible to **your** followers, it's implied to be used in conjunction with [locking your account down to only approved followers](#user-settings) since otherwise it doesn't provide much protection since anyone would be able to follow you and read the fo posts. Another problem with fo posts is that each post is visible to followers of the user posted, so if two users are having a conversations with followers only posts you'll probably see only one side of the conversation. `Direct` posts are direct "messages", they are just regular posts but visible only to people who are mentioned in the post, so be very careful when using direct messages since if you want to mention someone else they will also receive your message, but they won't receive all previous ones. Another note of advice - direct messages could potentially be read by instance admins and attachments in DMs are visible to anyone who has a link to the attachment, so using direct messages as a *secure* method of communication is ill-advised. +* **Visiblity scope** controls who will be able to see your posts. There are four scopes available: + +1. `Public`: This is the default, and some fediverse software like GNU Social only supports this. This means that your post is accessible by anyone and will be shown in the public timelines. +2. `Unlisted`: This is the same as public, but your post won't appear in the public timelines. The post will still be accessible by anyone who comes across it (for example, by looking at your profile) or by direct linking. They will also appear in public searches. +3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](#user-settings). +4. `Direct`: This will only send the message to the people explicitly mentioned in the post. + +A few things to consider about the security and usage of these scopes: + +- None of these options will change the fact that the messages are all saved in the database unencrypted. They will be visible to your server admin and to any other admin of a server who receives this post. Do not share information that you would consider secret or dangerous. Use encrypted messaging systems for these things. +- Follower-only posts can lead to fragmented conversations. If you post a follower-only post and somebody else replies to it with a follower-only post, only people following both of you will see the whole conversation thread. Everybody else will only see half of it. Keep this in mind and keep conversations public if possible. +- Changing scopes during a thread or adding people to a direct message will not retroactively make them see the whole conversation. If you add someone to a direct message conversation, they will not see the post that happened before they were mentioned. * **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to. Another note: PleromaFE provides a simplified way of posting, however there a lot of stuff going on inside and some other applications allow you to tweak the inmost details of a post - for example you can set "to" and "cc" fields without actually mentioning people, so if you see a post in your notifications that's supposedly not replying to you and doesn't have you in the mentions - it's probably one of those. From 934ca66d8734e9fa46c4fb342fef04c65d9e0154 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 11:38:54 +0000 Subject: [PATCH 006/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 67c6bcbe..aab61eea 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -39,7 +39,7 @@ A few things to consider about the security and usage of these scopes: - Changing scopes during a thread or adding people to a direct message will not retroactively make them see the whole conversation. If you add someone to a direct message conversation, they will not see the post that happened before they were mentioned. * **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to. -Another note: PleromaFE provides a simplified way of posting, however there a lot of stuff going on inside and some other applications allow you to tweak the inmost details of a post - for example you can set "to" and "cc" fields without actually mentioning people, so if you see a post in your notifications that's supposedly not replying to you and doesn't have you in the mentions - it's probably one of those. +Sometimes you may encounter posts that seem different than what they are supposed to. For example, you might see a direct message without any mentions in the text. This can happen because internally, the Fediverse has a different addressing mechanism similar to email, with `to` and `cc` fields. While these are not directly accessible in PleromaFE, other software in the Fediverse might generate those posts. Do not worry in these cases, these are normal and not a bug. #### Rich text From 8543bab582f40a32bd614d6c94affac87b8ec12e Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 11:39:23 +0000 Subject: [PATCH 007/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index aab61eea..4684f7fc 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -51,7 +51,9 @@ this section will be expanded later In addition to posting you can also *favorite* post also known as *liking* them and *repeat* posts (also known as *retweeting*, *boosting* and even *reprööting*). Favoriting a post increments a counter on it, notifies post author of your affection towards that post and also adds that post to your "favorited" posts list (in your own profile, "Favorites" tab). Reprööting a post does all that and also repeats this post to your followers and your profile page with a note "*user* repeated post". -You can also delete your own posts (and posts of other people if you're a moderator, but it's slightly different as it won't delete posts by people on other instances) however it's not entirely reliable since deleting a post basically sends a notification "please delete this post" and it may or may not reach all instances, as well as client applications may or may not receive deletion notification from server so post will remain until entire data is refreshed. +Your own posts can be deleted, but this will only reliably delete the post from your own instance. Other instances will receive a deletion notice, but there's no way to force them to actually delete a post. In addition, not all instances that contain the message might even receive the deletion notice, because they might be offline or not known to have the post because they received it through a repeat. + +If you are a moderator, you can also delete posts by other people. If those people are on your instance, it will delete the post and send out the deletion notice to other servers. If they are not on your instance, it will just remove the post from your local instance. There's also an option to report a user via a post (if the feature is available on your instance) which could be used to notify your (and probably other instance's) admin that someone is being naughty. From 201ea169fe3665edc91e37056d2f967e3ea10917 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 11:40:31 +0000 Subject: [PATCH 008/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 4684f7fc..7eaa6dcc 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -66,7 +66,7 @@ Please note that some users can be "locked", meaning instead of following them y ## Timelines Currently you have several timelines to browse trough: -* **Timeline** aka Home Timeline - this timeline contains all posts by people you follow and your own posts +* **Timeline** aka Home Timeline - this timeline contains all posts by people you follow and your own posts, as well as posts mentioning you directly. * **Interactions** all interactions you've had with people on the network, basically same as notifications except grouped in convenient way - mentions separate from favorites with repeats separate from follows * **Direct Messages** all posts with `direct` scope addressed to you or mentioning you. * **Public Timelines** all posts made by users on instance you're on From 886b097a671c23651550ef52af1f458699534cac Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 16:06:01 +0000 Subject: [PATCH 009/116] Apply suggestion to docs/CONFIGURATION.md --- docs/CONFIGURATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index bebf8c3b..1b14b9ab 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -48,7 +48,7 @@ Copy post scope (visibility) when replying to a post. Instance-default. ### `subjectLineBehavior` How to handle subject line (CW) when replying to a post. * `"email"` - like EMail - prepend `re: ` to subject line if it doesn't already start with it. -* `"masto"` - lime Mastodon - copy it as is. +* `"masto"` - like Mastodon - copy it as is. * `"noop"` - do not copy Instance-default. From 3ec9ef89756e994cd8e1611cf674746574a696ae Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Mon, 17 Jun 2019 16:08:32 +0000 Subject: [PATCH 010/116] Apply suggestion to docs/CONFIGURATION.md --- docs/CONFIGURATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 1b14b9ab..b78234c6 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -7,7 +7,7 @@ PleromaFE gets its configuration from several sources, in order of preference (the one above overrides ones below it) -1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://git.pleroma.social/pleroma/pleroma/blob/develop/docs/config.md#frontend_configurations) +1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://docs-develop.pleroma.social/config.html#frontend_configurations) 2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/static/config.json). 3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/src/modules/instance.js) ) From 0ba0f8f1f1ac7ab890f50e34f4f999027fd48c6b Mon Sep 17 00:00:00 2001 From: lain Date: Fri, 21 Jun 2019 12:47:54 +0200 Subject: [PATCH 011/116] Documentations: Add docs for settings. --- docs/USER_GUIDE.md | 66 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 7eaa6dcc..d3521ab8 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -83,4 +83,68 @@ You can also view posts you've favorited on your own profile, but you cannot see Due to nature of how Pleroma (backend) operates you might see old posts appear as if they are new, this is because instance just learned about that post (i.e. your instance is younger that some other ones) and someone interacted with old post. Posts are sorted by date of when they are received, not date they have been posted because it's very easy to spoof the date, so a post claiming it "was" made in year 2077 could hand at top of your TL forever. # Customization and configuration -TODO + +Clicking on the cog icon in the upper right will go to the settings screen. Here you have 4 tabs with several options to customize your experience. + +## General + +### Interface + +- Language: Here you can set the interface language. The default language is the one that you set in your browser settings. +- Hide instance-specific panel: This hides the panel in the lower left that usually contains general information about the server. + +### Timeline + +- Hide posts of muted users: If this is set, 'muting' a user will also hide their posts and not just collapse them. +- Collapse posts with subjects: This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings. +- Enable automatic streaming of new posts when scrolled to the top: With this enabled, new posts will automatically stream in when you are scrolled to the top. Otherwise, you will see a button on the timeline that will let you display the new posts. +- Pause streaming when tab is not focused: This pauses the automatic streaming that the previous option enables when the tab is out of focus. This is useful if you don't want to miss any new posts. +- Enable automatic loading when scrolled to the bottom: When this is disabled, a button will be shown on the bottom of the timeline that will let you load older posts. +- Enable reply-link preview on hover: Status posts in the timeline and notifications contain links to replies and to the post they are a reply to. If this setting is enabled, hovering over that link will display that linked post in a small hovering overlay. + +### Composing + +- Copy scope when replying: When this is activated, the scope of a reply will be the same as the scope of the post it is replying to. This is useful to prevent accidentally moving private discussions to public, or vice versa. +- Always show subject field: Whether or not to display the 'subject' input field in the post form. If you do not want to use subjects, you can deactivate this. +- Copy subject when replying: This controls if the subject of a post will be copied from the post it is replying to. +- Post status content type: Selects the default content type of your post. The options are: Plain text, HTML, BBCode and Markdown. +- Minimize scope selection options: Selecting this will reduce the visibility scopes to 'public' and 'direct'. +- Automatically hide New Post button: TODO: Not quite sure when it's hidden. + +### Attachments + +- Hide attachments in timeline: Do not display attachments in timelines. They will still display in expanded conversations. This is useful to save bandwidth and for browsing in public. +- Hide attachments in conversations: Also hide attachments in expanded conversations. +- Maximum amount of thumbnails per post: Exactly that :) +- Enable clickthrough NSFW attachment hiding: Hide attachments that are marked as NSFW/sensible behind a click-through image. +- Preload images: This will preload the hidden images so that they display faster when clicking through. +- Open NSFW attachments with just one click: Directly open NSFW attachments in a maximised state instead of revealing the image thumbnail. +- Play-on-hover GIFs: With this activated, GIFs will only play on hover. Otherwise, they will autoplay normally. +- Loop videos: Whether to loop videos indefinitely. +- Loop only videos without sound: Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay. +- Play videos directly in the media viewer: TODO: Don't know what this does. +- Don't crop the attachment in thumbnails: Selecting this will not crop the attachment thumbnails for a more uniform look, instead it will leave them in the original format. + +### Notifications + +- Enable web push notifications: This enables the web push notifications that your browser displays, even when you are not looking at your pleroma site. Pleroma's own notifications are not affected by this. + +## Theme + +Here you can change, load and save the look of your Pleroma frontend. There are a lot of options, but there is a preview. Play around with the settings and see what you like! + +TODO: Maybe expand? + +## Filtering + +- Types of notifications to show: This controls which things you will be notified about. +- Replies in timeline: You may know that other social networks like Twitter will often not display replies to other people in your timeline, even if you are following the poster. Pleroma usually will show these posts to you to encourage conversation. If you do not like this behavior, you can change it here. +- Hide post statistics: This hides the number of favorites, number of replies, etc. +- Hide user statistics: This hides the number of followers, friends, etc. +- Muted words: A list of words that will be muted (= displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. Posts can always be extended when you actually want to see them. +- Hide filtered statuses: Selecting this will not only collapse the filtered / muted posts, but hide them completely. + + +## Version + +Just displays the backend and frontend version. Useful to mention in bug reports. From 3fb165b0c8e9c569794af35bc2e42a28ee238b52 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 25 Jun 2019 00:51:13 +0300 Subject: [PATCH 012/116] H A C K E R M A N --- docs/HACKING.md | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/HACKING.md diff --git a/docs/HACKING.md b/docs/HACKING.md new file mode 100644 index 00000000..9479b7e1 --- /dev/null +++ b/docs/HACKING.md @@ -0,0 +1,94 @@ +# Hacking, tweaking, contributing + +## What PleromaFE even is, how it works + +PleromaFE is an SPA (Single-Page Application) backed by [Vue](https://vuejs.org/) framework. It means that it's just a nearly-empty HTML page with bunch of JavaScript that actually generates and controls DOM (i.e. html elements) in Runtime. Currently, there's no way around it - you have to have Javascript enabled in the browser to make it work, there is a theoretical possibility to generate some HTML server-side but it's not implemented yet. + +You can serve static html page and everything from any HTTP(S) server but currently it will try to access /api/ path at same domain it's running on, meaning that as of right now you cannot put it on one domain and access the other without proxying requests. + +Development server does exactly that - it serves static html page with javascript and all other assets, adds some code to automatically reload when changes to code are made and proxies requests to some other server. + +## Setting up develop server + +Setting up development server is fairly straight-forward. + +1. On your system you must have **[Node.js](https://nodejs.org/) version 8** and newer installed. For older systems or systems that do not package node you can try [NodeSource](https://github.com/nodesource/distributions) repositories. *Windows support theoretically possible but isn't tested.* +2. For fetching dependencies and running basic tasks you will *[Yarn](https://yarnpkg.com/)* installed. +3. Clone the repository, `cd` into it and run `yarn` to fetch dependencies. +4. If you want to point development server at some instance you will need to copy `config/local.example.json` to `config/local.json` and change the `target` to point at instance you want, otherwise it will point to `localhost:4000` which is default address for locally-run Pleroma Backend +5. Run `yarn dev` - it will start the server. +6. Open `localhost:8080` in your browser, it might take a while initially until everything is built first time. + +## Setting up production build + +This could be a bit trickier, you basically need steps 1-4 from *develop build* instructions, and run `yarn build` which will compile and copy eveything needed for production into `dist` folder. As said before, this technically could be used anywhere with some details. + +### Replacing your instance's frontend with custom FE build + +This is the most easiest way to use and test FE build: you just need to copy or symlink contents of `dist` folder into backend's `/instance/static` folder, creating it if it doesn't exist. Be aware that running `yarn build` wipes the contents of `dist` folder. + +### Running production build locally or on a separate server + +This is **highly experimental** and only tried once, with no actual simple solution available yet + +You will need an HTTP server that can proxy requests for `/api`, `/instance`, `/nodeinfo` and show index.html for every 404 page. + +For nginx you'll probably need something like this: + +```nginx +server { + listen 80 default_server; + + index index.html index.htm index.nginx-debian.html; + + root /var/www/html + + location /api { + proxy_pass https://example.tld; + } + + location /instance { + proxy_pass https://example.tld; + } + + location /nodeinfo { + proxy_pass https://example.tld; + } + + location / { + try_files $uri $uri/ /index.html; + } +} +``` + +(ed. note: this is close to what i used last time i had to do it, it may not work and need additions, i basically adjusted default nginx server in debian) + +## Basic architecture + +### API, Data, Operations + +In 99% cases PleromaFE uses [MastoAPI](https://docs.joinmastodon.org/api/) with [Pleroma Extensions](https://docs-develop.pleroma.social/differences_in_mastoapi_responses.html) to fetch the data. The rest is either QvitterAPI leftovers or pleroma-exclusive APIs. QvitterAPI doesn't exactly have documentation and uses different JSON structure and sometimes different parameters and workflows. Some pleroma-exclusive API may still be using QvitterAPI JSON structure. + +PleromaFE supports both formats by transforming them into internal format which is basically QvitterAPI one with some additions and renaming. All data is passed trough [Entity Normalizer](/src/services/entity_normalizer/entity_normalizer.service.js) which can serve as a reference of API and what's actually used, it's also a host for all the hacks and data transformation. + +For most part, PleromaFE tries to store all the info it can get in global vuex store - every user and post are passed trough updating mechanism where data is either added or merged with existing data, reactively updating the information throughout UI, so if in newest request user's post counter increased, it will be instantly updated in open user profile cards. This is also used to find users, posts and sometimes to build timelines and/or request parameters. + +PleromaFE also tries to persist this store, however only stable data is stored, such as user authentication and preferences, user highlights. Persistence is performed by saving and loading chunk of vuex store in browser's LocalStorage/IndexedDB. + +TODO: Refactor API code and document it here + +### Timelines + +TODO + +### Themes + +TODO + +### Still Image + +TODO + +## Contributing + +TODO From 9bc7b1950024d814cea76faaf79d679749f854da Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 24 Jun 2019 22:06:02 +0000 Subject: [PATCH 013/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index d3521ab8..aaa028ca 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -141,7 +141,7 @@ TODO: Maybe expand? - Replies in timeline: You may know that other social networks like Twitter will often not display replies to other people in your timeline, even if you are following the poster. Pleroma usually will show these posts to you to encourage conversation. If you do not like this behavior, you can change it here. - Hide post statistics: This hides the number of favorites, number of replies, etc. - Hide user statistics: This hides the number of followers, friends, etc. -- Muted words: A list of words that will be muted (= displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. Posts can always be extended when you actually want to see them. +- Muted words: A list of words that will be muted (i.e. displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. Posts can always be expanded when you actually want to see them. - Hide filtered statuses: Selecting this will not only collapse the filtered / muted posts, but hide them completely. From bd8e1c9e23c11d392a5c9ac0859bd5ac7aa0372e Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 24 Jun 2019 22:06:19 +0000 Subject: [PATCH 014/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index aaa028ca..3e3c79a4 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -142,7 +142,7 @@ TODO: Maybe expand? - Hide post statistics: This hides the number of favorites, number of replies, etc. - Hide user statistics: This hides the number of followers, friends, etc. - Muted words: A list of words that will be muted (i.e. displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. Posts can always be expanded when you actually want to see them. -- Hide filtered statuses: Selecting this will not only collapse the filtered / muted posts, but hide them completely. +- Hide filtered statuses: Selecting this will hide the filtered / muted posts completely instead of collapsing them. ## Version From 7dfd50c7c828295c06bb8692e5f9aa12909ff628 Mon Sep 17 00:00:00 2001 From: lain Date: Mon, 24 Jun 2019 22:07:03 +0000 Subject: [PATCH 015/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 3e3c79a4..f059b2e8 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -123,7 +123,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. Here - Loop videos: Whether to loop videos indefinitely. - Loop only videos without sound: Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay. - Play videos directly in the media viewer: TODO: Don't know what this does. -- Don't crop the attachment in thumbnails: Selecting this will not crop the attachment thumbnails for a more uniform look, instead it will leave them in the original format. +- Don't crop the attachment in thumbnails: if enabled, images in attachments will be fit entirely inside the container instead of being zoomed in and cropped. ### Notifications From b02a92e9f6f0e4ec971b2643289b00e0bda87b45 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:46:13 +0000 Subject: [PATCH 016/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index f059b2e8..b89106f3 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -84,7 +84,7 @@ Due to nature of how Pleroma (backend) operates you might see old posts appear a # Customization and configuration -Clicking on the cog icon in the upper right will go to the settings screen. Here you have 4 tabs with several options to customize your experience. +Clicking on the cog icon in the upper right will go to the settings screen. ## General From 0b4c6127c5a181ce3f092d0b3211682b0952ec3b Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:46:16 +0000 Subject: [PATCH 017/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index b89106f3..5fb80f1b 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -95,7 +95,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. ### Timeline -- Hide posts of muted users: If this is set, 'muting' a user will also hide their posts and not just collapse them. +- Hide posts of muted users: If this is set, 'muting' a user will completely hide their posts instead of collapsing them. - Collapse posts with subjects: This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings. - Enable automatic streaming of new posts when scrolled to the top: With this enabled, new posts will automatically stream in when you are scrolled to the top. Otherwise, you will see a button on the timeline that will let you display the new posts. - Pause streaming when tab is not focused: This pauses the automatic streaming that the previous option enables when the tab is out of focus. This is useful if you don't want to miss any new posts. From 0892c13c2c02f40ce3f81de98aa0cb3fd2720b65 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:46:19 +0000 Subject: [PATCH 018/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 5fb80f1b..30a977a8 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -108,7 +108,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. - Always show subject field: Whether or not to display the 'subject' input field in the post form. If you do not want to use subjects, you can deactivate this. - Copy subject when replying: This controls if the subject of a post will be copied from the post it is replying to. - Post status content type: Selects the default content type of your post. The options are: Plain text, HTML, BBCode and Markdown. -- Minimize scope selection options: Selecting this will reduce the visibility scopes to 'public' and 'direct'. +- Minimize scope selection options: Selecting this will reduce the visibility scopes to 'direct', your default post scope and post scope of post you're replying to. - Automatically hide New Post button: TODO: Not quite sure when it's hidden. ### Attachments From c6a29b48eba77907b877d63d05de227c94e27ef2 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:47:26 +0000 Subject: [PATCH 019/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 30a977a8..e6750c99 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -109,7 +109,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. - Copy subject when replying: This controls if the subject of a post will be copied from the post it is replying to. - Post status content type: Selects the default content type of your post. The options are: Plain text, HTML, BBCode and Markdown. - Minimize scope selection options: Selecting this will reduce the visibility scopes to 'direct', your default post scope and post scope of post you're replying to. -- Automatically hide New Post button: TODO: Not quite sure when it's hidden. +- Automatically hide New Post button: Mobile interface only: hide floating "New post" button when scrolling ### Attachments From c95a3f0a1a6fc25ab2c2132259bb0e63d11aa039 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:47:30 +0000 Subject: [PATCH 020/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index e6750c99..e0ae06e3 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -116,7 +116,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. - Hide attachments in timeline: Do not display attachments in timelines. They will still display in expanded conversations. This is useful to save bandwidth and for browsing in public. - Hide attachments in conversations: Also hide attachments in expanded conversations. - Maximum amount of thumbnails per post: Exactly that :) -- Enable clickthrough NSFW attachment hiding: Hide attachments that are marked as NSFW/sensible behind a click-through image. +- Enable clickthrough NSFW attachment hiding: Hide attachments that are marked as NSFW/sensitive behind a click-through image.` - Preload images: This will preload the hidden images so that they display faster when clicking through. - Open NSFW attachments with just one click: Directly open NSFW attachments in a maximised state instead of revealing the image thumbnail. - Play-on-hover GIFs: With this activated, GIFs will only play on hover. Otherwise, they will autoplay normally. From afb8ef19838dca1436e920494cb5af3b2df12946 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:47:31 +0000 Subject: [PATCH 021/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index e0ae06e3..243a579c 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -119,7 +119,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. - Enable clickthrough NSFW attachment hiding: Hide attachments that are marked as NSFW/sensitive behind a click-through image.` - Preload images: This will preload the hidden images so that they display faster when clicking through. - Open NSFW attachments with just one click: Directly open NSFW attachments in a maximised state instead of revealing the image thumbnail. -- Play-on-hover GIFs: With this activated, GIFs will only play on hover. Otherwise, they will autoplay normally. +- Play-on-hover GIFs: With this activated, GIFs images and avatars will only be animated on mouse hover. Otherwise, they will be always animated. This is very useful if your timeline looks too flashy from people's animated avatars and eases the CPU load. - Loop videos: Whether to loop videos indefinitely. - Loop only videos without sound: Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay. - Play videos directly in the media viewer: TODO: Don't know what this does. From 624277c40690e890477cbf91439a043e901b29d2 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:47:48 +0000 Subject: [PATCH 022/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 243a579c..02a3e5df 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -122,7 +122,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. - Play-on-hover GIFs: With this activated, GIFs images and avatars will only be animated on mouse hover. Otherwise, they will be always animated. This is very useful if your timeline looks too flashy from people's animated avatars and eases the CPU load. - Loop videos: Whether to loop videos indefinitely. - Loop only videos without sound: Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay. -- Play videos directly in the media viewer: TODO: Don't know what this does. +- Play videos directly in the media viewer: Play videos right in the timeline instead of opening it in a modal - Don't crop the attachment in thumbnails: if enabled, images in attachments will be fit entirely inside the container instead of being zoomed in and cropped. ### Notifications From 0fc04893afdb2eb353930b5fa0e6a5ba0078f281 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:48:25 +0000 Subject: [PATCH 023/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 02a3e5df..58e88bd7 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -127,7 +127,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. ### Notifications -- Enable web push notifications: This enables the web push notifications that your browser displays, even when you are not looking at your pleroma site. Pleroma's own notifications are not affected by this. +- Enable web push notifications: this enables Web Push notifications, to allow receiving notifications even when the page isn't opened, doesn't affect regular notifications. ## Theme From 3354aea356d989c42d056fe75b83e5efeef94798 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 11:51:38 +0000 Subject: [PATCH 024/116] Apply suggestion to docs/USER_GUIDE.md --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 58e88bd7..2ba71a2c 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -137,7 +137,7 @@ TODO: Maybe expand? ## Filtering -- Types of notifications to show: This controls which things you will be notified about. +- Types of notifications to show: This controls what kind of notifications will appear in notification column and which notifications to get in your system outside the web page - Replies in timeline: You may know that other social networks like Twitter will often not display replies to other people in your timeline, even if you are following the poster. Pleroma usually will show these posts to you to encourage conversation. If you do not like this behavior, you can change it here. - Hide post statistics: This hides the number of favorites, number of replies, etc. - Hide user statistics: This hides the number of followers, friends, etc. From 926285685b8fdf884afab56b5f9fc9c17390af24 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 26 Jun 2019 23:16:06 +0300 Subject: [PATCH 025/116] HACKERMAN 2 --- docs/HACKING.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/HACKING.md b/docs/HACKING.md index 9479b7e1..5414ec86 100644 --- a/docs/HACKING.md +++ b/docs/HACKING.md @@ -77,18 +77,24 @@ PleromaFE also tries to persist this store, however only stable data is stored, TODO: Refactor API code and document it here -### Timelines - -TODO - ### Themes -TODO +PleromaFE uses custom theme "framework" which is pretty much just a style tag rendered by vue which only contains CSS3 variables. Every color used in UI should be derived from theme. Theme is stored in a JSON object containing color, opacity, shadow and font information, with most of it being optional. + +The most basic theme can consist of 4 to 8 "basic colors", which is also what previous version of themes allowed, with all other colors being derived from those basic colors, i.e. "light background" will be "background" color lightened/darkened, "panel header" will be same as "foreground". The idea is that you can specify just basic color palette and everything else will be generated automatically, but if you really need to tweak some specific color - you can. + +As said before - older version only allowed 4 to 8 colors, it also used arrays instead of objects, we still support that. The basic colors are: background, foreground, text, links, red, orange, blue, green. First 4 are mandatory, last 4 have default fallbacks since ever more ancient theme formats only had 4 colors. + +Note that with older version themes used different internal naming when persisting state. + +Themes are meant to be backwards and somewhat forwards compatible - new colors should properly inherit from some existing one, making it compatible with older versions. When loading newer version of theme all unrecognized colors will be ignored, which for most part should be fine, however adding new features (gradients, masks, whatever it might be) might be breaky. + +Lastly, pleroma provides some contrast information and generates readable text color automatically, which is done by tracking background/text color pairs and their contrast - if contrast too low it will try to use background color with inverted lightness, if it's still unacceptable it will fall back to pure black/white. ### Still Image -TODO +Most images are wrapped in a component called StillImage, which does one simple thing - tries to detect if image is a GIF and if it is (and user has enabled relevant setting) it will show `` with that image instead of actual image. It uses standard method to render an image into canvas which renders first frame of a GIF if it's animated (obviously because canvas by itself isn't animated and you'd need to animate it yourself in JS), it will show actual image on hover. Statuses also allow playing animated avatars when you hover over a post, not just image itself. ## Contributing -TODO +Feel free to contribute, most preferred way is by starting a Merge Request in GitLab. Please try to use descriptive names for your branches and merge requests, avoid naming them "fix-issue-777" "777" and so on. From 27b898f5c97758e10884ee6234c74b67f288a125 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 26 Jun 2019 23:44:05 +0300 Subject: [PATCH 026/116] More configuration --- docs/CONFIGURATION.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index b78234c6..7011f56a 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -34,7 +34,7 @@ Instance `logo`, could be any image, including svg. By default it assumes logo u These two settings should point to where FE should redirect visitor when they login/open up website root ### `chatDisabled` -unused (?) +hides the chat (TODO: even if it's enabled on backend) ### `showInstanceSpecificPanel` This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel. @@ -59,7 +59,7 @@ Default post formatting option (markdown/bbcode/plaintext/etc...) `true` - will always show subject line input, `false` - only show when it's not empty (i.e. replying). To hide subject line input completely, set it to `false` and `subjectLineBehavior` to `"noop"` ### `hidePostStats` and `hideUserStats` -Hide counters for posts and users respectively, i.e. hiding repeats/favorites counts for posts, hiding followers/friends counts for users. +Hide counters for posts and users respectively, i.e. hiding repeats/favorites counts for posts, hiding followers/friends counts for users. This is just cosmetic and aimed to ease pressure and bias imposed by stat numbers of people and/or posts. (as an example: so that people care less about how many followers someone has since they can't see that info) ### `loginMethod` `"password"` - show simple password field @@ -76,3 +76,18 @@ Use custom image for NSFW'd images ### `showFeaturesPanel` Show panel showcasing instance features/settings to logged-out visitors + +## Indirect configuration +Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it**. + +### Chat +**TODO somewhat broken, see: chatDisabled** chat can be disabled by disabling it in backend + +### Rich text formatting in post formatting +Rich text formatting options are displayed depending on how many formatting options are enabled on backend, if you don't want your users to use rich text at all you can only allow "text/plain" one, frontend then will only display post text format as a label instead of dropdown (just so that users know for example if you only allow Markdown, only BBCode or only Plain text) + +### Who to follow +This is a panel intended for users to find people to follow based on randomness or on post contents. Being potentially privacy unfriendly feature it needs to be enabled and configured in backend to be enabled. + +### "Safe" DMs +There's obscure option to enable quote-unquote "safe" DMs, which makes DMs "only be visible to the mentioned users at the beginning of the message." which only changes DM warning in FE. What it does precisely is unclear and should probably be avoided since it bring in more confusion and doesn't affect other servers. From 185a4d8ab2072e9ef9089fac3cf71a2bd880b835 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 27 Jun 2019 00:10:51 +0300 Subject: [PATCH 027/116] DOCUMENTATION --- docs/USER_GUIDE.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 2ba71a2c..9cce3304 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -27,7 +27,7 @@ Let's clear up some basic stuff. When you post something it's called a **post** * **Subject line** also known as **CW** (Content Warning) could be used as a header to the post and/or to warn others about contents of the post having something that might upset somebody or something among those lines. Several applications allow to hide post content leaving only subject line visible. As a side-effect using subject line will also mark your images as sensitive (see above). * **Visiblity scope** controls who will be able to see your posts. There are four scopes available: -1. `Public`: This is the default, and some fediverse software like GNU Social only supports this. This means that your post is accessible by anyone and will be shown in the public timelines. +1. `Public`: This is the default, and some fediverse software like GNU Social only supports this. This means that your post is accessible by anyone and will be shown in the public timelines. 2. `Unlisted`: This is the same as public, but your post won't appear in the public timelines. The post will still be accessible by anyone who comes across it (for example, by looking at your profile) or by direct linking. They will also appear in public searches. 3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](#user-settings). 4. `Direct`: This will only send the message to the people explicitly mentioned in the post. @@ -96,7 +96,7 @@ Clicking on the cog icon in the upper right will go to the settings screen. ### Timeline - Hide posts of muted users: If this is set, 'muting' a user will completely hide their posts instead of collapsing them. -- Collapse posts with subjects: This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings. +- Collapse posts with subjects: This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings. - Enable automatic streaming of new posts when scrolled to the top: With this enabled, new posts will automatically stream in when you are scrolled to the top. Otherwise, you will see a button on the timeline that will let you display the new posts. - Pause streaming when tab is not focused: This pauses the automatic streaming that the previous option enables when the tab is out of focus. This is useful if you don't want to miss any new posts. - Enable automatic loading when scrolled to the bottom: When this is disabled, a button will be shown on the bottom of the timeline that will let you load older posts. @@ -131,9 +131,21 @@ Clicking on the cog icon in the upper right will go to the settings screen. ## Theme -Here you can change, load and save the look of your Pleroma frontend. There are a lot of options, but there is a preview. Play around with the settings and see what you like! +You can change the look and feel of Pleroma Frontend here. You can choose from several instance-provided presets and you can load one from file and save current theme to file. Before you apply new theme you can see what it will look like approximately in preview section. -TODO: Maybe expand? +Themes engine was made to be easy to use while giving an option for powerful in-depth customization - you can just tweak colors on "Common" tab and leave everything else as is. + +If there's a little check box next to a color picker it means that color is optional and unless checked will be automatically picked based on some other color or defaults. + +For some features you can also adjust transparency of it by changing its opacity, you just need to tick checkbox next to it, otherwise it will be using default opacity. + +Contrast information is also provided - you can see how readable text is based on contrast between text color and background, icons under color pickers represent contrast rating based on [WCAG](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast) - thumbs up means AAA rating (good), half-filled circle means AA rating (acceptable) and warning icon means it doesn't pass the minimal contrast requirement and probably will be less readable, especially for vision-challenged people, you can hover over icon to see more detailed information. *Please note* that if background is not opaque (opacity != 1) contrast will be measured based on "worst case scenario", i.e. behind semi-transparent background lies some solid color that makes text harder to read, this however is still inaccurate because it doesn't account that background can be noisy/busy, making text even harder to read. + +Apart from colors you can also tweak shadow and lighting, which is used mostly to give buttons proper relief based on their state, give panes their shade, make things glow etc. It's quite powerful, and basically provides somewhat convenient interface for [CSS Shadows](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow). + +Another thing you can tweak is theme's roundness - some people like sharp edges, some want things more rounded. This is also used if you want circled or square avatars. + +Lastly, you can redefine fonts used in UI without changing fonts in your browser or system, this however requires you to enter font's full name and having that font installed on your system. ## Filtering From c79c8f26c8a96ac02f42be3f231bddcf3f194db6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 27 Jun 2019 00:15:27 +0300 Subject: [PATCH 028/116] deletion update --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 9cce3304..8e18dee2 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -51,7 +51,7 @@ this section will be expanded later In addition to posting you can also *favorite* post also known as *liking* them and *repeat* posts (also known as *retweeting*, *boosting* and even *reprööting*). Favoriting a post increments a counter on it, notifies post author of your affection towards that post and also adds that post to your "favorited" posts list (in your own profile, "Favorites" tab). Reprööting a post does all that and also repeats this post to your followers and your profile page with a note "*user* repeated post". -Your own posts can be deleted, but this will only reliably delete the post from your own instance. Other instances will receive a deletion notice, but there's no way to force them to actually delete a post. In addition, not all instances that contain the message might even receive the deletion notice, because they might be offline or not known to have the post because they received it through a repeat. +Your own posts can be deleted, but this will only reliably delete the post from your own instance. Other instances will receive a deletion notice, but there's no way to force them to actually delete a post. In addition, not all instances that contain the message might even receive the deletion notice, because they might be offline or not known to have the post because they received it through a repeat. Lastly, deletion notice might not reach certain frontends and clients - post will be visible for them until page refresh or cache clear, they probably won't be able to interact with it apart from replying to it (which will have reply-to mark missing). If you are a moderator, you can also delete posts by other people. If those people are on your instance, it will delete the post and send out the deletion notice to other servers. If they are not on your instance, it will just remove the post from your local instance. From 277553094b123b726758ced2674a3c83fc8cb771 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 27 Jun 2019 00:16:42 +0300 Subject: [PATCH 029/116] formatting fix --- docs/CONFIGURATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 7011f56a..b603f55a 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -78,7 +78,7 @@ Use custom image for NSFW'd images Show panel showcasing instance features/settings to logged-out visitors ## Indirect configuration -Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it**. +Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it. ### Chat **TODO somewhat broken, see: chatDisabled** chat can be disabled by disabling it in backend From 6afee3013fa3781850a5b1a361dfaa560a11b0ad Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Wed, 26 Jun 2019 21:19:35 +0000 Subject: [PATCH 030/116] fix email highlight --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 8e18dee2..ac836dcc 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -16,7 +16,7 @@ After registering and logging in you're presented with your timeline in right co Posts will contain the text you are posting, but some content will be modified: -1. Mentions: Mentions have the form of @user or @user@instance.tld. These will become links to the user's profile. In addition, the mentioned user will always get a notification about the post they have been mentioned in, so only mention users that you want to receive this message. +1. Mentions: Mentions have the form of @user or @user@instance.tld. These will become links to the user's profile. In addition, the mentioned user will always get a notification about the post they have been mentioned in, so only mention users that you want to receive this message. 2. URLs: URLs like `http://example.com` will be automatically be turned into a clickable links. 3. Hashtags: Hashtags like #cofe will also be turned into links. From e1c2cf47ce06f1cb15234a81872ce2869650f0b7 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 27 Jun 2019 21:23:32 +0300 Subject: [PATCH 031/116] PROFILE --- docs/USER_GUIDE.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index ac836dcc..2ea7aa2e 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -72,6 +72,44 @@ Currently you have several timelines to browse trough: * **Public Timelines** all posts made by users on instance you're on * **The Whole Known Network** also known as **TWKN** or **Federated Timeline** - all posts on the network by everyone, almost. Due to nature of the network your instance may not know *all** the instances on the network, so only posts originating from known instances are shown there. +## Your profile + +By clicking wrench icon above the post form you can access the profile edit or "user settings" screen. + +### Profle + +Here you can set up how you appear to other users among with some other settings: + +- Name: this is text that displays next to your avatar in posts. Please note that you **cannot** change your *@handle* +- Bio: this will be displayed under your profile - you can put anything you want there you want for everyone to see. +- Restrict your account to approved followers only: this makes your account "locked", when people follow you - you have to approve or deny their follow requests, this gives more control over who sees your followers only posts. +- Default visibility scope: this chooses your default post scope for new posts +- Strip rich text from all posts: this strips rich text formatting (bold/italics/lists etc) from all incoming posts. Will only affect newly fetched posts. + +If you're admin or moderator on your instance you also get "Show [role] badge in my profile" - this controls whether to show "Admin" or "Moderator** label on your profile page. + +**For all options mentioned above you have to click "Submit" button for changes to take place** + +- Avatar: this changes picture next to your posts. Your avatar shouldn't exceed 2 MiB (2097152 bytes) or it could cause problems with certain instances. +- Banner: this changes background on your profile card. Same as avatar it shouldn't exceed 2 MiB limit. +- Profile Background: this changes background picture for UI. It isn't shown to anyone else **yet**, but some time later it will be shown when viewing your profile. + +### Security + +Here you can change your password, revoke access tokens, configure 2-factor authentication (if available). + +### Notifications + +This screen allows more fine-grained control over what notifications to show to you based on whom it comes from + +### Data Import/Export + +This allows you to export and import a list of people you follow, in case instance's database gets reverted or if you want to move to another server. Note that you **CANNOT export/import list of people who *follow you***, they'll just need to follow you back after you move. + +### Blocks and Mutes + +These screens give access to full list of people you block/mute, useful for *un*blocking/*un*muting people because blocking/muting them most likely removes them out of your sight completely. + ## Other stuff By default you can see **ALL** posts made by other users on your Home Timeline, this contrast behavior of Twitter and Mastodon, which shows you only non-reply posts and replies to people you follow. You can set it up to replicate the said behavior, however the option is currently broken. From b3e9a5a71819c7d3a4b35c5b6ad551785a7ba44f Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 27 Jun 2019 21:27:51 +0300 Subject: [PATCH 032/116] fix link? --- docs/USER_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 2ea7aa2e..cb95a244 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -29,7 +29,7 @@ Let's clear up some basic stuff. When you post something it's called a **post** 1. `Public`: This is the default, and some fediverse software like GNU Social only supports this. This means that your post is accessible by anyone and will be shown in the public timelines. 2. `Unlisted`: This is the same as public, but your post won't appear in the public timelines. The post will still be accessible by anyone who comes across it (for example, by looking at your profile) or by direct linking. They will also appear in public searches. -3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](#user-settings). +3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](#profle). 4. `Direct`: This will only send the message to the people explicitly mentioned in the post. A few things to consider about the security and usage of these scopes: From 225090bb79553ba3994e1a68276018d9eaa872f7 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Fri, 28 Jun 2019 12:29:44 +0000 Subject: [PATCH 033/116] Apply suggestion to docs/CONFIGURATION.md --- docs/CONFIGURATION.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index b603f55a..a7dcd915 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -89,5 +89,10 @@ Rich text formatting options are displayed depending on how many formatting opti ### Who to follow This is a panel intended for users to find people to follow based on randomness or on post contents. Being potentially privacy unfriendly feature it needs to be enabled and configured in backend to be enabled. -### "Safe" DMs -There's obscure option to enable quote-unquote "safe" DMs, which makes DMs "only be visible to the mentioned users at the beginning of the message." which only changes DM warning in FE. What it does precisely is unclear and should probably be avoided since it bring in more confusion and doesn't affect other servers. +### Safe DM message display + +Setting this will change the warning text that is displayed for direct messages. + +ATTENTION: If you actually want the behavior to change. You will need to set the appropriate option at the backend. See the backend documentation for information about that. + +DO NOT activate this without checking the backend configuration first! From 7ed9d17ce745abc38a27d4994452a136357aba46 Mon Sep 17 00:00:00 2001 From: shpuld Date: Sun, 7 Jul 2019 23:02:09 +0300 Subject: [PATCH 034/116] Add thread muting to context menu of status --- src/components/extra_buttons/extra_buttons.js | 15 ++++++++++++--- src/components/extra_buttons/extra_buttons.vue | 16 +++++++++++++++- src/i18n/en.json | 4 +++- src/i18n/fi.json | 9 ++++++++- src/modules/statuses.js | 12 ++++++++++++ src/services/api/api.service.js | 14 ++++++++++++++ .../backend_interactor_service.js | 4 ++++ .../entity_normalizer.service.js | 1 + 8 files changed, 69 insertions(+), 6 deletions(-) diff --git a/src/components/extra_buttons/extra_buttons.js b/src/components/extra_buttons/extra_buttons.js index 528da301..56b2c41e 100644 --- a/src/components/extra_buttons/extra_buttons.js +++ b/src/components/extra_buttons/extra_buttons.js @@ -34,6 +34,18 @@ const ExtraButtons = { .then(() => this.$emit('onSuccess')) .catch(err => this.$emit('onError', err.error.error)) }, + muteConversation () { + this.refreshPopper() + this.$store.dispatch('muteConversation', this.status.id) + .then(() => this.$emit('onSuccess')) + .catch(err => this.$emit('onError', err.error.error)) + }, + unmuteConversation () { + this.refreshPopper() + this.$store.dispatch('unmuteConversation', this.status.id) + .then(() => this.$emit('onSuccess')) + .catch(err => this.$emit('onError', err.error.error)) + }, refreshPopper () { this.showPopper = false this.showDropDown = false @@ -54,9 +66,6 @@ const ExtraButtons = { }, canPin () { return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted') - }, - enabled () { - return this.canPin || this.canDelete } } } diff --git a/src/components/extra_buttons/extra_buttons.vue b/src/components/extra_buttons/extra_buttons.vue index 8e24e9a5..5027be1b 100644 --- a/src/components/extra_buttons/extra_buttons.vue +++ b/src/components/extra_buttons/extra_buttons.vue @@ -1,6 +1,6 @@ - +
From 53c9517a4aeae1158a95e3b9c6d6d89e3a7e0ee9 Mon Sep 17 00:00:00 2001 From: taehoon Date: Wed, 24 Jul 2019 22:42:06 -0400 Subject: [PATCH 043/116] use array.includes instead of array.indexOf --- src/components/timeline/timeline.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js index b1413591..a5c6418b 100644 --- a/src/components/timeline/timeline.js +++ b/src/components/timeline/timeline.js @@ -46,7 +46,7 @@ const Timeline = { const result = {} if (this.pinnedStatusIds && this.pinnedStatusIds.length > 0) { for (let status of this.timeline.visibleStatuses) { - if (this.pinnedStatusIds.indexOf(status.id) === -1) { + if (!this.pinnedStatusIds.includes(status.id)) { break } result[status.id] = true From 65ef03931661561db0791ee7d560292dda6b7d48 Mon Sep 17 00:00:00 2001 From: taehoon Date: Thu, 25 Jul 2019 08:03:41 -0400 Subject: [PATCH 044/116] add unit test for elimination logic --- src/components/timeline/timeline.js | 28 +++++++++++++-------- test/unit/specs/components/timeline.spec.js | 17 +++++++++++++ 2 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 test/unit/specs/components/timeline.spec.js diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js index a5c6418b..aac3869f 100644 --- a/src/components/timeline/timeline.js +++ b/src/components/timeline/timeline.js @@ -1,7 +1,20 @@ import Status from '../status/status.vue' import timelineFetcher from '../../services/timeline_fetcher/timeline_fetcher.service.js' import Conversation from '../conversation/conversation.vue' -import { throttle } from 'lodash' +import { throttle, keyBy } from 'lodash' + +export const getExcludedStatusIdsByPinning = (statuses, pinnedStatusIds) => { + const ids = [] + if (pinnedStatusIds && pinnedStatusIds.length > 0) { + for (let status of statuses) { + if (!pinnedStatusIds.includes(status.id)) { + break + } + ids.push(status.id) + } + } + return ids +} const Timeline = { props: [ @@ -43,16 +56,9 @@ const Timeline = { }, // id map of statuses which need to be hidden in the main list due to pinning logic excludedStatusIdsObject () { - const result = {} - if (this.pinnedStatusIds && this.pinnedStatusIds.length > 0) { - for (let status of this.timeline.visibleStatuses) { - if (!this.pinnedStatusIds.includes(status.id)) { - break - } - result[status.id] = true - } - } - return result + const ids = getExcludedStatusIdsByPinning(this.timeline.visibleStatuses, this.pinnedStatusIds) + // Convert id array to object + return keyBy(ids, id => id) } }, components: { diff --git a/test/unit/specs/components/timeline.spec.js b/test/unit/specs/components/timeline.spec.js new file mode 100644 index 00000000..b13d3e20 --- /dev/null +++ b/test/unit/specs/components/timeline.spec.js @@ -0,0 +1,17 @@ +import { getExcludedStatusIdsByPinning } from 'src/components/timeline/timeline.js' +import { difference } from 'lodash' + +describe('Timeline', () => { + describe('getExcludedStatusIdsByPinning', () => { + it('should not return unpinned status ids', () => { + const statuses = [ + { id: 1 }, + { id: 2 }, + { id: 3 }, + { id: 4 } + ] + const pinnedStatusIds = [1, 3] + expect(difference(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds), pinnedStatusIds)).to.eql([]) + }) + }) +}) \ No newline at end of file From a443a5203e19eb43cdff76b1e3e6502a5b917bc9 Mon Sep 17 00:00:00 2001 From: taehoon Date: Thu, 25 Jul 2019 14:17:48 -0400 Subject: [PATCH 045/116] add more unit tests for elimination logic --- test/unit/specs/components/timeline.spec.js | 31 +++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/test/unit/specs/components/timeline.spec.js b/test/unit/specs/components/timeline.spec.js index b13d3e20..48796cd3 100644 --- a/test/unit/specs/components/timeline.spec.js +++ b/test/unit/specs/components/timeline.spec.js @@ -3,15 +3,28 @@ import { difference } from 'lodash' describe('Timeline', () => { describe('getExcludedStatusIdsByPinning', () => { - it('should not return unpinned status ids', () => { - const statuses = [ - { id: 1 }, - { id: 2 }, - { id: 3 }, - { id: 4 } - ] - const pinnedStatusIds = [1, 3] + const mockStatuses = (ids) => ids.map(id => ({ id })) + + it('should not return any unpinned status ids', () => { + const statuses = mockStatuses([1, 2, 3, 4]) + const pinnedStatusIds = [1, 3, 5] expect(difference(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds), pinnedStatusIds)).to.eql([]) }) + + it('should not return any status ids not listed in the given statuses', () => { + const statusIds = [1, 2, 3, 4] + const statuses = mockStatuses(statusIds) + const pinnedStatusIds = [1, 3, 5] + expect(difference(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds), statusIds)).to.eql([]) + }) + + it('should return ids of pinned statuses not posted before any unpinned status', () => { + const pinnedStatusIdSet1 = ['PINNED1', 'PINNED2'] + const pinnedStatusIdSet2 = ['PINNED3', 'PINNED4'] + const pinnedStatusIds = [...pinnedStatusIdSet1, ...pinnedStatusIdSet2] + const statusIds = [...pinnedStatusIdSet1, 'UNPINNED1', ...pinnedStatusIdSet2] + const statuses = mockStatuses(statusIds) + expect(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)).to.eql(pinnedStatusIdSet1) + }) }) -}) \ No newline at end of file +}) From d785ed5a05b3123d95e8627a0f82f0f9cddec33f Mon Sep 17 00:00:00 2001 From: taehoon Date: Thu, 25 Jul 2019 23:34:56 -0400 Subject: [PATCH 046/116] rewrite unit tests --- test/unit/specs/components/timeline.spec.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/unit/specs/components/timeline.spec.js b/test/unit/specs/components/timeline.spec.js index 48796cd3..c1fdd0dd 100644 --- a/test/unit/specs/components/timeline.spec.js +++ b/test/unit/specs/components/timeline.spec.js @@ -1,5 +1,4 @@ import { getExcludedStatusIdsByPinning } from 'src/components/timeline/timeline.js' -import { difference } from 'lodash' describe('Timeline', () => { describe('getExcludedStatusIdsByPinning', () => { @@ -8,14 +7,14 @@ describe('Timeline', () => { it('should not return any unpinned status ids', () => { const statuses = mockStatuses([1, 2, 3, 4]) const pinnedStatusIds = [1, 3, 5] - expect(difference(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds), pinnedStatusIds)).to.eql([]) + expect(pinnedStatusIds).to.include.members(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)) }) it('should not return any status ids not listed in the given statuses', () => { const statusIds = [1, 2, 3, 4] const statuses = mockStatuses(statusIds) const pinnedStatusIds = [1, 3, 5] - expect(difference(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds), statusIds)).to.eql([]) + expect(statusIds).to.include.members(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)) }) it('should return ids of pinned statuses not posted before any unpinned status', () => { From 18a41e785ed85531f032a0aa1b6bfdce5a892fa9 Mon Sep 17 00:00:00 2001 From: taehoon Date: Sun, 28 Jul 2019 16:55:34 -0400 Subject: [PATCH 047/116] update unit test --- test/unit/specs/components/timeline.spec.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/unit/specs/components/timeline.spec.js b/test/unit/specs/components/timeline.spec.js index c1fdd0dd..0c8674a8 100644 --- a/test/unit/specs/components/timeline.spec.js +++ b/test/unit/specs/components/timeline.spec.js @@ -4,17 +4,15 @@ describe('Timeline', () => { describe('getExcludedStatusIdsByPinning', () => { const mockStatuses = (ids) => ids.map(id => ({ id })) - it('should not return any unpinned status ids', () => { - const statuses = mockStatuses([1, 2, 3, 4]) - const pinnedStatusIds = [1, 3, 5] - expect(pinnedStatusIds).to.include.members(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)) - }) - - it('should not return any status ids not listed in the given statuses', () => { + it('should return only members of both pinnedStatusIds and ids of the given statuses', () => { const statusIds = [1, 2, 3, 4] const statuses = mockStatuses(statusIds) const pinnedStatusIds = [1, 3, 5] - expect(statusIds).to.include.members(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)) + const result = getExcludedStatusIdsByPinning(statuses, pinnedStatusIds) + result.forEach(item => { + expect(item).to.be.oneOf(statusIds) + expect(item).to.be.oneOf(pinnedStatusIds) + }) }) it('should return ids of pinned statuses not posted before any unpinned status', () => { From 7c2982064e6faf60c95e909e7722d6110310055a Mon Sep 17 00:00:00 2001 From: taehoon Date: Mon, 22 Jul 2019 16:58:20 -0400 Subject: [PATCH 048/116] enlarge avatar in profile page --- src/components/user_card/user_card.js | 14 ++++++++++++++ src/components/user_card/user_card.vue | 19 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index e019ebbd..a3c962fb 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -5,6 +5,7 @@ import ModerationTools from '../moderation_tools/moderation_tools.vue' import { hex2rgb } from '../../services/color_convert/color_convert.js' import { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' +import { isEqual } from 'lodash' export default { props: [ 'user', 'switcher', 'selected', 'hideBio', 'rounded', 'bordered' ], @@ -100,6 +101,11 @@ export default { const validRole = rights.admin || rights.moderator const roleTitle = rights.admin ? 'admin' : 'moderator' return validRole && roleTitle + }, + isActiveRoute () { + const profileRoute = this.userProfileLink(this.user) + const currentRoute = this.$router.currentRoute + return profileRoute.name === currentRoute.name && isEqual(profileRoute.params, currentRoute.params) } }, components: { @@ -162,6 +168,14 @@ export default { }, reportUser () { this.$store.dispatch('openUserReportingModal', this.user.id) + }, + enlargeAvatar () { + const attachment = { + url: this.user.profile_image_url_original, + mimetype: 'image' + } + this.$store.dispatch('setMedia', [attachment]) + this.$store.dispatch('setCurrent', attachment) } } } diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 9e142480..3c0bf0d4 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -7,7 +7,20 @@