diff --git a/web/src/assets/gomark.wasm b/web/src/assets/gomark.wasm index 6d6ea002..3317d933 100755 Binary files a/web/src/assets/gomark.wasm and b/web/src/assets/gomark.wasm differ diff --git a/web/src/components/MemoContent/Renderer.tsx b/web/src/components/MemoContent/Renderer.tsx index 2a8b693c..d672bb8d 100644 --- a/web/src/components/MemoContent/Renderer.tsx +++ b/web/src/components/MemoContent/Renderer.tsx @@ -19,6 +19,7 @@ import { OrderedListNode, ParagraphNode, ReferencedContentNode, + SpoilerNode, StrikethroughNode, SubscriptNode, SuperscriptNode, @@ -46,6 +47,7 @@ import Math from "./Math"; import OrderedList from "./OrderedList"; import Paragraph from "./Paragraph"; import ReferencedContent from "./ReferencedContent"; +import Spoiler from "./Spoiler"; import Strikethrough from "./Strikethrough"; import Subscript from "./Subscript"; import Superscript from "./Superscript"; @@ -118,6 +120,8 @@ const Renderer: React.FC = ({ index, node }: Props) => { return ; case NodeType.REFERENCED_CONTENT: return ; + case NodeType.SPOILER: + return ; default: return null; } diff --git a/web/src/components/MemoContent/Spoiler.tsx b/web/src/components/MemoContent/Spoiler.tsx new file mode 100644 index 00000000..c0a5a368 --- /dev/null +++ b/web/src/components/MemoContent/Spoiler.tsx @@ -0,0 +1,24 @@ +import classNames from "classnames"; +import { useState } from "react"; + +interface Props { + content: string; +} + +const Spoiler: React.FC = ({ content }: Props) => { + const [isRevealed, setIsRevealed] = useState(false); + + return ( +
setIsRevealed(!isRevealed)} + > + {content} +
+ ); +}; + +export default Spoiler; diff --git a/web/src/types/node.ts b/web/src/types/node.ts index d9ca4730..405cf8a3 100644 --- a/web/src/types/node.ts +++ b/web/src/types/node.ts @@ -32,6 +32,7 @@ export enum NodeType { SUBSCRIPT = "SUBSCRIPT", SUPERSCRIPT = "SUPERSCRIPT", REFERENCED_CONTENT = "REFERENCED_CONTENT", + SPOILER = "SPOILER", UNRECOGNIZED = "UNRECOGNIZED", } @@ -65,9 +66,11 @@ export interface Node { subscriptNode?: SubscriptNode | undefined; superscriptNode?: SuperscriptNode | undefined; referencedContentNode?: ReferencedContentNode | undefined; + spoilerNode?: SpoilerNode | undefined; } -export interface LineBreakNode {} +export interface LineBreakNode { +} export interface ParagraphNode { children: Node[]; @@ -199,3 +202,7 @@ export interface ReferencedContentNode { resourceName: string; params: string; } + +export interface SpoilerNode { + content: string; +}