From 39a6f128f107befc60a80252239092d48e508968 Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Wed, 22 Apr 2026 21:40:40 +0300 Subject: [PATCH] fix(viewer): serve static js with script mime type --- bible | 2 +- viewer/handler_test.go | 19 +++++++++++++++++++ web/embed.go | 7 +++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/bible b/bible index 688b87e..d2600f1 160000 --- a/bible +++ b/bible @@ -1 +1 @@ -Subproject commit 688b87e98deed5fadd71e10e123073640d92c15a +Subproject commit d2600f12799451cd5233a8d2c0e3235d1e7d25ab diff --git a/viewer/handler_test.go b/viewer/handler_test.go index 2100dee..e7d8e01 100644 --- a/viewer/handler_test.go +++ b/viewer/handler_test.go @@ -82,3 +82,22 @@ func TestStandaloneHandlerRootShowsUploadForm(t *testing.T) { t.Fatalf("expected standalone handler root to include upload form") } } + +func TestStaticJSUsesScriptContentType(t *testing.T) { + handler := NewHandler(HandlerOptions{Title: "Reanimator Chart"}) + + req := httptest.NewRequest(http.MethodGet, "/static/view.js", nil) + rec := httptest.NewRecorder() + handler.ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusOK) + } + contentType := rec.Header().Get("Content-Type") + if !strings.Contains(contentType, "javascript") { + t.Fatalf("Content-Type = %q, want javascript MIME type", contentType) + } + if !strings.Contains(rec.Body.String(), "DOMContentLoaded") { + t.Fatalf("expected static JS asset body to be served") + } +} diff --git a/web/embed.go b/web/embed.go index 7c8ed20..6cd6d08 100644 --- a/web/embed.go +++ b/web/embed.go @@ -4,6 +4,7 @@ import ( "embed" "html/template" "io/fs" + "mime" "net/http" "strings" ) @@ -19,6 +20,12 @@ var pageTemplate = template.Must(template.New("view.html").Funcs(template.FuncMa var uploadTemplate = template.Must(template.New("upload.html").ParseFS(content, "templates/upload.html")) +func init() { + if err := mime.AddExtensionType(".js", "text/javascript; charset=utf-8"); err != nil { + panic(err) + } +} + func Render(data any) ([]byte, error) { var out strings.Builder if err := pageTemplate.ExecuteTemplate(&out, "view.html", data); err != nil {