Add icon badge to indicate exclusive list

pull/1167/head
Lim Chee Aun 2025-05-22 13:49:20 +08:00
rodzic 215d8b230d
commit fe63f9feb4
10 zmienionych plików z 185 dodań i 82 usunięć

Wyświetl plik

@ -2106,7 +2106,7 @@ body > .szh-menu-container {
margin-block: 4px;
> &:first-child,
li[role='none']:first-child + & {
li[role='none']:not(.szh-menu__header):first-child + & {
display: none;
}
}

Wyświetl plik

@ -4,6 +4,7 @@ import { useEffect, useRef, useState } from 'preact/hooks';
import { ICONS } from './ICONS';
const SIZES = {
xs: 8,
s: 12,
m: 16,
l: 20,

Wyświetl plik

@ -6,6 +6,7 @@ import { addListStore, deleteListStore, updateListStore } from '../utils/lists';
import supports from '../utils/supports';
import Icon from './icon';
import ListExclusiveBadge from './list-exclusive-badge';
import MenuConfirm from './menu-confirm';
function ListAddEdit({ list, onClose }) {
@ -141,6 +142,7 @@ function ListAddEdit({ list, onClose }) {
name="exclusive"
disabled={uiState === 'loading'}
/>{' '}
<ListExclusiveBadge insignificant />{' '}
<Trans>Hide posts on this list from Home/Following</Trans>
</label>
</div>

Wyświetl plik

@ -0,0 +1,9 @@
.list-exclusive-badge {
box-sizing: content-box;
border: 1px solid;
padding: 1px;
margin: 0 2px 2px;
border-radius: 3px;
vertical-align: middle;
background-color: var(--bg-blur-color);
}

Wyświetl plik

@ -0,0 +1,19 @@
import './list-exclusive-badge.css';
import { useLingui } from '@lingui/react/macro';
import Icon from './icon';
function ListExclusiveBadge({ insignificant }) {
const { t } = useLingui();
return (
<Icon
icon="filter"
size="xs"
class={`list-exclusive-badge ${insignificant ? 'insignificant' : ''}`}
title={t`Posts on this list are hidden from Home/Following`}
/>
);
}
export default ListExclusiveBadge;

Wyświetl plik

@ -17,6 +17,7 @@ import supports from '../utils/supports';
import Avatar from './avatar';
import Icon from './icon';
import ListExclusiveBadge from './list-exclusive-badge';
import MenuLink from './menu-link';
import SubMenu2 from './submenu2';
@ -444,7 +445,15 @@ function ListMenu({ menuState }) {
<MenuDivider />
{lists.map((list) => (
<MenuLink key={list.id} to={`/l/${list.id}`}>
<span>{list.title}</span>
<span>
{list.title}
{list.exclusive && (
<>
{' '}
<ListExclusiveBadge />
</>
)}
</span>
</MenuLink>
))}
</>

Wyświetl plik

@ -16,6 +16,7 @@ import states from '../utils/states';
import AsyncText from './AsyncText';
import Icon from './icon';
import Link from './link';
import ListExclusiveBadge from './list-exclusive-badge';
import MenuLink from './menu-link';
import Menu2 from './menu2';
import SubMenu2 from './submenu2';
@ -218,7 +219,15 @@ function Shortcuts() {
<MenuDivider />
{lists?.map((list) => (
<MenuLink key={list.id} to={`/l/${list.id}`}>
<span>{list.title}</span>
<span>
{list.title}
{list.exclusive && (
<>
{' '}
<ListExclusiveBadge />
</>
)}
</span>
</MenuLink>
))}
</SubMenu2>

144
src/locales/en.po wygenerowano
Wyświetl plik

@ -119,7 +119,7 @@ msgstr ""
#: src/pages/account-statuses.jsx:526
#: src/pages/accounts.jsx:110
#: src/pages/hashtag.jsx:202
#: src/pages/list.jsx:161
#: src/pages/list.jsx:171
#: src/pages/public.jsx:116
#: src/pages/scheduled-posts.jsx:89
#: src/pages/status.jsx:1239
@ -458,7 +458,7 @@ msgstr ""
#: src/components/embed-modal.jsx:13
#: src/components/generic-accounts.jsx:151
#: src/components/keyboard-shortcuts-help.jsx:43
#: src/components/list-add-edit.jsx:36
#: src/components/list-add-edit.jsx:37
#: src/components/media-alt-modal.jsx:34
#: src/components/media-modal.jsx:323
#: src/components/notification-service.jsx:157
@ -472,7 +472,7 @@ msgstr ""
#: src/pages/accounts.jsx:37
#: src/pages/catchup.jsx:1584
#: src/pages/filters.jsx:225
#: src/pages/list.jsx:280
#: src/pages/list.jsx:302
#: src/pages/notifications.jsx:939
#: src/pages/scheduled-posts.jsx:259
#: src/pages/settings.jsx:87
@ -493,7 +493,7 @@ msgid "Unable to add to list."
msgstr "Unable to add to list."
#: src/components/account-info.jsx:2101
#: src/pages/lists.jsx:105
#: src/pages/lists.jsx:131
msgid "Unable to load lists."
msgstr ""
@ -502,8 +502,8 @@ msgid "No lists."
msgstr ""
#: src/components/account-info.jsx:2116
#: src/components/list-add-edit.jsx:40
#: src/pages/lists.jsx:59
#: src/components/list-add-edit.jsx:41
#: src/pages/lists.jsx:62
msgid "New list"
msgstr ""
@ -538,7 +538,7 @@ msgid "Profile picture"
msgstr "Profile picture"
#: src/components/account-info.jsx:2461
#: src/components/list-add-edit.jsx:105
#: src/components/list-add-edit.jsx:106
msgid "Name"
msgstr ""
@ -559,7 +559,7 @@ msgid "Content"
msgstr ""
#: src/components/account-info.jsx:2529
#: src/components/list-add-edit.jsx:150
#: src/components/list-add-edit.jsx:152
#: src/components/shortcuts-settings.jsx:715
#: src/pages/filters.jsx:570
#: src/pages/notifications.jsx:1005
@ -592,7 +592,7 @@ msgid "Cloak mode enabled"
msgstr ""
#: src/components/columns.jsx:27
#: src/components/nav-menu.jsx:180
#: src/components/nav-menu.jsx:181
#: src/components/shortcuts-settings.jsx:139
#: src/components/timeline.jsx:465
#: src/pages/catchup.jsx:883
@ -610,7 +610,7 @@ msgid "Compose"
msgstr ""
#: src/components/compose-button.jsx:170
#: src/components/nav-menu.jsx:264
#: src/components/nav-menu.jsx:265
#: src/pages/scheduled-posts.jsx:31
#: src/pages/scheduled-posts.jsx:78
msgid "Scheduled Posts"
@ -734,7 +734,7 @@ msgid "Public"
msgstr ""
#: src/components/compose.jsx:1271
#: src/components/nav-menu.jsx:348
#: src/components/nav-menu.jsx:349
#: src/components/shortcuts-settings.jsx:165
#: src/components/status.jsx:97
msgid "Local"
@ -781,7 +781,7 @@ msgstr "Posting on <0/>"
#: src/components/compose.jsx:1440
#: src/components/compose.jsx:3267
#: src/components/shortcuts-settings.jsx:715
#: src/pages/list.jsx:366
#: src/pages/list.jsx:388
msgid "Add"
msgstr ""
@ -817,7 +817,7 @@ msgstr "Failed to download GIF"
#: src/components/compose.jsx:2036
#: src/components/compose.jsx:2113
#: src/components/nav-menu.jsx:243
#: src/components/nav-menu.jsx:244
msgid "More…"
msgstr ""
@ -1015,7 +1015,7 @@ msgid "Error deleting draft! Please try again."
msgstr ""
#: src/components/drafts.jsx:128
#: src/components/list-add-edit.jsx:186
#: src/components/list-add-edit.jsx:188
#: src/components/status.jsx:1420
#: src/pages/filters.jsx:603
#: src/pages/scheduled-posts.jsx:369
@ -1084,7 +1084,7 @@ msgstr ""
#: src/components/generic-accounts.jsx:214
#: src/components/timeline.jsx:547
#: src/pages/list.jsx:299
#: src/pages/list.jsx:321
#: src/pages/notifications.jsx:919
#: src/pages/search.jsx:558
#: src/pages/status.jsx:1359
@ -1102,7 +1102,7 @@ msgid "Nothing to show"
msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:47
#: src/components/nav-menu.jsx:367
#: src/components/nav-menu.jsx:368
#: src/pages/catchup.jsx:1622
msgid "Keyboard shortcuts"
msgstr ""
@ -1199,7 +1199,7 @@ msgid "<0>Ctrl</0> + <1>Enter</1> or <2>⌘</2> + <3>Enter</3>"
msgstr ""
#: src/components/keyboard-shortcuts-help.jsx:151
#: src/components/nav-menu.jsx:336
#: src/components/nav-menu.jsx:337
#: src/components/search-form.jsx:73
#: src/components/shortcuts-settings.jsx:52
#: src/components/shortcuts-settings.jsx:179
@ -1251,47 +1251,53 @@ msgstr ""
msgid "<0>Shift</0> + <1>Alt</1> + <2>k</2>"
msgstr ""
#: src/components/list-add-edit.jsx:40
#: src/components/list-add-edit.jsx:41
msgid "Edit list"
msgstr ""
#: src/components/list-add-edit.jsx:96
#: src/components/list-add-edit.jsx:97
msgid "Unable to edit list."
msgstr ""
#: src/components/list-add-edit.jsx:97
#: src/components/list-add-edit.jsx:98
msgid "Unable to create list."
msgstr ""
#: src/components/list-add-edit.jsx:125
#: src/components/list-add-edit.jsx:126
msgid "Show replies to list members"
msgstr ""
#: src/components/list-add-edit.jsx:128
#: src/components/list-add-edit.jsx:129
msgid "Show replies to people I follow"
msgstr ""
#: src/components/list-add-edit.jsx:131
#: src/components/list-add-edit.jsx:132
msgid "Don't show replies"
msgstr ""
#: src/components/list-add-edit.jsx:144
#: src/components/list-add-edit.jsx:146
msgid "Hide posts on this list from Home/Following"
msgstr ""
#: src/components/list-add-edit.jsx:150
#: src/components/list-add-edit.jsx:152
#: src/pages/filters.jsx:570
msgid "Create"
msgstr ""
#: src/components/list-add-edit.jsx:157
#: src/components/list-add-edit.jsx:159
msgid "Delete this list?"
msgstr ""
#: src/components/list-add-edit.jsx:176
#: src/components/list-add-edit.jsx:178
msgid "Unable to delete list."
msgstr ""
#: src/components/list-exclusive-badge.jsx:14
#: src/pages/list.jsx:179
#: src/pages/lists.jsx:107
msgid "Posts on this list are hidden from Home/Following"
msgstr "Posts on this list are hidden from Home/Following"
#: src/components/media-alt-modal.jsx:39
#: src/components/media.jsx:51
msgid "Media description"
@ -1375,32 +1381,32 @@ msgstr ""
msgid "Post updated. Check it out."
msgstr ""
#: src/components/nav-menu.jsx:122
#: src/components/nav-menu.jsx:123
msgid "Menu"
msgstr ""
#: src/components/nav-menu.jsx:158
#: src/components/nav-menu.jsx:159
msgid "Reload page now to update?"
msgstr ""
#: src/components/nav-menu.jsx:170
#: src/components/nav-menu.jsx:171
msgid "New update available…"
msgstr ""
#. js-lingui-explicit-id
#: src/components/nav-menu.jsx:189
#: src/components/nav-menu.jsx:190
#: src/components/shortcuts-settings.jsx:140
#: src/pages/following.jsx:23
#: src/pages/following.jsx:144
msgid "following.title"
msgstr "Following"
#: src/components/nav-menu.jsx:196
#: src/components/nav-menu.jsx:197
#: src/pages/catchup.jsx:878
msgid "Catch-up"
msgstr ""
#: src/components/nav-menu.jsx:203
#: src/components/nav-menu.jsx:204
#: src/components/shortcuts-settings.jsx:58
#: src/components/shortcuts-settings.jsx:146
#: src/pages/home.jsx:228
@ -1411,7 +1417,7 @@ msgstr ""
msgid "Mentions"
msgstr ""
#: src/components/nav-menu.jsx:210
#: src/components/nav-menu.jsx:211
#: src/components/shortcuts-settings.jsx:49
#: src/components/shortcuts-settings.jsx:152
#: src/pages/filters.jsx:24
@ -1422,15 +1428,15 @@ msgstr ""
msgid "Notifications"
msgstr ""
#: src/components/nav-menu.jsx:213
#: src/components/nav-menu.jsx:214
msgid "New"
msgstr ""
#: src/components/nav-menu.jsx:224
#: src/components/nav-menu.jsx:225
msgid "Profile"
msgstr ""
#: src/components/nav-menu.jsx:232
#: src/components/nav-menu.jsx:233
#: src/components/shortcuts-settings.jsx:54
#: src/components/shortcuts-settings.jsx:195
#: src/pages/bookmarks.jsx:12
@ -1438,7 +1444,7 @@ msgstr ""
msgid "Bookmarks"
msgstr ""
#: src/components/nav-menu.jsx:252
#: src/components/nav-menu.jsx:253
#: src/components/shortcuts-settings.jsx:55
#: src/components/shortcuts-settings.jsx:201
#: src/pages/catchup.jsx:1449
@ -1449,13 +1455,13 @@ msgstr ""
msgid "Likes"
msgstr ""
#: src/components/nav-menu.jsx:258
#: src/components/nav-menu.jsx:259
#: src/pages/followed-hashtags.jsx:15
#: src/pages/followed-hashtags.jsx:45
msgid "Followed Hashtags"
msgstr ""
#: src/components/nav-menu.jsx:272
#: src/components/nav-menu.jsx:273
#: src/pages/account-statuses.jsx:329
#: src/pages/filters.jsx:55
#: src/pages/filters.jsx:94
@ -1463,27 +1469,27 @@ msgstr ""
msgid "Filters"
msgstr ""
#: src/components/nav-menu.jsx:280
#: src/components/nav-menu.jsx:281
msgid "Muted users"
msgstr ""
#: src/components/nav-menu.jsx:288
#: src/components/nav-menu.jsx:289
msgid "Muted users…"
msgstr ""
#: src/components/nav-menu.jsx:295
#: src/components/nav-menu.jsx:296
msgid "Blocked users"
msgstr ""
#: src/components/nav-menu.jsx:303
#: src/components/nav-menu.jsx:304
msgid "Blocked users…"
msgstr ""
#: src/components/nav-menu.jsx:315
#: src/components/nav-menu.jsx:316
msgid "Accounts…"
msgstr ""
#: src/components/nav-menu.jsx:325
#: src/components/nav-menu.jsx:326
#: src/pages/login.jsx:27
#: src/pages/login.jsx:190
#: src/pages/status.jsx:862
@ -1491,40 +1497,40 @@ msgstr ""
msgid "Log in"
msgstr ""
#: src/components/nav-menu.jsx:342
#: src/components/nav-menu.jsx:343
#: src/components/shortcuts-settings.jsx:57
#: src/components/shortcuts-settings.jsx:172
#: src/pages/trending.jsx:444
msgid "Trending"
msgstr ""
#: src/components/nav-menu.jsx:354
#: src/components/nav-menu.jsx:355
#: src/components/shortcuts-settings.jsx:165
msgid "Federated"
msgstr ""
#: src/components/nav-menu.jsx:377
#: src/components/nav-menu.jsx:378
msgid "Shortcuts / Columns…"
msgstr ""
#: src/components/nav-menu.jsx:387
#: src/components/nav-menu.jsx:401
#: src/components/nav-menu.jsx:388
#: src/components/nav-menu.jsx:402
msgid "Settings…"
msgstr ""
#: src/components/nav-menu.jsx:431
#: src/components/nav-menu.jsx:458
#: src/components/nav-menu.jsx:432
#: src/components/nav-menu.jsx:467
#: src/components/shortcuts-settings.jsx:50
#: src/components/shortcuts-settings.jsx:158
#: src/pages/list.jsx:130
#: src/pages/lists.jsx:17
#: src/pages/lists.jsx:51
#: src/pages/list.jsx:127
#: src/pages/lists.jsx:18
#: src/pages/lists.jsx:54
msgid "Lists"
msgstr ""
#: src/components/nav-menu.jsx:439
#: src/components/shortcuts.jsx:215
#: src/pages/list.jsx:137
#: src/components/nav-menu.jsx:440
#: src/components/shortcuts.jsx:216
#: src/pages/list.jsx:139
msgid "All Lists"
msgstr ""
@ -1948,7 +1954,7 @@ msgid "Media only"
msgstr ""
#: src/components/shortcuts-settings.jsx:235
#: src/components/shortcuts.jsx:192
#: src/components/shortcuts.jsx:193
msgid "Shortcuts"
msgstr ""
@ -1986,7 +1992,7 @@ msgstr ""
#: src/components/shortcuts-settings.jsx:379
#: src/components/status.jsx:1382
#: src/pages/list.jsx:174
#: src/pages/list.jsx:195
msgid "Edit"
msgstr ""
@ -3140,7 +3146,7 @@ msgid "Nothing to see here."
msgstr ""
#: src/pages/following.jsx:147
#: src/pages/list.jsx:112
#: src/pages/list.jsx:109
msgid "Unable to load posts."
msgstr ""
@ -3269,30 +3275,30 @@ msgstr ""
msgid "Unable to resolve URL"
msgstr ""
#: src/pages/list.jsx:111
#: src/pages/list.jsx:108
msgid "Nothing yet."
msgstr ""
#: src/pages/list.jsx:180
#: src/pages/list.jsx:285
#: src/pages/list.jsx:201
#: src/pages/list.jsx:307
msgid "Manage members"
msgstr ""
#. placeholder {0}: account.username
#: src/pages/list.jsx:320
#: src/pages/list.jsx:342
msgid "Remove <0>@{0}</0> from list?"
msgstr ""
#: src/pages/list.jsx:366
#: src/pages/list.jsx:388
msgid "Remove…"
msgstr ""
#. placeholder {0}: lists.length
#: src/pages/lists.jsx:94
#: src/pages/lists.jsx:115
msgid "{0, plural, one {# list} other {# lists}}"
msgstr ""
#: src/pages/lists.jsx:109
#: src/pages/lists.jsx:135
msgid "No lists yet."
msgstr ""

Wyświetl plik

@ -1,7 +1,7 @@
import './lists.css';
import { Trans, useLingui } from '@lingui/react/macro';
import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu';
import { Menu, MenuDivider, MenuHeader, MenuItem } from '@szhsin/react-menu';
import { useEffect, useRef, useState } from 'preact/hooks';
import { InView } from 'react-intersection-observer';
import { useNavigate, useParams } from 'react-router-dom';
@ -9,8 +9,8 @@ import { useSnapshot } from 'valtio';
import AccountBlock from '../components/account-block';
import Icon from '../components/icon';
import Link from '../components/link';
import ListAddEdit from '../components/list-add-edit';
import ListExclusiveBadge from '../components/list-exclusive-badge';
import MenuConfirm from '../components/menu-confirm';
import MenuLink from '../components/menu-link';
import Menu2 from '../components/menu2';
@ -80,9 +80,6 @@ function List(props) {
}
const [lists, setLists] = useState([]);
useEffect(() => {
getLists().then(setLists);
}, []);
const [list, setList] = useState({ title: 'List' });
// const [title, setTitle] = useState(`List`);
@ -131,6 +128,11 @@ function List(props) {
<Icon icon="chevron-down" size="s" />
</button>
}
onMenuChange={(e) => {
if (e.open) {
getLists().then(setLists);
}
}}
>
<MenuLink to="/l">
<span>
@ -142,7 +144,15 @@ function List(props) {
<MenuDivider />
{lists.map((list) => (
<MenuLink key={list.id} to={`/l/${list.id}`}>
<span>{list.title}</span>
<span>
{list.title}
{list.exclusive && (
<>
{' '}
<ListExclusiveBadge />
</>
)}
</span>
</MenuLink>
))}
</>
@ -162,6 +172,17 @@ function List(props) {
</button>
}
>
{list?.exclusive && (
<>
<MenuHeader className="plain">
<ListExclusiveBadge />{' '}
<Trans>
Posts on this list are hidden from Home/Following
</Trans>
</MenuHeader>
<MenuDivider />
</>
)}
<MenuItem
onClick={() =>
setShowListAddEditModal({
@ -225,6 +246,7 @@ function List(props) {
}
const MEMBERS_LIMIT = 40;
function ListManageMembers({ listID, onClose }) {
const { t } = useLingui();
// Show list of members with [Remove] button

Wyświetl plik

@ -6,6 +6,7 @@ import { useEffect, useReducer, useState } from 'preact/hooks';
import Icon from '../components/icon';
import Link from '../components/link';
import ListAddEdit from '../components/list-add-edit';
import ListExclusiveBadge from '../components/list-exclusive-badge';
import Loader from '../components/loader';
import Modal from '../components/modal';
import NavMenu from '../components/nav-menu';
@ -36,6 +37,8 @@ function Lists() {
const [showListAddEditModal, setShowListAddEditModal] = useState(false);
const hasExclusiveLists = lists.some((list) => list.exclusive);
return (
<div id="lists-page" class="deck-container" tabIndex="-1">
<div class="timeline-deck deck">
@ -68,8 +71,15 @@ function Lists() {
{lists.map((list) => (
<li>
<Link to={`/l/${list.id}`}>
<Icon icon="list" />{' '}
<span>
<Icon icon="list" /> <span>{list.title}</span>
{list.title}
{list.exclusive && (
<>
{' '}
<ListExclusiveBadge insignificant />
</>
)}
</span>
{/* <button
type="button"
@ -90,9 +100,25 @@ function Lists() {
</ul>
{lists.length > 1 && (
<footer class="ui-state">
{hasExclusiveLists && (
<p>
<small class="insignificant">
<Plural value={lists.length} one="# list" other="# lists" />
<ListExclusiveBadge />{' '}
<Trans>
Posts on this list are hidden from Home/Following
</Trans>
</small>
</p>
)}
<p>
<small class="insignificant">
<Plural
value={lists.length}
one="# list"
other="# lists"
/>
</small>
</p>
</footer>
)}
</>