diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index ff3166da35..14622e573d 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -14,6 +14,8 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import Directory from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; @@ -27,7 +29,7 @@ import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; -import { LinkFooter } from 'mastodon/features/ui/components/link_footer'; +import LinkFooter from 'mastodon/features/ui/components/link_footer'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions'; @@ -42,6 +44,8 @@ const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed Hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profile directory' }, settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' }, community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, deep_timeline: { id: 'navigation_bar.deep_timeline', defaultMessage: 'Deep timeline' }, @@ -144,8 +148,9 @@ class GettingStarted extends ImmutablePureComponent { , , , + , , - , + , , ); diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 95828ef25e..b9aabb48c2 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -13,6 +13,8 @@ import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import DirectoryIcon from '@/material-icons/400-24px/group.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; @@ -50,6 +52,8 @@ const messages = defineMessages({ home: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, explore: { id: 'explore.title', defaultMessage: 'Explore' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profiles directory' }, local: { id: 'column.local', defaultMessage: 'Local' }, deepLocal: { id: 'column.deep_local', defaultMessage: 'Deep' }, firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' }, @@ -228,7 +232,42 @@ class NavigationPanel extends Component {

+ + + )} + + {signedIn && ( + <> + + + + + + + + + )} + + {signedIn && explorer} + + {signedIn && ( + <> + + { !isHideItem('favourite_menu') && } +
+ + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + + {!signedIn && ( +
+
+ { disabledAccountId ? : }
diff --git a/app/validators/status_pin_validator.rb b/app/validators/status_pin_validator.rb index c9c1effba8..fa997f1c5b 100644 --- a/app/validators/status_pin_validator.rb +++ b/app/validators/status_pin_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class StatusPinValidator < ActiveModel::Validator - PIN_LIMIT = 5 + PIN_LIMIT = (ENV['MAX_PINNED_TOOTS'] || 5).to_i def validate(pin) pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog?