mirror of
https://github.com/gohugoio/hugo.git
synced 2025-03-20 21:41:46 +00:00
Fix for page.GetParam() for JSON and TOML maps
Setting per-page Blackfriday angledQuotes did not work with TOML or JSON front matter, but it does work with YAML. It turns out that page.Params("blackfriday") returns type map[interface{}]interface{} for YAML, but type map[string]interface{} for JSON and TOML. This patch updates page.GetParam() to catch the latter, with an error message if page.GetParam() does not recognize a type. A test is also added.
This commit is contained in:
parent
a0c6dba305
commit
803865f870
2 changed files with 18 additions and 1 deletions
|
@ -19,6 +19,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/spf13/hugo/helpers"
|
"github.com/spf13/hugo/helpers"
|
||||||
"github.com/spf13/hugo/parser"
|
"github.com/spf13/hugo/parser"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/hugo/hugofs"
|
"github.com/spf13/hugo/hugofs"
|
||||||
|
@ -522,9 +523,13 @@ func (page *Page) GetParam(key string) interface{} {
|
||||||
return cast.ToTime(v)
|
return cast.ToTime(v)
|
||||||
case []string:
|
case []string:
|
||||||
return helpers.SliceToLower(v.([]string))
|
return helpers.SliceToLower(v.([]string))
|
||||||
case map[interface{}]interface{}:
|
case map[string]interface{}: // JSON and TOML
|
||||||
|
return v
|
||||||
|
case map[interface{}]interface{}: // YAML
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jww.ERROR.Printf("GetParam(\"%s\"): Unknown type %s\n", key, reflect.TypeOf(v))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,12 @@ package hugolib
|
||||||
import (
|
import (
|
||||||
"html/template"
|
"html/template"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/hugo/helpers"
|
"github.com/spf13/hugo/helpers"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -219,6 +221,9 @@ an_integer = 1
|
||||||
a_float = 1.3
|
a_float = 1.3
|
||||||
a_bool = false
|
a_bool = false
|
||||||
a_date = 1979-05-27T07:32:00Z
|
a_date = 1979-05-27T07:32:00Z
|
||||||
|
|
||||||
|
[a_table]
|
||||||
|
a_key = "a_value"
|
||||||
+++
|
+++
|
||||||
Front Matter with various frontmatter types`
|
Front Matter with various frontmatter types`
|
||||||
|
|
||||||
|
@ -499,6 +504,13 @@ func TestDifferentFrontMatterVarTypes(t *testing.T) {
|
||||||
if page.GetParam("a_date") != dateval {
|
if page.GetParam("a_date") != dateval {
|
||||||
t.Errorf("frontmatter not handling dates correctly should be %s, got: %s", dateval, page.GetParam("a_date"))
|
t.Errorf("frontmatter not handling dates correctly should be %s, got: %s", dateval, page.GetParam("a_date"))
|
||||||
}
|
}
|
||||||
|
param := page.GetParam("a_table")
|
||||||
|
if param == nil {
|
||||||
|
t.Errorf("frontmatter not handling tables correctly should be type of %v, got: type of %v", reflect.TypeOf(page.Params["a_table"]), reflect.TypeOf(param))
|
||||||
|
}
|
||||||
|
if cast.ToStringMap(param)["a_key"] != "a_value" {
|
||||||
|
t.Errorf("frontmatter not handling values inside a table correctly should be %s, got: %s", "a_value", cast.ToStringMap(page.Params["a_table"])["a_key"])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDegenerateInvalidFrontMatterLeadingWhitespace(t *testing.T) {
|
func TestDegenerateInvalidFrontMatterLeadingWhitespace(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue