diff --git a/src/Handler/Utils/Widgets.hs b/src/Handler/Utils/Widgets.hs index 88423194e..124b14ad1 100644 --- a/src/Handler/Utils/Widgets.hs +++ b/src/Handler/Utils/Widgets.hs @@ -94,12 +94,19 @@ nameHtml displayName surname | null surname = toHtml displayName | otherwise = case reverse $ T.splitOn surname displayName of [_notContained] - | (suffix:prefixes) <- reverse $ T.splitOn (T.toTitle surname) (T.toTitle displayName) -> + | (suffix:prefixes) <- reverse $ T.splitOn (T.toTitle surname) (T.toTitle displayName), notNull prefixes -> let prefix = T.intercalate surname $ reverse prefixes in [shamlet|$newline never - #{prefix} + #{prefix} # #{surname} - #{suffix} + \ #{suffix} + |] + | (suffix:prefixes) <- reverse $ T.splitOn (fullyNormalize surname) (fullyNormalize displayName), notNull prefixes -> + let prefix = T.intercalate surname $ reverse prefixes + in [shamlet|$newline never + #{prefix} # + #{surname} + \ #{suffix} |] | otherwise -> [shamlet|$newline never #{displayName} ( @@ -108,11 +115,14 @@ nameHtml displayName surname (suffix:prefixes) -> let prefix = T.intercalate surname $ reverse prefixes in [shamlet|$newline never - #{prefix} + #{prefix} # #{surname} - #{suffix} + \ #{suffix} |] [] -> error "Data.Text.splitOn returned empty list in violation of specification." + where + fullyNormalize :: Text -> Text + fullyNormalize = T.toTitle . T.unwords . map text2asciiAlphaNum . T.words nameHtml' :: HasUser u => u -> Html nameHtml' u = nameHtml (u ^. _userDisplayName) (u ^. _userSurname)