update frontmatter
This commit is contained in:
parent
d061c26caf
commit
8f31f5896c
|
@ -67,11 +67,12 @@ module.exports = function(grunt) {
|
|||
uglify: {
|
||||
target: {
|
||||
files: {
|
||||
'assets/js/app.min.js': ['node_modules/jquery/dist/jquery.js',
|
||||
'node_modules/perfect-scrollbar/dist/js/perfect-scrollbar.jquery.js',
|
||||
'node_modules/showdown/dist/showdown.js',
|
||||
'node_modules/noty/js/noty/packaged/jquery.noty.packaged.js',
|
||||
'assets/js/app.min.js': ['node_modules/jquery/dist/jquery.min.js',
|
||||
'node_modules/perfect-scrollbar/dist/js/min/perfect-scrollbar.jquery.min.js',
|
||||
'node_modules/showdown/dist/showdown.min.js',
|
||||
'node_modules/noty/js/noty/packaged/jquery.noty.packaged.min.js',
|
||||
'node_modules/jquery-pjax/jquery.pjax.js',
|
||||
'node_modules/jquery-serializejson/jquery.serializejson.min.js',
|
||||
'assets/js/src/**/*.js'
|
||||
]
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -38,12 +38,16 @@ $(document).ready(function() {
|
|||
});
|
||||
|
||||
$('form').submit(function(event) {
|
||||
var data = JSON.stringify($(this).serializeForm()),
|
||||
event.preventDefault();
|
||||
|
||||
var data = $(this).serializeJSON(),
|
||||
url = $(this).attr('action'),
|
||||
button = $(this).find("input[type=submit]:focus"),
|
||||
action = button.val();
|
||||
|
||||
$.ajax({
|
||||
console.log(data);
|
||||
|
||||
/*$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
data: data,
|
||||
|
@ -64,9 +68,7 @@ $(document).ready(function() {
|
|||
type: 'error'
|
||||
});
|
||||
console.log(data);
|
||||
});
|
||||
|
||||
event.preventDefault();
|
||||
}); */
|
||||
});
|
||||
|
||||
$("#logout").click(function(e) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package frontmatter
|
||||
|
||||
import (
|
||||
"log"
|
||||
"sort"
|
||||
|
||||
"github.com/hacdias/caddy-hugo/utils"
|
||||
|
@ -16,18 +17,210 @@ func Pretty(content []byte) (interface{}, error) {
|
|||
return []string{}, err
|
||||
}
|
||||
|
||||
return rawToPretty(front, "", ""), nil
|
||||
object := new(frontmatter)
|
||||
object.Type = "object"
|
||||
|
||||
return rawToPretty(front, object), nil
|
||||
}
|
||||
|
||||
type frontmatter struct {
|
||||
Name string
|
||||
Title string
|
||||
Content interface{}
|
||||
Parent string
|
||||
Type string
|
||||
Parent *frontmatter
|
||||
}
|
||||
|
||||
func rawToPretty(config interface{}, master string, parent string) interface{} {
|
||||
if utils.IsSlice(config) {
|
||||
func sortByTitle(config []*frontmatter) {
|
||||
keys := make([]string, len(config))
|
||||
positionByTitle := make(map[string]int)
|
||||
|
||||
for index, element := range config {
|
||||
keys[index] = element.Title
|
||||
positionByTitle[element.Title] = index
|
||||
}
|
||||
|
||||
sort.Strings(keys)
|
||||
cnf := make([]*frontmatter, len(config))
|
||||
|
||||
for index, title := range keys {
|
||||
cnf[index] = config[positionByTitle[title]]
|
||||
}
|
||||
|
||||
for index := range config {
|
||||
config[index] = cnf[index]
|
||||
}
|
||||
}
|
||||
|
||||
func rawToPretty(config interface{}, parent *frontmatter) interface{} {
|
||||
objects := []*frontmatter{}
|
||||
arrays := []*frontmatter{}
|
||||
fields := []*frontmatter{}
|
||||
|
||||
if parent.Type == "array" {
|
||||
for index, element := range config.([]interface{}) {
|
||||
c := new(frontmatter)
|
||||
c.Parent = parent
|
||||
|
||||
if utils.IsMap(element) {
|
||||
c.Type = "object"
|
||||
|
||||
if parent.Name == "" {
|
||||
c.Name = c.Title
|
||||
} else {
|
||||
c.Name = parent.Name + "[" + c.Name + "]"
|
||||
}
|
||||
|
||||
c.Content = rawToPretty(config.([]interface{})[index], c)
|
||||
objects = append(objects, c)
|
||||
} else if utils.IsSlice(element) {
|
||||
c.Type = "array"
|
||||
c.Name = parent.Name + "[" + c.Name + "]"
|
||||
c.Content = rawToPretty(config.([]interface{})[index], c)
|
||||
|
||||
arrays = append(arrays, c)
|
||||
} else {
|
||||
// TODO: add string, boolean, number
|
||||
c.Type = "string"
|
||||
c.Name = parent.Name + "[]"
|
||||
c.Title = element.(string)
|
||||
c.Content = config.([]interface{})[index]
|
||||
fields = append(fields, c)
|
||||
}
|
||||
}
|
||||
} else if parent.Type == "object" {
|
||||
for name, element := range config.(map[string]interface{}) {
|
||||
c := new(frontmatter)
|
||||
c.Title = name
|
||||
c.Parent = parent
|
||||
|
||||
if utils.IsMap(element) {
|
||||
c.Type = "object"
|
||||
|
||||
if parent.Name == "" {
|
||||
c.Name = c.Title
|
||||
} else {
|
||||
c.Name = parent.Name + "[" + c.Title + "]"
|
||||
}
|
||||
|
||||
c.Content = rawToPretty(config.(map[string]interface{})[name], c)
|
||||
objects = append(objects, c)
|
||||
} else if utils.IsSlice(element) {
|
||||
c.Type = "array"
|
||||
|
||||
if parent.Name == "" {
|
||||
c.Name = name
|
||||
} else {
|
||||
c.Name = parent.Name + "[" + c.Name + "]"
|
||||
}
|
||||
|
||||
c.Content = rawToPretty(config.(map[string]interface{})[c.Title], c)
|
||||
|
||||
arrays = append(arrays, c)
|
||||
} else {
|
||||
// TODO: add string, boolean, number
|
||||
c.Type = "string"
|
||||
|
||||
if parent.Name == "" {
|
||||
c.Name = name
|
||||
} else {
|
||||
c.Name = parent.Name + "[" + name + "]"
|
||||
}
|
||||
|
||||
c.Content = element
|
||||
fields = append(fields, c)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Panic("Parent type not allowed.")
|
||||
}
|
||||
|
||||
sortByTitle(objects)
|
||||
sortByTitle(arrays)
|
||||
sortByTitle(fields)
|
||||
|
||||
settings := []*frontmatter{}
|
||||
settings = append(settings, fields...)
|
||||
settings = append(settings, arrays...)
|
||||
settings = append(settings, objects...)
|
||||
|
||||
return settings
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
objects := make([]interface{}, len(objectsNames))
|
||||
|
||||
for index := range objectsNames {
|
||||
c := new(frontmatter)
|
||||
c.Type = "object"
|
||||
c.Title = objectsNames[index]
|
||||
|
||||
if parent.Name == "" {
|
||||
c.Name = c.Title
|
||||
} else {
|
||||
c.Name = parent.Name + "[" + c.Name + "]"
|
||||
}
|
||||
|
||||
c.Content = rawToPretty(config.(map[string]interface{})[c.Title], c)
|
||||
log.Print("\n\nObject Name:\n")
|
||||
log.Print(c.Name)
|
||||
objects[index] = c
|
||||
}
|
||||
|
||||
arrays := make([]interface{}, len(arraysNames))
|
||||
|
||||
for index := range arraysNames {
|
||||
c := new(frontmatter)
|
||||
c.Type = "array"
|
||||
c.Title = arraysNames[index]
|
||||
c.Name = parent.Name + c.Title + "[]"
|
||||
c.Content = rawToPretty(config.(map[string]interface{})[c.Title], c)
|
||||
log.Print("\n\nArray Name:\n")
|
||||
log.Print(c.Name)
|
||||
arrays[index] = c
|
||||
}
|
||||
|
||||
/*strings := make([]interface{}, len(stringsNames))*/
|
||||
|
||||
/*
|
||||
for index := range stringsNames {
|
||||
c := new(frontmatter)
|
||||
c.Title = stringsNames[index]
|
||||
c.Name = giveName(c.Title, parent)
|
||||
|
||||
log.Print(c.Name)
|
||||
}
|
||||
|
||||
/* names := append(stringsNames, mapsNames...)
|
||||
|
||||
settings := make([]interface{}, len(names))
|
||||
|
||||
for index := range names {
|
||||
c := new(frontmatter)
|
||||
c.Name = names[index]
|
||||
c.Parent = parent
|
||||
|
||||
i := config.(map[string]interface{})[names[index]]
|
||||
|
||||
if utils.IsMap(i) {
|
||||
c.Type = "object"
|
||||
c.Content = rawToPretty(i, c.Name, "object")
|
||||
} else if utils.IsSlice(i) {
|
||||
c.Type = "array"
|
||||
c.Content = rawToPretty(i, c.Name, "array")
|
||||
} else {
|
||||
c.Type = "text"
|
||||
c.Content = i
|
||||
}
|
||||
|
||||
settings[index] = c
|
||||
}
|
||||
*/
|
||||
// settings := append(strings, slices..., maps...)
|
||||
|
||||
/*if utils.IsSlice(config) {
|
||||
settings := make([]interface{}, len(config.([]interface{})))
|
||||
|
||||
// TODO: improve this function
|
||||
|
@ -54,43 +247,5 @@ func rawToPretty(config interface{}, master string, parent string) interface{} {
|
|||
return settings
|
||||
}
|
||||
|
||||
var mapsNames []string
|
||||
var stringsNames []string
|
||||
|
||||
for index, element := range config.(map[string]interface{}) {
|
||||
if utils.IsMap(element) || utils.IsSlice(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.Parent = parent
|
||||
|
||||
i := config.(map[string]interface{})[names[index]]
|
||||
|
||||
if utils.IsMap(i) {
|
||||
c.Type = "object"
|
||||
c.Content = rawToPretty(i, c.Name, "object")
|
||||
} else if utils.IsSlice(i) {
|
||||
c.Type = "array"
|
||||
c.Content = rawToPretty(i, c.Name, "array")
|
||||
} else {
|
||||
c.Type = "text"
|
||||
c.Content = i
|
||||
}
|
||||
|
||||
settings[index] = c
|
||||
}
|
||||
|
||||
return settings
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"animate.css": "^3.4.0",
|
||||
"font-awesome": "^4.4.0",
|
||||
"jquery": "^2.1.4",
|
||||
"jquery-serializejson": "^2.5.0",
|
||||
"normalize.css": "^3.0.3",
|
||||
"noty": "^2.3.6",
|
||||
"perfect-scrollbar": "^0.6.4",
|
||||
|
@ -35,4 +36,4 @@
|
|||
"grunt-contrib-watch": "^0.6.1",
|
||||
"napa": "^1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{{ define "frontmatter" }}
|
||||
{{ range $key, $value := . }}
|
||||
{{ if or (eq $value.Type "object") (eq $value.Type "array") }}
|
||||
<fieldset name="{{ $value.Name }}" type="{{ $value.Type }}">
|
||||
<h3>{{ splitCapitalize $value.Name }} <button class="add"><i class="fa fa-plus"></i></button></h3>
|
||||
{{ template "frontmatter" $value.Content }}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<h3>{{ splitCapitalize $value.Title }} <button class="add"><i class="fa fa-plus"></i></button></h3>
|
||||
{{ template "frontmatter" $value.Content }}
|
||||
</fieldset>
|
||||
{{ else }}
|
||||
{{ if not (eq $value.Parent "array") }}
|
||||
<label for="{{ $value.Name }}">{{ splitCapitalize $value.Name }}</label>
|
||||
{{ if not (eq $value.Parent.Type "array") }}
|
||||
<label for="{{ $value.Name }}">{{ splitCapitalize $value.Title }}</label>
|
||||
{{ end }}
|
||||
<input name="{{ $value.Name }}" id="{{ $value.Name }}" value="{{ $value.Content }}"></input><br>
|
||||
{{ end }}
|
||||
|
|
|
@ -36,6 +36,22 @@ func IsArray(sth interface{}) bool {
|
|||
return reflect.ValueOf(sth).Kind() == reflect.Array
|
||||
}
|
||||
|
||||
func IsString(sth interface{}) bool {
|
||||
return reflect.ValueOf(sth).Kind() == reflect.String
|
||||
}
|
||||
|
||||
func IsInt(sth interface{}) bool {
|
||||
return reflect.ValueOf(sth).Kind() == reflect.Int
|
||||
}
|
||||
|
||||
func IsBool(sth interface{}) bool {
|
||||
return reflect.ValueOf(sth).Kind() == reflect.Bool
|
||||
}
|
||||
|
||||
func IsInterface(sth interface{}) bool {
|
||||
return reflect.ValueOf(sth).Kind() == reflect.Interface
|
||||
}
|
||||
|
||||
func SplitCapitalize(name string) string {
|
||||
var words []string
|
||||
l := 0
|
||||
|
|
Loading…
Reference in New Issue