shortcuts/plot/src/utils.go
2024-09-30 19:12:28 +02:00

62 lines
1.1 KiB
Go

//go:build js && wasm
// +build js,wasm
package src
import (
"bytes"
"encoding/base64"
"fmt"
"image/color"
"io"
"syscall/js"
"gonum.org/v1/plot/plotter"
)
func WriterToBase64String(writer io.WriterTo) string {
var buf bytes.Buffer
writer.WriteTo(&buf)
return base64.StdEncoding.EncodeToString(buf.Bytes())
}
func HexToRGBA(hex string) color.RGBA {
var c color.RGBA
switch len(hex) {
case 4:
fmt.Sscanf(hex, "#%1x%1x%1x%1x", &c.R, &c.G, &c.B, &c.A)
c.R *= 17
c.G *= 17
c.B *= 17
c.A = 255
case 7:
fmt.Sscanf(hex, "#%02x%02x%02x", &c.R, &c.G, &c.B)
c.A = 255
case 9:
fmt.Sscanf(hex, "#%02x%02x%02x%02x", &c.R, &c.G, &c.B, &c.A)
default:
fmt.Println("Invalid hex color:", hex)
}
return c
}
func XYFromJSObject(object js.Value) plotter.XYs {
var (
x = object.Get("x")
y = object.Get("y")
)
if x.IsUndefined() || y.IsUndefined() {
return nil
}
return XYFromJSValues(x, y)
}
func XYFromJSValues(x, y js.Value) plotter.XYs {
xy := make(plotter.XYs, x.Length())
for i := range xy {
xy[i].X = x.Index(i).Float()
xy[i].Y = y.Index(i).Float()
}
return xy
}