Register all media types when in server mode
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 4 Apr 2017 16:05:19 +0000 (18:05 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 4 Apr 2017 16:05:19 +0000 (18:05 +0200)
Fixes #3274

commands/server.go
hugolib/site.go
media/mediaType.go

index ae51d075d2428cab474725c98976ef556f40b079..0e719e17df9e5eba4d4b1424c4c9fa27df3d33b2 100644 (file)
@@ -24,8 +24,6 @@ import (
        "strings"
        "time"
 
-       "mime"
-
        "github.com/spf13/afero"
        "github.com/spf13/cobra"
        "github.com/spf13/hugo/config"
@@ -95,9 +93,6 @@ func init() {
 
        serverCmd.RunE = server
 
-       mime.AddExtensionType(".json", "application/json; charset=utf-8")
-       mime.AddExtensionType(".css", "text/css; charset=utf-8")
-
 }
 
 func server(cmd *cobra.Command, args []string) error {
@@ -168,6 +163,10 @@ func server(cmd *cobra.Command, args []string) error {
                return err
        }
 
+       for _, s := range Hugo.Sites {
+               s.RegisterMediaTypes()
+       }
+
        // Watch runs its own server as part of the routine
        if serverWatch {
                watchDirs := c.getDirList()
index 7b5d0d1566b7eacab429c79138c607ada1e9bc5d..aefc8c94008e3ed72cefca5b2f34cb46dd9d59f1 100644 (file)
@@ -18,6 +18,7 @@ import (
        "fmt"
        "html/template"
        "io"
+       "mime"
        "net/url"
        "os"
        "path/filepath"
@@ -610,6 +611,15 @@ type whatChanged struct {
        other  bool
 }
 
+// RegisterMediaTypes will register the Site's media types in the mime
+// package, so it will behave correctly with Hugo's built-in server.
+func (s *Site) RegisterMediaTypes() {
+       for _, mt := range s.mediaTypesConfig {
+               // The last one will win if there are any duplicates.
+               mime.AddExtensionType("."+mt.Suffix, mt.Type()+"; charset=utf-8")
+       }
+}
+
 // reBuild partially rebuilds a site given the filesystem events.
 // It returns whetever the content source was changed.
 func (s *Site) reProcess(events []fsnotify.Event) (whatChanged, error) {
index bc54986bebd5763a9e5a7d11073b63e320932914..f64f51253977032af7b491325cd964b325e2558b 100644 (file)
@@ -177,5 +177,3 @@ func DecodeTypes(maps ...map[string]interface{}) (Types, error) {
 
        return m, nil
 }
-
-// TODO(bep) output mime.AddExtensionType