summaryrefslogtreecommitdiff
path: root/web/source
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-07-24 10:40:56 +0200
committerLibravatar GitHub <noreply@github.com>2024-07-24 10:40:56 +0200
commit325b4a2b4a1dc2fba6a72f0a10dc88b98f57f05c (patch)
tree8f3c8cdec61a901418c8d729c3a0641a6bda158b /web/source
parent[bugfix] Serialize empty conversation account list as empty list, not null (#... (diff)
downloadgotosocial-325b4a2b4a1dc2fba6a72f0a10dc88b98f57f05c.tar.xz
[feature] Allow user to set "bot" flag; show bot icon on profile (#3135)
* [feature] Allow user to set "bot" flag; show bot icon on profile * tweak * update customs
Diffstat (limited to 'web/source')
-rw-r--r--web/source/css/profile.css49
-rw-r--r--web/source/settings/components/profile.tsx22
-rw-r--r--web/source/settings/style.css30
-rw-r--r--web/source/settings/views/user/profile.tsx15
4 files changed, 91 insertions, 25 deletions
diff --git a/web/source/css/profile.css b/web/source/css/profile.css
index 3f7f43d0d..c8a948a49 100644
--- a/web/source/css/profile.css
+++ b/web/source/css/profile.css
@@ -134,16 +134,47 @@
font-size: 1.5rem;
font-weight: bold;
}
-
- .username {
- min-width: 0;
+
+ .bot-username-wrapper {
+ display: flex;
+ gap: 0.5rem;
grid-area: username;
- line-height: $username-size;
-
- font-size: 1rem;
- font-weight: bold;
- color: $fg-accent;
- user-select: all;
+ align-items: center;
+
+ .bot-legend-wrapper {
+ display: flex;
+ gap: 0.25rem;
+ align-items: center;
+
+ background: $bg;
+ color: $fg;
+
+ border-radius: $br;
+ padding: 0.1rem 0.4rem 0.2rem 0.4rem;
+
+ font-variant: small-caps;
+ font-weight: bold;
+
+ cursor: default;
+
+ .bot-icon {
+ /*
+ FA icon is weirdly
+ aligned so tweak it
+ */
+ margin-top: 0.25rem;
+ }
+ }
+
+ .username {
+ min-width: 0;
+ line-height: $username-size;
+
+ font-size: 1rem;
+ font-weight: bold;
+ color: $fg-accent;
+ user-select: all;
+ }
}
.role {
diff --git a/web/source/settings/components/profile.tsx b/web/source/settings/components/profile.tsx
index 24cb3c4c2..ee50a6d33 100644
--- a/web/source/settings/components/profile.tsx
+++ b/web/source/settings/components/profile.tsx
@@ -19,7 +19,7 @@
import React from "react";
-export default function FakeProfile({ avatar, header, display_name, username, role }) {
+export default function FakeProfile({ avatar, header, display_name, bot, username, role }) {
return ( // Keep in sync with web/template/profile.tmpl
<div className="profile">
<div className="profile-header">
@@ -35,8 +35,24 @@ export default function FakeProfile({ avatar, header, display_name, username, ro
<dl className="namerole">
<dt className="sr-only">Display name</dt>
<dd className="displayname text-cutoff">{display_name.trim().length > 0 ? display_name : username}</dd>
- <dt className="sr-only">Username</dt>
- <dd className="username text-cutoff">@{username}</dd>
+ <div className="bot-username-wrapper">
+ { bot && <>
+ <dt className="sr-only">Bot account</dt>
+ <dd>
+ <span className="sr-only">true</span>
+ <div
+ className="bot-legend-wrapper"
+ aria-hidden="true"
+ title="This is a bot account."
+ >
+ <i className="bot-icon fa fa-microchip"></i>
+ <span className="bot-legend">bot</span>
+ </div>
+ </dd>
+ </>}
+ <dt className="sr-only">Username</dt>
+ <dd className="username text-cutoff">@{username}</dd>
+ </div>
<dt className="sr-only">Role</dt>
{
(role && role.name != "user") ?
diff --git a/web/source/settings/style.css b/web/source/settings/style.css
index 1cf723754..9650f7466 100644
--- a/web/source/settings/style.css
+++ b/web/source/settings/style.css
@@ -445,22 +445,34 @@ section.with-sidebar > form {
}
}
- .fields {
+ .theme, .form-field.radio {
display: flex;
flex-direction: column;
gap: 0.5rem;
-
- .entry {
+ }
+
+ fieldset {
+ margin: 0;
+ padding: 0.5rem 1rem 1rem 1rem;
+ max-width: fit-content;
+ border: 0.1rem solid var(--gray1);
+ border-radius: 0.1rem;
+
+ >legend {
+ font-weight: bold;
+ }
+
+ .fields {
display: flex;
+ flex-direction: column;
gap: 0.5rem;
+
+ .entry {
+ display: flex;
+ gap: 0.5rem;
+ }
}
}
-
- .theme, .form-field.radio {
- display: flex;
- flex-direction: column;
- gap: 0.5rem;
- }
}
.migration-details {
diff --git a/web/source/settings/views/user/profile.tsx b/web/source/settings/views/user/profile.tsx
index f4088b353..6d476f80f 100644
--- a/web/source/settings/views/user/profile.tsx
+++ b/web/source/settings/views/user/profile.tsx
@@ -130,6 +130,7 @@ function UserProfileForm({ data: profile }) {
avatar={form.avatar.previewValue ?? profile.avatar}
header={form.header.previewValue ?? profile.header}
display_name={form.displayName.value ?? profile.username}
+ bot={profile.bot}
username={profile.username}
role={profile.role}
/>
@@ -186,6 +187,10 @@ function UserProfileForm({ data: profile }) {
Learn more about these settings (opens in a new tab)
</a>
</div>
+ <Checkbox
+ field={form.bot}
+ label="Mark as bot account; this indicates to other users that this is an automated account"
+ />
<TextInput
field={form.displayName}
label="Display name"
@@ -200,10 +205,12 @@ function UserProfileForm({ data: profile }) {
autoCapitalize="sentences"
rows={8}
/>
- <b>Profile fields</b>
- <ProfileFields
- field={form.fields}
- />
+ <fieldset>
+ <legend>Profile fields</legend>
+ <ProfileFields
+ field={form.fields}
+ />
+ </fieldset>
<div className="form-section-docs">
<h3>Visibility and privacy</h3>