mirror of
https://github.com/caddyserver/caddy.git
synced 2025-02-17 23:45:41 -05:00
Generate meta elements from prelude items description and keywords (#1335)
* Generate meta elements from useful front matters. Limited to the default template and specific elements. * Rerun gofmt * Add "keywords" and remove "language" to/from the list of meta tags. * Add a simple positive list test for the meta tag generation. * Move the meta tag list to a var at the begin of the file. Seperate the Meta tags from the other front matters: - Don't override user settings with name `meta` - Cleaner Code. * Remove the uneccessary `[:]` in the []Bytes to String casting. @mholt was right ;) * One minor refinement. Combining two statements.
This commit is contained in:
parent
11adb2e5a7
commit
e5ef285e59
3 changed files with 64 additions and 2 deletions
|
@ -17,6 +17,13 @@ type FileInfo struct {
|
||||||
ctx httpserver.Context
|
ctx httpserver.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var recognizedMetaTags = []string{
|
||||||
|
"author",
|
||||||
|
"copyright",
|
||||||
|
"description",
|
||||||
|
"subject",
|
||||||
|
}
|
||||||
|
|
||||||
// Summarize returns an abbreviated string representation of the markdown stored in this file.
|
// Summarize returns an abbreviated string representation of the markdown stored in this file.
|
||||||
// wordcount is the number of words returned in the summary.
|
// wordcount is the number of words returned in the summary.
|
||||||
func (f FileInfo) Summarize(wordcount int) (string, error) {
|
func (f FileInfo) Summarize(wordcount int) (string, error) {
|
||||||
|
@ -63,6 +70,14 @@ func (c *Config) Markdown(title string, r io.Reader, dirents []os.FileInfo, ctx
|
||||||
mdata.Variables["title"] = title
|
mdata.Variables["title"] = title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// move available and valid front matters to the meta values
|
||||||
|
meta := make(map[string]string)
|
||||||
|
for _, val := range recognizedMetaTags {
|
||||||
|
if mVal, ok := mdata.Variables[val]; ok {
|
||||||
|
meta[val] = mVal.(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// massage possible files
|
// massage possible files
|
||||||
files := []FileInfo{}
|
files := []FileInfo{}
|
||||||
for _, ent := range dirents {
|
for _, ent := range dirents {
|
||||||
|
@ -73,5 +88,5 @@ func (c *Config) Markdown(title string, r io.Reader, dirents []os.FileInfo, ctx
|
||||||
files = append(files, file)
|
files = append(files, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
return execTemplate(c, mdata, files, ctx)
|
return execTemplate(c, mdata, meta, files, ctx)
|
||||||
}
|
}
|
||||||
|
|
42
caddyhttp/markdown/process_test.go
Normal file
42
caddyhttp/markdown/process_test.go
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
package markdown
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mholt/caddy/caddyhttp/httpserver"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfig_Markdown(t *testing.T) {
|
||||||
|
tests := []map[string]string{
|
||||||
|
{"author": "authorVal"},
|
||||||
|
{"copyright": "copyrightVal"},
|
||||||
|
{"description": "descriptionVal"},
|
||||||
|
{"subject": "subjectVal"},
|
||||||
|
{"author": "authorVal", "copyright": "copyrightVal"},
|
||||||
|
{"author": "authorVal", "copyright": "copyrightVal", "description": "descriptionVal"},
|
||||||
|
{"author": "authorVal", "copyright": "copyrightVal", "description": "descriptionVal", "subject": "subjectVal"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, meta := range tests {
|
||||||
|
config := &Config{
|
||||||
|
Template: GetDefaultTemplate(),
|
||||||
|
}
|
||||||
|
|
||||||
|
toml := "+++"
|
||||||
|
for key, val := range meta {
|
||||||
|
toml = toml + "\n" + key + "= \"" + val + "\""
|
||||||
|
}
|
||||||
|
toml = toml + "\n+++"
|
||||||
|
|
||||||
|
res, _ := config.Markdown("Test title", strings.NewReader(toml), []os.FileInfo{}, httpserver.Context{})
|
||||||
|
sRes := string(res)
|
||||||
|
|
||||||
|
for key, val := range meta {
|
||||||
|
c := strings.Contains(sRes, "<meta name=\""+key+"\" content=\""+val+"\">")
|
||||||
|
if !c {
|
||||||
|
t.Error("Test case", i, "should contain meta", key, val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ type Data struct {
|
||||||
Doc map[string]interface{}
|
Doc map[string]interface{}
|
||||||
Styles []string
|
Styles []string
|
||||||
Scripts []string
|
Scripts []string
|
||||||
|
Meta map[string]string
|
||||||
Files []FileInfo
|
Files []FileInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,12 +27,13 @@ func (d Data) Include(filename string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// execTemplate executes a template given a requestPath, template, and metadata
|
// execTemplate executes a template given a requestPath, template, and metadata
|
||||||
func execTemplate(c *Config, mdata metadata.Metadata, files []FileInfo, ctx httpserver.Context) ([]byte, error) {
|
func execTemplate(c *Config, mdata metadata.Metadata, meta map[string]string, files []FileInfo, ctx httpserver.Context) ([]byte, error) {
|
||||||
mdData := Data{
|
mdData := Data{
|
||||||
Context: ctx,
|
Context: ctx,
|
||||||
Doc: mdata.Variables,
|
Doc: mdata.Variables,
|
||||||
Styles: c.Styles,
|
Styles: c.Styles,
|
||||||
Scripts: c.Scripts,
|
Scripts: c.Scripts,
|
||||||
|
Meta: meta,
|
||||||
Files: files,
|
Files: files,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +76,9 @@ const (
|
||||||
<head>
|
<head>
|
||||||
<title>{{.Doc.title}}</title>
|
<title>{{.Doc.title}}</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
{{range $key, $val := .Meta}}
|
||||||
|
<meta name="{{$key}}" content="{{$val}}">
|
||||||
|
{{end}}
|
||||||
{{- range .Styles}}
|
{{- range .Styles}}
|
||||||
<link rel="stylesheet" href="{{.}}">
|
<link rel="stylesheet" href="{{.}}">
|
||||||
{{- end}}
|
{{- end}}
|
||||||
|
|
Loading…
Add table
Reference in a new issue