diff --git a/domain/model/article.go b/domain/model/article.go
index b783477..b07120f 100644
--- a/domain/model/article.go
+++ b/domain/model/article.go
@@ -1,5 +1,10 @@
package model
+import (
+ "fmt"
+ "owl-blogs/render"
+)
+
type Article struct {
EntryBase
meta ArticleMetaData
@@ -10,8 +15,16 @@ type ArticleMetaData struct {
Content string `owl:"inputType=text widget=textarea"`
}
+func (e *Article) Title() string {
+ return e.meta.Title
+}
+
func (e *Article) Content() EntryContent {
- return EntryContent(e.meta.Content)
+ str, err := render.RenderTemplateToString("entry/Article", e)
+ if err != nil {
+ fmt.Println(err)
+ }
+ return EntryContent(str)
}
func (e *Article) MetaData() interface{} {
diff --git a/domain/model/entry.go b/domain/model/entry.go
index a23d66d..4f499f8 100644
--- a/domain/model/entry.go
+++ b/domain/model/entry.go
@@ -9,7 +9,9 @@ type Entry interface {
Content() EntryContent
PublishedAt() *time.Time
MetaData() interface{}
- // Create(id string, publishedAt *time.Time, metaData EntryMetaData) error
+
+ // Optional: can return empty string
+ Title() string
SetID(id string)
SetPublishedAt(publishedAt *time.Time)
diff --git a/domain/model/image.go b/domain/model/image.go
index 1429941..176d8a5 100644
--- a/domain/model/image.go
+++ b/domain/model/image.go
@@ -1,5 +1,10 @@
package model
+import (
+ "fmt"
+ "owl-blogs/render"
+)
+
type Image struct {
EntryBase
meta ImageMetaData
@@ -10,8 +15,16 @@ type ImageMetaData struct {
Content string `owl:"inputType=text widget=textarea"`
}
+func (e *Image) Title() string {
+ return ""
+}
+
func (e *Image) Content() EntryContent {
- return EntryContent(e.meta.Content)
+ str, err := render.RenderTemplateToString("entry/Image", e)
+ if err != nil {
+ fmt.Println(err)
+ }
+ return EntryContent(str)
}
func (e *Image) MetaData() interface{} {
diff --git a/render/templates.go b/render/templates.go
new file mode 100644
index 0000000..251168b
--- /dev/null
+++ b/render/templates.go
@@ -0,0 +1,52 @@
+package render
+
+import (
+ "bytes"
+ "embed"
+ "io"
+ "text/template"
+)
+
+//go:embed templates
+var templates embed.FS
+
+func CreateTemplateWithBase(templateName string) (*template.Template, error) {
+
+ return template.ParseFS(
+ templates,
+ "templates/base.tmpl",
+ "templates/"+templateName+".tmpl",
+ )
+
+}
+
+func RenderTemplateWithBase(w io.Writer, templateName string, data interface{}) error {
+
+ t, err := CreateTemplateWithBase(templateName)
+
+ if err != nil {
+ return err
+ }
+
+ err = t.ExecuteTemplate(w, "base", data)
+
+ return err
+
+}
+
+func RenderTemplateToString(templateName string, data interface{}) (string, error) {
+
+ t, err := template.ParseFS(
+ templates,
+ "templates/"+templateName+".tmpl",
+ )
+
+ if err != nil {
+ return "", err
+ }
+
+ var output bytes.Buffer
+
+ err = t.Execute(&output, data)
+ return output.String(), err
+}
diff --git a/web/templates/base.tmpl b/render/templates/base.tmpl
similarity index 100%
rename from web/templates/base.tmpl
rename to render/templates/base.tmpl
diff --git a/render/templates/entry/Article.tmpl b/render/templates/entry/Article.tmpl
new file mode 100644
index 0000000..bac8848
--- /dev/null
+++ b/render/templates/entry/Article.tmpl
@@ -0,0 +1 @@
+{{.MetaData.Content}}
diff --git a/render/templates/entry/Image.tmpl b/render/templates/entry/Image.tmpl
new file mode 100644
index 0000000..c616146
--- /dev/null
+++ b/render/templates/entry/Image.tmpl
@@ -0,0 +1,8 @@
+
+ {{.MetaData.Title}}
+
+
+
+
+{{.MetaData.Content}}
+
diff --git a/web/templates/views/editor_list.tmpl b/render/templates/views/editor_list.tmpl
similarity index 100%
rename from web/templates/views/editor_list.tmpl
rename to render/templates/views/editor_list.tmpl
diff --git a/web/templates/views/entry/Post.tmpl b/render/templates/views/entry.tmpl
similarity index 52%
rename from web/templates/views/entry/Post.tmpl
rename to render/templates/views/entry.tmpl
index 2ddd89e..8af2b7d 100644
--- a/web/templates/views/entry/Post.tmpl
+++ b/render/templates/views/entry.tmpl
@@ -1,17 +1,18 @@
-{{define "title"}}{{.MetaData.Title}}{{end}}
+{{define "title"}}{{.Title}}{{end}}
{{define "main"}}
-{{.MetaData.Title}}
-
-
-{{.Content}}
-
-
+{{if .Title}}
+ {{.Title}}
+{{end}}
Published: {{.PublishedAt}}
+
+{{.Content}}
+
+
{{end}}
diff --git a/render/templates/views/index.tmpl b/render/templates/views/index.tmpl
new file mode 100644
index 0000000..8ec0e75
--- /dev/null
+++ b/render/templates/views/index.tmpl
@@ -0,0 +1,22 @@
+{{define "title"}}Index{{end}}
+
+{{define "main"}}
+
+{{ range . }}
+
+
+
{{ .PublishedAt }}
+ {{ .Content }}
+
+
+{{ end }}
+
+{{end}}
\ No newline at end of file
diff --git a/web/templates/views/login.tmpl b/render/templates/views/login.tmpl
similarity index 100%
rename from web/templates/views/login.tmpl
rename to render/templates/views/login.tmpl
diff --git a/web/editor_list_handler.go b/web/editor_list_handler.go
index ef7c52f..771e6ad 100644
--- a/web/editor_list_handler.go
+++ b/web/editor_list_handler.go
@@ -2,6 +2,7 @@ package web
import (
"owl-blogs/app"
+ "owl-blogs/render"
"github.com/gofiber/fiber/v2"
)
@@ -32,5 +33,5 @@ func (h *EditorListHandler) Handle(c *fiber.Ctx) error {
typeNames = append(typeNames, name)
}
- return RenderTemplate(c, "views/editor_list", &EditorListContext{Types: typeNames})
+ return render.RenderTemplateWithBase(c, "views/editor_list", &EditorListContext{Types: typeNames})
}
diff --git a/web/entry_handler.go b/web/entry_handler.go
index 3b81401..50e3640 100644
--- a/web/entry_handler.go
+++ b/web/entry_handler.go
@@ -2,8 +2,7 @@ package web
import (
"owl-blogs/app"
- "owl-blogs/domain/model"
- "text/template"
+ "owl-blogs/render"
"github.com/gofiber/fiber/v2"
)
@@ -17,18 +16,6 @@ func NewEntryHandler(entryService *app.EntryService, registry *app.EntryTypeRegi
return &EntryHandler{entrySvc: entryService, registry: registry}
}
-func (h *EntryHandler) getTemplate(entry model.Entry) (*template.Template, error) {
- name, err := h.registry.TypeName(entry)
- if err != nil {
- return nil, err
- }
- return template.ParseFS(
- templates,
- "templates/base.tmpl",
- "templates/views/entry/"+name+".tmpl",
- )
-}
-
func (h *EntryHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
@@ -38,10 +25,5 @@ func (h *EntryHandler) Handle(c *fiber.Ctx) error {
return err
}
- template, err := h.getTemplate(entry)
- if err != nil {
- return err
- }
-
- return template.ExecuteTemplate(c, "base", entry)
+ return render.RenderTemplateWithBase(c, "views/entry", entry)
}
diff --git a/web/index_handler.go b/web/index_handler.go
index e043134..2a0575d 100644
--- a/web/index_handler.go
+++ b/web/index_handler.go
@@ -2,6 +2,7 @@ package web
import (
"owl-blogs/app"
+ "owl-blogs/render"
"github.com/gofiber/fiber/v2"
)
@@ -15,5 +16,13 @@ func NewIndexHandler(entryService *app.EntryService) *IndexHandler {
}
func (h *IndexHandler) Handle(c *fiber.Ctx) error {
- return c.SendString("Hello, World 👋!")
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+ entries, err := h.entrySvc.FindAll()
+
+ if err != nil {
+ return err
+ }
+
+ return render.RenderTemplateWithBase(c, "views/index", entries)
+
}
diff --git a/web/login_handler.go b/web/login_handler.go
index 99af413..6ffe7a6 100644
--- a/web/login_handler.go
+++ b/web/login_handler.go
@@ -2,6 +2,7 @@ package web
import (
"owl-blogs/app"
+ "owl-blogs/render"
"time"
"github.com/gofiber/fiber/v2"
@@ -17,7 +18,7 @@ func NewLoginHandler(authorService *app.AuthorService) *LoginHandler {
func (h *LoginHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- return RenderTemplate(c, "views/login", nil)
+ return render.RenderTemplateWithBase(c, "views/login", nil)
}
func (h *LoginHandler) HandlePost(c *fiber.Ctx) error {
diff --git a/web/templates.go b/web/templates.go
deleted file mode 100644
index 7dee3a1..0000000
--- a/web/templates.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package web
-
-import (
- "embed"
- "io"
- "text/template"
-)
-
-//go:embed templates
-var templates embed.FS
-
-func CreateTemplate(templateName string) (*template.Template, error) {
-
- return template.ParseFS(
- templates,
- "templates/base.tmpl",
- "templates/"+templateName+".tmpl",
- )
-
-}
-
-func RenderTemplate(w io.Writer, templateName string, data interface{}) error {
-
- t, err := CreateTemplate(templateName)
-
- if err != nil {
- return err
- }
-
- err = t.ExecuteTemplate(w, "base", data)
-
- return err
-
-}
diff --git a/web/templates/views/entry/Image.tmpl b/web/templates/views/entry/Image.tmpl
deleted file mode 100644
index 71521c8..0000000
--- a/web/templates/views/entry/Image.tmpl
+++ /dev/null
@@ -1,17 +0,0 @@
-{{define "title"}}Image Entry{{end}}
-
-{{define "main"}}
-
-
-
-
-{{.Content}}
-
-
-
- Published: {{.PublishedAt}}
-
-
-
-{{end}}
-