mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: add spoiler node
This commit is contained in:
Binary file not shown.
@@ -19,6 +19,7 @@ import {
|
|||||||
OrderedListNode,
|
OrderedListNode,
|
||||||
ParagraphNode,
|
ParagraphNode,
|
||||||
ReferencedContentNode,
|
ReferencedContentNode,
|
||||||
|
SpoilerNode,
|
||||||
StrikethroughNode,
|
StrikethroughNode,
|
||||||
SubscriptNode,
|
SubscriptNode,
|
||||||
SuperscriptNode,
|
SuperscriptNode,
|
||||||
@@ -46,6 +47,7 @@ import Math from "./Math";
|
|||||||
import OrderedList from "./OrderedList";
|
import OrderedList from "./OrderedList";
|
||||||
import Paragraph from "./Paragraph";
|
import Paragraph from "./Paragraph";
|
||||||
import ReferencedContent from "./ReferencedContent";
|
import ReferencedContent from "./ReferencedContent";
|
||||||
|
import Spoiler from "./Spoiler";
|
||||||
import Strikethrough from "./Strikethrough";
|
import Strikethrough from "./Strikethrough";
|
||||||
import Subscript from "./Subscript";
|
import Subscript from "./Subscript";
|
||||||
import Superscript from "./Superscript";
|
import Superscript from "./Superscript";
|
||||||
@@ -118,6 +120,8 @@ const Renderer: React.FC<Props> = ({ index, node }: Props) => {
|
|||||||
return <Superscript {...(node.superscriptNode as SuperscriptNode)} />;
|
return <Superscript {...(node.superscriptNode as SuperscriptNode)} />;
|
||||||
case NodeType.REFERENCED_CONTENT:
|
case NodeType.REFERENCED_CONTENT:
|
||||||
return <ReferencedContent {...(node.referencedContentNode as ReferencedContentNode)} />;
|
return <ReferencedContent {...(node.referencedContentNode as ReferencedContentNode)} />;
|
||||||
|
case NodeType.SPOILER:
|
||||||
|
return <Spoiler {...(node.spoilerNode as SpoilerNode)} />;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
24
web/src/components/MemoContent/Spoiler.tsx
Normal file
24
web/src/components/MemoContent/Spoiler.tsx
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import classNames from "classnames";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
content: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Spoiler: React.FC<Props> = ({ content }: Props) => {
|
||||||
|
const [isRevealed, setIsRevealed] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames(
|
||||||
|
"inline cursor-pointer select-none transition-all",
|
||||||
|
isRevealed ? "bg-gray-100 dark:bg-zinc-700" : "bg-gray-200 dark:bg-zinc-600",
|
||||||
|
)}
|
||||||
|
onClick={() => setIsRevealed(!isRevealed)}
|
||||||
|
>
|
||||||
|
<span className={classNames(isRevealed ? "opacity-100" : "opacity-0")}>{content}</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Spoiler;
|
@@ -32,6 +32,7 @@ export enum NodeType {
|
|||||||
SUBSCRIPT = "SUBSCRIPT",
|
SUBSCRIPT = "SUBSCRIPT",
|
||||||
SUPERSCRIPT = "SUPERSCRIPT",
|
SUPERSCRIPT = "SUPERSCRIPT",
|
||||||
REFERENCED_CONTENT = "REFERENCED_CONTENT",
|
REFERENCED_CONTENT = "REFERENCED_CONTENT",
|
||||||
|
SPOILER = "SPOILER",
|
||||||
UNRECOGNIZED = "UNRECOGNIZED",
|
UNRECOGNIZED = "UNRECOGNIZED",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +66,11 @@ export interface Node {
|
|||||||
subscriptNode?: SubscriptNode | undefined;
|
subscriptNode?: SubscriptNode | undefined;
|
||||||
superscriptNode?: SuperscriptNode | undefined;
|
superscriptNode?: SuperscriptNode | undefined;
|
||||||
referencedContentNode?: ReferencedContentNode | undefined;
|
referencedContentNode?: ReferencedContentNode | undefined;
|
||||||
|
spoilerNode?: SpoilerNode | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LineBreakNode {}
|
export interface LineBreakNode {
|
||||||
|
}
|
||||||
|
|
||||||
export interface ParagraphNode {
|
export interface ParagraphNode {
|
||||||
children: Node[];
|
children: Node[];
|
||||||
@@ -199,3 +202,7 @@ export interface ReferencedContentNode {
|
|||||||
resourceName: string;
|
resourceName: string;
|
||||||
params: string;
|
params: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SpoilerNode {
|
||||||
|
content: string;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user