Skip to content

Commit

Permalink
reuse frontmatter functions
Browse files Browse the repository at this point in the history
  • Loading branch information
hacdias committed Sep 14, 2015
1 parent 0d9c1fa commit 0bf1182
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 94 deletions.
74 changes: 74 additions & 0 deletions frontmatter/frontmatter.go
Original file line number Diff line number Diff line change
@@ -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
}
104 changes: 13 additions & 91 deletions settings/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,45 @@ package settings

import (
"io/ioutil"
"log"
"net/http"
"os"
"sort"

"github.com/hacdias/caddy-hugo/frontmatter"
"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
func Execute(w http.ResponseWriter, r *http.Request) (int, error) {
if r.Method == "POST" {

} else {
frontmatter := getConfigFrontMatter()
language := getConfigFrontMatter()

// 500 if the format of frontmatter can't be defined
if frontmatter == "" {
if language == "" {
log.Print("Configuration frontmatter can't be defined")
return 500, nil
}

config, err := getConfig(frontmatter)
content, err := ioutil.ReadFile("config." + language)

if err != nil {
log.Print(err)
return 500, err
}

// configIndex := getConfigNames(config)
f, err := frontmatter.Pretty(content, language)

cnf := new(settings)
cnf.Settings = getConfigNames(config, "")
if err != nil {
log.Print(err)
return 500, err
}

page := new(page.Page)
page.Title = "Settings"
page.Body = cnf
page.Body = f
return page.Render(w, "settings", "frontmatter")
}

return 200, nil
}

Expand All @@ -65,77 +61,3 @@ func getConfigFrontMatter() string {

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 changes: 2 additions & 2 deletions templates/frontmatter.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<h2>{{ splitCapitalize $value.Name }}</h2>
{{ template "frontmatter" $value.Content }}
{{ else}}
<label for="{{ $value.Master }}_{{ $value.Name }}">{{ splitCapitalize $value.Name }}</label>
<input name="{{ $value.Master }}_{{ $value.Name }}" id="{{ $value.Master }}_{{ $value.Name }}" value="{{ $value.Content }}"></input><br>
<label for="{{ $value.Tag }}">{{ splitCapitalize $value.Name }}</label>
<input name="{{ $value.Tag }}" id="{{ $value.Tag }}" value="{{ $value.Content }}"></input><br>
{{ end }}
{{ end }}
{{ end }}
2 changes: 1 addition & 1 deletion templates/settings.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<div class="content">
<h1>Settings</h1>
<form>
{{ template "frontmatter" .Settings }}
{{ template "frontmatter" . }}
</form>
</div>
{{ end }}
Expand Down

0 comments on commit 0bf1182

Please sign in to comment.