diff --git a/assets/css/main.scss b/assets/css/main.scss index dc6ad7d..c8f0344 100644 --- a/assets/css/main.scss +++ b/assets/css/main.scss @@ -10,7 +10,21 @@ $container-max-widths: ( @import "bootstrap/scss/bootstrap.scss"; -// Post list +// Local classes + +.post-form { + display: grid; + grid-template-rows: min-content auto min-content; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.post-form textarea { + height: 100%; +} .postlist .post img { max-width: 300px; @@ -18,49 +32,6 @@ $container-max-widths: ( max-height: 300px; } -.postlist .post-date { - font-size: 0.9rem; -} - -// Post form - -// Post edit page styling -.post-edit-page { - height: 100vh; -} - -.post-edit-page main { - display: flex; - flex-direction: column; - overflow: hidden; -} - -.post-edit-page .post-form { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; -} - -.post-edit-page .post-form .row { - flex: 1; - display: flex; - min-height: 0; -} - -.post-edit-page .post-form .col-md-9 { - display: flex; - flex-direction: column; -} - -.post-edit-page .post-form textarea { - flex: 1; - resize: vertical; - min-height: 300px; -} - - - .show-upload figure img { max-width: 100vw; height: auto; diff --git a/handlers/posts.go b/handlers/posts.go index a133758..a339685 100644 --- a/handlers/posts.go +++ b/handlers/posts.go @@ -53,7 +53,6 @@ func (ph PostsHandler) New(c fiber.Ctx) error { "post": p, "categories": cats, "selectedCategories": map[int64]bool{}, - "bodyClass": "post-edit-page", }) } @@ -94,7 +93,6 @@ func (ph PostsHandler) Edit(c fiber.Ctx) error { "post": post, "categories": cats, "selectedCategories": selectedCategories, - "bodyClass": "post-edit-page", }) })) } diff --git a/layouts/simplecss/categories_list.html b/layouts/simplecss/categories_list.html new file mode 100644 index 0000000..32331f6 --- /dev/null +++ b/layouts/simplecss/categories_list.html @@ -0,0 +1,9 @@ +

Categories

+ \ No newline at end of file diff --git a/layouts/simplecss/categories_single.html b/layouts/simplecss/categories_single.html new file mode 100644 index 0000000..e8d59d1 --- /dev/null +++ b/layouts/simplecss/categories_single.html @@ -0,0 +1,16 @@ +

{{ .Category.Name }}

+{{ if .DescriptionHTML }} +
{{ .DescriptionHTML }}
+{{ end }} +{{ range .Posts }} + {{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} + {{ .HTML }} + {{ format_date .Post.PublishedAt }} + {{ if .Categories }} +

+ {{ range .Categories }} + {{ .Name }} + {{ end }} +

+ {{ end }} +{{ end }} \ No newline at end of file diff --git a/layouts/simplecss/fs.go b/layouts/simplecss/fs.go index d82f6ae..2c1b2fb 100644 --- a/layouts/simplecss/fs.go +++ b/layouts/simplecss/fs.go @@ -2,6 +2,5 @@ package simplecss import "embed" -//go:embed templates/*.html -//go:embed static/* +//go:embed *.html var FS embed.FS diff --git a/layouts/simplecss/templates/layout_main.html b/layouts/simplecss/layout_main.html similarity index 89% rename from layouts/simplecss/templates/layout_main.html rename to layouts/simplecss/layout_main.html index 4aa5199..cc2e616 100644 --- a/layouts/simplecss/templates/layout_main.html +++ b/layouts/simplecss/layout_main.html @@ -7,7 +7,6 @@ -
diff --git a/layouts/simplecss/posts_list.html b/layouts/simplecss/posts_list.html new file mode 100644 index 0000000..e6a77fe --- /dev/null +++ b/layouts/simplecss/posts_list.html @@ -0,0 +1,12 @@ +{{ range .Posts }} + {{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} + {{ .HTML }} + {{ format_date .Post.PublishedAt }} + {{ if .Categories }} +

+ {{ range .Categories }} + {{ .Name }} + {{ end }} +

+ {{ end }} +{{ end }} \ No newline at end of file diff --git a/layouts/simplecss/posts_single.html b/layouts/simplecss/posts_single.html new file mode 100644 index 0000000..cda9bb2 --- /dev/null +++ b/layouts/simplecss/posts_single.html @@ -0,0 +1,10 @@ +{{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} +{{ .HTML }} +{{ format_date .Post.PublishedAt }} +{{ if .Categories }} +

+ {{ range .Categories }} + {{ .Name }} + {{ end }} +

+{{ end }} \ No newline at end of file diff --git a/layouts/simplecss/static/style.css b/layouts/simplecss/static/style.css deleted file mode 100644 index cdfc4c2..0000000 --- a/layouts/simplecss/static/style.css +++ /dev/null @@ -1,55 +0,0 @@ -.h-entry { - margin-block-start: 1.5rem; - margin-block-end: 2.5rem; -} - -.post-meta { - display: flex; - flex-direction: row; - justify-content: space-between; - font-size: 0.95rem; -} - -.post-meta a { - color: var(--text-light); - text-decoration: none; -} - -.post-meta a:hover { - text-decoration: underline; -} - -.post-categories { - display: inline-flex; - gap: 0.5rem; -} - -.post-categories a:before { - content: "#"; -} - -/* Category list */ - -ul.category-list { - list-style: none; - padding-inline-start: 0; -} - -ul.category-list li { - display: flex; - flex-direction: row; - - justify-content: start; - gap: 4rem; -} - -ul.category-list span.category-list-name { - min-width: 15vw; -} - -/* Category single */ - -.category-description { - margin-block-start: 1.5rem; - margin-block-end: 2.5rem; -} \ No newline at end of file diff --git a/layouts/simplecss/templates/_post_meta.html b/layouts/simplecss/templates/_post_meta.html deleted file mode 100644 index a042f41..0000000 --- a/layouts/simplecss/templates/_post_meta.html +++ /dev/null @@ -1,10 +0,0 @@ -
- {{ format_date .Post.PublishedAt }} - {{ if .Categories }} -
- {{ range .Categories }} - {{ .Name }} - {{ end }} -
- {{ end }} -
\ No newline at end of file diff --git a/layouts/simplecss/templates/categories_list.html b/layouts/simplecss/templates/categories_list.html deleted file mode 100644 index e5fc8c8..0000000 --- a/layouts/simplecss/templates/categories_list.html +++ /dev/null @@ -1,9 +0,0 @@ -

Categories

- \ No newline at end of file diff --git a/layouts/simplecss/templates/categories_single.html b/layouts/simplecss/templates/categories_single.html deleted file mode 100644 index deaeb02..0000000 --- a/layouts/simplecss/templates/categories_single.html +++ /dev/null @@ -1,11 +0,0 @@ -

{{ .Category.Name }}

-{{ if .DescriptionHTML }} -
{{ .DescriptionHTML }}
-{{ end }} -{{ range .Posts }} -
- {{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} - {{ .HTML }} - {{ template "_post_meta.html" . }} -
-{{ end }} \ No newline at end of file diff --git a/layouts/simplecss/templates/posts_list.html b/layouts/simplecss/templates/posts_list.html deleted file mode 100644 index 5f10f1e..0000000 --- a/layouts/simplecss/templates/posts_list.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ range .Posts }} -
- {{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} - {{ .HTML }} - - {{ template "_post_meta.html" . }} -
-{{ end }} \ No newline at end of file diff --git a/layouts/simplecss/templates/posts_single.html b/layouts/simplecss/templates/posts_single.html deleted file mode 100644 index 8895b19..0000000 --- a/layouts/simplecss/templates/posts_single.html +++ /dev/null @@ -1,5 +0,0 @@ -
- {{ if .Post.Title }}

{{ .Post.Title }}

{{ end }} - {{ .HTML }} - {{ template "_post_meta.html" . }} -
\ No newline at end of file diff --git a/providers/sitebuilder/builder.go b/providers/sitebuilder/builder.go index 1a4275d..5775149 100644 --- a/providers/sitebuilder/builder.go +++ b/providers/sitebuilder/builder.go @@ -6,9 +6,7 @@ import ( "fmt" "html/template" "io" - "io/fs" "iter" - "log" "os" "path/filepath" "strings" @@ -33,15 +31,11 @@ type Builder struct { func New(site pubmodel.Site, opts Options) (*Builder, error) { tmpls, err := template.New(""). Funcs(templateFns(site, opts)). - ParseFS(opts.TemplatesFS, "*.html") + ParseFS(opts.TemplatesFS, tmplNamePostSingle, tmplNamePostList, tmplNameLayoutMain, tmplNameCategoryList, tmplNameCategorySingle) if err != nil { return nil, err } - for _, t := range tmpls.Templates() { - log.Printf("Loaded template %s", t.Name()) - } - return &Builder{ site: site, opts: opts, @@ -115,9 +109,6 @@ func (b *Builder) BuildSite(outDir string) error { return b.writeUploads(buildCtx, b.site.Uploads) }) - // Build static assets - eg.Go(func() error { return b.writeStaticAssets(buildCtx) }) - return eg.Wait() } @@ -185,11 +176,10 @@ func (b *Builder) renderFeeds(ctx buildContext, postIter iter.Seq[models.Maybe[* } feed.Items = append(feed.Items, &feedhub.Item{ - Id: filepath.Join(b.site.BaseURL, post.GUID), - Title: postTitle, - Link: &feedhub.Link{Href: renderedPost.PostURL}, - Content: string(renderedPost.HTML), - // TO FIX: Why the heck does this only include the first category? + Id: filepath.Join(b.site.BaseURL, post.GUID), + Title: postTitle, + Link: &feedhub.Link{Href: renderedPost.PostURL}, + Content: string(renderedPost.HTML), Category: catName, // TO FIX: Created should be first published Created: post.PublishedAt, @@ -441,7 +431,7 @@ func (b *Builder) renderTemplate(w io.Writer, name string, data interface{}) err func (b *Builder) writeUploads(ctx buildContext, uploads []models.Upload) error { for _, u := range uploads { - fullPath := filepath.Join(ctx.outDir, b.opts.BaseUploads, u.Slug) + fullPath := filepath.Join(ctx.outDir, "uploads", u.Slug) if err := os.MkdirAll(filepath.Dir(fullPath), 0755); err != nil { return err } @@ -469,37 +459,3 @@ func (b *Builder) writeUploads(ctx buildContext, uploads []models.Upload) error } return nil } - -func (b *Builder) writeStaticAssets(ctx buildContext) error { - return fs.WalkDir(b.opts.StaticFS, ".", func(path string, d os.DirEntry, err error) error { - if err != nil { - return err - } else if d.IsDir() { - return nil - } - - fullPath := filepath.Join(ctx.outDir, b.opts.BaseStatic, path) - if err := os.MkdirAll(filepath.Dir(fullPath), 0755); err != nil { - return err - } - - return func() error { - r, err := b.opts.StaticFS.Open(path) - if err != nil { - return err - } - defer r.Close() - - w, err := os.Create(fullPath) - if err != nil { - return err - } - defer w.Close() - - if _, err := io.Copy(w, r); err != nil { - return err - } - return nil - }() - }) -} diff --git a/providers/sitebuilder/tmpls.go b/providers/sitebuilder/tmpls.go index cea02f5..2152290 100644 --- a/providers/sitebuilder/tmpls.go +++ b/providers/sitebuilder/tmpls.go @@ -29,17 +29,12 @@ const ( ) type Options struct { - BasePosts string // BasePosts is the base path for posts. - BaseUploads string // BaseUploads is the base path for uploads. - BaseStatic string // BaseStatic is the base path for static assets. + // BasePosts is the base path for posts. + BasePosts string // TemplatesFS provides the raw templates for rendering the site. TemplatesFS fs.FS - // StaticFS provides the raw assets for the site. This will be written as is - // from the BaseStatic dir. - StaticFS fs.FS - // FeedItems holds the number of posts to show in the feed. FeedItems int diff --git a/services/publisher/service.go b/services/publisher/service.go index 939817a..2ed9046 100644 --- a/services/publisher/service.go +++ b/services/publisher/service.go @@ -3,7 +3,6 @@ package publisher import ( "context" "io" - "io/fs" "iter" "log" "os" @@ -103,22 +102,9 @@ func (p *Publisher) publishSite(ctx context.Context, pubSite pubmodel.Site, targ renderTZ = time.UTC } - templateFS, err := fs.Sub(simplecss.FS, "templates") - if err != nil { - return err - } - - staticFS, err := fs.Sub(simplecss.FS, "static") - if err != nil { - return err - } - sb, err := sitebuilder.New(pubSite, sitebuilder.Options{ BasePosts: "/posts", - BaseUploads: "/uploads", - BaseStatic: "/static", - TemplatesFS: templateFS, - StaticFS: staticFS, + TemplatesFS: simplecss.FS, FeedItems: 30, RenderTZ: renderTZ, }) diff --git a/views/categories/edit.html b/views/categories/edit.html index c6c3606..c838778 100644 --- a/views/categories/edit.html +++ b/views/categories/edit.html @@ -1,6 +1,6 @@
-
{{ if .isNew }}New Category{{ else }}Edit Category{{ end }}
+

{{ if .isNew }}New Category{{ else }}Edit Category{{ end }}

{{ if .isNew }} @@ -10,27 +10,27 @@ {{ end }}
- +
- +
Auto-generated from name if left blank.
- +
Markdown supported. Displayed on the category archive page.
-
+
{{ if not .isNew }} diff --git a/views/categories/index.html b/views/categories/index.html index 2d17beb..f768977 100644 --- a/views/categories/index.html +++ b/views/categories/index.html @@ -1,32 +1,35 @@
+

Categories

- {{ if .categories }} - - +
+ + + + + + + + + + {{ range .categories }} - - - + + + + - - - {{ range .categories }} - - - - - - {{ end }} - -
NameSlugPosts
NameSlugPosts{{ .Name }}{{ .Slug }}{{ .PostCount }} + Edit +
{{ .Name }}{{ .Slug }}{{ .PostCount }}
- {{ else }} -
-
📚
No categories yet.
-
- {{ end }} + {{ else }} + + No categories yet. + + {{ end }} + +
diff --git a/views/layouts/main.html b/views/layouts/main.html index 908094f..2b81177 100644 --- a/views/layouts/main.html +++ b/views/layouts/main.html @@ -7,7 +7,7 @@ - + {{ template "_common/nav" . }} {{ embed }} diff --git a/views/posts/edit.html b/views/posts/edit.html index d162788..07be770 100644 --- a/views/posts/edit.html +++ b/views/posts/edit.html @@ -1,6 +1,6 @@ {{ $isPublished := ne .post.State 1 }}
-
@@ -10,7 +10,9 @@
- +
+ +
{{ if $isPublished }} diff --git a/views/posts/index.html b/views/posts/index.html index bbf445d..3d2597f 100644 --- a/views/posts/index.html +++ b/views/posts/index.html @@ -28,9 +28,12 @@
{{ if eq $p.State 1 }} - Draft + {{ $.user.FormatTime $p.UpdatedAt }} Draft {{ else }} - + {{ $.user.FormatTime $p.PublishedAt }} + {{ end }} + {{ range $p.Categories }} + {{ .Name }} {{ end }}