Update wasm
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-01-20 20:32:57 +01:00
parent d2ac081d5e
commit f05c4bbcc7

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"syscall/js"
"github.com/go-pdf/fpdf"
"github.com/thegrumpylion/jsref"
"covergen/pkg/covergen"
@@ -70,6 +71,18 @@ func settingsFromValue(arg js.Value) (*covergen.CoverSettings, error) {
}, nil
}
func pdfToJs(pdf *fpdf.Fpdf) (js.Value, error) {
var buf bytes.Buffer
if err := pdf.Output(&buf); err != nil {
return js.Null(), fmt.Errorf("failed to write pdf: %w", err)
}
s := buf.Bytes()
ta := js.Global().Get("Uint8Array").New(len(s))
js.CopyBytesToJS(ta, s)
return ta, nil
}
func generateCover(this js.Value, args []js.Value) interface{} {
defer func() {
if r := recover(); r != nil {
@@ -96,18 +109,61 @@ func generateCover(this js.Value, args []js.Value) interface{} {
return jsmap{"error": err.Error()}
}
var buf bytes.Buffer
if err = pdf.Output(&buf); err != nil {
jsBytes, err := pdfToJs(pdf)
if err != nil {
return jsmap{"error": err.Error()}
}
return jsBytes
}
func generateSplitCover(this js.Value, args []js.Value) interface{} {
defer func() {
if r := recover(); r != nil {
fmt.Println("recovered", r)
}
}()
if len(args) != 1 {
return jsmap{"error": "missing argument"}
}
arg := args[0]
if arg.Type() != js.TypeObject {
return jsmap{"error": "expected object"}
}
settings, err := settingsFromValue(arg)
if err != nil {
return jsmap{"error": err.Error()}
}
s := buf.Bytes()
ta := js.Global().Get("Uint8Array").New(len(s))
js.CopyBytesToJS(ta, s)
return ta
front, err := covergen.GenerateFrontCover(*settings)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render front: %s", err.Error())}
}
back, err := covergen.GenerateBackCover(*settings)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render back: %s", err.Error())}
}
frontJSBytes, err := pdfToJs(front)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render front: %s", err.Error())}
}
backJSBytes, err := pdfToJs(back)
if err != nil {
return jsmap{"error": fmt.Sprintf("failed to render back: %s", err.Error())}
}
return jsmap{
"front": frontJSBytes,
"back": backJSBytes,
}
}
func main() {
js.Global().Set("covergen", js.FuncOf(generateCover))
js.Global().Set("generateCover", js.FuncOf(generateCover))
js.Global().Set("generateSplitCover", js.FuncOf(generateSplitCover))
<-make(chan bool)
}