Code review part 2

* <https://ilja.space/notice/ALpd6nux5hT2nsfetM>
    * Previous commit: `|> fill_props(token) after the cond` in the parser
    * This commit: Don't use intention-specific data in the tokens (e.g. left is reverse, x is mfm-spinX)
* <https://ilja.space/notice/ALpcK6W59UjkIUofU8>
    * TODO: Use less files
* Previous commit: Change nested if-statement in mfm.ex to `cond do`
This commit is contained in:
Ilja 2022-07-25 09:29:24 +02:00
parent ecd3f750cb
commit a8dd3dd719
4 changed files with 71 additions and 71 deletions

View file

@ -108,18 +108,28 @@ defmodule MfmParser.Encoder do
%Node.MFM.Spin{} -> %Node.MFM.Spin{} ->
{html_child, styles_child} = to_html_styles(node.children) {html_child, styles_child} = to_html_styles(node.children)
stylemap = %{ styles_map = %{
"mfm-spin" => "x" =>
"@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}",
"mfm-spinX" =>
"@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}", "@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}",
"mfm-spinY" => "y" =>
"@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}" "@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}",
"z" =>
"@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}"
}
keyframe_names_map = %{
"x" => "mfm-spinX",
"y" => "mfm-spinY",
"z" => "mfm-spin"
}
directions_map = %{
"left" => "reverse"
} }
{html <> {html <>
"<span style=\"display: inline-block; animation: #{node.props.speed} linear 0s infinite #{node.props.direction} none running #{node.props.keyframes_name};\">#{html_child}</span>", "<span style=\"display: inline-block; animation: #{node.props.speed} linear 0s infinite #{Map.get(directions_map, node.props.direction, node.props.direction)} none running #{Map.get(keyframe_names_map, node.props.axis, "")};\">#{html_child}</span>",
styles ++ [Map.get(stylemap, node.props.keyframes_name, "")] ++ styles_child} styles ++ [Map.get(styles_map, node.props.axis, "")] ++ styles_child}
%Node.MFM.Shake{} -> %Node.MFM.Shake{} ->
{html_child, styles_child} = to_html_styles(node.children) {html_child, styles_child} = to_html_styles(node.children)

View file

@ -1,13 +1,3 @@
defmodule MfmParser.Node.MFM.Spin do defmodule MfmParser.Node.MFM.Spin do
# keyframes_name: defstruct props: %{axis: "z", direction: "normal", speed: "1.5s"}, children: []
# x -> mfm-spinX
# y -> mfm-spinY
# _ -> mfm-spin
#
# direction:
# left -> reverse
# alternate -> alternate
# _ -> normal
#
defstruct props: %{keyframes_name: "mfm-spin", direction: "normal", speed: "1.5s"}, children: []
end end

View file

