utils.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package feed
  2. import (
  3. "errors"
  4. "fmt"
  5. "net/url"
  6. "regexp"
  7. "slices"
  8. "strings"
  9. )
  10. var (
  11. ErrNoContent = errors.New("failed to retrieve any content")
  12. ErrPartialContent = errors.New("failed to retrieve some of the content")
  13. )
  14. func percentChange(current, previous float64) float64 {
  15. return (current/previous - 1) * 100
  16. }
  17. func extractDomainFromUrl(u string) string {
  18. if u == "" {
  19. return ""
  20. }
  21. parsed, err := url.Parse(u)
  22. if err != nil {
  23. return ""
  24. }
  25. return strings.TrimPrefix(strings.ToLower(parsed.Host), "www.")
  26. }
  27. func SvgPolylineCoordsFromYValues(width float64, height float64, values []float64) string {
  28. if len(values) < 2 {
  29. return ""
  30. }
  31. verticalPadding := height * 0.02
  32. height -= verticalPadding * 2
  33. coordinates := make([]string, len(values))
  34. distanceBetweenPoints := width / float64(len(values)-1)
  35. min := slices.Min(values)
  36. max := slices.Max(values)
  37. for i := range values {
  38. coordinates[i] = fmt.Sprintf(
  39. "%.2f,%.2f",
  40. float64(i)*distanceBetweenPoints,
  41. ((max-values[i])/(max-min))*height+verticalPadding,
  42. )
  43. }
  44. return strings.Join(coordinates, " ")
  45. }
  46. func maybeCopySliceWithoutZeroValues[T int | float64](values []T) []T {
  47. if len(values) == 0 {
  48. return values
  49. }
  50. for i := range values {
  51. if values[i] != 0 {
  52. continue
  53. }
  54. c := make([]T, 0, len(values)-1)
  55. for i := range values {
  56. if values[i] != 0 {
  57. c = append(c, values[i])
  58. }
  59. }
  60. return c
  61. }
  62. return values
  63. }
  64. var urlSchemePattern = regexp.MustCompile(`^[a-z]+:\/\/`)
  65. func stripURLScheme(url string) string {
  66. return urlSchemePattern.ReplaceAllString(url, "")
  67. }