reuse frontmatter functions
parent
0d9c1fa6ef
commit
0bf1182c91
|
@ -0,0 +1,74 @@
|
||||||
|
package frontmatter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/hacdias/caddy-hugo/utils"
|
||||||
|
"github.com/spf13/hugo/parser"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Pretty creates a new FrontMatter object
|
||||||
|
func Pretty(content []byte, language string) (interface{}, error) {
|
||||||
|
var err error
|
||||||
|
var c interface{}
|
||||||
|
|
||||||
|
if language == "yaml" {
|
||||||
|
c, err = parser.HandleYAMLMetaData(content)
|
||||||
|
} else if language == "json" {
|
||||||
|
c, err = parser.HandleJSONMetaData(content)
|
||||||
|
} else if language == "toml" {
|
||||||
|
c, err = parser.HandleTOMLMetaData(content)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return rawToPretty(c, ""), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type frontmatter struct {
|
||||||
|
Name string
|
||||||
|
Tag string
|
||||||
|
Content interface{}
|
||||||
|
SubContent bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func rawToPretty(config interface{}, master string) interface{} {
|
||||||
|
var mapsNames []string
|
||||||
|
var stringsNames []string
|
||||||
|
|
||||||
|
for index, element := range config.(map[string]interface{}) {
|
||||||
|
if utils.IsMap(element) {
|
||||||
|
mapsNames = append(mapsNames, index)
|
||||||
|
} else {
|
||||||
|
stringsNames = append(stringsNames, index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(mapsNames)
|
||||||
|
sort.Strings(stringsNames)
|
||||||
|
names := append(stringsNames, mapsNames...)
|
||||||
|
|
||||||
|
settings := make([]interface{}, len(names))
|
||||||
|
|
||||||
|
for index := range names {
|
||||||
|
c := new(frontmatter)
|
||||||
|
c.Name = names[index]
|
||||||
|
c.Tag = master + "_" + names[index]
|
||||||
|
c.SubContent = false
|
||||||
|
|
||||||
|
i := config.(map[string]interface{})[names[index]]
|
||||||
|
|
||||||
|
if utils.IsMap(i) {
|
||||||
|
c.Content = rawToPretty(i, c.Name)
|
||||||
|
c.SubContent = true
|
||||||
|
} else {
|
||||||
|
c.Content = i
|
||||||
|
}
|
||||||
|
|
||||||
|
settings[index] = c
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings
|
||||||
|
}
|
|
@ -2,49 +2,45 @@ package settings
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
|
||||||
|
|
||||||
|
"github.com/hacdias/caddy-hugo/frontmatter"
|
||||||
"github.com/hacdias/caddy-hugo/page"
|
"github.com/hacdias/caddy-hugo/page"
|
||||||
"github.com/hacdias/caddy-hugo/utils"
|
|
||||||
"github.com/spf13/hugo/parser"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type settings struct {
|
|
||||||
Settings interface{}
|
|
||||||
Keys []string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute the page
|
// Execute the page
|
||||||
func Execute(w http.ResponseWriter, r *http.Request) (int, error) {
|
func Execute(w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
if r.Method == "POST" {
|
if r.Method == "POST" {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
frontmatter := getConfigFrontMatter()
|
language := getConfigFrontMatter()
|
||||||
|
|
||||||
// 500 if the format of frontmatter can't be defined
|
if language == "" {
|
||||||
if frontmatter == "" {
|
log.Print("Configuration frontmatter can't be defined")
|
||||||
return 500, nil
|
return 500, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
config, err := getConfig(frontmatter)
|
content, err := ioutil.ReadFile("config." + language)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
return 500, err
|
return 500, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// configIndex := getConfigNames(config)
|
f, err := frontmatter.Pretty(content, language)
|
||||||
|
|
||||||
cnf := new(settings)
|
if err != nil {
|
||||||
cnf.Settings = getConfigNames(config, "")
|
log.Print(err)
|
||||||
|
return 500, err
|
||||||
|
}
|
||||||
|
|
||||||
page := new(page.Page)
|
page := new(page.Page)
|
||||||
page.Title = "Settings"
|
page.Title = "Settings"
|
||||||
page.Body = cnf
|
page.Body = f
|
||||||
return page.Render(w, "settings", "frontmatter")
|
return page.Render(w, "settings", "frontmatter")
|
||||||
}
|
}
|
||||||
|
|
||||||
return 200, nil
|
return 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,77 +61,3 @@ func getConfigFrontMatter() string {
|
||||||
|
|
||||||
return frontmatter
|
return frontmatter
|
||||||
}
|
}
|
||||||
|
|
||||||
func getConfigFileContent(frontmatter string) []byte {
|
|
||||||
file, err := ioutil.ReadFile("config." + frontmatter)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
// there were a problem opening the file
|
|
||||||
return []byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return file
|
|
||||||
}
|
|
||||||
|
|
||||||
// make it generic to frontmatter. everything bellow -> new file
|
|
||||||
func getConfig(frontmatter string) (interface{}, error) {
|
|
||||||
content := getConfigFileContent(frontmatter)
|
|
||||||
// config := []string{}
|
|
||||||
|
|
||||||
// get the config into a map
|
|
||||||
if frontmatter == "yaml" {
|
|
||||||
return parser.HandleYAMLMetaData(content)
|
|
||||||
} else if frontmatter == "json" {
|
|
||||||
return parser.HandleJSONMetaData(content)
|
|
||||||
} else if frontmatter == "toml" {
|
|
||||||
return parser.HandleTOMLMetaData(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
return []string{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type conf struct {
|
|
||||||
Name string
|
|
||||||
Master string
|
|
||||||
Content interface{}
|
|
||||||
SubContent bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func getConfigNames(config interface{}, master string) interface{} {
|
|
||||||
var mapsNames []string
|
|
||||||
var stringsNames []string
|
|
||||||
|
|
||||||
for index, element := range config.(map[string]interface{}) {
|
|
||||||
if utils.IsMap(element) {
|
|
||||||
mapsNames = append(mapsNames, index)
|
|
||||||
} else {
|
|
||||||
stringsNames = append(stringsNames, index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(mapsNames)
|
|
||||||
sort.Strings(stringsNames)
|
|
||||||
names := append(stringsNames, mapsNames...)
|
|
||||||
|
|
||||||
settings := make([]interface{}, len(names))
|
|
||||||
|
|
||||||
for index := range names {
|
|
||||||
c := new(conf)
|
|
||||||
c.Name = names[index]
|
|
||||||
c.Master = master
|
|
||||||
c.SubContent = false
|
|
||||||
|
|
||||||
i := config.(map[string]interface{})[names[index]]
|
|
||||||
|
|
||||||
if utils.IsMap(i) {
|
|
||||||
c.Content = getConfigNames(i, c.Name)
|
|
||||||
c.SubContent = true
|
|
||||||
} else {
|
|
||||||
c.Content = i
|
|
||||||
}
|
|
||||||
|
|
||||||
settings[index] = c
|
|
||||||
}
|
|
||||||
|
|
||||||
return settings
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
<h2>{{ splitCapitalize $value.Name }}</h2>
|
<h2>{{ splitCapitalize $value.Name }}</h2>
|
||||||
{{ template "frontmatter" $value.Content }}
|
{{ template "frontmatter" $value.Content }}
|
||||||
{{ else}}
|
{{ else}}
|
||||||
<label for="{{ $value.Master }}_{{ $value.Name }}">{{ splitCapitalize $value.Name }}</label>
|
<label for="{{ $value.Tag }}">{{ splitCapitalize $value.Name }}</label>
|
||||||
<input name="{{ $value.Master }}_{{ $value.Name }}" id="{{ $value.Master }}_{{ $value.Name }}" value="{{ $value.Content }}"></input><br>
|
<input name="{{ $value.Tag }}" id="{{ $value.Tag }}" value="{{ $value.Content }}"></input><br>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Settings</h1>
|
<h1>Settings</h1>
|
||||||
<form>
|
<form>
|
||||||
{{ template "frontmatter" .Settings }}
|
{{ template "frontmatter" . }}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
Loading…
Reference in New Issue