@ -149,107 +149,107 @@ defmodule MfmParser.EncoderTest do
end end
test "it handles spin" do test "it handles spin" do
input_tree_spin_reverse = [ input_tree_z_left = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spin", direction: "reverse", speed: "1.5s"}, props: %{axis: "z", direction: "left", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spinx_reverse = [ input_tree_x_left = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinX", direction: "reverse", speed: "1.5s"}, props: %{axis: "x", direction: "left", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spiny_reverse = [ input_tree_y_left = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinY", direction: "reverse", speed: "1.5s"}, props: %{axis: "y", direction: "left", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spin_alternate = [ input_tree_z_alternate = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spin", direction: "alternate", speed: "1.5s"}, props: %{axis: "z", direction: "alternate", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spinx_alternate = [ input_tree_x_alternate = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinX", direction: "alternate", speed: "1.5s"}, props: %{axis: "x", direction: "alternate", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spiny_alternate = [ input_tree_y_alternate = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinY", direction: "alternate", speed: "1.5s"}, props: %{axis: "y", direction: "alternate", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spin_normal = [ input_tree_z_normal = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spin", direction: "normal", speed: "1.5s"}, props: %{axis: "z", direction: "normal", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spinx_normal = [ input_tree_x_normal = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinX", direction: "normal", speed: "1.5s"}, props: %{axis: "x", direction: "normal", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
input_tree_spiny_normal = [ input_tree_y_normal = [
%Node.MFM.Spin{ %Node.MFM.Spin{
props: %{keyframes_name: "mfm-spinY", direction: "normal", speed: "1.5s"}, props: %{axis: "y", direction: "normal", speed: "1.5s"},
children: [%Node.Text{props: %{text: "🍮"}}] children: [%Node.Text{props: %{text: "🍮"}}]
} }
] ]
expected_tree_spin_reverse = expected_tree_z_left =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>]
expected_tree_spinx_reverse = expected_tree_x_left =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>]
expected_tree_spiny_reverse = expected_tree_y_left =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite reverse none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>]
expected_tree_spin_alternate = expected_tree_z_alternate =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>]
expected_tree_spinx_alternate = expected_tree_x_alternate =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>]
expected_tree_spiny_alternate = expected_tree_y_alternate =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite alternate none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>]
expected_tree_spin_normal = expected_tree_z_normal =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spin;">🍮</span><style>@keyframes mfm-spin { 0% { transform:rotate(0) } to { transform:rotate(360deg) }}</style>]
expected_tree_spinx_normal = expected_tree_x_normal =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spinX;">🍮</span><style>@keyframes mfm-spinX { 0% { transform:perspective(128px) rotateX(0) } to { transform:perspective(128px) rotateX(360deg) }}</style>]
expected_tree_spiny_normal = expected_tree_y_normal =
~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>] ~s[<span style="display: inline-block; animation: 1.5s linear 0s infinite normal none running mfm-spinY;">🍮</span><style>@keyframes mfm-spinY { 0% { transform:perspective(128px) rotateY(0) } to { transform:perspective(128px) rotateY(360deg) }}</style>]
assert Encoder.to_html(input_tree_spin_reverse) == expected_tree_spin_reverse assert Encoder.to_html(input_tree_z_left) == expected_tree_z_left
assert Encoder.to_html(input_tree_spinx_reverse) == expected_tree_spinx_reverse assert Encoder.to_html(input_tree_x_left) == expected_tree_x_left
assert Encoder.to_html(input_tree_spiny_reverse) == expected_tree_spiny_reverse assert Encoder.to_html(input_tree_y_left) == expected_tree_y_left
assert Encoder.to_html(input_tree_spin_alternate) == expected_tree_spin_alternate assert Encoder.to_html(input_tree_z_alternate) == expected_tree_z_alternate
assert Encoder.to_html(input_tree_spinx_alternate) == expected_tree_spinx_alternate assert Encoder.to_html(input_tree_x_alternate) == expected_tree_x_alternate
assert Encoder.to_html(input_tree_spiny_alternate) == expected_tree_spiny_alternate assert Encoder.to_html(input_tree_y_alternate) == expected_tree_y_alternate
assert Encoder.to_html(input_tree_spin_normal) == expected_tree_spin_normal assert Encoder.to_html(input_tree_z_normal) == expected_tree_z_normal
assert Encoder.to_html(input_tree_spinx_normal) == expected_tree_spinx_normal assert Encoder.to_html(input_tree_x_normal) == expected_tree_x_normal
assert Encoder.to_html(input_tree_spiny_normal) == expected_tree_spiny_normal assert Encoder.to_html(input_tree_y_normal) == expected_tree_y_normal
end end
test "it handles shake" do test "it handles shake" do
@ -395,7 +395,7 @@ defmodule MfmParser.EncoderTest do
children: [ children: [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
children: [%MfmParser.Node.Text{props: %{text: "pain"}}], children: [%MfmParser.Node.Text{props: %{text: "pain"}}],
props: %{direction: "normal", keyframes_name: "mfm-spin", speed: "1s"} props: %{direction: "normal", axis: "z", speed: "1s"}
}, },
%MfmParser.Node.Text{props: %{text: " "}}, %MfmParser.Node.Text{props: %{text: " "}},
%MfmParser.Node.MFM.Rainbow{ %MfmParser.Node.MFM.Rainbow{

View file

@ -244,7 +244,7 @@ defmodule MfmParser.ParserTest do
output_default = [ output_default = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spin", axis: "z",
direction: "normal", direction: "normal",
speed: "1.5s" speed: "1.5s"
}, },
@ -257,8 +257,8 @@ defmodule MfmParser.ParserTest do
output_left = [ output_left = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spin", axis: "z",
direction: "reverse", direction: "left",
speed: "1.5s" speed: "1.5s"
}, },
children: [] children: []
@ -270,7 +270,7 @@ defmodule MfmParser.ParserTest do
output_alternate = [ output_alternate = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spin", axis: "z",
direction: "alternate", direction: "alternate",
speed: "1.5s" speed: "1.5s"
}, },
@ -283,7 +283,7 @@ defmodule MfmParser.ParserTest do
output_x = [ output_x = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinX", axis: "x",
direction: "normal", direction: "normal",
speed: "1.5s" speed: "1.5s"
}, },
@ -296,8 +296,8 @@ defmodule MfmParser.ParserTest do
output_x_left = [ output_x_left = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinX", axis: "x",
direction: "reverse", direction: "left",
speed: "1.5s" speed: "1.5s"
}, },
children: [] children: []
@ -309,7 +309,7 @@ defmodule MfmParser.ParserTest do
output_x_alternate = [ output_x_alternate = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinX", axis: "x",
direction: "alternate", direction: "alternate",
speed: "1.5s" speed: "1.5s"
}, },
@ -322,7 +322,7 @@ defmodule MfmParser.ParserTest do
output_y = [ output_y = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinY", axis: "y",
direction: "normal", direction: "normal",
speed: "1.5s" speed: "1.5s"
}, },
@ -335,8 +335,8 @@ defmodule MfmParser.ParserTest do
output_y_left = [ output_y_left = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinY", axis: "y",
direction: "reverse", direction: "left",
speed: "1.5s" speed: "1.5s"
}, },
children: [] children: []
@ -348,7 +348,7 @@ defmodule MfmParser.ParserTest do
output_y_alternate = [ output_y_alternate = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spinY", axis: "y",
direction: "alternate", direction: "alternate",
speed: "1.5s" speed: "1.5s"
}, },
@ -361,7 +361,7 @@ defmodule MfmParser.ParserTest do
output_speed = [ output_speed = [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
props: %{ props: %{
keyframes_name: "mfm-spin", axis: "z",
direction: "normal", direction: "normal",
speed: "20s" speed: "20s"
}, },
@ -544,7 +544,7 @@ defmodule MfmParser.ParserTest do
children: [ children: [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
children: [%MfmParser.Node.Text{props: %{text: "chocolatine"}}], children: [%MfmParser.Node.Text{props: %{text: "chocolatine"}}],
props: %{direction: "normal", keyframes_name: "mfm-spin", speed: "1.5s"} props: %{direction: "normal", axis: "z", speed: "1.5s"}
} }
], ],
props: %{speed: "0.5s"} props: %{speed: "0.5s"}
@ -568,7 +568,7 @@ defmodule MfmParser.ParserTest do
children: [ children: [
%MfmParser.Node.MFM.Spin{ %MfmParser.Node.MFM.Spin{
children: [%MfmParser.Node.Text{props: %{text: "pain"}}], children: [%MfmParser.Node.Text{props: %{text: "pain"}}],
props: %{direction: "normal", keyframes_name: "mfm-spin", speed: "1.5s"} props: %{direction: "normal", axis: "z", speed: "1.5s"}
}, },
%MfmParser.Node.Text{props: %{text: " "}}, %MfmParser.Node.Text{props: %{text: " "}},
%MfmParser.Node.MFM.Rainbow{ %MfmParser.Node.MFM.Rainbow{