From 3b91d4be44b7e7814494a0a58e6491d4c5983dbe Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:01:42 -0700 Subject: adding initial cases to generate input types for field views from command line --- cmd/ponzu/contentType.tmpl | 43 --------------------- cmd/ponzu/generate.go | 75 +++++++++++++++++++++++++++++++++--- cmd/ponzu/templates/gen-content.tmpl | 39 +++++++++++++++++++ cmd/ponzu/templates/gen-input.tmpl | 5 +++ 4 files changed, 113 insertions(+), 49 deletions(-) delete mode 100644 cmd/ponzu/contentType.tmpl create mode 100644 cmd/ponzu/templates/gen-content.tmpl create mode 100644 cmd/ponzu/templates/gen-input.tmpl diff --git a/cmd/ponzu/contentType.tmpl b/cmd/ponzu/contentType.tmpl deleted file mode 100644 index c16cfd6..0000000 --- a/cmd/ponzu/contentType.tmpl +++ /dev/null @@ -1,43 +0,0 @@ -package content - -import ( - "fmt" - - "github.com/ponzu-cms/ponzu/management/editor" - "github.com/ponzu-cms/ponzu/system/item" -) - -type {{ .Name }} struct { - item.Item - - {{ range .Fields }}{{ .Name }} {{ .TypeName }} `json:"{{ .JSONName }}"` - {{ end }} -} - -// MarshalEditor writes a buffer of html to edit a {{ .Name }} within the CMS -// and implements editor.Editable -func ({{ .Initial }} *{{ .Name }}) MarshalEditor() ([]byte, error) { - view, err := editor.Form({{ .Initial }}, - // Take note that the first argument to these Input-like functions - // is the string version of each {{ .Name }} field, and must follow - // this pattern for auto-decoding and auto-encoding reasons:{{ $initial := .Initial }} - {{ range .Fields }}editor.Field{ - View: editor.Input("{{ .Name }}", {{ $initial }}, map[string]string{ - "label": "{{ .Name }}", - "type": "text", - "placeholder": "Enter the {{ .Name }} here", - }), - }, - {{ end }} - ) - - if err != nil { - return nil, fmt.Errorf("Failed to render {{ .Name }} editor view: %s", err.Error()) - } - - return view, nil -} - -func init() { - item.Types["{{ .Name }}"] = func() interface{} { return new({{ .Name }}) } -} \ No newline at end of file diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index e98e3fe..8c4bab4 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -18,10 +18,16 @@ type generateType struct { type generateField struct { Name string + Initial string TypeName string JSONName string + View string } +// following the type, an optional third param could designate the editor.Input-like +// func to call which would output different text based on the element returned +// blog title:string Author:string PostCategory:string content:string:richtext some_thing:int + // blog title:string Author:string PostCategory:string content:string some_thing:int func parseType(args []string) (generateType, error) { t := generateType{ @@ -35,6 +41,10 @@ func parseType(args []string) (generateType, error) { 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) } @@ -43,16 +53,26 @@ func parseType(args []string) (generateType, error) { } func parseField(raw string) (generateField, error) { - // title:string + // 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, ":") + view := `nil` + field := generateField{ - Name: fieldName(pair[0]), - TypeName: strings.ToLower(pair[1]), - JSONName: fieldJSONName(pair[0]), + Name: fieldName(data[0]), + TypeName: strings.ToLower(data[1]), + JSONName: fieldJSONName(data[0]), + View: view, + } + + if len(data) == 3 { + err := setFieldView(&field, data[2]) + if err != nil { + return generateField{}, err + } } return field, nil @@ -116,6 +136,49 @@ 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)) + } + + switch strings.ToLower(viewType) { + case "textarea": + case "richtext": + case "select": + case "input": + tmpl, err = tmplFrom("gen-input.tmpl") + case "checkbox": + case "file": + case "tags": + default: + 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 +226,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()) diff --git a/cmd/ponzu/templates/gen-content.tmpl b/cmd/ponzu/templates/gen-content.tmpl new file mode 100644 index 0000000..2d92b88 --- /dev/null +++ b/cmd/ponzu/templates/gen-content.tmpl @@ -0,0 +1,39 @@ +package content + +import ( + "fmt" + + "github.com/ponzu-cms/ponzu/management/editor" + "github.com/ponzu-cms/ponzu/system/item" +) + +type {{ .Name }} struct { + item.Item + + {{ range .Fields }}{{ .Name }} {{ .TypeName }} `json:"{{ .JSONName }}"` + {{ end }} +} + +// MarshalEditor writes a buffer of html to edit a {{ .Name }} within the CMS +// and implements editor.Editable +func ({{ .Initial }} *{{ .Name }}) MarshalEditor() ([]byte, error) { + view, err := editor.Form({{ .Initial }}, + // Take note that the first argument to these Input-like functions + // is the string version of each {{ .Name }} field, and must follow + // this pattern for auto-decoding and auto-encoding reasons: + {{ range .Fields }}editor.Field{ + {{ .View }} + }, + {{ end }} + ) + + if err != nil { + return nil, fmt.Errorf("Failed to render {{ .Name }} editor view: %s", err.Error()) + } + + return view, nil +} + +func init() { + item.Types["{{ .Name }}"] = func() interface{} { return new({{ .Name }}) } +} \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-input.tmpl b/cmd/ponzu/templates/gen-input.tmpl new file mode 100644 index 0000000..8bea12a --- /dev/null +++ b/cmd/ponzu/templates/gen-input.tmpl @@ -0,0 +1,5 @@ +View: editor.Input("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", + "type": "text", + "placeholder": "Enter the {{ .Name }} here", +}), \ No newline at end of file -- cgit v1.2.3 From e2aa846d44afa8c2ba823ef1afde68a1b8a50c31 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:40:24 -0700 Subject: removing nil view default --- cmd/ponzu/generate.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index 8c4bab4..e37ff68 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -59,20 +59,23 @@ func parseField(raw string) (generateField, error) { } data := strings.Split(raw, ":") - view := `nil` + name := fieldName(data[0]) field := generateField{ - Name: fieldName(data[0]), + Name: name, + Initial: string(name[0]), TypeName: strings.ToLower(data[1]), JSONName: fieldJSONName(data[0]), - View: view, } + fieldType := "input" if len(data) == 3 { - err := setFieldView(&field, data[2]) - if err != nil { - return generateField{}, err - } + fieldType = data[2] + } + + err := setFieldView(&field, fieldType) + if err != nil { + return generateField{}, err } return field, nil @@ -153,6 +156,7 @@ func setFieldView(field *generateField, viewType string) error { } switch strings.ToLower(viewType) { + case "hidden": case "textarea": case "richtext": case "select": @@ -161,6 +165,7 @@ func setFieldView(field *generateField, viewType string) error { case "checkbox": case "file": case "tags": + case "custom": default: tmpl, err = tmplFrom("gen-input.tmpl") } -- cgit v1.2.3 From 0a7deedabf8c7df8f9becf149afa8681821aac6f Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:42:04 -0700 Subject: downcase initial char from type name --- cmd/ponzu/generate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index e37ff68..424a6a1 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -63,7 +63,7 @@ func parseField(raw string) (generateField, error) { field := generateField{ Name: name, - Initial: string(name[0]), + Initial: strings.ToLower(string(name[0])), TypeName: strings.ToLower(data[1]), JSONName: fieldJSONName(data[0]), } -- cgit v1.2.3 From 8c671874801f3ea133b5f93c59543e06b0d98185 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:46:52 -0700 Subject: provide generateType to parseField to get its parent data --- cmd/ponzu/generate.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index 424a6a1..adbf093 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -37,7 +37,7 @@ 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 } @@ -52,18 +52,17 @@ func parseType(args []string) (generateType, error) { return t, nil } -func parseField(raw string) (generateField, error) { +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) } data := strings.Split(raw, ":") - name := fieldName(data[0]) field := generateField{ - Name: name, - Initial: strings.ToLower(string(name[0])), + Name: fieldName(data[0]), + Initial: gt.Initial, TypeName: strings.ToLower(data[1]), JSONName: fieldJSONName(data[0]), } -- cgit v1.2.3 From 012951fbf297d56e287e8a6b3ad813c03fab9f2e Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:55:03 -0700 Subject: add warning message to console, new custom and hidden templates --- cmd/ponzu/generate.go | 2 ++ cmd/ponzu/templates/gen-custom.tmpl | 6 ++++++ cmd/ponzu/templates/gen-hidden.tmpl | 3 +++ 3 files changed, 11 insertions(+) create mode 100644 cmd/ponzu/templates/gen-custom.tmpl create mode 100644 cmd/ponzu/templates/gen-hidden.tmpl diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index adbf093..2b189a8 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -166,6 +166,8 @@ func setFieldView(field *generateField, viewType string) error { case "tags": case "custom": default: + msg := fmt.Sprintf("'%s' is not a recognized view type. Using 'input' instead.") + fmt.Println(msg) tmpl, err = tmplFrom("gen-input.tmpl") } diff --git a/cmd/ponzu/templates/gen-custom.tmpl b/cmd/ponzu/templates/gen-custom.tmpl new file mode 100644 index 0000000..a578d18 --- /dev/null +++ b/cmd/ponzu/templates/gen-custom.tmpl @@ -0,0 +1,6 @@ +View: []byte(` +
+ + +
+`), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-hidden.tmpl b/cmd/ponzu/templates/gen-hidden.tmpl new file mode 100644 index 0000000..4b00456 --- /dev/null +++ b/cmd/ponzu/templates/gen-hidden.tmpl @@ -0,0 +1,3 @@ +View: editor.Input("{{ .Name }}", {{ .Initial }}, map[string]string{ + "type": "hidden", +}), \ No newline at end of file -- cgit v1.2.3 From 75195ecb39c8178a3a2cd8d8a6c4a8bbeaab2a39 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 11:57:27 -0700 Subject: adding hidden and custom templates to cases --- cmd/ponzu/generate.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index 2b189a8..62655f0 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -156,6 +156,7 @@ func setFieldView(field *generateField, viewType string) error { switch strings.ToLower(viewType) { case "hidden": + tmpl, err = tmplFrom("gen-hidden.tmpl") case "textarea": case "richtext": case "select": @@ -165,6 +166,7 @@ func setFieldView(field *generateField, viewType string) error { case "file": case "tags": case "custom": + tmpl, err = tmplFrom("gen-custom.tmpl") default: msg := fmt.Sprintf("'%s' is not a recognized view type. Using 'input' instead.") fmt.Println(msg) -- cgit v1.2.3 From dc78fc53fbfb1d10c9673c02b7741ce1b45eb724 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 12:17:58 -0700 Subject: adding cases and templates for checkbox, file, richtext, select, tags, textarea --- cmd/ponzu/generate.go | 25 ++++++++++++++++--------- cmd/ponzu/templates/gen-checkbox.tmpl | 5 +++++ cmd/ponzu/templates/gen-custom.tmpl | 8 ++++---- cmd/ponzu/templates/gen-file.tmpl | 4 ++++ cmd/ponzu/templates/gen-richtext.tmpl | 4 ++++ cmd/ponzu/templates/gen-select.tmpl | 5 +++++ cmd/ponzu/templates/gen-tags.tmpl | 4 ++++ cmd/ponzu/templates/gen-textarea.tmpl | 4 ++++ 8 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 cmd/ponzu/templates/gen-checkbox.tmpl create mode 100644 cmd/ponzu/templates/gen-file.tmpl create mode 100644 cmd/ponzu/templates/gen-richtext.tmpl create mode 100644 cmd/ponzu/templates/gen-select.tmpl create mode 100644 cmd/ponzu/templates/gen-tags.tmpl create mode 100644 cmd/ponzu/templates/gen-textarea.tmpl diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index 62655f0..3536212 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -154,21 +154,28 @@ func setFieldView(field *generateField, viewType string) error { return template.ParseFiles(filepath.Join(tmplDir, filename)) } - switch strings.ToLower(viewType) { + 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 "textarea": + case "input", "text": + tmpl, err = tmplFrom("gen-input.tmpl") case "richtext": + tmpl, err = tmplFrom("gen-richtext.tmpl") case "select": - case "input": - tmpl, err = tmplFrom("gen-input.tmpl") - case "checkbox": - case "file": + tmpl, err = tmplFrom("gen-select.tmpl") + case "textarea": + tmpl, err = tmplFrom("gen-textarea.tmpl") case "tags": - case "custom": - tmpl, err = tmplFrom("gen-custom.tmpl") + tmpl, err = tmplFrom("gen-tags.tmpl") default: - msg := fmt.Sprintf("'%s' is not a recognized view type. Using 'input' instead.") + msg := fmt.Sprintf("'%s' is not a recognized view type. Using 'input' instead.", viewType) fmt.Println(msg) tmpl, err = tmplFrom("gen-input.tmpl") } diff --git a/cmd/ponzu/templates/gen-checkbox.tmpl b/cmd/ponzu/templates/gen-checkbox.tmpl new file mode 100644 index 0000000..23713dc --- /dev/null +++ b/cmd/ponzu/templates/gen-checkbox.tmpl @@ -0,0 +1,5 @@ +View: editor.Checkbox("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", +}, map[string]string{ + // "value": "Display Name", +}), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-custom.tmpl b/cmd/ponzu/templates/gen-custom.tmpl index a578d18..a1e0552 100644 --- a/cmd/ponzu/templates/gen-custom.tmpl +++ b/cmd/ponzu/templates/gen-custom.tmpl @@ -1,6 +1,6 @@ View: []byte(` -
- - -
+
+ + +
`), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-file.tmpl b/cmd/ponzu/templates/gen-file.tmpl new file mode 100644 index 0000000..7bcaa4c --- /dev/null +++ b/cmd/ponzu/templates/gen-file.tmpl @@ -0,0 +1,4 @@ +View: editor.File("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", + "placeholder": "Upload the {{ .Name }} here", +}), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-richtext.tmpl b/cmd/ponzu/templates/gen-richtext.tmpl new file mode 100644 index 0000000..c7ec18c --- /dev/null +++ b/cmd/ponzu/templates/gen-richtext.tmpl @@ -0,0 +1,4 @@ +View: editor.Richtext("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", + "placeholder": "Enter the {{ .Name }} here", +}), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-select.tmpl b/cmd/ponzu/templates/gen-select.tmpl new file mode 100644 index 0000000..509eb30 --- /dev/null +++ b/cmd/ponzu/templates/gen-select.tmpl @@ -0,0 +1,5 @@ +View: editor.Select("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", +}, map[string]string{ + // "value": "Display Name", +}), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-tags.tmpl b/cmd/ponzu/templates/gen-tags.tmpl new file mode 100644 index 0000000..ca92c94 --- /dev/null +++ b/cmd/ponzu/templates/gen-tags.tmpl @@ -0,0 +1,4 @@ +View: editor.Tags("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", + "placeholder": "+{{ .Name }}", +}), \ No newline at end of file diff --git a/cmd/ponzu/templates/gen-textarea.tmpl b/cmd/ponzu/templates/gen-textarea.tmpl new file mode 100644 index 0000000..af3dad8 --- /dev/null +++ b/cmd/ponzu/templates/gen-textarea.tmpl @@ -0,0 +1,4 @@ +View: editor.Textarea("{{ .Name }}", {{ .Initial }}, map[string]string{ + "label": "{{ .Name }}", + "placeholder": "Enter the {{ .Name }} here", +}), \ No newline at end of file -- cgit v1.2.3 From 9e27f401293560c11a8c93d0e7db6b82ecf30b8f Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 1 Apr 2017 12:23:08 -0700 Subject: formatting fix in custom editor view template --- cmd/ponzu/templates/gen-custom.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/ponzu/templates/gen-custom.tmpl b/cmd/ponzu/templates/gen-custom.tmpl index a1e0552..6079f8b 100644 --- a/cmd/ponzu/templates/gen-custom.tmpl +++ b/cmd/ponzu/templates/gen-custom.tmpl @@ -3,4 +3,4 @@ View: []byte(` -`), \ No newline at end of file + `), \ No newline at end of file -- cgit v1.2.3 From 302ee60bff54045507708868637908ec63564df5 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sun, 2 Apr 2017 10:58:35 -0700 Subject: remove old comment/reminder --- cmd/ponzu/generate.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index 3536212..a4a9d2c 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -24,10 +24,6 @@ type generateField struct { View string } -// following the type, an optional third param could designate the editor.Input-like -// func to call which would output different text based on the element returned -// blog title:string Author:string PostCategory:string content:string:richtext some_thing:int - // blog title:string Author:string PostCategory:string content:string some_thing:int func parseType(args []string) (generateType, error) { t := generateType{ -- cgit v1.2.3