From 00c3736c3818053859710a2fbaec837dd9cbb586 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 31 Jul 2023 20:57:11 +0800 Subject: ... --- FrontEnd/src/pages/timeline/TimelineCard.tsx | 3 +- .../src/pages/timeline/TimelineDeleteDialog.tsx | 4 +-- .../src/pages/timeline/TimelinePostContentView.tsx | 13 +++++--- FrontEnd/src/services/TimelinePostBuilder.ts | 5 ++- FrontEnd/src/views/common/Card.css | 4 +-- FrontEnd/src/views/common/Card.tsx | 3 +- FrontEnd/src/views/common/Icon.tsx | 5 +-- FrontEnd/src/views/common/Spinner.tsx | 19 ++++------- FrontEnd/src/views/common/button/Button.tsx | 2 +- FrontEnd/src/views/common/button/FlatButton.tsx | 2 +- FrontEnd/src/views/common/button/IconButton.tsx | 6 +--- FrontEnd/src/views/common/button/LoadingButton.tsx | 3 +- .../src/views/common/dialog/OperationDialog.tsx | 38 ++++++++++++++++++---- 13 files changed, 63 insertions(+), 44 deletions(-) diff --git a/FrontEnd/src/pages/timeline/TimelineCard.tsx b/FrontEnd/src/pages/timeline/TimelineCard.tsx index cdc8a5a7..b287c620 100644 --- a/FrontEnd/src/pages/timeline/TimelineCard.tsx +++ b/FrontEnd/src/pages/timeline/TimelineCard.tsx @@ -47,7 +47,7 @@ export default function TimelineCard(props: TimelinePageCardProps) { ]); const content = ( -
+

{timeline.title} {timeline.nameV2} @@ -123,6 +123,7 @@ export default function TimelineCard(props: TimelinePageCardProps) { return ( = (props) => { onClose={props.onClose} title="timeline.deleteDialog.title" color="danger" - inputPrompt={() => ( + inputPromptNode={ 012 - )} + } inputs={{ inputs: [ { diff --git a/FrontEnd/src/pages/timeline/TimelinePostContentView.tsx b/FrontEnd/src/pages/timeline/TimelinePostContentView.tsx index 41080e10..ad5465c1 100644 --- a/FrontEnd/src/pages/timeline/TimelinePostContentView.tsx +++ b/FrontEnd/src/pages/timeline/TimelinePostContentView.tsx @@ -40,7 +40,7 @@ const TextView: React.FC = (props) => { setError("error"); } } - } + }, ); return () => { @@ -77,7 +77,7 @@ const ImageView: React.FC = (props) => { src={getHttpTimelineClient().generatePostDataUrl( post.timelineOwnerV2, post.timelineNameV2, - post.id + post.id, )} className={classnames(className, "timeline-content-image")} style={style} @@ -113,7 +113,7 @@ const MarkdownView: React.FC = (props) => { setError("error"); } } - } + }, ); return () => { @@ -123,7 +123,10 @@ const MarkdownView: React.FC = (props) => { const markdownHtml = React.useMemo(() => { if (markdown == null) return null; - return marked.parse(markdown); + return marked.parse(markdown, { + mangle: false, + headerIds: false, + }); }, [markdown]); if (error != null) { @@ -168,7 +171,7 @@ const viewMap: Record> = { }; const TimelinePostContentView: React.FC = ( - props + props, ) => { const { post, className, style } = props; diff --git a/FrontEnd/src/services/TimelinePostBuilder.ts b/FrontEnd/src/services/TimelinePostBuilder.ts index 83d63abe..0440e136 100644 --- a/FrontEnd/src/services/TimelinePostBuilder.ts +++ b/FrontEnd/src/services/TimelinePostBuilder.ts @@ -96,7 +96,10 @@ export default class TimelinePostBuilder { } renderHtml(): string { - return marked.parse(this._text); + return marked.parse(this._text, { + mangle: false, + headerIds: false, + }); } dispose(): void { diff --git a/FrontEnd/src/views/common/Card.css b/FrontEnd/src/views/common/Card.css index f4cdc31c..c677abd7 100644 --- a/FrontEnd/src/views/common/Card.css +++ b/FrontEnd/src/views/common/Card.css @@ -1,7 +1,5 @@ .cru-card { - border: solid 1px; border-radius: var(--cru-card-border-radius); background-color: var(--cru-key-container-color); - border-color: var(--cru-key-container-color); transition: all 0.3s; -} +} \ No newline at end of file diff --git a/FrontEnd/src/views/common/Card.tsx b/FrontEnd/src/views/common/Card.tsx index 35e605af..381e58e7 100644 --- a/FrontEnd/src/views/common/Card.tsx +++ b/FrontEnd/src/views/common/Card.tsx @@ -16,11 +16,10 @@ export default function Card({ containerRef, ...otherProps }: CardProps) { - color = color ?? "primary"; return (
{children} diff --git a/FrontEnd/src/views/common/Icon.tsx b/FrontEnd/src/views/common/Icon.tsx index c91d514b..2ac3a7ca 100644 --- a/FrontEnd/src/views/common/Icon.tsx +++ b/FrontEnd/src/views/common/Icon.tsx @@ -14,13 +14,14 @@ interface IconButtonProps extends ComponentPropsWithoutRef<"i"> { export default function Icon(props: IconButtonProps) { const { icon, color, size, style, className, ...otherProps } = props; - const colorName = color === "on-surface" ? "surface-on" : color ?? "primary"; + const colorName = color === "on-surface" ? "surface-on" : color; return ( ); diff --git a/FrontEnd/src/views/common/button/Button.tsx b/FrontEnd/src/views/common/button/Button.tsx index 0f1bbf2b..e01023c0 100644 --- a/FrontEnd/src/views/common/button/Button.tsx +++ b/FrontEnd/src/views/common/button/Button.tsx @@ -33,7 +33,7 @@ export default function Button(props: ButtonProps) {
); } @@ -43,9 +44,12 @@ export interface OperationDialogProps { color?: ThemeColor; inputColor?: ThemeColor; title: Text; - inputPrompt?: () => ReactNode; - successPrompt?: (data: TData) => ReactNode; - failurePrompt?: (error: unknown) => ReactNode; + inputPrompt?: Text; + inputPromptNode?: ReactNode; + successPrompt?: (data: TData) => Text; + successPromptNode?: (data: TData) => ReactNode; + failurePrompt?: (error: unknown) => Text; + failurePromptNode?: (error: unknown) => ReactNode; inputs: InputInitializer; @@ -61,13 +65,28 @@ function OperationDialog(props: OperationDialogProps) { inputColor, title, inputPrompt, + inputPromptNode, successPrompt, + successPromptNode, failurePrompt, + failurePromptNode, inputs, onProcess, onSuccessAndClose, } = props; + if (process.env.NODE_ENV === "development") { + if (inputPrompt && inputPromptNode) { + console.log("InputPrompt and inputPromptNode are both set."); + } + if (successPrompt && successPromptNode) { + console.log("SuccessPrompt and successPromptNode are both set."); + } + if (failurePrompt && failurePromptNode) { + console.log("FailurePrompt and failurePromptNode are both set."); + } + } + type Step = | { type: "input" } | { type: "process" } @@ -128,7 +147,10 @@ function OperationDialog(props: OperationDialogProps) { body = (
- + (props: OperationDialogProps) { ? { message: "operationDialog.success", customMessage: successPrompt?.(result.data), + customMessageNode: successPromptNode?.(result.data), } : { message: "operationDialog.error", customMessage: failurePrompt?.(result.data), + customMessageNode: failurePromptNode?.(result.data), }; body = (
-- cgit v1.2.3