diff --git a/src/app/(page-detail)/[slug]/pageExtra.tsx b/src/app/(page-detail)/[slug]/pageExtra.tsx
index f6bb577df7..2d85a5fee7 100644
--- a/src/app/(page-detail)/[slug]/pageExtra.tsx
+++ b/src/app/(page-detail)/[slug]/pageExtra.tsx
@@ -8,6 +8,7 @@ import type { PropsWithChildren } from 'react'
import { useSetHeaderMetaInfo } from '~/components/layout/header/hooks'
import { Markdown } from '~/components/ui/markdown'
+import { GoToAdminEditingButton } from '~/components/widgets/shared/GoToAdminEditingButton'
import { noopArr } from '~/lib/noop'
import { MarkdownImageRecordProvider } from '~/providers/article/MarkdownImageRecordProvider'
import { useCurrentPageDataSelector } from '~/providers/page/CurrentPageDataProvider'
@@ -63,10 +64,18 @@ export const PageSubTitle = () => {
}
export const PageTitle = () => {
const title = useCurrentPageDataSelector((data) => data?.title)
+ const id = useCurrentPageDataSelector((data) => data?.id)
return (
-
- {title}
-
+ <>
+
+ {title}
+
+
+ >
)
}
export const HeaderMetaInfoSetting = () => {
diff --git a/src/app/friends/page.tsx b/src/app/friends/page.tsx
index e881b589ad..719fcf1b18 100644
--- a/src/app/friends/page.tsx
+++ b/src/app/friends/page.tsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-target-blank */
'use client'
import { useQuery } from '@tanstack/react-query'
@@ -150,7 +151,6 @@ const Card: FC<{ link: LinkModel }> = ({ link }) => {
layoutId={link.id}
href={link.url}
target="_blank"
- rel="noreferrer"
role="link"
aria-label={`Go to ${link.name}'s website`}
className="relative flex flex-col items-center justify-center"
@@ -183,7 +183,7 @@ const FavoriteSection: FC = ({ data }) => {
{data.map((link) => {
return (
-
+
{link.name}
{link.description || ''}
diff --git a/src/app/notes/[id]/pageExtra.tsx b/src/app/notes/[id]/pageExtra.tsx
index 3a6f3c54bd..5750112735 100644
--- a/src/app/notes/[id]/pageExtra.tsx
+++ b/src/app/notes/[id]/pageExtra.tsx
@@ -13,6 +13,7 @@ import { MdiClockOutline } from '~/components/icons/clock'
import { useSetHeaderMetaInfo } from '~/components/layout/header/hooks'
import { FloatPopover } from '~/components/ui/float-popover'
import { Markdown } from '~/components/ui/markdown'
+import { GoToAdminEditingButton } from '~/components/widgets/shared/GoToAdminEditingButton'
import { parseDate } from '~/lib/datetime'
import { noopArr } from '~/lib/noop'
import { MarkdownImageRecordProvider } from '~/providers/article/MarkdownImageRecordProvider'
@@ -22,9 +23,19 @@ import styles from './page.module.css'
export const NoteTitle = () => {
const title = useCurrentNoteDataSelector((data) => data?.data.title)
+ const id = useCurrentNoteDataSelector((data) => data?.data.id)
+
if (!title) return null
return (
- {title}
+ <>
+ {title}
+
+
+ >
)
}
diff --git a/src/app/posts/(post-detail)/[category]/[slug]/page.tsx b/src/app/posts/(post-detail)/[category]/[slug]/page.tsx
index c2b3325a17..5178887794 100644
--- a/src/app/posts/(post-detail)/[category]/[slug]/page.tsx
+++ b/src/app/posts/(post-detail)/[category]/[slug]/page.tsx
@@ -9,6 +9,7 @@ import { PostCopyright } from '~/components/widgets/post/PostCopyright'
import { PostOutdate } from '~/components/widgets/post/PostOutdate'
import { PostRelated } from '~/components/widgets/post/PostRelated'
import { ArticleRightAside } from '~/components/widgets/shared/ArticleRightAside'
+import { GoToAdminEditingButton } from '~/components/widgets/shared/GoToAdminEditingButton'
import { ReadIndicatorForMobile } from '~/components/widgets/shared/ReadIndicator'
import { SubscribeBell } from '~/components/widgets/subscribe/SubscribeBell'
import { XLogInfoForPost, XLogSummaryForPost } from '~/components/widgets/xlog'
@@ -45,6 +46,11 @@ const PostPage = () => {
{title}
+
diff --git a/src/atoms/url.ts b/src/atoms/url.ts
index 7c85cef111..5cb885cd28 100644
--- a/src/atoms/url.ts
+++ b/src/atoms/url.ts
@@ -29,3 +29,13 @@ export const useAppUrl = () => {
...url,
}
}
+
+export const useResolveAdminUrl = () => {
+ const { adminUrl } = useAppUrl()
+ return (path: string) => {
+ if (!adminUrl) {
+ return ''
+ }
+ return adminUrl.replace(/\/$/, '').concat(path || '')
+ }
+}
diff --git a/src/components/ui/link-card/LinkCard.module.css b/src/components/ui/link-card/LinkCard.module.css
index 7f3f396941..a6bd21ce5e 100644
--- a/src/components/ui/link-card/LinkCard.module.css
+++ b/src/components/ui/link-card/LinkCard.module.css
@@ -16,7 +16,7 @@
@apply cursor-pointer border font-sans no-underline;
@apply [&_*]:!not-italic;
- @apply border border-slate-100 bg-gray-100/80 dark:border-neutral-700 dark:bg-neutral-800;
+ @apply border border-slate-200/80 bg-gray-100/80 dark:border-neutral-700 dark:bg-zinc-800;
@apply transition-colors duration-200;
}
diff --git a/src/components/ui/markdown/parsers/mention.tsx b/src/components/ui/markdown/parsers/mention.tsx
index c52204ad8a..b4d3513955 100644
--- a/src/components/ui/markdown/parsers/mention.tsx
+++ b/src/components/ui/markdown/parsers/mention.tsx
@@ -63,7 +63,7 @@ export const MentionRule: MarkdownToJSX.Rule = {
target="_blank"
rel="noreferrer nofollow"
href={`${urlPrefix}${name}`}
- className="no-underline"
+ className="underline-offset-2"
>
{displayName || name}
diff --git a/src/components/widgets/shared/GoToAdminEditingButton.tsx b/src/components/widgets/shared/GoToAdminEditingButton.tsx
new file mode 100644
index 0000000000..aeab83a2c0
--- /dev/null
+++ b/src/components/widgets/shared/GoToAdminEditingButton.tsx
@@ -0,0 +1,31 @@
+'use client'
+
+import { useIsLogged, useResolveAdminUrl } from '~/atoms'
+import { clsxm } from '~/lib/helper'
+
+interface Props {
+ type: 'notes' | 'pages' | 'posts'
+ id: string
+}
+export const GoToAdminEditingButton: Component = (props) => {
+ const isLogin = useIsLogged()
+ const resolveAdminUrl = useResolveAdminUrl()
+ const { id, type, className } = props
+ if (!isLogin) return null
+
+ return (
+
+
+ 编辑
+
+ )
+}