Skip to content

Commit

Permalink
Fix placeholder lint and bad documents list UX (#326)
Browse files Browse the repository at this point in the history
  • Loading branch information
simonprev committed Nov 17, 2022
1 parent 4efe980 commit d40d32d
Show file tree
Hide file tree
Showing 13 changed files with 88 additions and 78 deletions.
6 changes: 5 additions & 1 deletion lib/langue/langue.ex
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,9 @@ defmodule Langue do

def serializer_from_format(_), do: {:error, :unknown_serializer}

def format_modules, do: @format_modules
def placeholder_regex do
@format_modules
|> Enum.map(& &1.placeholder_regex())
|> Enum.reject(&(&1 === :not_supported))
end
end
14 changes: 5 additions & 9 deletions lib/lint/checks/apostrophe_as_single_quote.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,11 @@ defmodule Accent.Lint.Checks.ApostropheAsSingleQuote do
fixed_text = Regex.replace(~r/(\w)(')/, entry.value, "\\1’")

if fixed_text !== entry.value do
[
%Message{
check: :apostrophe_as_single_quote,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
]
else
[]
%Message{
check: :apostrophe_as_single_quote,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
end
end
end
14 changes: 5 additions & 9 deletions lib/lint/checks/double_spaces.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,11 @@ defmodule Accent.Lint.Checks.DoubleSpace do
fixed_text = String.replace(entry.value, " ", " ")

if fixed_text !== entry.value do
[
%Message{
check: :double_spaces,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
]
else
[]
%Message{
check: :double_spaces,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
end
end
end
10 changes: 5 additions & 5 deletions lib/lint/checks/first_letter_case.ex
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,22 @@ defmodule Accent.Lint.Checks.FirstLetterCase do

cond do
value_capitalized === master_capitalized ->
[]
nil

!master_has_first_letter or !value_has_first_letter ->
[]
nil

value_capitalized ->
["", first_letter, rest] = String.split(entry.value, "", parts: 3)
fixed_text = String.downcase(first_letter) <> rest
[to_message(entry, fixed_text)]
to_message(entry, fixed_text)

master_capitalized ->
fixed_text = String.capitalize(entry.value)
[to_message(entry, fixed_text)]
to_message(entry, fixed_text)

true ->
[]
nil
end
end

Expand Down
14 changes: 5 additions & 9 deletions lib/lint/checks/leading_spaces.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,11 @@ defmodule Accent.Lint.Checks.LeadingSpaces do
fixed_text = String.trim_leading(entry.value)

if fixed_text !== entry.value do
[
%Message{
check: :leading_spaces,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
]
else
[]
%Message{
check: :leading_spaces,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
end
end
end
30 changes: 20 additions & 10 deletions lib/lint/checks/placeholder_count.ex
Original file line number Diff line number Diff line change
@@ -1,28 +1,38 @@
defmodule Accent.Lint.Checks.PlaceholderCount do
alias Accent.Lint.Message

@regex Langue.placeholder_regex()

def applicable(_), do: true

def check(entry) do
master_matches = match_placeholders(entry.master_value)
value_matches = match_placeholders(entry.value)
master_matches = master_placeholders(entry.master_value)

if master_matches !== value_matches do
if match_placeholders(master_matches, entry.value) do
[]
else
[
%Message{
check: :placeholder_count,
text: entry.value
}
]
else
[]
end
end

defp match_placeholders(text) do
Langue.format_modules()
|> Enum.map(& &1.placeholder_regex())
|> Enum.reject(&(&1 === :not_supported))
|> Enum.map(&Regex.scan(&1, text))
defp match_placeholders(placeholders, text) do
Enum.reduce_while(placeholders, true, fn {regex, master_match}, _ ->
if Enum.sort(Regex.scan(regex, text)) === Enum.sort(master_match) do
{:cont, true}
else
{:halt, false}
end
end)
end

defp master_placeholders(text) do
@regex
|> Enum.map(&{&1, Regex.scan(&1, text)})
|> Enum.reject(fn {_, match} -> Enum.empty?(match) end)
end
end
14 changes: 5 additions & 9 deletions lib/lint/checks/three_dots_ellipsis.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,11 @@ defmodule Accent.Lint.Checks.ThreeDotsEllipsis do
fixed_text = String.replace(entry.value, "...", "…")

if fixed_text !== entry.value do
[
%Message{
check: :three_dots_ellipsis,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
]
else
[]
%Message{
check: :three_dots_ellipsis,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
end
end
end
14 changes: 5 additions & 9 deletions lib/lint/checks/trailing_space.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,11 @@ defmodule Accent.Lint.Checks.TrailingSpaces do
fixed_text = String.trim_trailing(entry.value)

if fixed_text !== entry.value do
[
%Message{
check: :trailing_space,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
]
else
[]
%Message{
check: :trailing_space,
text: entry.value,
replacement: %Replacement{value: fixed_text, label: fixed_text}
}
end
end
end
12 changes: 4 additions & 8 deletions lib/lint/checks/url_count.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,10 @@ defmodule Accent.Lint.Checks.URLCount do
value_url_count = urls_count(entry.value)

if master_url_count !== value_url_count do
[
%Message{
check: :url_count,
text: entry.value
}
]
else
[]
%Message{
check: :url_count,
text: entry.value
}
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/lint/lint.ex
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ defmodule Accent.Lint do
defp entry_to_messages(entry) do
{entry,
Enum.flat_map(@checks, fn check ->
if check.applicable(entry), do: check.check(entry), else: []
if check.applicable(entry), do: List.wrap(check.check(entry)), else: []
end)}
end
end
21 changes: 21 additions & 0 deletions test/lint/lint_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@ defmodule AccentTest.Lint do
assert messages === []
end

test "lint placeholder simple" do
entry = %Entry{key: "a", value: "nothing", master_value: "{{bar}}", value_type: "string"}
[{_, messages}] = Lint.lint([entry])

assert messages === [%Accent.Lint.Message{check: :placeholder_count, replacement: nil, text: "nothing"}]
end

test "lint placeholder many placeholders" do
entry = %Entry{key: "a", value: "${{bar}}M {{bax}}da", master_value: "{{bar}} M$ {{bax}}", value_type: "string"}
[{_, messages}] = Lint.lint([entry])

assert messages === []
end

test "lint placeholder special chars" do
entry = %Entry{key: "a", value: "${{bar}}M", master_value: "{{bar}} M$", value_type: "string"}
[{_, messages}] = Lint.lint([entry])

assert messages === []
end

test "lint trailing space entry" do
entry = %Entry{key: "a", value: "foo ", master_value: "foo", value_type: "string"}
[{_, messages}] = Lint.lint([entry])
Expand Down
13 changes: 6 additions & 7 deletions webapp/app/pods/components/documents-list/item/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@
.deleteDocumentButton {
opacity: 1;
}

.links {
transform: translate3d(0, 0, 0);
}
}
}

Expand Down Expand Up @@ -214,9 +210,6 @@
flex-wrap: wrap;
flex-shrink: 1;
justify-content: space-between;
transform: translate3d(30px, 0, 0);
transition: 0.2s ease-in-out;
transition-property: transform;

:global(.button) {
margin-right: 6px;
Expand All @@ -233,6 +226,12 @@
transform: translate3d(0, 0, 0);
}

.deleteDocumentButton-container {
display: flex;
align-items: center;
padding-left: 5px;
}

.deleteDocumentButton {
opacity: 0;
padding: 2px 6px !important;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
</LinkTo>
</div>

<div>
<div local-class="deleteDocumentButton-container">
{{#if (get @permissions "delete_document")}}
{{#if this.canDeleteFile}}
<AsyncButton
Expand Down

0 comments on commit d40d32d

Please sign in to comment.