mirror of
https://github.com/gohugoio/hugo.git
synced 2024-05-11 05:54:58 +00:00
Move alias logic to target module
I want to move all logic to writing aliases to target so I can pave the way for writing aliases specific to other runtimes (like .htaccess for apache or a script for updating AWS or symlinking on a filesystem).
This commit is contained in:
@@ -34,7 +34,11 @@ func (fs *Filesystem) Publish(path string, r io.Reader) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
path, _ = filepath.Split(translated)
|
||||
return writeToDisk(translated, r)
|
||||
}
|
||||
|
||||
func writeToDisk(translated string, r io.Reader) (err error) {
|
||||
path, _ := filepath.Split(translated)
|
||||
ospath := filepath.FromSlash(path)
|
||||
|
||||
if ospath != "" {
|
||||
|
||||
@@ -3,11 +3,30 @@ package target
|
||||
import (
|
||||
helpers "github.com/spf13/hugo/template"
|
||||
"path"
|
||||
"bytes"
|
||||
"strings"
|
||||
"html/template"
|
||||
)
|
||||
|
||||
const ALIAS = "<!DOCTYPE html><html><head><link rel=\"canonical\" href=\"{{ .Permalink }}\"/><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /><meta http-equiv=\"refresh\" content=\"0;url={{ .Permalink }}\" /></head></html>"
|
||||
const ALIAS_XHTML = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><link rel=\"canonical\" href=\"{{ .Permalink }}\"/><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /><meta http-equiv=\"refresh\" content=\"0;url={{ .Permalink }}\" /></head></html>"
|
||||
|
||||
var DefaultAliasTemplates *template.Template
|
||||
|
||||
func init() {
|
||||
DefaultAliasTemplates = template.New("")
|
||||
template.Must(DefaultAliasTemplates.New("alias").Parse(ALIAS))
|
||||
template.Must(DefaultAliasTemplates.New("alias-xhtml").Parse(ALIAS_XHTML))
|
||||
}
|
||||
|
||||
type AliasPublisher interface {
|
||||
Translator
|
||||
Publish(string, template.HTML) error
|
||||
}
|
||||
|
||||
type HTMLRedirectAlias struct {
|
||||
PublishDir string
|
||||
Templates *template.Template
|
||||
}
|
||||
|
||||
func (h *HTMLRedirectAlias) Translate(alias string) (aliasPath string, err error) {
|
||||
@@ -16,3 +35,31 @@ func (h *HTMLRedirectAlias) Translate(alias string) (aliasPath string, err error
|
||||
}
|
||||
return path.Join(h.PublishDir, helpers.Urlize(alias)), nil
|
||||
}
|
||||
|
||||
type AliasNode struct {
|
||||
Permalink template.HTML
|
||||
}
|
||||
|
||||
func (h *HTMLRedirectAlias) Publish(path string, permalink template.HTML) (err error) {
|
||||
if path, err = h.Translate(path); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
t := "alias"
|
||||
if strings.HasSuffix(path, ".xhtml") {
|
||||
t = "alias-xhtml"
|
||||
}
|
||||
|
||||
template := DefaultAliasTemplates
|
||||
if h.Templates != nil {
|
||||
template = h.Templates
|
||||
}
|
||||
|
||||
buffer := new(bytes.Buffer)
|
||||
err = template.ExecuteTemplate(buffer, t, &AliasNode{permalink})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return writeToDisk(path, buffer)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user