summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--config/setup/markdown.go4
-rw-r--r--middleware/markdown/generator.go8
-rw-r--r--middleware/markdown/markdown.go24
-rw-r--r--middleware/markdown/page.go82
-rw-r--r--middleware/markdown/process.go2
5 files changed, 61 insertions, 59 deletions
diff --git a/config/setup/markdown.go b/config/setup/markdown.go
index f16558ec4..dc433f65b 100644
--- a/config/setup/markdown.go
+++ b/config/setup/markdown.go
@@ -25,12 +25,12 @@ func Markdown(c *Controller) (middleware.Middleware, error) {
IndexFiles: []string{"index.md"},
}
- // For any configs that enabled static site gen, sweep the whole path at startup
+ // Sweep the whole path at startup to at least generate link index, maybe generate static site
c.Startup = append(c.Startup, func() error {
for i := range mdconfigs {
cfg := &mdconfigs[i]
- // Generate static files.
+ // Generate link index and static files (if enabled)
if err := markdown.GenerateStatic(md, cfg); err != nil {
return err
}
diff --git a/middleware/markdown/generator.go b/middleware/markdown/generator.go
index 685a210e1..53e0815d6 100644
--- a/middleware/markdown/generator.go
+++ b/middleware/markdown/generator.go
@@ -1,7 +1,7 @@
package markdown
import (
- "crypto/sha1"
+ "crypto/md5"
"encoding/hex"
"fmt"
"io/ioutil"
@@ -13,7 +13,9 @@ import (
"github.com/mholt/caddy/middleware"
)
-// GenerateStatic generate static files from markdowns.
+// GenerateStatic generate static files and link index from markdowns.
+// It only generates static files if it is enabled (cfg.StaticDir
+// must be set).
func GenerateStatic(md Markdown, cfg *Config) error {
generated, err := generateLinks(md, cfg)
if err != nil {
@@ -130,6 +132,6 @@ func computeDirHash(md Markdown, c Config) (string, error) {
return "", err
}
- sum := sha1.Sum([]byte(hashString))
+ sum := md5.Sum([]byte(hashString))
return hex.EncodeToString(sum[:]), nil
}
diff --git a/middleware/markdown/markdown.go b/middleware/markdown/markdown.go
index 80ca45b12..486a17287 100644
--- a/middleware/markdown/markdown.go
+++ b/middleware/markdown/markdown.go
@@ -94,9 +94,8 @@ func (c Config) IsValidExt(ext string) bool {
// ServeHTTP implements the http.Handler interface.
func (md Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
- for i := range md.Configs {
- m := &md.Configs[i]
- if !middleware.Path(r.URL.Path).Matches(m.PathScope) {
+ for _, cfg := range md.Configs {
+ if !middleware.Path(r.URL.Path).Matches(cfg.PathScope) {
continue
}
@@ -105,7 +104,7 @@ func (md Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error
fpath = idx
}
- for _, ext := range m.Extensions {
+ for _, ext := range cfg.Extensions {
if strings.HasSuffix(fpath, ext) {
f, err := md.FileSys.Open(fpath)
if err != nil {
@@ -121,19 +120,18 @@ func (md Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error
}
// if development is set, scan directory for file changes for links.
- if m.Development {
- if err := GenerateStatic(md, m); err != nil {
- log.Println(err)
+ if cfg.Development {
+ if err := GenerateStatic(md, &cfg); err != nil {
+ log.Println("On-demand generation error (markdown):", err)
}
}
// if static site is generated, attempt to use it
- if filepath, ok := m.StaticFiles[fpath]; ok {
+ if filepath, ok := cfg.StaticFiles[fpath]; ok {
if fs1, err := os.Stat(filepath); err == nil {
- // if markdown has not been modified
- // since static page generation,
- // serve the static page
- if fs.ModTime().UnixNano() < fs1.ModTime().UnixNano() {
+ // if markdown has not been modified since static page
+ // generation, serve the static page
+ if fs.ModTime().Before(fs1.ModTime()) {
if html, err := ioutil.ReadFile(filepath); err == nil {
w.Write(html)
return http.StatusOK, nil
@@ -156,7 +154,7 @@ func (md Markdown) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error
Req: r,
URL: r.URL,
}
- html, err := md.Process(*m, fpath, body, ctx)
+ html, err := md.Process(cfg, fpath, body, ctx)
if err != nil {
return http.StatusInternalServerError, err
}
diff --git a/middleware/markdown/page.go b/middleware/markdown/page.go
index 21503d0fc..279d5ef8e 100644
--- a/middleware/markdown/page.go
+++ b/middleware/markdown/page.go
@@ -92,7 +92,7 @@ func (l *linkGen) generateLinks(md Markdown, cfg *Config) bool {
l.Unlock()
return false
} else if err != nil {
- log.Println("Error:", err)
+ log.Println("Hash error (markdown):", err)
}
cfg.Links = []PageLink{}
@@ -100,53 +100,55 @@ func (l *linkGen) generateLinks(md Markdown, cfg *Config) bool {
cfg.Lock()
l.lastErr = filepath.Walk(fp, func(path string, info os.FileInfo, err error) error {
for _, ext := range cfg.Extensions {
- if !info.IsDir() && strings.HasSuffix(info.Name(), ext) {
- // Load the file
- body, err := ioutil.ReadFile(path)
- if err != nil {
- return err
- }
+ if info.IsDir() || !strings.HasSuffix(info.Name(), ext) {
+ continue
+ }
- // Get the relative path as if it were a HTTP request,
- // then prepend with "/" (like a real HTTP request)
- reqPath, err := filepath.Rel(md.Root, path)
- if err != nil {
- return err
- }
- reqPath = "/" + reqPath
+ // Load the file
+ body, err := ioutil.ReadFile(path)
+ if err != nil {
+ return err
+ }
- parser := findParser(body)
- if parser == nil {
- // no metadata, ignore.
- continue
- }
- summary, err := parser.Parse(body)
- if err != nil {
- return err
- }
+ // Get the relative path as if it were a HTTP request,
+ // then prepend with "/" (like a real HTTP request)
+ reqPath, err := filepath.Rel(md.Root, path)
+ if err != nil {
+ return err
+ }
+ reqPath = "/" + reqPath
+
+ parser := findParser(body)
+ if parser == nil {
+ // no metadata, ignore.
+ continue
+ }
+ summary, err := parser.Parse(body)
+ if err != nil {
+ return err
+ }
- // truncate summary to maximum length
- if len(summary) > summaryLen {
- summary = summary[:summaryLen]
+ // truncate summary to maximum length
+ if len(summary) > summaryLen {
+ summary = summary[:summaryLen]
- // trim to nearest word
- lastSpace := bytes.LastIndex(summary, []byte(" "))
- if lastSpace != -1 {
- summary = summary[:lastSpace]
- }
+ // trim to nearest word
+ lastSpace := bytes.LastIndex(summary, []byte(" "))
+ if lastSpace != -1 {
+ summary = summary[:lastSpace]
}
+ }
- metadata := parser.Metadata()
+ metadata := parser.Metadata()
- cfg.Links = append(cfg.Links, PageLink{
- Title: metadata.Title,
- URL: reqPath,
- Date: metadata.Date,
- Summary: string(blackfriday.Markdown(summary, SummaryRenderer{}, 0)),
- })
+ cfg.Links = append(cfg.Links, PageLink{
+ Title: metadata.Title,
+ URL: reqPath,
+ Date: metadata.Date,
+ Summary: string(blackfriday.Markdown(summary, SummaryRenderer{}, 0)),
+ })
- break // don't try other file extensions
- }
+ break // don't try other file extensions
}
return nil
diff --git a/middleware/markdown/process.go b/middleware/markdown/process.go
index 8afd92b7b..7d884449d 100644
--- a/middleware/markdown/process.go
+++ b/middleware/markdown/process.go
@@ -114,7 +114,7 @@ func (md Markdown) processTemplate(c Config, requestPath string, tmpl []byte, me
// if static page generation fails,
// nothing fatal, only log the error.
// TODO: Report this non-fatal error, but don't log it here
- log.Println(err)
+ log.Println("Rendering error (markdown):", err)
}
return b.Bytes(), nil