diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-03-03 10:47:43 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-03-04 23:33:35 +0100 |
commit | e52e2a70e5e0a2d15fc9befbcd7290761c98589e (patch) | |
tree | ce133a021fcd7535ec2c89ea7897ff543b710a4a /hugolib/alias.go | |
parent | ea165bf9e71c7ca9ddb9f14ddbdbcd506ce554bb (diff) |
hugolib, target: Rework/move the target package
This relates to #3123.
The interfaces and types in `target` made sense at some point, but now this package is too restricted to a hardcoded set of media types.
The overall current logic:
* Create a file path based on some `Translator` with some hardcoded logic handling uglyURLs, hardcoded html suffix etc.
* In in some cases (alias), a template is applied to create the alias file.
* Then the content is written to destination.
One could argue that it is the last bullet that is the actual core responsibility.
This commit fixes that by moving the `hugolib`-related logic where it belong, and simplify the code, i.e. remove the abstractions.
This code will most certainly evolve once we start on #3123, but now it is at least possible to understand where to start.
Fixes #3123
Diffstat (limited to 'hugolib/alias.go')
-rw-r--r-- | hugolib/alias.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/hugolib/alias.go b/hugolib/alias.go new file mode 100644 index 000000000..67c9dc785 --- /dev/null +++ b/hugolib/alias.go @@ -0,0 +1,69 @@ +// Copyright 2017 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "bytes" + "html/template" + "io" +) + +const ( + alias = "<!DOCTYPE html><html><head><title>{{ .Permalink }}</title><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>" + aliasXHtml = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>{{ .Permalink }}</title><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(aliasXHtml)) +} + +type aliasHandler struct { + Templates *template.Template +} + +func newAliasHandler(t *template.Template) aliasHandler { + return aliasHandler{t} +} + +func (a aliasHandler) renderAlias(isXHTML bool, permalink string, page *Page) (io.Reader, error) { + t := "alias" + if isXHTML { + t = "alias-xhtml" + } + + template := defaultAliasTemplates + if a.Templates != nil { + template = a.Templates + t = "alias.html" + } + + data := struct { + Permalink string + Page *Page + }{ + permalink, + page, + } + + buffer := new(bytes.Buffer) + err := template.ExecuteTemplate(buffer, t, data) + if err != nil { + return nil, err + } + return buffer, nil +} |