aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-06-07 23:02:54 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-06-07 23:02:54 +0200
commite9098e00fb6339b759df5b0df2e086cef8a7ce83 (patch)
tree97ada52833cf152cf347f418e24ccb5bc05fd5e4 /pkg
parentc7a8aa113a914e70e027fea93265c7232b865b5e (diff)
downloadcerrado-e9098e00fb6339b759df5b0df2e086cef8a7ce83.tar.gz
cerrado-e9098e00fb6339b759df5b0df2e086cef8a7ce83.tar.bz2
cerrado-e9098e00fb6339b759df5b0df2e086cef8a7ce83.zip
feat: Rework some pages
Diffstat (limited to 'pkg')
-rw-r--r--pkg/handler/git/handler.go40
-rw-r--r--pkg/handler/router.go2
-rw-r--r--pkg/service/git.go36
3 files changed, 62 insertions, 16 deletions
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
index 28cc99e..7bdf372 100644
--- a/pkg/handler/git/handler.go
+++ b/pkg/handler/git/handler.go
@@ -2,8 +2,10 @@ package git
import (
"bytes"
+ "io"
"log/slog"
"net/http"
+ "os"
"path/filepath"
"git.gabrielgio.me/cerrado/pkg/ext"
@@ -15,11 +17,15 @@ import (
"github.com/alecthomas/chroma/v2/styles"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
+ "github.com/gomarkdown/markdown"
+ markdownhtml "github.com/gomarkdown/markdown/html"
+ "github.com/gomarkdown/markdown/parser"
)
type (
GitHandler struct {
gitService gitService
+ readmePath string
}
gitService interface {
@@ -31,11 +37,16 @@ type (
ListTags(name string) ([]*object.Tag, error)
ListBranches(name string) ([]*plumbing.Reference, error)
}
+
+ configurationRepository interface {
+ GetRootReadme() string
+ }
)
-func NewGitHandler(gitService gitService) *GitHandler {
+func NewGitHandler(gitService gitService, confRepo configurationRepository) *GitHandler {
return &GitHandler{
gitService: gitService,
+ readmePath: confRepo.GetRootReadme(),
}
}
@@ -46,7 +57,32 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) {
return
}
- gitList := &templates.GitListPage{repos}
+ f, err := os.Open(g.readmePath)
+ if err != nil {
+ slog.Error("Error loading readme file", "error", err)
+ return
+ }
+
+ bs, err := io.ReadAll(f)
+ if err != nil {
+ slog.Error("Error reading readme file bytes", "error", err)
+ return
+ }
+
+ extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
+ p := parser.NewWithExtensions(extensions)
+ doc := p.Parse(bs)
+
+ htmlFlag := markdownhtml.CommonFlags | markdownhtml.HrefTargetBlank
+ opts := markdownhtml.RendererOptions{Flags: htmlFlag}
+ renderer := markdownhtml.NewRenderer(opts)
+
+ bs = markdown.Render(doc, renderer)
+
+ gitList := &templates.GitListPage{
+ Respositories: repos,
+ About: bs,
+ }
templates.WritePageTemplate(w, gitList)
}
diff --git a/pkg/handler/router.go b/pkg/handler/router.go
index de5117c..bf13ad5 100644
--- a/pkg/handler/router.go
+++ b/pkg/handler/router.go
@@ -20,7 +20,7 @@ func MountHandler(
configRepo *serverconfig.ConfigurationRepository,
) (http.Handler, error) {
var (
- gitHandler = git.NewGitHandler(gitService)
+ gitHandler = git.NewGitHandler(gitService, configRepo)
aboutHandler = about.NewAboutHandler(configRepo)
configHander = config.ConfigFile(configRepo)
)
diff --git a/pkg/service/git.go b/pkg/service/git.go
index f886785..31a1cbb 100644
--- a/pkg/service/git.go
+++ b/pkg/service/git.go
@@ -1,21 +1,24 @@
package service
import (
+ "log/slog"
+ "os"
"path"
"git.gabrielgio.me/cerrado/pkg/config"
"git.gabrielgio.me/cerrado/pkg/git"
+ "git.gabrielgio.me/cerrado/pkg/u"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
)
type (
Repository struct {
- Name string
- Title string
- LastCommitMessage string
- LastCommitDate string
- Ref string
+ Name string
+ Title string
+ Description string
+ LastCommitDate string
+ Ref string
}
GitService struct {
@@ -46,9 +49,6 @@ func (g *GitService) ListRepositories() ([]*Repository, error) {
if err != nil {
return nil, err
}
- if err != nil {
- return nil, err
- }
obj, err := repo.LastCommit()
if err != nil {
@@ -60,13 +60,23 @@ func (g *GitService) ListRepositories() ([]*Repository, error) {
return nil, err
}
+ d := path.Join(r.Path, "description")
+ description := ""
+ if u.FileExist(d) {
+ if b, err := os.ReadFile(d); err == nil {
+ description = string(b)
+ } else {
+ slog.Error("Error loading description file", "err", err)
+ }
+ }
+
baseName := path.Base(r.Path)
repos[i] = &Repository{
- Name: baseName,
- Title: baseName,
- LastCommitMessage: obj.Message,
- LastCommitDate: obj.Author.When.Format(timeFormat),
- Ref: head.Name().Short(),
+ Name: baseName,
+ Title: baseName,
+ Description: description,
+ LastCommitDate: obj.Author.When.Format(timeFormat),
+ Ref: head.Name().Short(),
}
}