| | | 1 | | namespace OzonOrdersWeb.Areas.Studio2.ViewHelpers; |
| | | 2 | | |
| | | 3 | | public static class StatusColorContrast |
| | | 4 | | { |
| | | 5 | | /// <summary>Контрастный цвет текста для плашки статуса на заданном фоне.</summary> |
| | | 6 | | public static string GetTextColor(string? hexColor) |
| | | 7 | | { |
| | 0 | 8 | | if (string.IsNullOrWhiteSpace(hexColor) |
| | 0 | 9 | | || string.Equals(hexColor.Trim(), "transparent", StringComparison.OrdinalIgnoreCase)) |
| | | 10 | | { |
| | 0 | 11 | | return "#0F172A"; |
| | | 12 | | } |
| | | 13 | | |
| | 0 | 14 | | var hex = hexColor.Trim().TrimStart('#').ToLowerInvariant(); |
| | 0 | 15 | | if (hex.Length == 3) |
| | | 16 | | { |
| | 0 | 17 | | hex = string.Concat(hex[0], hex[0], hex[1], hex[1], hex[2], hex[2]); |
| | | 18 | | } |
| | | 19 | | |
| | 0 | 20 | | if (hex.Length != 6) |
| | | 21 | | { |
| | 0 | 22 | | return "#0F172A"; |
| | | 23 | | } |
| | | 24 | | |
| | | 25 | | try |
| | | 26 | | { |
| | 0 | 27 | | var r = Convert.ToInt32(hex.Substring(0, 2), 16); |
| | 0 | 28 | | var g = Convert.ToInt32(hex.Substring(2, 2), 16); |
| | 0 | 29 | | var b = Convert.ToInt32(hex.Substring(4, 2), 16); |
| | 0 | 30 | | var luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255; |
| | | 31 | | |
| | 0 | 32 | | if (luminance > 0.72) return "#020617"; |
| | 0 | 33 | | if (luminance > 0.5) return "#0F172A"; |
| | 0 | 34 | | return "#FFFFFF"; |
| | | 35 | | } |
| | 0 | 36 | | catch |
| | | 37 | | { |
| | 0 | 38 | | return "#0F172A"; |
| | | 39 | | } |
| | 0 | 40 | | } |
| | | 41 | | } |