diff --git a/src/client/components/mfm.ts b/src/client/components/mfm.ts index 1590e29142..bca469a159 100644 --- a/src/client/components/mfm.ts +++ b/src/client/components/mfm.ts @@ -48,6 +48,11 @@ export default defineComponent({ const ast = (this.plain ? parsePlain : parse)(this.text); + const validTime = (t: string | null | undefined) => { + if (t == null) return null; + return t.match(/^[0-9.]+s$/) ? t : null; + }; + const genEl = (ast: MfmForest) => concat(ast.map((token): VNode[] => { switch (token.node.type) { case 'text': { @@ -86,17 +91,17 @@ export default defineComponent({ break; } case 'jelly': { - const speed = token.node.props.args.speed || '1s'; + const speed = validTime(token.node.props.args.speed) || '1s'; style = (this.$store.state.animatedMfm ? `animation: mfm-rubberBand ${speed} linear infinite both;` : ''); break; } case 'twitch': { - const speed = token.node.props.args.speed || '0.5s'; + const speed = validTime(token.node.props.args.speed) || '0.5s'; style = this.$store.state.animatedMfm ? `animation: mfm-twitch ${speed} ease infinite;` : ''; break; } case 'shake': { - const speed = token.node.props.args.speed || '0.5s'; + const speed = validTime(token.node.props.args.speed) || '0.5s'; style = this.$store.state.animatedMfm ? `animation: mfm-shake ${speed} ease infinite;` : ''; break; } @@ -109,7 +114,7 @@ export default defineComponent({ token.node.props.args.x ? 'mfm-spinX' : token.node.props.args.y ? 'mfm-spinY' : 'mfm-spin'; - const speed = token.node.props.args.speed || '1.5s'; + const speed = validTime(token.node.props.args.speed) || '1.5s'; style = this.$store.state.animatedMfm ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction};` : ''; break; }