summaryrefslogtreecommitdiff
path: root/cmd/ponzu/generate.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ponzu/generate.go')
-rw-r--r--cmd/ponzu/generate.go90
1 files changed, 82 insertions, 8 deletions
diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go
index e98e3fe..a4a9d2c 100644
--- a/cmd/ponzu/generate.go
+++ b/cmd/ponzu/generate.go
@@ -18,8 +18,10 @@ type generateType struct {
type generateField struct {
Name string
+ Initial string
TypeName string
JSONName string
+ View string
}
// blog title:string Author:string PostCategory:string content:string some_thing:int
@@ -31,10 +33,14 @@ func parseType(args []string) (generateType, error) {
fields := args[1:]
for _, field := range fields {
- f, err := parseField(field)
+ f, err := parseField(field, t)
if err != nil {
return generateType{}, err
}
+ // NEW
+ // set initial (1st character of the type's name) on field so we don't need
+ // to set the template variable like was done in prior version
+ f.Initial = t.Initial
t.Fields = append(t.Fields, f)
}
@@ -42,17 +48,29 @@ func parseType(args []string) (generateType, error) {
return t, nil
}
-func parseField(raw string) (generateField, error) {
- // title:string
+func parseField(raw string, gt generateType) (generateField, error) {
+ // contents:string or // contents:string:richtext
if !strings.Contains(raw, ":") {
return generateField{}, fmt.Errorf("Invalid generate argument. [%s]", raw)
}
- pair := strings.Split(raw, ":")
+ data := strings.Split(raw, ":")
+
field := generateField{
- Name: fieldName(pair[0]),
- TypeName: strings.ToLower(pair[1]),
- JSONName: fieldJSONName(pair[0]),
+ Name: fieldName(data[0]),
+ Initial: gt.Initial,
+ TypeName: strings.ToLower(data[1]),
+ JSONName: fieldJSONName(data[0]),
+ }
+
+ fieldType := "input"
+ if len(data) == 3 {
+ fieldType = data[2]
+ }
+
+ err := setFieldView(&field, fieldType)
+ if err != nil {
+ return generateField{}, err
}
return field, nil
@@ -116,6 +134,62 @@ func fieldJSONName(name string) string {
return name
}
+// set the specified view inside the editor field for a generated field for a type
+func setFieldView(field *generateField, viewType string) error {
+ var err error
+ var tmpl *template.Template
+ buf := &bytes.Buffer{}
+
+ pwd, err := os.Getwd()
+ if err != nil {
+ return err
+ }
+
+ tmplDir := filepath.Join(pwd, "cmd", "ponzu", "templates")
+ tmplFrom := func(filename string) (*template.Template, error) {
+ return template.ParseFiles(filepath.Join(tmplDir, filename))
+ }
+
+ viewType = strings.ToLower(viewType)
+ switch viewType {
+ case "checkbox":
+ tmpl, err = tmplFrom("gen-checkbox.tmpl")
+ case "custom":
+ tmpl, err = tmplFrom("gen-custom.tmpl")
+ case "file":
+ tmpl, err = tmplFrom("gen-file.tmpl")
+ case "hidden":
+ tmpl, err = tmplFrom("gen-hidden.tmpl")
+ case "input", "text":
+ tmpl, err = tmplFrom("gen-input.tmpl")
+ case "richtext":
+ tmpl, err = tmplFrom("gen-richtext.tmpl")
+ case "select":
+ tmpl, err = tmplFrom("gen-select.tmpl")
+ case "textarea":
+ tmpl, err = tmplFrom("gen-textarea.tmpl")
+ case "tags":
+ tmpl, err = tmplFrom("gen-tags.tmpl")
+ default:
+ msg := fmt.Sprintf("'%s' is not a recognized view type. Using 'input' instead.", viewType)
+ fmt.Println(msg)
+ tmpl, err = tmplFrom("gen-input.tmpl")
+ }
+
+ if err != nil {
+ return err
+ }
+
+ err = tmpl.Execute(buf, field)
+ if err != nil {
+ return err
+ }
+
+ field.View = buf.String()
+
+ return nil
+}
+
func isUpper(char rune) bool {
if char >= 'A' && char <= 'Z' {
return true
@@ -163,7 +237,7 @@ func generateContentType(args []string) error {
return fmt.Errorf("Failed to parse type args: %s", err.Error())
}
- tmplPath := filepath.Join(pwd, "cmd", "ponzu", "contentType.tmpl")
+ tmplPath := filepath.Join(pwd, "cmd", "ponzu", "templates", "gen-content.tmpl")
tmpl, err := template.ParseFiles(tmplPath)
if err != nil {
return fmt.Errorf("Failed to parse template: %s", err.Error())