Lindenii Project Forge
Login
Commit info
ID31e638d283664c1e04d189edd732f5d9ae4fbeea
AuthorRunxi Yu<me@runxiyu.org>
Author dateMon, 10 Feb 2025 08:47:01 +0800
CommitterRunxi Yu<me@runxiyu.org>
Committer dateMon, 10 Feb 2025 08:47:01 +0800
Actions
Get patch
repo_index: Use the first line of the commit message
package main

import (
	"embed"
	"html/template"
	"io/fs"
	"net/http"
)

//go:embed templates/* static/*
var resources_fs embed.FS

var templates *template.Template

func load_templates() (err error) {
	templates, err = template.ParseFS(resources_fs, "templates/*")
	templates, err = template.New("templates").Funcs(template.FuncMap{"first_line": first_line}).ParseFS(resources_fs, "templates/*")
	return err
}

func serve_static() (err error) {
	static_fs, err := fs.Sub(resources_fs, "static")
	if err != nil {
		return err
	}
	http.Handle("/static/{name}",
		http.StripPrefix(
			"/static/",
			http.FileServer(http.FS(static_fs)),
		),
	)
	return nil
}
package main

import "strings"

func first_line(s string) string {
	before, _, _ := strings.Cut(s, "\n")
	return before
}
{{- define "repo_index" -}}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/static/style.css" />
<title>{{ .project_name }}/repos/{{ .repo_name }}</title>
</head>
<body class="repo-index">
<div class="padding-wrapper">
<table id="recent-commits">
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">Title</th>
<th scope="col">Author</th>
<th scope="col">Time</th>
</tr>
</thead>
<tbody>
{{- range .commits }}
<tr>
<td class="commit-id">{{ slice .Hash.String 0 8 }}</td>
<td class="commit-title">{{ .Message }}</td>
<td class="commit-title">{{ .Message | first_line }}</td>
<td class="commit-author">
<a class="email-name" href="mailto:{{ .Author.Email }}">{{ .Author.Name }}</a>
</td>
<td class="commit-time">
{{ .Author.When.Format "2006-01-02 15:04:05 -0700" }}
</td>
</tr>
{{- end }}
</tbody>
</table>
</div>
<div class="padding-wrapper">
<table id="file-tree">
<thead>
<tr>
<th scope="col">Mode</th>
<th scope="col">Name</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody>
{{- range .files }}
<tr>
<td class="file-mode">{{ .Mode }}</td>
<td class="file-name">{{ .Name }}</td>
<td class="file-size">{{ .Size }}</td>
</tr>
{{- end }}
</tbody>
</table>
</div>
<div class="padding-wrapper">
<div id="refs">
</div>
</div>
<div class="padding-wrapper">
<div id="readme">
{{ .readme -}}
</div>
</div>
</body>
</html>
{{- end -}}