93 lines
1.2 KiB
Go
93 lines
1.2 KiB
Go
package views
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func toPerc(f float64) string {
|
|
return fmt.Sprintf("%.0f%%", f)
|
|
}
|
|
|
|
func deltas(c, n string) string {
|
|
c, n = strings.TrimSpace(c), strings.TrimSpace(n)
|
|
if c == "n/a" {
|
|
return n
|
|
}
|
|
|
|
if i, ok := numerical(c); ok {
|
|
if j, ok := numerical(n); ok {
|
|
switch {
|
|
case i < j:
|
|
return plus(n)
|
|
case i > j:
|
|
return minus(n)
|
|
default:
|
|
return n
|
|
}
|
|
}
|
|
return n
|
|
}
|
|
|
|
if isAlpha(c) {
|
|
if strings.Contains(c, "(") {
|
|
return n
|
|
}
|
|
switch strings.Compare(c, n) {
|
|
case -1:
|
|
return plus(n)
|
|
case 1:
|
|
return minus(n)
|
|
default:
|
|
return n
|
|
}
|
|
}
|
|
|
|
if len(c) == 0 {
|
|
return n
|
|
}
|
|
|
|
switch strings.Compare(c, n) {
|
|
case 1, -1:
|
|
return delta(n)
|
|
default:
|
|
return n
|
|
}
|
|
}
|
|
|
|
func isAlpha(s string) bool {
|
|
if len(s) == 0 {
|
|
return false
|
|
}
|
|
|
|
if _, err := strconv.Atoi(string(s[0])); err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func numerical(s string) (int, bool) {
|
|
n, err := strconv.Atoi(s)
|
|
if err != nil {
|
|
return 0, false
|
|
}
|
|
return n, true
|
|
}
|
|
|
|
func delta(s string) string {
|
|
return suffix(s, "𝜟")
|
|
}
|
|
|
|
func plus(s string) string {
|
|
return suffix(s, "⬆")
|
|
}
|
|
|
|
func minus(s string) string {
|
|
return suffix(s, "⬇︎")
|
|
}
|
|
|
|
func suffix(s, su string) string {
|
|
return s + su
|
|
}
|