[frontend/mfm] Display a fallback node that preserves its children for unsupported MFM nodes
This commit is contained in:
parent
b79de70345
commit
35a4c63d4f
2 changed files with 22 additions and 27 deletions
|
@ -103,6 +103,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::deep {
|
||||||
|
.fallback {
|
||||||
|
text-decoration: 2px dotted underline red;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
::deep {
|
::deep {
|
||||||
.plain {
|
.plain {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
|
@ -35,18 +35,9 @@ public static partial class MfmRenderer
|
||||||
el.SetAttribute("mfm", "mfm");
|
el.SetAttribute("mfm", "mfm");
|
||||||
el.ClassName = "mfm";
|
el.ClassName = "mfm";
|
||||||
foreach (var node in nodes)
|
foreach (var node in nodes)
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
el.AppendNodes(RenderNode(node, emoji, accountDomain, simple));
|
el.AppendNodes(RenderNode(node, emoji, accountDomain, simple));
|
||||||
}
|
}
|
||||||
catch (NotImplementedException e)
|
|
||||||
{
|
|
||||||
var fallback = CreateElement("span");
|
|
||||||
fallback.TextContent = $"[Node type <{e.Message}> not implemented]";
|
|
||||||
el.AppendNodes(fallback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return el;
|
return el;
|
||||||
}
|
}
|
||||||
|
@ -61,9 +52,8 @@ public static partial class MfmRenderer
|
||||||
{
|
{
|
||||||
MfmCenterNode _ => MfmCenterNode(),
|
MfmCenterNode _ => MfmCenterNode(),
|
||||||
MfmCodeBlockNode mfmCodeBlockNode => MfmCodeBlockNode(mfmCodeBlockNode),
|
MfmCodeBlockNode mfmCodeBlockNode => MfmCodeBlockNode(mfmCodeBlockNode),
|
||||||
MfmMathBlockNode mfmMathBlockNode => throw new NotImplementedException($"{mfmMathBlockNode.GetType()}"),
|
// MfmMathBlockNode mfmMathBlockNode => TODO: Implement math block node
|
||||||
MfmQuoteNode mfmQuoteNode => MfmQuoteNode(mfmQuoteNode),
|
MfmQuoteNode mfmQuoteNode => MfmQuoteNode(mfmQuoteNode),
|
||||||
IMfmBlockNode mfmBlockNode => throw new NotImplementedException($"{mfmBlockNode.GetType()}"),
|
|
||||||
MfmBoldNode mfmBoldNode => MfmBoldNode(mfmBoldNode),
|
MfmBoldNode mfmBoldNode => MfmBoldNode(mfmBoldNode),
|
||||||
MfmEmojiCodeNode mfmEmojiCodeNode => MfmEmojiCodeNode(mfmEmojiCodeNode, emoji, simple),
|
MfmEmojiCodeNode mfmEmojiCodeNode => MfmEmojiCodeNode(mfmEmojiCodeNode, emoji, simple),
|
||||||
MfmFnNode mfmFnNode => MfmFnNode(mfmFnNode),
|
MfmFnNode mfmFnNode => MfmFnNode(mfmFnNode),
|
||||||
|
@ -71,38 +61,37 @@ public static partial class MfmRenderer
|
||||||
MfmInlineCodeNode mfmInlineCodeNode => MfmInlineCodeNode(mfmInlineCodeNode),
|
MfmInlineCodeNode mfmInlineCodeNode => MfmInlineCodeNode(mfmInlineCodeNode),
|
||||||
MfmItalicNode mfmItalicNode => MfmItalicNode(mfmItalicNode),
|
MfmItalicNode mfmItalicNode => MfmItalicNode(mfmItalicNode),
|
||||||
MfmLinkNode mfmLinkNode => MfmLinkNode(mfmLinkNode),
|
MfmLinkNode mfmLinkNode => MfmLinkNode(mfmLinkNode),
|
||||||
MfmInlineMathNode mfmInlineMathNode => throw new NotImplementedException($"{mfmInlineMathNode.GetType()}"),
|
// MfmInlineMathNode mfmInlineMathNode => TODO: Implement inline math
|
||||||
MfmMentionNode mfmMentionNode => MfmMentionNode(mfmMentionNode, accountDomain),
|
MfmMentionNode mfmMentionNode => MfmMentionNode(mfmMentionNode, accountDomain),
|
||||||
MfmPlainNode mfmPlainNode => MfmPlainNode(mfmPlainNode),
|
MfmPlainNode mfmPlainNode => MfmPlainNode(mfmPlainNode),
|
||||||
MfmSmallNode _ => MfmSmallNode(),
|
MfmSmallNode _ => MfmSmallNode(),
|
||||||
MfmStrikeNode mfmStrikeNode => MfmStrikeNode(mfmStrikeNode),
|
MfmStrikeNode mfmStrikeNode => MfmStrikeNode(mfmStrikeNode),
|
||||||
MfmTextNode mfmTextNode => MfmTextNode(mfmTextNode),
|
MfmTextNode mfmTextNode => MfmTextNode(mfmTextNode),
|
||||||
MfmUrlNode mfmUrlNode => MfmUrlNode(mfmUrlNode),
|
MfmUrlNode mfmUrlNode => MfmUrlNode(mfmUrlNode),
|
||||||
IMfmInlineNode mfmInlineNode => throw new NotImplementedException($"{mfmInlineNode.GetType()}"),
|
_ => MfmFallbackNode(nameof(node))
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(node))
|
|
||||||
};
|
};
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
||||||
if (node.Children.Length > 0 && rendered.ChildNodes.Length == 0)
|
if (node.Children.Length > 0 && rendered.ChildNodes.Length == 0)
|
||||||
{
|
{
|
||||||
foreach (var childNode in node.Children)
|
foreach (var childNode in node.Children)
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
rendered.AppendNodes(RenderNode(childNode, emoji, accountDomain, simple));
|
rendered.AppendNodes(RenderNode(childNode, emoji, accountDomain, simple));
|
||||||
}
|
}
|
||||||
catch (NotImplementedException e)
|
|
||||||
{
|
|
||||||
var fallback = CreateElement("span");
|
|
||||||
fallback.TextContent = $"[Node type <{e.Message}> not implemented]";
|
|
||||||
rendered.AppendNodes(fallback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rendered;
|
return rendered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static INode MfmFallbackNode(string nodeName)
|
||||||
|
{
|
||||||
|
var el = CreateElement("span");
|
||||||
|
el.ClassName = "fallback";
|
||||||
|
el.SetAttribute("title", $"Node type <{nodeName}> not implemented");
|
||||||
|
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
|
||||||
private static INode MfmPlainNode(MfmPlainNode _)
|
private static INode MfmPlainNode(MfmPlainNode _)
|
||||||
{
|
{
|
||||||
var el = CreateElement("span");
|
var el = CreateElement("span");
|
||||||
|
@ -270,7 +259,6 @@ public static partial class MfmRenderer
|
||||||
"shake" => MfmFnAnimation(node.Name, args, "0.5s"),
|
"shake" => MfmFnAnimation(node.Name, args, "0.5s"),
|
||||||
"twitch" => MfmFnAnimation(node.Name, args, "0.5s"),
|
"twitch" => MfmFnAnimation(node.Name, args, "0.5s"),
|
||||||
"rainbow" => MfmFnAnimation(node.Name, args),
|
"rainbow" => MfmFnAnimation(node.Name, args),
|
||||||
"sparkle" => throw new NotImplementedException($"{node.Name}"),
|
|
||||||
"rotate" => MfmFnRotate(args),
|
"rotate" => MfmFnRotate(args),
|
||||||
"fade" => MfmFnFade(args),
|
"fade" => MfmFnFade(args),
|
||||||
"crop" => MfmFnCrop(args),
|
"crop" => MfmFnCrop(args),
|
||||||
|
@ -283,7 +271,7 @@ public static partial class MfmRenderer
|
||||||
"unixtime" => MfmFnUnixtime(node),
|
"unixtime" => MfmFnUnixtime(node),
|
||||||
"center" => MfmCenterNode(),
|
"center" => MfmCenterNode(),
|
||||||
"small" => MfmSmallNode(),
|
"small" => MfmSmallNode(),
|
||||||
_ => throw new NotImplementedException($"{node.Name}")
|
_ => MfmFallbackNode($"{node.GetType()}+{node.Name}")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue