From 9fe299a45f79958a4d4906b80b18f3bf6738bb4f Mon Sep 17 00:00:00 2001 From: freefire Date: Sat, 29 Aug 2026 03:54:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20Gitea=20=E5=BC=8F=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E6=94=B9=E7=BB=84=EF=BC=8C=E7=A7=BB=E9=99=A4=E6=9C=AC=E5=88=86?= =?UTF-8?q?=E6=94=AF=20SPA=20=E4=B8=8E=E6=9D=82=E9=A1=B9=E4=BA=A7=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 model/service/handler/middleware 迁至 models/services/routers/api/modules/auth,并删除 frontend、embed_static、scripts 及误入库缓存/二进制。 Co-authored-by: Cursor --- .trae/documents/emoji-effect-adjustment.md | 151 - .trae/documents/emoji_rich_comment_plan.md | 597 - .../fix-comment-scroll-position-plan.md | 138 - .../documents/fix-post-scroll-persist-plan.md | 117 - .trae/documents/fix-sticker-serving-plan.md | 55 - .vite/deps/_metadata.json | 8 - .vite/deps/package.json | 3 - embed_static/embed.go | 91 - embed_static/spa_meta.go | 156 - frontend/components.json | 20 - frontend/index.html | 64 - frontend/package-lock.json | 4471 ----- frontend/package.json | 64 - frontend/postcss.config.js | 6 - frontend/public/stickers/bilibili/bl_01.avif | Bin 1833 -> 0 bytes frontend/public/stickers/bilibili/bl_02.avif | Bin 2244 -> 0 bytes frontend/public/stickers/bilibili/bl_03.avif | Bin 1778 -> 0 bytes frontend/public/stickers/bilibili/bl_04.avif | Bin 1794 -> 0 bytes frontend/public/stickers/bilibili/bl_05.avif | Bin 1983 -> 0 bytes frontend/public/stickers/bilibili/bl_06.avif | Bin 1689 -> 0 bytes frontend/public/stickers/bilibili/bl_07.avif | Bin 1888 -> 0 bytes frontend/public/stickers/bilibili/bl_08.avif | Bin 1929 -> 0 bytes frontend/public/stickers/bilibili/bl_09.avif | Bin 1667 -> 0 bytes frontend/public/stickers/bilibili/bl_10.avif | Bin 1750 -> 0 bytes frontend/public/stickers/bilibili/bl_11.avif | Bin 1987 -> 0 bytes frontend/public/stickers/bilibili/bl_12.avif | Bin 1641 -> 0 bytes frontend/public/stickers/bilibili/bl_13.avif | Bin 1766 -> 0 bytes frontend/public/stickers/bilibili/bl_14.avif | Bin 1602 -> 0 bytes frontend/public/stickers/bilibili/bl_15.avif | Bin 1854 -> 0 bytes frontend/public/stickers/bilibili/bl_16.avif | Bin 1841 -> 0 bytes frontend/public/stickers/bilibili/bl_17.avif | Bin 1731 -> 0 bytes frontend/public/stickers/bilibili/bl_18.avif | Bin 1867 -> 0 bytes frontend/public/stickers/bilibili/bl_19.avif | Bin 1765 -> 0 bytes frontend/public/stickers/bilibili/bl_20.avif | Bin 1835 -> 0 bytes frontend/public/stickers/bilibili/bl_21.avif | Bin 1887 -> 0 bytes frontend/public/stickers/bilibili/bl_22.avif | Bin 1698 -> 0 bytes frontend/public/stickers/bilibili/bl_23.avif | Bin 1532 -> 0 bytes frontend/public/stickers/bilibili/bl_24.avif | Bin 1612 -> 0 bytes frontend/public/stickers/bilibili/bl_25.avif | Bin 1889 -> 0 bytes frontend/public/stickers/bilibili/bl_26.avif | Bin 1733 -> 0 bytes frontend/public/stickers/bilibili/bl_27.avif | Bin 1610 -> 0 bytes frontend/public/stickers/bilibili/bl_28.avif | Bin 1841 -> 0 bytes frontend/public/stickers/bilibili/bl_29.avif | Bin 1658 -> 0 bytes frontend/public/stickers/bilibili/bl_30.avif | Bin 1981 -> 0 bytes frontend/public/stickers/bilibili/bl_31.avif | Bin 1782 -> 0 bytes frontend/public/stickers/bilibili/bl_32.avif | Bin 1692 -> 0 bytes frontend/public/stickers/bilibili/bl_33.avif | Bin 1581 -> 0 bytes frontend/public/stickers/bilibili/bl_34.avif | Bin 1846 -> 0 bytes frontend/public/stickers/bilibili/bl_35.avif | Bin 1866 -> 0 bytes frontend/public/stickers/douyin/dy_01.avif | Bin 1756 -> 0 bytes frontend/public/stickers/douyin/dy_02.avif | Bin 1769 -> 0 bytes frontend/public/stickers/douyin/dy_03.avif | Bin 1710 -> 0 bytes frontend/public/stickers/douyin/dy_04.avif | Bin 1930 -> 0 bytes frontend/public/stickers/douyin/dy_05.avif | Bin 1704 -> 0 bytes frontend/public/stickers/douyin/dy_06.avif | Bin 1902 -> 0 bytes frontend/public/stickers/douyin/dy_07.avif | Bin 1572 -> 0 bytes frontend/public/stickers/douyin/dy_08.avif | Bin 1740 -> 0 bytes frontend/public/stickers/douyin/dy_09.avif | Bin 1925 -> 0 bytes frontend/public/stickers/douyin/dy_10.avif | Bin 1518 -> 0 bytes frontend/public/stickers/douyin/dy_11.avif | Bin 1793 -> 0 bytes frontend/public/stickers/douyin/dy_12.avif | Bin 1654 -> 0 bytes frontend/public/stickers/douyin/dy_13.avif | Bin 1984 -> 0 bytes frontend/public/stickers/douyin/dy_14.avif | Bin 2058 -> 0 bytes frontend/public/stickers/douyin/dy_15.avif | Bin 1988 -> 0 bytes frontend/public/stickers/douyin/dy_16.avif | Bin 1763 -> 0 bytes frontend/public/stickers/douyin/dy_17.avif | Bin 2049 -> 0 bytes frontend/public/stickers/douyin/dy_18.avif | Bin 1720 -> 0 bytes frontend/public/stickers/douyin/dy_19.avif | Bin 1866 -> 0 bytes frontend/public/stickers/douyin/dy_20.avif | Bin 1788 -> 0 bytes frontend/public/stickers/douyin/dy_21.avif | Bin 1739 -> 0 bytes frontend/public/stickers/douyin/dy_22.avif | Bin 1868 -> 0 bytes frontend/public/stickers/douyin/dy_23.avif | Bin 1779 -> 0 bytes frontend/public/stickers/douyin/dy_24.avif | Bin 1800 -> 0 bytes frontend/public/stickers/douyin/dy_25.avif | Bin 1626 -> 0 bytes frontend/public/stickers/douyin/dy_26.avif | Bin 1922 -> 0 bytes frontend/public/stickers/douyin/dy_27.avif | Bin 1883 -> 0 bytes frontend/public/stickers/douyin/dy_28.avif | Bin 2218 -> 0 bytes frontend/public/stickers/douyin/dy_29.avif | Bin 1844 -> 0 bytes frontend/public/stickers/douyin/dy_30.avif | Bin 2018 -> 0 bytes frontend/public/stickers/douyin/dy_31.avif | Bin 1820 -> 0 bytes frontend/public/stickers/douyin/dy_32.avif | Bin 1996 -> 0 bytes frontend/public/stickers/douyin/dy_33.avif | Bin 1871 -> 0 bytes frontend/public/stickers/douyin/dy_34.avif | Bin 2073 -> 0 bytes frontend/public/stickers/douyin/dy_35.avif | Bin 2101 -> 0 bytes frontend/public/stickers/douyin/dy_36.avif | Bin 1986 -> 0 bytes frontend/public/stickers/tieba/tb_01.avif | Bin 1537 -> 0 bytes frontend/public/stickers/tieba/tb_02.avif | Bin 1610 -> 0 bytes frontend/public/stickers/tieba/tb_03.avif | Bin 1523 -> 0 bytes frontend/public/stickers/tieba/tb_04.avif | Bin 1576 -> 0 bytes frontend/public/stickers/tieba/tb_05.avif | Bin 1694 -> 0 bytes frontend/public/stickers/tieba/tb_06.avif | Bin 1676 -> 0 bytes frontend/public/stickers/tieba/tb_07.avif | Bin 1577 -> 0 bytes frontend/public/stickers/tieba/tb_08.avif | Bin 1608 -> 0 bytes frontend/public/stickers/tieba/tb_09.avif | Bin 1852 -> 0 bytes frontend/public/stickers/tieba/tb_10.avif | Bin 1568 -> 0 bytes frontend/public/stickers/tieba/tb_11.avif | Bin 1582 -> 0 bytes frontend/public/stickers/tieba/tb_12.avif | Bin 1768 -> 0 bytes frontend/public/stickers/tieba/tb_13.avif | Bin 1598 -> 0 bytes frontend/public/stickers/tieba/tb_14.avif | Bin 1496 -> 0 bytes frontend/public/stickers/tieba/tb_15.avif | Bin 1515 -> 0 bytes frontend/public/stickers/tieba/tb_16.avif | Bin 1613 -> 0 bytes frontend/public/stickers/tieba/tb_17.avif | Bin 1599 -> 0 bytes frontend/public/stickers/tieba/tb_18.avif | Bin 1747 -> 0 bytes frontend/public/stickers/tieba/tb_19.avif | Bin 1580 -> 0 bytes frontend/public/stickers/tieba/tb_20.avif | Bin 1675 -> 0 bytes frontend/public/stickers/tieba/tb_21.avif | Bin 1800 -> 0 bytes frontend/public/stickers/tieba/tb_22.avif | Bin 1836 -> 0 bytes frontend/public/stickers/tieba/tb_23.avif | Bin 1741 -> 0 bytes frontend/public/stickers/tieba/tb_24.avif | Bin 1848 -> 0 bytes frontend/public/stickers/tieba/tb_25.avif | Bin 1628 -> 0 bytes frontend/public/stickers/weibo/wb_01.avif | Bin 2517 -> 0 bytes frontend/public/stickers/weibo/wb_02.avif | Bin 2384 -> 0 bytes frontend/public/stickers/weibo/wb_03.avif | Bin 2343 -> 0 bytes frontend/public/stickers/weibo/wb_04.avif | Bin 2358 -> 0 bytes frontend/public/stickers/weibo/wb_05.avif | Bin 2427 -> 0 bytes frontend/public/stickers/weibo/wb_06.avif | Bin 2347 -> 0 bytes frontend/public/stickers/weibo/wb_07.avif | Bin 2203 -> 0 bytes frontend/public/stickers/weibo/wb_08.avif | Bin 2406 -> 0 bytes frontend/public/stickers/weibo/wb_09.avif | Bin 2416 -> 0 bytes frontend/public/stickers/weibo/wb_10.avif | Bin 2544 -> 0 bytes frontend/public/stickers/weibo/wb_11.avif | Bin 2311 -> 0 bytes frontend/public/stickers/weibo/wb_12.avif | Bin 2426 -> 0 bytes frontend/public/stickers/weibo/wb_13.avif | Bin 2265 -> 0 bytes frontend/public/stickers/weibo/wb_14.avif | Bin 2294 -> 0 bytes frontend/public/stickers/weibo/wb_15.avif | Bin 1779 -> 0 bytes frontend/public/stickers/weibo/wb_16.avif | Bin 2307 -> 0 bytes frontend/public/stickers/weibo/wb_17.avif | Bin 2488 -> 0 bytes frontend/public/stickers/weibo/wb_18.avif | Bin 2378 -> 0 bytes frontend/public/stickers/weibo/wb_19.avif | Bin 2733 -> 0 bytes frontend/public/stickers/weibo/wb_20.avif | Bin 2375 -> 0 bytes frontend/public/stickers/weibo/wb_21.avif | Bin 2683 -> 0 bytes frontend/public/stickers/weibo/wb_22.avif | Bin 2612 -> 0 bytes frontend/public/stickers/weibo/wb_23.avif | Bin 2136 -> 0 bytes frontend/public/stickers/weibo/wb_24.avif | Bin 1575 -> 0 bytes frontend/public/stickers/weibo/wb_25.avif | Bin 1834 -> 0 bytes frontend/public/stickers/weibo/wb_26.avif | Bin 1839 -> 0 bytes frontend/public/stickers/weibo/wb_27.avif | Bin 1699 -> 0 bytes frontend/public/stickers/weibo/wb_28.avif | Bin 1942 -> 0 bytes frontend/public/stickers/weibo/wb_29.avif | Bin 2165 -> 0 bytes frontend/public/stickers/weibo/wb_30.avif | Bin 1869 -> 0 bytes .../public/stickers/xiaohongshu/xhs_01.avif | Bin 1731 -> 0 bytes .../public/stickers/xiaohongshu/xhs_02.avif | Bin 1890 -> 0 bytes .../public/stickers/xiaohongshu/xhs_03.avif | Bin 1809 -> 0 bytes .../public/stickers/xiaohongshu/xhs_04.avif | Bin 2182 -> 0 bytes .../public/stickers/xiaohongshu/xhs_05.avif | Bin 1926 -> 0 bytes .../public/stickers/xiaohongshu/xhs_06.avif | Bin 1965 -> 0 bytes .../public/stickers/xiaohongshu/xhs_07.avif | Bin 1834 -> 0 bytes .../public/stickers/xiaohongshu/xhs_08.avif | Bin 1824 -> 0 bytes .../public/stickers/xiaohongshu/xhs_09.avif | Bin 1504 -> 0 bytes .../public/stickers/xiaohongshu/xhs_10.avif | Bin 2045 -> 0 bytes .../public/stickers/xiaohongshu/xhs_11.avif | Bin 1961 -> 0 bytes .../public/stickers/xiaohongshu/xhs_12.avif | Bin 1677 -> 0 bytes .../public/stickers/xiaohongshu/xhs_13.avif | Bin 1776 -> 0 bytes .../public/stickers/xiaohongshu/xhs_14.avif | Bin 1887 -> 0 bytes .../public/stickers/xiaohongshu/xhs_15.avif | Bin 2190 -> 0 bytes .../public/stickers/xiaohongshu/xhs_16.avif | Bin 1981 -> 0 bytes .../public/stickers/xiaohongshu/xhs_17.avif | Bin 1821 -> 0 bytes .../public/stickers/xiaohongshu/xhs_18.avif | Bin 1835 -> 0 bytes .../public/stickers/xiaohongshu/xhs_19.avif | Bin 1935 -> 0 bytes .../public/stickers/xiaohongshu/xhs_20.avif | Bin 2071 -> 0 bytes .../public/stickers/xiaohongshu/xhs_21.avif | Bin 2017 -> 0 bytes .../public/stickers/xiaohongshu/xhs_22.avif | Bin 2042 -> 0 bytes .../public/stickers/xiaohongshu/xhs_23.avif | Bin 1960 -> 0 bytes .../public/stickers/xiaohongshu/xhs_24.avif | Bin 1953 -> 0 bytes .../public/stickers/xiaohongshu/xhs_25.avif | Bin 1881 -> 0 bytes .../public/stickers/xiaohongshu/xhs_26.avif | Bin 2143 -> 0 bytes .../public/stickers/xiaohongshu/xhs_27.avif | Bin 1897 -> 0 bytes .../public/stickers/xiaohongshu/xhs_28.avif | Bin 2361 -> 0 bytes .../public/stickers/xiaohongshu/xhs_29.avif | Bin 1964 -> 0 bytes .../public/stickers/xiaohongshu/xhs_30.avif | Bin 1726 -> 0 bytes frontend/public/stickers/zhihu/zh_01.avif | Bin 1875 -> 0 bytes frontend/public/stickers/zhihu/zh_02.avif | Bin 1595 -> 0 bytes frontend/public/stickers/zhihu/zh_03.avif | Bin 1902 -> 0 bytes frontend/public/stickers/zhihu/zh_04.avif | Bin 1757 -> 0 bytes frontend/public/stickers/zhihu/zh_05.avif | Bin 1762 -> 0 bytes frontend/public/stickers/zhihu/zh_06.avif | Bin 1651 -> 0 bytes frontend/public/stickers/zhihu/zh_07.avif | Bin 1999 -> 0 bytes frontend/public/stickers/zhihu/zh_08.avif | Bin 1727 -> 0 bytes frontend/public/stickers/zhihu/zh_09.avif | Bin 2094 -> 0 bytes frontend/public/stickers/zhihu/zh_10.avif | Bin 1882 -> 0 bytes frontend/public/stickers/zhihu/zh_11.avif | Bin 2037 -> 0 bytes frontend/public/stickers/zhihu/zh_12.avif | Bin 2143 -> 0 bytes frontend/public/stickers/zhihu/zh_13.avif | Bin 2078 -> 0 bytes frontend/public/stickers/zhihu/zh_14.avif | Bin 2046 -> 0 bytes frontend/public/stickers/zhihu/zh_15.avif | Bin 1873 -> 0 bytes frontend/public/stickers/zhihu/zh_16.avif | Bin 1906 -> 0 bytes frontend/public/stickers/zhihu/zh_17.avif | Bin 1855 -> 0 bytes frontend/public/stickers/zhihu/zh_18.avif | Bin 1890 -> 0 bytes frontend/public/stickers/zhihu/zh_19.avif | Bin 1908 -> 0 bytes frontend/public/stickers/zhihu/zh_20.avif | Bin 1971 -> 0 bytes frontend/public/stickers/zhihu/zh_21.avif | Bin 2047 -> 0 bytes frontend/public/stickers/zhihu/zh_22.avif | Bin 1737 -> 0 bytes frontend/public/stickers/zhihu/zh_23.avif | Bin 1743 -> 0 bytes frontend/public/stickers/zhihu/zh_24.avif | Bin 1923 -> 0 bytes frontend/public/stickers/zhihu/zh_25.avif | Bin 1740 -> 0 bytes frontend/public/stickers/zhihu/zh_26.avif | Bin 2012 -> 0 bytes frontend/public/stickers/zhihu/zh_27.avif | Bin 1778 -> 0 bytes frontend/src/App.tsx | 106 - frontend/src/api/client.ts | 608 - frontend/src/api/types.ts | 623 - frontend/src/components/AppRouteError.tsx | 60 - frontend/src/components/ArticleEditor.tsx | 922 - frontend/src/components/ArticleOutline.tsx | 149 - frontend/src/components/AsideCheckInStrip.tsx | 104 - frontend/src/components/AuthPageFallback.tsx | 12 - frontend/src/components/AuthPasswordInput.tsx | 30 - frontend/src/components/AvatarCropDialog.tsx | 124 - frontend/src/components/BackToTop.tsx | 154 - .../src/components/BoardAppearancePicker.tsx | 93 - frontend/src/components/BoardBadge.tsx | 18 - frontend/src/components/BoardIconDisplay.tsx | 14 - frontend/src/components/CommentBox.tsx | 130 - frontend/src/components/CommentContent.tsx | 54 - frontend/src/components/CommentEditor.tsx | 282 - .../src/components/CommentRevisionDialog.tsx | 142 - frontend/src/components/CommentThreadList.tsx | 594 - .../src/components/ComposeMessageDialog.tsx | 86 - frontend/src/components/ErrorBoundary.tsx | 57 - frontend/src/components/FeaturedIcon.tsx | 19 - frontend/src/components/FeedHeader.tsx | 51 - frontend/src/components/FeedPageSkeleton.tsx | 29 - frontend/src/components/FeedPagination.tsx | 149 - frontend/src/components/FeedSortBar.tsx | 109 - .../src/components/FriendLinkApplyDialog.tsx | 284 - .../src/components/FriendLinkSiteInfo.tsx | 44 - frontend/src/components/ImageLightbox.tsx | 232 - frontend/src/components/LevelEmblem.tsx | 127 - frontend/src/components/PageLoader.tsx | 20 - frontend/src/components/PointsWalletPanel.tsx | 138 - frontend/src/components/PostAuthorCard.tsx | 174 - frontend/src/components/PostBountyBanner.tsx | 182 - frontend/src/components/PostContent.tsx | 180 - frontend/src/components/PostListItem.tsx | 208 - frontend/src/components/PostListSkeleton.tsx | 79 - frontend/src/components/PostLotteryCard.tsx | 98 - frontend/src/components/PostPollCard.tsx | 175 - frontend/src/components/PostRevisionPanel.tsx | 378 - frontend/src/components/ProjectListItem.tsx | 121 - frontend/src/components/PullToRefresh.tsx | 269 - frontend/src/components/RightPanel.tsx | 336 - frontend/src/components/Sidebar.tsx | 217 - frontend/src/components/SiteBrandMark.tsx | 26 - frontend/src/components/SiteFooter.tsx | 75 - frontend/src/components/TagCloud.tsx | 114 - frontend/src/components/TagInput.tsx | 133 - .../src/components/UnsavedChangesDialog.tsx | 45 - frontend/src/components/UserBadges.tsx | 76 - frontend/src/components/UserLink.tsx | 87 - frontend/src/components/VirtualPostList.tsx | 315 - .../components/admin/AdminSortableList.tsx | 215 - .../src/components/admin/AsideWidgetList.tsx | 75 - .../components/compose/ComposeContextBar.tsx | 170 - .../components/compose/ComposeDocument.tsx | 48 - .../src/components/compose/ComposeHeader.tsx | 58 - .../compose/ComposeSpecialFields.tsx | 259 - .../editor/ArticleCodeBlockDialog.tsx | 183 - .../editor/ArticleCodeBlockExtension.tsx | 208 - .../editor/ArticleImageExtension.tsx | 67 - .../components/editor/ArticleLinkDialog.tsx | 76 - .../components/editor/ArticleTableDialog.tsx | 162 - .../components/editor/ClearFloatParagraph.ts | 144 - .../components/editor/ImageGroupExtension.tsx | 371 - .../editor/MembersOnlyExtension.tsx | 272 - .../components/editor/PointsOnlyExtension.tsx | 215 - .../components/editor/ReplyOnlyExtension.tsx | 265 - .../components/editor/TabIndentExtension.tsx | 189 - .../src/components/emoji/StickerPicker.tsx | 116 - .../components/search/FeedSearchFilters.tsx | 87 - .../src/components/search/PostSearchPanel.tsx | 310 - frontend/src/components/ui/Tooltip.tsx | 49 - frontend/src/components/ui/alert-dialog.tsx | 102 - frontend/src/components/ui/badge.tsx | 32 - frontend/src/components/ui/button.tsx | 70 - frontend/src/components/ui/dialog.tsx | 96 - frontend/src/components/ui/dropdown-menu.tsx | 171 - frontend/src/components/ui/form.tsx | 136 - frontend/src/components/ui/input.tsx | 21 - frontend/src/components/ui/label.tsx | 18 - frontend/src/components/ui/skeleton.tsx | 7 - frontend/src/components/ui/sonner.tsx | 20 - frontend/src/components/ui/spinner.tsx | 19 - frontend/src/components/ui/switch.tsx | 26 - frontend/src/components/ui/table.tsx | 57 - frontend/src/components/ui/textarea.tsx | 20 - frontend/src/data/stickers/emoji.json | 1594 -- frontend/src/data/stickers/emojiData.ts | 57 - frontend/src/data/stickers/hot.ts | 24 - frontend/src/data/stickers/index.ts | 35 - frontend/src/data/stickers/kaomoji.ts | 32 - frontend/src/hooks/useAuth.tsx | 47 - frontend/src/hooks/useCheckIn.ts | 53 - frontend/src/hooks/useForumLimits.ts | 88 - frontend/src/hooks/useGlobalWheelScroll.ts | 62 - frontend/src/hooks/useOverlayA11y.ts | 85 - frontend/src/hooks/usePageSEO.ts | 154 - frontend/src/hooks/usePostSearch.ts | 270 - frontend/src/hooks/useSiteBranding.ts | 139 - frontend/src/hooks/useSitePages.ts | 41 - frontend/src/hooks/useTheme.tsx | 35 - frontend/src/hooks/useUnsavedChangesGuard.ts | 79 - frontend/src/layouts/AdminLayout.tsx | 278 - frontend/src/layouts/MainLayout.tsx | 815 - frontend/src/lib/notify.ts | 8 - frontend/src/lib/utils.ts | 7 - frontend/src/main.tsx | 12 - frontend/src/pages/BoardsManagePage.tsx | 358 - frontend/src/pages/ComposePage.tsx | 481 - frontend/src/pages/FavoritesPage.tsx | 91 - frontend/src/pages/ForgotPasswordPage.tsx | 182 - frontend/src/pages/HomePage.tsx | 350 - frontend/src/pages/LinksPage.tsx | 359 - frontend/src/pages/LoginPage.tsx | 106 - frontend/src/pages/MessagesPage.tsx | 627 - frontend/src/pages/NotFoundPage.tsx | 59 - frontend/src/pages/PostDetailPage.tsx | 1209 -- frontend/src/pages/ProfilePage.tsx | 764 - frontend/src/pages/ProjectsPage.tsx | 132 - frontend/src/pages/RegisterPage.tsx | 259 - frontend/src/pages/SitePageView.tsx | 61 - frontend/src/pages/UserProfilePage.tsx | 287 - frontend/src/pages/admin/AdminBadgesPage.tsx | 524 - .../src/pages/admin/AdminCommentsPage.tsx | 347 - .../src/pages/admin/AdminDashboardPage.tsx | 178 - frontend/src/pages/admin/AdminLinksPage.tsx | 904 - frontend/src/pages/admin/AdminMediaPage.tsx | 321 - frontend/src/pages/admin/AdminPagesPage.tsx | 234 - frontend/src/pages/admin/AdminPostsPage.tsx | 452 - frontend/src/pages/admin/AdminReportsPage.tsx | 277 - .../src/pages/admin/AdminSettingsPage.tsx | 1693 -- .../src/pages/admin/AdminSitePageEditPage.tsx | 293 - frontend/src/pages/admin/AdminUsersPage.tsx | 580 - frontend/src/styles/global.css | 14822 ---------------- frontend/src/utils/admin.ts | 6 - frontend/src/utils/asideWidgets.ts | 70 - frontend/src/utils/authRedirect.ts | 49 - frontend/src/utils/avatarCrop.ts | 101 - frontend/src/utils/badgeIcons.ts | 64 - frontend/src/utils/board.ts | 39 - frontend/src/utils/boardTheme.ts | 71 - frontend/src/utils/bounty.ts | 29 - frontend/src/utils/chunkLoad.ts | 34 - .../src/utils/codeBlockHighlightPlugin.ts | 71 - frontend/src/utils/codeBlockOptions.ts | 125 - frontend/src/utils/comment.ts | 72 - frontend/src/utils/composeDraft.ts | 94 - frontend/src/utils/content.ts | 114 - frontend/src/utils/enhanceCodeBlocks.ts | 179 - frontend/src/utils/feedCache.ts | 67 - frontend/src/utils/friendLink.ts | 38 - frontend/src/utils/guest.ts | 43 - frontend/src/utils/hljsAardio.ts | 110 - frontend/src/utils/layoutCache.ts | 83 - frontend/src/utils/lazyWithRetry.ts | 25 - frontend/src/utils/markdownContent.ts | 385 - frontend/src/utils/markdownFences.ts | 73 - frontend/src/utils/markdownFormat.ts | 137 - frontend/src/utils/markdownIndent.ts | 149 - frontend/src/utils/openPost.ts | 22 - frontend/src/utils/permalink.ts | 75 - frontend/src/utils/postContent.ts | 369 - frontend/src/utils/postHeadings.ts | 70 - frontend/src/utils/report.ts | 22 - frontend/src/utils/revisionDiff.ts | 77 - frontend/src/utils/seoText.ts | 18 - frontend/src/utils/sortOrder.ts | 69 - frontend/src/utils/text.ts | 8 - frontend/src/utils/theme.ts | 16 - frontend/src/utils/userMeta.ts | 30 - frontend/src/utils/userPath.ts | 6 - frontend/src/vite-env.d.ts | 1 - frontend/tailwind.config.ts | 55 - frontend/tsconfig.json | 22 - frontend/vite.config.ts | 49 - jiang13-linux-amd64 | Bin 28867072 -> 0 bytes {model => models}/db.go | 0 {model => models}/gitea.go | 0 {model => models}/level.go | 0 {model => models}/models.go | 0 {model => models}/oauth.go | 0 {model => models}/user_view.go | 0 {middleware => modules/auth}/auth.go | 0 {handler => routers/api}/api.go | 0 {handler => routers/api}/economy.go | 0 {handler => routers/api}/friend_link.go | 0 {handler => routers/api}/handlers.go | 0 {handler => routers/api}/media.go | 0 {handler => routers/api}/message.go | 0 {handler => routers/api}/oidc.go | 0 {handler => routers/api}/report.go | 0 {handler => routers/api}/seo.go | 0 {handler => routers/api}/seo_bot.go | 0 {handler => routers/api}/special.go | 0 {handler => routers/api}/thumb.go | 0 router/router.go => routers/setup.go | 0 scripts/capture-screenshots.mjs | 155 - scripts/seed-interactions.mjs | 104 - scripts/seed.mjs | 391 - {service => services}/aside_widgets_test.go | 0 {service => services}/auth.go | 0 {service => services}/backup.go | 0 {service => services}/badge.go | 0 {service => services}/board.go | 0 {service => services}/board_icon.go | 0 {service => services}/bounty.go | 0 {service => services}/bounty_test.go | 0 {service => services}/captcha.go | 0 {service => services}/comment.go | 0 {service => services}/common.go | 0 {service => services}/content.go | 0 {service => services}/content_test.go | 0 {service => services}/crawler.go | 0 {service => services}/email_code.go | 0 {service => services}/filter_io.go | 0 {service => services}/filter_words.go | 0 {service => services}/friend_link.go | 0 {service => services}/friend_link_enrich.go | 0 .../friend_link_reciprocal.go | 0 .../friend_link_reciprocal_async.go | 0 .../friend_link_reciprocal_test.go | 0 {service => services}/gitea.go | 0 {service => services}/image_webp.go | 0 {service => services}/lottery_post.go | 0 {service => services}/mail.go | 0 {service => services}/mail_template.go | 0 {service => services}/media.go | 0 {service => services}/mention.go | 0 {service => services}/mention_test.go | 0 {service => services}/message.go | 0 {service => services}/notify.go | 0 {service => services}/oauth_clients.go | 0 {service => services}/oidc.go | 0 {service => services}/permalink.go | 0 {service => services}/points.go | 0 {service => services}/poll.go | 0 {service => services}/post.go | 0 {service => services}/post_special.go | 0 {service => services}/ratelimit.go | 0 {service => services}/report.go | 0 {service => services}/sanitize_html.go | 0 {service => services}/sanitize_html_test.go | 0 {service => services}/seo.go | 0 {service => services}/settings.go | 0 {service => services}/settings_util.go | 0 {service => services}/site_page.go | 0 {service => services}/storage.go | 0 {service => services}/thumb.go | 0 {service => services}/unlock.go | 0 {service => services}/upload.go | 0 {service => services}/user.go | 0 449 files changed, 52779 deletions(-) delete mode 100644 .trae/documents/emoji-effect-adjustment.md delete mode 100644 .trae/documents/emoji_rich_comment_plan.md delete mode 100644 .trae/documents/fix-comment-scroll-position-plan.md delete mode 100644 .trae/documents/fix-post-scroll-persist-plan.md delete mode 100644 .trae/documents/fix-sticker-serving-plan.md delete mode 100644 .vite/deps/_metadata.json delete mode 100644 .vite/deps/package.json delete mode 100644 embed_static/embed.go delete mode 100644 embed_static/spa_meta.go delete mode 100644 frontend/components.json delete mode 100644 frontend/index.html delete mode 100644 frontend/package-lock.json delete mode 100644 frontend/package.json delete mode 100644 frontend/postcss.config.js delete mode 100644 frontend/public/stickers/bilibili/bl_01.avif delete mode 100644 frontend/public/stickers/bilibili/bl_02.avif delete mode 100644 frontend/public/stickers/bilibili/bl_03.avif delete mode 100644 frontend/public/stickers/bilibili/bl_04.avif delete mode 100644 frontend/public/stickers/bilibili/bl_05.avif delete mode 100644 frontend/public/stickers/bilibili/bl_06.avif delete mode 100644 frontend/public/stickers/bilibili/bl_07.avif delete mode 100644 frontend/public/stickers/bilibili/bl_08.avif delete mode 100644 frontend/public/stickers/bilibili/bl_09.avif delete mode 100644 frontend/public/stickers/bilibili/bl_10.avif delete mode 100644 frontend/public/stickers/bilibili/bl_11.avif delete mode 100644 frontend/public/stickers/bilibili/bl_12.avif delete mode 100644 frontend/public/stickers/bilibili/bl_13.avif delete mode 100644 frontend/public/stickers/bilibili/bl_14.avif delete mode 100644 frontend/public/stickers/bilibili/bl_15.avif delete mode 100644 frontend/public/stickers/bilibili/bl_16.avif delete mode 100644 frontend/public/stickers/bilibili/bl_17.avif delete mode 100644 frontend/public/stickers/bilibili/bl_18.avif delete mode 100644 frontend/public/stickers/bilibili/bl_19.avif delete mode 100644 frontend/public/stickers/bilibili/bl_20.avif delete mode 100644 frontend/public/stickers/bilibili/bl_21.avif delete mode 100644 frontend/public/stickers/bilibili/bl_22.avif delete mode 100644 frontend/public/stickers/bilibili/bl_23.avif delete mode 100644 frontend/public/stickers/bilibili/bl_24.avif delete mode 100644 frontend/public/stickers/bilibili/bl_25.avif delete mode 100644 frontend/public/stickers/bilibili/bl_26.avif delete mode 100644 frontend/public/stickers/bilibili/bl_27.avif delete mode 100644 frontend/public/stickers/bilibili/bl_28.avif delete mode 100644 frontend/public/stickers/bilibili/bl_29.avif delete mode 100644 frontend/public/stickers/bilibili/bl_30.avif delete mode 100644 frontend/public/stickers/bilibili/bl_31.avif delete mode 100644 frontend/public/stickers/bilibili/bl_32.avif delete mode 100644 frontend/public/stickers/bilibili/bl_33.avif delete mode 100644 frontend/public/stickers/bilibili/bl_34.avif delete mode 100644 frontend/public/stickers/bilibili/bl_35.avif delete mode 100644 frontend/public/stickers/douyin/dy_01.avif delete mode 100644 frontend/public/stickers/douyin/dy_02.avif delete mode 100644 frontend/public/stickers/douyin/dy_03.avif delete mode 100644 frontend/public/stickers/douyin/dy_04.avif delete mode 100644 frontend/public/stickers/douyin/dy_05.avif delete mode 100644 frontend/public/stickers/douyin/dy_06.avif delete mode 100644 frontend/public/stickers/douyin/dy_07.avif delete mode 100644 frontend/public/stickers/douyin/dy_08.avif delete mode 100644 frontend/public/stickers/douyin/dy_09.avif delete mode 100644 frontend/public/stickers/douyin/dy_10.avif delete mode 100644 frontend/public/stickers/douyin/dy_11.avif delete mode 100644 frontend/public/stickers/douyin/dy_12.avif delete mode 100644 frontend/public/stickers/douyin/dy_13.avif delete mode 100644 frontend/public/stickers/douyin/dy_14.avif delete mode 100644 frontend/public/stickers/douyin/dy_15.avif delete mode 100644 frontend/public/stickers/douyin/dy_16.avif delete mode 100644 frontend/public/stickers/douyin/dy_17.avif delete mode 100644 frontend/public/stickers/douyin/dy_18.avif delete mode 100644 frontend/public/stickers/douyin/dy_19.avif delete mode 100644 frontend/public/stickers/douyin/dy_20.avif delete mode 100644 frontend/public/stickers/douyin/dy_21.avif delete mode 100644 frontend/public/stickers/douyin/dy_22.avif delete mode 100644 frontend/public/stickers/douyin/dy_23.avif delete mode 100644 frontend/public/stickers/douyin/dy_24.avif delete mode 100644 frontend/public/stickers/douyin/dy_25.avif delete mode 100644 frontend/public/stickers/douyin/dy_26.avif delete mode 100644 frontend/public/stickers/douyin/dy_27.avif delete mode 100644 frontend/public/stickers/douyin/dy_28.avif delete mode 100644 frontend/public/stickers/douyin/dy_29.avif delete mode 100644 frontend/public/stickers/douyin/dy_30.avif delete mode 100644 frontend/public/stickers/douyin/dy_31.avif delete mode 100644 frontend/public/stickers/douyin/dy_32.avif delete mode 100644 frontend/public/stickers/douyin/dy_33.avif delete mode 100644 frontend/public/stickers/douyin/dy_34.avif delete mode 100644 frontend/public/stickers/douyin/dy_35.avif delete mode 100644 frontend/public/stickers/douyin/dy_36.avif delete mode 100644 frontend/public/stickers/tieba/tb_01.avif delete mode 100644 frontend/public/stickers/tieba/tb_02.avif delete mode 100644 frontend/public/stickers/tieba/tb_03.avif delete mode 100644 frontend/public/stickers/tieba/tb_04.avif delete mode 100644 frontend/public/stickers/tieba/tb_05.avif delete mode 100644 frontend/public/stickers/tieba/tb_06.avif delete mode 100644 frontend/public/stickers/tieba/tb_07.avif delete mode 100644 frontend/public/stickers/tieba/tb_08.avif delete mode 100644 frontend/public/stickers/tieba/tb_09.avif delete mode 100644 frontend/public/stickers/tieba/tb_10.avif delete mode 100644 frontend/public/stickers/tieba/tb_11.avif delete mode 100644 frontend/public/stickers/tieba/tb_12.avif delete mode 100644 frontend/public/stickers/tieba/tb_13.avif delete mode 100644 frontend/public/stickers/tieba/tb_14.avif delete mode 100644 frontend/public/stickers/tieba/tb_15.avif delete mode 100644 frontend/public/stickers/tieba/tb_16.avif delete mode 100644 frontend/public/stickers/tieba/tb_17.avif delete mode 100644 frontend/public/stickers/tieba/tb_18.avif delete mode 100644 frontend/public/stickers/tieba/tb_19.avif delete mode 100644 frontend/public/stickers/tieba/tb_20.avif delete mode 100644 frontend/public/stickers/tieba/tb_21.avif delete mode 100644 frontend/public/stickers/tieba/tb_22.avif delete mode 100644 frontend/public/stickers/tieba/tb_23.avif delete mode 100644 frontend/public/stickers/tieba/tb_24.avif delete mode 100644 frontend/public/stickers/tieba/tb_25.avif delete mode 100644 frontend/public/stickers/weibo/wb_01.avif delete mode 100644 frontend/public/stickers/weibo/wb_02.avif delete mode 100644 frontend/public/stickers/weibo/wb_03.avif delete mode 100644 frontend/public/stickers/weibo/wb_04.avif delete mode 100644 frontend/public/stickers/weibo/wb_05.avif delete mode 100644 frontend/public/stickers/weibo/wb_06.avif delete mode 100644 frontend/public/stickers/weibo/wb_07.avif delete mode 100644 frontend/public/stickers/weibo/wb_08.avif delete mode 100644 frontend/public/stickers/weibo/wb_09.avif delete mode 100644 frontend/public/stickers/weibo/wb_10.avif delete mode 100644 frontend/public/stickers/weibo/wb_11.avif delete mode 100644 frontend/public/stickers/weibo/wb_12.avif delete mode 100644 frontend/public/stickers/weibo/wb_13.avif delete mode 100644 frontend/public/stickers/weibo/wb_14.avif delete mode 100644 frontend/public/stickers/weibo/wb_15.avif delete mode 100644 frontend/public/stickers/weibo/wb_16.avif delete mode 100644 frontend/public/stickers/weibo/wb_17.avif delete mode 100644 frontend/public/stickers/weibo/wb_18.avif delete mode 100644 frontend/public/stickers/weibo/wb_19.avif delete mode 100644 frontend/public/stickers/weibo/wb_20.avif delete mode 100644 frontend/public/stickers/weibo/wb_21.avif delete mode 100644 frontend/public/stickers/weibo/wb_22.avif delete mode 100644 frontend/public/stickers/weibo/wb_23.avif delete mode 100644 frontend/public/stickers/weibo/wb_24.avif delete mode 100644 frontend/public/stickers/weibo/wb_25.avif delete mode 100644 frontend/public/stickers/weibo/wb_26.avif delete mode 100644 frontend/public/stickers/weibo/wb_27.avif delete mode 100644 frontend/public/stickers/weibo/wb_28.avif delete mode 100644 frontend/public/stickers/weibo/wb_29.avif delete mode 100644 frontend/public/stickers/weibo/wb_30.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_01.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_02.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_03.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_04.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_05.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_06.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_07.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_08.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_09.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_10.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_11.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_12.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_13.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_14.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_15.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_16.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_17.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_18.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_19.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_20.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_21.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_22.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_23.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_24.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_25.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_26.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_27.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_28.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_29.avif delete mode 100644 frontend/public/stickers/xiaohongshu/xhs_30.avif delete mode 100644 frontend/public/stickers/zhihu/zh_01.avif delete mode 100644 frontend/public/stickers/zhihu/zh_02.avif delete mode 100644 frontend/public/stickers/zhihu/zh_03.avif delete mode 100644 frontend/public/stickers/zhihu/zh_04.avif delete mode 100644 frontend/public/stickers/zhihu/zh_05.avif delete mode 100644 frontend/public/stickers/zhihu/zh_06.avif delete mode 100644 frontend/public/stickers/zhihu/zh_07.avif delete mode 100644 frontend/public/stickers/zhihu/zh_08.avif delete mode 100644 frontend/public/stickers/zhihu/zh_09.avif delete mode 100644 frontend/public/stickers/zhihu/zh_10.avif delete mode 100644 frontend/public/stickers/zhihu/zh_11.avif delete mode 100644 frontend/public/stickers/zhihu/zh_12.avif delete mode 100644 frontend/public/stickers/zhihu/zh_13.avif delete mode 100644 frontend/public/stickers/zhihu/zh_14.avif delete mode 100644 frontend/public/stickers/zhihu/zh_15.avif delete mode 100644 frontend/public/stickers/zhihu/zh_16.avif delete mode 100644 frontend/public/stickers/zhihu/zh_17.avif delete mode 100644 frontend/public/stickers/zhihu/zh_18.avif delete mode 100644 frontend/public/stickers/zhihu/zh_19.avif delete mode 100644 frontend/public/stickers/zhihu/zh_20.avif delete mode 100644 frontend/public/stickers/zhihu/zh_21.avif delete mode 100644 frontend/public/stickers/zhihu/zh_22.avif delete mode 100644 frontend/public/stickers/zhihu/zh_23.avif delete mode 100644 frontend/public/stickers/zhihu/zh_24.avif delete mode 100644 frontend/public/stickers/zhihu/zh_25.avif delete mode 100644 frontend/public/stickers/zhihu/zh_26.avif delete mode 100644 frontend/public/stickers/zhihu/zh_27.avif delete mode 100644 frontend/src/App.tsx delete mode 100644 frontend/src/api/client.ts delete mode 100644 frontend/src/api/types.ts delete mode 100644 frontend/src/components/AppRouteError.tsx delete mode 100644 frontend/src/components/ArticleEditor.tsx delete mode 100644 frontend/src/components/ArticleOutline.tsx delete mode 100644 frontend/src/components/AsideCheckInStrip.tsx delete mode 100644 frontend/src/components/AuthPageFallback.tsx delete mode 100644 frontend/src/components/AuthPasswordInput.tsx delete mode 100644 frontend/src/components/AvatarCropDialog.tsx delete mode 100644 frontend/src/components/BackToTop.tsx delete mode 100644 frontend/src/components/BoardAppearancePicker.tsx delete mode 100644 frontend/src/components/BoardBadge.tsx delete mode 100644 frontend/src/components/BoardIconDisplay.tsx delete mode 100644 frontend/src/components/CommentBox.tsx delete mode 100644 frontend/src/components/CommentContent.tsx delete mode 100644 frontend/src/components/CommentEditor.tsx delete mode 100644 frontend/src/components/CommentRevisionDialog.tsx delete mode 100644 frontend/src/components/CommentThreadList.tsx delete mode 100644 frontend/src/components/ComposeMessageDialog.tsx delete mode 100644 frontend/src/components/ErrorBoundary.tsx delete mode 100644 frontend/src/components/FeaturedIcon.tsx delete mode 100644 frontend/src/components/FeedHeader.tsx delete mode 100644 frontend/src/components/FeedPageSkeleton.tsx delete mode 100644 frontend/src/components/FeedPagination.tsx delete mode 100644 frontend/src/components/FeedSortBar.tsx delete mode 100644 frontend/src/components/FriendLinkApplyDialog.tsx delete mode 100644 frontend/src/components/FriendLinkSiteInfo.tsx delete mode 100644 frontend/src/components/ImageLightbox.tsx delete mode 100644 frontend/src/components/LevelEmblem.tsx delete mode 100644 frontend/src/components/PageLoader.tsx delete mode 100644 frontend/src/components/PointsWalletPanel.tsx delete mode 100644 frontend/src/components/PostAuthorCard.tsx delete mode 100644 frontend/src/components/PostBountyBanner.tsx delete mode 100644 frontend/src/components/PostContent.tsx delete mode 100644 frontend/src/components/PostListItem.tsx delete mode 100644 frontend/src/components/PostListSkeleton.tsx delete mode 100644 frontend/src/components/PostLotteryCard.tsx delete mode 100644 frontend/src/components/PostPollCard.tsx delete mode 100644 frontend/src/components/PostRevisionPanel.tsx delete mode 100644 frontend/src/components/ProjectListItem.tsx delete mode 100644 frontend/src/components/PullToRefresh.tsx delete mode 100644 frontend/src/components/RightPanel.tsx delete mode 100644 frontend/src/components/Sidebar.tsx delete mode 100644 frontend/src/components/SiteBrandMark.tsx delete mode 100644 frontend/src/components/SiteFooter.tsx delete mode 100644 frontend/src/components/TagCloud.tsx delete mode 100644 frontend/src/components/TagInput.tsx delete mode 100644 frontend/src/components/UnsavedChangesDialog.tsx delete mode 100644 frontend/src/components/UserBadges.tsx delete mode 100644 frontend/src/components/UserLink.tsx delete mode 100644 frontend/src/components/VirtualPostList.tsx delete mode 100644 frontend/src/components/admin/AdminSortableList.tsx delete mode 100644 frontend/src/components/admin/AsideWidgetList.tsx delete mode 100644 frontend/src/components/compose/ComposeContextBar.tsx delete mode 100644 frontend/src/components/compose/ComposeDocument.tsx delete mode 100644 frontend/src/components/compose/ComposeHeader.tsx delete mode 100644 frontend/src/components/compose/ComposeSpecialFields.tsx delete mode 100644 frontend/src/components/editor/ArticleCodeBlockDialog.tsx delete mode 100644 frontend/src/components/editor/ArticleCodeBlockExtension.tsx delete mode 100644 frontend/src/components/editor/ArticleImageExtension.tsx delete mode 100644 frontend/src/components/editor/ArticleLinkDialog.tsx delete mode 100644 frontend/src/components/editor/ArticleTableDialog.tsx delete mode 100644 frontend/src/components/editor/ClearFloatParagraph.ts delete mode 100644 frontend/src/components/editor/ImageGroupExtension.tsx delete mode 100644 frontend/src/components/editor/MembersOnlyExtension.tsx delete mode 100644 frontend/src/components/editor/PointsOnlyExtension.tsx delete mode 100644 frontend/src/components/editor/ReplyOnlyExtension.tsx delete mode 100644 frontend/src/components/editor/TabIndentExtension.tsx delete mode 100644 frontend/src/components/emoji/StickerPicker.tsx delete mode 100644 frontend/src/components/search/FeedSearchFilters.tsx delete mode 100644 frontend/src/components/search/PostSearchPanel.tsx delete mode 100644 frontend/src/components/ui/Tooltip.tsx delete mode 100644 frontend/src/components/ui/alert-dialog.tsx delete mode 100644 frontend/src/components/ui/badge.tsx delete mode 100644 frontend/src/components/ui/button.tsx delete mode 100644 frontend/src/components/ui/dialog.tsx delete mode 100644 frontend/src/components/ui/dropdown-menu.tsx delete mode 100644 frontend/src/components/ui/form.tsx delete mode 100644 frontend/src/components/ui/input.tsx delete mode 100644 frontend/src/components/ui/label.tsx delete mode 100644 frontend/src/components/ui/skeleton.tsx delete mode 100644 frontend/src/components/ui/sonner.tsx delete mode 100644 frontend/src/components/ui/spinner.tsx delete mode 100644 frontend/src/components/ui/switch.tsx delete mode 100644 frontend/src/components/ui/table.tsx delete mode 100644 frontend/src/components/ui/textarea.tsx delete mode 100644 frontend/src/data/stickers/emoji.json delete mode 100644 frontend/src/data/stickers/emojiData.ts delete mode 100644 frontend/src/data/stickers/hot.ts delete mode 100644 frontend/src/data/stickers/index.ts delete mode 100644 frontend/src/data/stickers/kaomoji.ts delete mode 100644 frontend/src/hooks/useAuth.tsx delete mode 100644 frontend/src/hooks/useCheckIn.ts delete mode 100644 frontend/src/hooks/useForumLimits.ts delete mode 100644 frontend/src/hooks/useGlobalWheelScroll.ts delete mode 100644 frontend/src/hooks/useOverlayA11y.ts delete mode 100644 frontend/src/hooks/usePageSEO.ts delete mode 100644 frontend/src/hooks/usePostSearch.ts delete mode 100644 frontend/src/hooks/useSiteBranding.ts delete mode 100644 frontend/src/hooks/useSitePages.ts delete mode 100644 frontend/src/hooks/useTheme.tsx delete mode 100644 frontend/src/hooks/useUnsavedChangesGuard.ts delete mode 100644 frontend/src/layouts/AdminLayout.tsx delete mode 100644 frontend/src/layouts/MainLayout.tsx delete mode 100644 frontend/src/lib/notify.ts delete mode 100644 frontend/src/lib/utils.ts delete mode 100644 frontend/src/main.tsx delete mode 100644 frontend/src/pages/BoardsManagePage.tsx delete mode 100644 frontend/src/pages/ComposePage.tsx delete mode 100644 frontend/src/pages/FavoritesPage.tsx delete mode 100644 frontend/src/pages/ForgotPasswordPage.tsx delete mode 100644 frontend/src/pages/HomePage.tsx delete mode 100644 frontend/src/pages/LinksPage.tsx delete mode 100644 frontend/src/pages/LoginPage.tsx delete mode 100644 frontend/src/pages/MessagesPage.tsx delete mode 100644 frontend/src/pages/NotFoundPage.tsx delete mode 100644 frontend/src/pages/PostDetailPage.tsx delete mode 100644 frontend/src/pages/ProfilePage.tsx delete mode 100644 frontend/src/pages/ProjectsPage.tsx delete mode 100644 frontend/src/pages/RegisterPage.tsx delete mode 100644 frontend/src/pages/SitePageView.tsx delete mode 100644 frontend/src/pages/UserProfilePage.tsx delete mode 100644 frontend/src/pages/admin/AdminBadgesPage.tsx delete mode 100644 frontend/src/pages/admin/AdminCommentsPage.tsx delete mode 100644 frontend/src/pages/admin/AdminDashboardPage.tsx delete mode 100644 frontend/src/pages/admin/AdminLinksPage.tsx delete mode 100644 frontend/src/pages/admin/AdminMediaPage.tsx delete mode 100644 frontend/src/pages/admin/AdminPagesPage.tsx delete mode 100644 frontend/src/pages/admin/AdminPostsPage.tsx delete mode 100644 frontend/src/pages/admin/AdminReportsPage.tsx delete mode 100644 frontend/src/pages/admin/AdminSettingsPage.tsx delete mode 100644 frontend/src/pages/admin/AdminSitePageEditPage.tsx delete mode 100644 frontend/src/pages/admin/AdminUsersPage.tsx delete mode 100644 frontend/src/styles/global.css delete mode 100644 frontend/src/utils/admin.ts delete mode 100644 frontend/src/utils/asideWidgets.ts delete mode 100644 frontend/src/utils/authRedirect.ts delete mode 100644 frontend/src/utils/avatarCrop.ts delete mode 100644 frontend/src/utils/badgeIcons.ts delete mode 100644 frontend/src/utils/board.ts delete mode 100644 frontend/src/utils/boardTheme.ts delete mode 100644 frontend/src/utils/bounty.ts delete mode 100644 frontend/src/utils/chunkLoad.ts delete mode 100644 frontend/src/utils/codeBlockHighlightPlugin.ts delete mode 100644 frontend/src/utils/codeBlockOptions.ts delete mode 100644 frontend/src/utils/comment.ts delete mode 100644 frontend/src/utils/composeDraft.ts delete mode 100644 frontend/src/utils/content.ts delete mode 100644 frontend/src/utils/enhanceCodeBlocks.ts delete mode 100644 frontend/src/utils/feedCache.ts delete mode 100644 frontend/src/utils/friendLink.ts delete mode 100644 frontend/src/utils/guest.ts delete mode 100644 frontend/src/utils/hljsAardio.ts delete mode 100644 frontend/src/utils/layoutCache.ts delete mode 100644 frontend/src/utils/lazyWithRetry.ts delete mode 100644 frontend/src/utils/markdownContent.ts delete mode 100644 frontend/src/utils/markdownFences.ts delete mode 100644 frontend/src/utils/markdownFormat.ts delete mode 100644 frontend/src/utils/markdownIndent.ts delete mode 100644 frontend/src/utils/openPost.ts delete mode 100644 frontend/src/utils/permalink.ts delete mode 100644 frontend/src/utils/postContent.ts delete mode 100644 frontend/src/utils/postHeadings.ts delete mode 100644 frontend/src/utils/report.ts delete mode 100644 frontend/src/utils/revisionDiff.ts delete mode 100644 frontend/src/utils/seoText.ts delete mode 100644 frontend/src/utils/sortOrder.ts delete mode 100644 frontend/src/utils/text.ts delete mode 100644 frontend/src/utils/theme.ts delete mode 100644 frontend/src/utils/userMeta.ts delete mode 100644 frontend/src/utils/userPath.ts delete mode 100644 frontend/src/vite-env.d.ts delete mode 100644 frontend/tailwind.config.ts delete mode 100644 frontend/tsconfig.json delete mode 100644 frontend/vite.config.ts delete mode 100644 jiang13-linux-amd64 rename {model => models}/db.go (100%) rename {model => models}/gitea.go (100%) rename {model => models}/level.go (100%) rename {model => models}/models.go (100%) rename {model => models}/oauth.go (100%) rename {model => models}/user_view.go (100%) rename {middleware => modules/auth}/auth.go (100%) rename {handler => routers/api}/api.go (100%) rename {handler => routers/api}/economy.go (100%) rename {handler => routers/api}/friend_link.go (100%) rename {handler => routers/api}/handlers.go (100%) rename {handler => routers/api}/media.go (100%) rename {handler => routers/api}/message.go (100%) rename {handler => routers/api}/oidc.go (100%) rename {handler => routers/api}/report.go (100%) rename {handler => routers/api}/seo.go (100%) rename {handler => routers/api}/seo_bot.go (100%) rename {handler => routers/api}/special.go (100%) rename {handler => routers/api}/thumb.go (100%) rename router/router.go => routers/setup.go (100%) delete mode 100644 scripts/capture-screenshots.mjs delete mode 100644 scripts/seed-interactions.mjs delete mode 100644 scripts/seed.mjs rename {service => services}/aside_widgets_test.go (100%) rename {service => services}/auth.go (100%) rename {service => services}/backup.go (100%) rename {service => services}/badge.go (100%) rename {service => services}/board.go (100%) rename {service => services}/board_icon.go (100%) rename {service => services}/bounty.go (100%) rename {service => services}/bounty_test.go (100%) rename {service => services}/captcha.go (100%) rename {service => services}/comment.go (100%) rename {service => services}/common.go (100%) rename {service => services}/content.go (100%) rename {service => services}/content_test.go (100%) rename {service => services}/crawler.go (100%) rename {service => services}/email_code.go (100%) rename {service => services}/filter_io.go (100%) rename {service => services}/filter_words.go (100%) rename {service => services}/friend_link.go (100%) rename {service => services}/friend_link_enrich.go (100%) rename {service => services}/friend_link_reciprocal.go (100%) rename {service => services}/friend_link_reciprocal_async.go (100%) rename {service => services}/friend_link_reciprocal_test.go (100%) rename {service => services}/gitea.go (100%) rename {service => services}/image_webp.go (100%) rename {service => services}/lottery_post.go (100%) rename {service => services}/mail.go (100%) rename {service => services}/mail_template.go (100%) rename {service => services}/media.go (100%) rename {service => services}/mention.go (100%) rename {service => services}/mention_test.go (100%) rename {service => services}/message.go (100%) rename {service => services}/notify.go (100%) rename {service => services}/oauth_clients.go (100%) rename {service => services}/oidc.go (100%) rename {service => services}/permalink.go (100%) rename {service => services}/points.go (100%) rename {service => services}/poll.go (100%) rename {service => services}/post.go (100%) rename {service => services}/post_special.go (100%) rename {service => services}/ratelimit.go (100%) rename {service => services}/report.go (100%) rename {service => services}/sanitize_html.go (100%) rename {service => services}/sanitize_html_test.go (100%) rename {service => services}/seo.go (100%) rename {service => services}/settings.go (100%) rename {service => services}/settings_util.go (100%) rename {service => services}/site_page.go (100%) rename {service => services}/storage.go (100%) rename {service => services}/thumb.go (100%) rename {service => services}/unlock.go (100%) rename {service => services}/upload.go (100%) rename {service => services}/user.go (100%) diff --git a/.trae/documents/emoji-effect-adjustment.md b/.trae/documents/emoji-effect-adjustment.md deleted file mode 100644 index c31764f..0000000 --- a/.trae/documents/emoji-effect-adjustment.md +++ /dev/null @@ -1,151 +0,0 @@ -# 表情效果调整计划 - -## 问题分析 - -当前实现存在 5 个问题,根因如下: - -### 1. 插入表情后有选择状态(蓝色高亮) -- **根因**: Tiptap `setImage` 插入图片节点后,节点处于 "node-selected" 状态,显示蓝色选中框 -- **位置**: [CommentEditor.tsx](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/components/CommentEditor.tsx) L155-163 - -### 2. 输入框表情太大 -- **根因**: CSS 选择器 `img[src^="data:image/svg"]` 只匹配旧 SVG data URI,不匹配新的 AVIF URL(`/stickers/tieba/tb_01.avif`),导致表情图片无尺寸约束,以原始大尺寸渲染 -- **位置**: [global.css](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/styles/global.css) L5584-5603 - -### 3. 插入表情后光标换行 -- **根因**: `ArticleImage.configure({ inline: false })` 使图片为块级节点,插入后自动换行 -- **位置**: [CommentEditor.tsx](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/components/CommentEditor.tsx) L92 - -### 4. 表情栏目太宽松 -- **根因**: Grid 仅 6 列,gap 4px,padding 10px -- **位置**: [global.css](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/styles/global.css) L5502-5510 - -### 5. 颜文字太小 -- **根因**: `.sticker-picker-text` 的 `font-size: 8px`,极小 -- **位置**: [global.css](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/styles/global.css) L5606-5616 - -## 改动方案 - -### 文件 1: CommentEditor.tsx -**改动 A — 图片改为内联** (L92): -```typescript -// 旧 -ArticleImage.configure({ inline: false, allowBase64: true }), -// 新 -ArticleImage.configure({ inline: true, allowBase64: true }), -``` - -**改动 B — insertSticker 插入后取消选中和换行** (L155-163): -```typescript -const insertSticker = useCallback((sticker: Sticker) => { - if (!editor) return; - if (sticker.type === 'text' && sticker.text) { - editor.chain().focus().insertContent(sticker.text).run(); - } else if (sticker.url) { - // 插入内联图片 + 尾随零宽空格,确保光标在图片后面而非选中图片 - editor.chain().focus().insertContent([ - { type: 'image', attrs: { src: sticker.url, alt: sticker.name } }, - { type: 'text', text: '\u200b' }, - ]).run(); - } - setShowSticker(false); -}, [editor]); -``` -> 用 `insertContent` + 零宽空格替代 `setImage`,避免 node-selected 状态,光标自然落在图片后。 - -### 文件 2: StickerPicker.tsx -**改动 C — 键盘导航列数匹配新网格** (L44): -```typescript -// 旧 -const cols = 6; -// 新 -const cols = 8; -``` - -### 文件 3: global.css -**改动 D — 表情选择器密度提升** (L5502-5510): -```css -.sticker-picker-grid { - display: grid; - grid-template-columns: repeat(8, 1fr); /* 6 → 8 */ - gap: 2px; /* 4px → 2px */ - padding: 6px; /* 10px → 6px */ - overflow-y: auto; - flex: 1; - min-height: 0; -} -``` - -**改动 E — 选择器项缩小** (L5512-5522): -```css -.sticker-picker-item { - padding: 2px; /* 4px → 2px */ - /* 其余不变 */ -} -``` - -**改动 F — 颜文字字体放大** (L5606-5616): -```css -.sticker-picker-text { - font-size: 14px; /* 8px → 14px */ - line-height: 1.4; /* 1.2 → 1.4 */ - /* 其余不变 */ -} -``` - -**改动 G — 替换旧 SVG 选择器为通用贴纸选择器** (L5584-5603): - -删除旧的 `img[src^="data:image/svg"]` 选择器,替换为基于 `/stickers/` 路径的选择器: - -```css -/* 编辑器内贴纸 img 尺寸约束 */ -.comment-editor .article-prosemirror img[src*="/stickers/"], -.comment-editor .article-editor-content img[src*="/stickers/"] { - display: inline-block; - width: 28px; - height: 28px; - vertical-align: middle; - margin: 0 1px; - border-radius: 4px; - object-fit: contain; -} - -/* 评论正文中的贴纸 img */ -.floor-body img[src*="/stickers/"], -.comment-body img[src*="/stickers/"] { - display: inline-block; - vertical-align: middle; - width: 28px; - height: 28px; - margin: 0 1px; - background: transparent; - border-radius: 4px; - object-fit: contain; -} -``` - -**改动 H — 移动端网格也改为 8 列** (L5619-5624): -```css -@media (max-width: 640px) { - .sticker-picker { max-height: 240px; } - .sticker-picker-grid { grid-template-columns: repeat(6, 1fr); } /* 移动端 6 列 */ - .sticker-picker-tab { padding: 6px 10px; font-size: 12px; } - .comment-editor .article-tool-btn { width: 30px; height: 30px; } -} -``` -> 移动端保持 6 列(屏幕窄),桌面端 8 列。 - -## 不改动 -- `ArticleImageExtension.tsx` — 无需修改,`inline: true` 通过 `configure()` 传入即可 -- `kaomoji.ts` / `emojiData.ts` / `hot.ts` — 数据层不变 -- `CommentContent.tsx` — 渲染层不变(CSS 覆盖即可) -- PostEditor(帖子编辑器)— 不受影响,仍使用 `inline: false` - -## 验证 -1. `npm run build` 无报错 -2. 浏览器验证: - - 选择表情后插入无蓝色选中框 - - 表情在输入框中显示 28px,内联在文字中 - - 插入表情后光标紧跟表情后方,不换行 - - 表情选择器 8 列密度更高 - - 颜文字标签内字体清晰可读 diff --git a/.trae/documents/emoji_rich_comment_plan.md b/.trae/documents/emoji_rich_comment_plan.md deleted file mode 100644 index ca7b25e..0000000 --- a/.trae/documents/emoji_rich_comment_plan.md +++ /dev/null @@ -1,597 +0,0 @@ -# 评论表情包改造 + 富文本评论编辑器计划 - -## 一、摘要 - -将评论系统从「纯文本 textarea + Unicode Emoji」升级为「Tiptap 富文本编辑器 + 姜十三专属 SVG 贴纸」,实现: -1. 去除所有 Unicode Emoji,替换为自定义 SVG 贴纸(懒加载) -2. 姜十三专属表情包:萌系吉祥物表情 + 中文网络流行语文字气泡(混合风格) -3. 评论复用帖子编辑器核心能力(精简变体),支持代码块、链接、图片、格式化等 - ---- - -## 二、当前状态分析 - -### 2.1 评论输入:纯文本 textarea - -[CommentBox.tsx](file:///c:/Users/freefire/Documents/jiang13-forum/frontend/src/components/CommentBox.tsx) 使用 `