summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Paul <n@nc0.fr>2023-05-01 13:03:03 +0200
committerNicolas Paul <n@nc0.fr>2023-05-01 13:03:03 +0200
commitf57c0d15c931563a55abdc9cea72d189a24f7456 (patch)
tree97a7cd740da179b0a2f160a92bf2ec9da9ed6cd9
parent314db62804a5696aa81ebf0a680cc8f9e2e46ede (diff)
Add slug to HTML templates
-rw-r--r--crocc.go3
-rw-r--r--doc/src/doc/template.md2
-rw-r--r--template.go4
-rw-r--r--transformations.go5
4 files changed, 10 insertions, 4 deletions
diff --git a/crocc.go b/crocc.go
index 74b14f5..e88ab33 100644
--- a/crocc.go
+++ b/crocc.go
@@ -136,7 +136,8 @@ func Crocc(path string, d os.DirEntry, e error) error {
// If the file is a Markdown file, transform it into HTML
o = strings.TrimSuffix(o, filepath.Ext(o)) + ".html"
- if err := TransformMarkdownFile(path, o); err != nil {
+ s := strings.TrimSuffix(strings.TrimPrefix(o, *out), ".html")
+ if err := TransformMarkdownFile(path, o, s); err != nil {
return err
}
diff --git a/doc/src/doc/template.md b/doc/src/doc/template.md
index bf0e387..ab209b9 100644
--- a/doc/src/doc/template.md
+++ b/doc/src/doc/template.md
@@ -41,6 +41,7 @@ The following variables are available:
- `.Content`: The content of the document, as HTML.
- `.Site`: The URL of the site.
- `.Generator`: A string containing the name and version of the generator.
+- `.Slug`: The slug of the document.
> **Note:** The `.Content` variable is already HTML, so it does not need to be
> escaped.
@@ -58,6 +59,7 @@ Here is a sample template:
<meta name="author" content="{{ .Author }}">
<meta name="generator" content="{{ .Generator }}">
<meta name="viewport" content="width=device-width, initial-scale=1">
+ <link href="{{ .Site }}{{ .Slug }}.html" rel="canonical">
</head>
<body>
<header>
diff --git a/template.go b/template.go
index 1fa243b..8545e1e 100644
--- a/template.go
+++ b/template.go
@@ -21,10 +21,11 @@ type TemplateData struct {
Content string
Site string
Generator string
+ Slug string
}
// GenerateHTML generates the HTML file from the Markdown document.
-func GenerateHTML(fm FrontMatter, content string) ([]byte, error) {
+func GenerateHTML(fm FrontMatter, slug, content string) ([]byte, error) {
var buffer bytes.Buffer
err := htmlTemplate.Execute(&buffer, TemplateData{
@@ -37,6 +38,7 @@ func GenerateHTML(fm FrontMatter, content string) ([]byte, error) {
Content: content,
Site: *url,
Generator: fmt.Sprintf("crocc %s (https://crocc.nc0.fr)", version),
+ Slug: slug,
})
return buffer.Bytes(), err
diff --git a/transformations.go b/transformations.go
index 14c57b3..aa2fc30 100644
--- a/transformations.go
+++ b/transformations.go
@@ -42,7 +42,8 @@ func TransformDirectory(o string) error {
// TransformMarkdownFile generates the corresponding HTML document from a
// Markdown file.
-func TransformMarkdownFile(i, o string) error {
+// s corresponds to the slug of the document.
+func TransformMarkdownFile(i, o, s string) error {
raw, err := os.ReadFile(i)
if err != nil {
return err
@@ -75,7 +76,7 @@ func TransformMarkdownFile(i, o string) error {
renderer := html.NewRenderer(html.RendererOptions{Flags: htmlFlags})
html := markdown.Render(ast, renderer)
- c, err := GenerateHTML(fm, string(html))
+ c, err := GenerateHTML(fm, s, string(html))
if err != nil {
return err
}