From 5a095290db9abf5f8e9528ef4f56c0b974231ad1 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 30 Apr 2022 23:02:44 +0800 Subject: ... --- FrontEnd/src/views/admin/UserAdmin.tsx | 7 ++++-- FrontEnd/src/views/center/TimelineBoard.tsx | 12 +++++++---- FrontEnd/src/views/common/alert/AlertHost.tsx | 7 ++++-- FrontEnd/src/views/common/button/IconButton.css | 9 ++++++++ FrontEnd/src/views/common/button/IconButton.tsx | 25 ++++++++++++++++++++++ .../src/views/common/dailog/FullPageDialog.tsx | 6 ++++-- FrontEnd/src/views/common/index.css | 13 ----------- FrontEnd/src/views/home/TimelineListView.tsx | 4 +++- FrontEnd/src/views/timeline/CollapseButton.tsx | 12 +++++------ FrontEnd/src/views/timeline/MarkdownPostEdit.tsx | 14 ++++++++---- FrontEnd/src/views/timeline/TimelineCard.tsx | 16 +++++++------- .../src/views/timeline/TimelineDeleteDialog.tsx | 2 +- FrontEnd/src/views/timeline/TimelinePostEdit.tsx | 19 ++++++---------- FrontEnd/src/views/timeline/TimelinePostView.tsx | 7 ++++-- 14 files changed, 95 insertions(+), 58 deletions(-) create mode 100644 FrontEnd/src/views/common/button/IconButton.css create mode 100644 FrontEnd/src/views/common/button/IconButton.tsx diff --git a/FrontEnd/src/views/admin/UserAdmin.tsx b/FrontEnd/src/views/admin/UserAdmin.tsx index fd4ff881..02fb0d12 100644 --- a/FrontEnd/src/views/admin/UserAdmin.tsx +++ b/FrontEnd/src/views/admin/UserAdmin.tsx @@ -10,6 +10,7 @@ import OperationDialog, { import Button from "../common/button/Button"; import Spinner from "../common/Spinner"; import FlatButton from "../common/button/FlatButton"; +import IconButton from "../common/button/IconButton"; const CreateUserDialog: React.FC<{ open: boolean; @@ -181,8 +182,10 @@ const UserItem: React.FC = ({ user, onChange }) => { return ( <>
- setEditMaskVisible(true)} />
{user.username}
diff --git a/FrontEnd/src/views/center/TimelineBoard.tsx b/FrontEnd/src/views/center/TimelineBoard.tsx index 45b4a8a5..7ff4e0a4 100644 --- a/FrontEnd/src/views/center/TimelineBoard.tsx +++ b/FrontEnd/src/views/center/TimelineBoard.tsx @@ -9,6 +9,7 @@ import LoadFailReload from "../common/LoadFailReload"; import FlatButton from "../common/button/FlatButton"; import Card from "../common/Card"; import Spinner from "../common/Spinner"; +import IconButton from "../common/button/IconButton"; interface TimelineBoardItemProps { timeline: TimelineBookmark; @@ -42,12 +43,15 @@ const TimelineBoardItem: React.FC = ({ {actions != null ? (
- - { e.currentTarget.setPointerCapture(e.pointerId); actions.onMove.start(e); diff --git a/FrontEnd/src/views/common/alert/AlertHost.tsx b/FrontEnd/src/views/common/alert/AlertHost.tsx index ba6d6a0f..92db78fa 100644 --- a/FrontEnd/src/views/common/alert/AlertHost.tsx +++ b/FrontEnd/src/views/common/alert/AlertHost.tsx @@ -6,6 +6,8 @@ import classNames from "classnames"; import { alertService, AlertInfoEx, AlertInfo } from "@/services/alert"; import { convertI18nText } from "@/common"; +import IconButton from "../button/IconButton"; + import "./alert.css"; interface AutoCloseAlertProps { @@ -67,8 +69,9 @@ export const AutoCloseAlert: React.FC = (props) => { })()}
-
diff --git a/FrontEnd/src/views/common/button/IconButton.css b/FrontEnd/src/views/common/button/IconButton.css new file mode 100644 index 00000000..ef4dca00 --- /dev/null +++ b/FrontEnd/src/views/common/button/IconButton.css @@ -0,0 +1,9 @@ +.cru-icon-button { + color: var(--cru-theme-color); + font-size: 1.4rem; + cursor: pointer; +} + +.cru-icon-button.large { + font-size: 1.6rem; +} diff --git a/FrontEnd/src/views/common/button/IconButton.tsx b/FrontEnd/src/views/common/button/IconButton.tsx new file mode 100644 index 00000000..56c62588 --- /dev/null +++ b/FrontEnd/src/views/common/button/IconButton.tsx @@ -0,0 +1,25 @@ +import classNames from "classnames"; +import React from "react"; + +export type IconButtonProps = { + icon: string; + color?: string; + large?: boolean; +} & React.ComponentPropsWithRef<"i">; + +export default function IconButton(props: IconButtonProps): JSX.Element { + const { icon, color, className, large, ...otherProps } = props; + + return ( + + ); +} diff --git a/FrontEnd/src/views/common/dailog/FullPageDialog.tsx b/FrontEnd/src/views/common/dailog/FullPageDialog.tsx index 3c7f9d0b..ef76f2f2 100644 --- a/FrontEnd/src/views/common/dailog/FullPageDialog.tsx +++ b/FrontEnd/src/views/common/dailog/FullPageDialog.tsx @@ -4,6 +4,7 @@ import classnames from "classnames"; import { CSSTransition } from "react-transition-group"; import "./FullPageDialog.css"; +import IconButton from "../button/IconButton"; export interface FullPageDialogProps { show: boolean; @@ -28,8 +29,9 @@ const FullPageDialog: React.FC = ({ >
-
diff --git a/FrontEnd/src/views/common/index.css b/FrontEnd/src/views/common/index.css index 05fdce04..f6f14d2d 100644 --- a/FrontEnd/src/views/common/index.css +++ b/FrontEnd/src/views/common/index.css @@ -243,19 +243,6 @@ height: 100%; } -.icon-button { - font-size: 1.4rem; - cursor: pointer; -} - -.icon-button.large { - font-size: 1.6rem; -} - -.icon-button.primary-enhance { - color: var(--cru-primary-enhance-color); -} - .cru-avatar { width: 60px; height: 60px; diff --git a/FrontEnd/src/views/home/TimelineListView.tsx b/FrontEnd/src/views/home/TimelineListView.tsx index b26f1f70..7bffba76 100644 --- a/FrontEnd/src/views/home/TimelineListView.tsx +++ b/FrontEnd/src/views/home/TimelineListView.tsx @@ -6,6 +6,8 @@ import { convertI18nText, I18nText } from "@/common"; import { TimelineBookmark } from "@/http/bookmark"; +import IconButton from "../common/button/IconButton"; + interface TimelineListItemProps { timeline: TimelineBookmark; } @@ -24,7 +26,7 @@ const TimelineListItem: React.FC = ({ timeline }) => { {timeline.timelineOwner}/{timeline.timelineName}
- +
); diff --git a/FrontEnd/src/views/timeline/CollapseButton.tsx b/FrontEnd/src/views/timeline/CollapseButton.tsx index 31976228..b8d06916 100644 --- a/FrontEnd/src/views/timeline/CollapseButton.tsx +++ b/FrontEnd/src/views/timeline/CollapseButton.tsx @@ -1,5 +1,6 @@ import React from "react"; -import classnames from "classnames"; + +import IconButton from "../common/button/IconButton"; const CollapseButton: React.FC<{ collapse: boolean; @@ -8,13 +9,10 @@ const CollapseButton: React.FC<{ style?: React.CSSProperties; }> = ({ collapse, onClick, className, style }) => { return ( - ); diff --git a/FrontEnd/src/views/timeline/MarkdownPostEdit.tsx b/FrontEnd/src/views/timeline/MarkdownPostEdit.tsx index 35a2bbf5..9ab40e54 100644 --- a/FrontEnd/src/views/timeline/MarkdownPostEdit.tsx +++ b/FrontEnd/src/views/timeline/MarkdownPostEdit.tsx @@ -10,6 +10,7 @@ import FlatButton from "../common/button/FlatButton"; import TabPages from "../common/tab/TabPages"; import ConfirmDialog from "../common/dailog/ConfirmDialog"; import Spinner from "../common/Spinner"; +import IconButton from "../common/button/IconButton"; import "./MarkdownPostEdit.css"; @@ -113,8 +114,11 @@ const MarkdownPostEdit: React.FC = ({ ) : (
- { if (canLeave) { onClose(); @@ -158,9 +162,11 @@ const MarkdownPostEdit: React.FC = ({ src={image.url} className="timeline-markdown-post-edit-image" /> - { diff --git a/FrontEnd/src/views/timeline/TimelineCard.tsx b/FrontEnd/src/views/timeline/TimelineCard.tsx index d258dc75..b1146ad5 100644 --- a/FrontEnd/src/views/timeline/TimelineCard.tsx +++ b/FrontEnd/src/views/timeline/TimelineCard.tsx @@ -19,6 +19,7 @@ import ConnectionStatusBadge from "./ConnectionStatusBadge"; import CollapseButton from "./CollapseButton"; import { TimelineMemberDialog } from "./TimelineMember"; import TimelinePropertyChangeDialog from "./TimelinePropertyChangeDialog"; +import IconButton from "../common/button/IconButton"; export interface TimelinePageCardProps { timeline: HttpTimelineInfo; @@ -67,11 +68,9 @@ const TimelineCard: React.FC = (props) => {
{user != null ? ( - { getHttpBookmarkClient() [timeline.isBookmark ? "delete" : "post"]( @@ -90,8 +89,9 @@ const TimelineCard: React.FC = (props) => { }} /> ) : null} - setDialog("member")} /> {timeline.manageable ? ( @@ -112,7 +112,7 @@ const TimelineCard: React.FC = (props) => { ]} containerClassName="d-inline" > - + ) : null}
diff --git a/FrontEnd/src/views/timeline/TimelineDeleteDialog.tsx b/FrontEnd/src/views/timeline/TimelineDeleteDialog.tsx index 5b57b0c4..3a339622 100644 --- a/FrontEnd/src/views/timeline/TimelineDeleteDialog.tsx +++ b/FrontEnd/src/views/timeline/TimelineDeleteDialog.tsx @@ -27,7 +27,7 @@ const TimelineDeleteDialog: React.FC = (props) => { return ( 012 diff --git a/FrontEnd/src/views/timeline/TimelinePostEdit.tsx b/FrontEnd/src/views/timeline/TimelinePostEdit.tsx index 3b42f38d..f1c5b22c 100644 --- a/FrontEnd/src/views/timeline/TimelinePostEdit.tsx +++ b/FrontEnd/src/views/timeline/TimelinePostEdit.tsx @@ -1,5 +1,4 @@ import React from "react"; -import classnames from "classnames"; import { useTranslation } from "react-i18next"; import { UiLogicError } from "@/common"; @@ -20,6 +19,7 @@ import LoadingButton from "../common/button/LoadingButton"; import PopupMenu from "../common/menu/PopupMenu"; import MarkdownPostEdit from "./MarkdownPostEdit"; import TimelinePostEditCard from "./TimelinePostEditCard"; +import IconButton from "../common/button/IconButton"; import "./TimelinePostEdit.css"; @@ -104,10 +104,10 @@ const TimelinePostEditImage: React.FC = (props) => { type PostKind = "text" | "markdown" | "image"; -const postKindIconClassNameMap: Record = { - text: "bi-fonts", - markdown: "bi-markdown", - image: "bi-image", +const postKindIconMap: Record = { + text: "fonts", + markdown: "markdown", + image: "image", }; export interface TimelinePostEditProps { @@ -237,7 +237,7 @@ const TimelinePostEdit: React.FC = (props) => { items={(["text", "image", "markdown"] as const).map((kind) => ({ type: "button", text: `timeline.post.type.${kind}`, - iconClassName: postKindIconClassNameMap[kind], + iconClassName: postKindIconMap[kind], onClick: () => { if (kind === "markdown") { setShowMarkdown(true); @@ -247,12 +247,7 @@ const TimelinePostEdit: React.FC = (props) => { }, }))} > - +
= (props) => { style={cardStyle} > {post.editable ? ( - { setOperationMaskVisible(true); e.stopPropagation(); -- cgit v1.2.3