update frontmatter

This commit is contained in:
Henrique Dias 2015-09-17 11:32:27 +01:00
parent d061c26caf
commit 8f31f5896c
9 changed files with 242 additions and 996 deletions

View File

@ -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

12
assets/js/app.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -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) {

View File

@ -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
*/
}

View File

@ -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"
}
}
}

View File

@ -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 }}

View File

@ -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