package target import ( "bytes" helpers "github.com/spf13/hugo/template" "html/template" "path" "strings" ) const ALIAS = "
" const ALIAS_XHTML = "" 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) { if len(alias) <= 0 { return } if strings.HasSuffix(alias, "/") { alias = alias + "index.html" } else if !strings.HasSuffix(alias, ".html") { alias = alias + "/index.html" } 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) }