diff --git a/hugolib/site.go b/hugolib/site.go index bbbacb4a8..679fd202a 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -1960,6 +1960,13 @@ func (s *Site) renderAndWritePage(name string, dest string, d interface{}, layou transformLinks = append(transformLinks, transform.LiveReloadInject) } + // For performance reasons we only inject the Hugo generator tag on the home page. + if n, ok := d.(*Node); ok && n.IsHome { + if !viper.GetBool("DisableHugoGeneratorInject") { + transformLinks = append(transformLinks, transform.HugoGeneratorInject) + } + } + var path []byte if viper.GetBool("RelativeURLs") { diff --git a/transform/hugogeneratorinject.go b/transform/hugogeneratorinject.go new file mode 100644 index 000000000..fe82a2eaf --- /dev/null +++ b/transform/hugogeneratorinject.go @@ -0,0 +1,44 @@ +// Copyright 2016 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 transform + +import ( + "bytes" + "fmt" + "regexp" + + "github.com/spf13/hugo/helpers" +) + +var metaTagsCheck = regexp.MustCompile(`(?i)`, helpers.HugoVersion()) + +func HugoGeneratorInject(ct contentTransformer) { + if metaTagsCheck.Match(ct.Content()) { + ct.Write(ct.Content()) + return + } + + head := "" + replace := []byte(fmt.Sprintf("%s\n\t%s", head, hugoGeneratorTag)) + newcontent := bytes.Replace(ct.Content(), []byte(head), replace, 1) + + if len(newcontent) == len(ct.Content()) { + head := "" + replace := []byte(fmt.Sprintf("%s\n\t%s", head, hugoGeneratorTag)) + newcontent = bytes.Replace(ct.Content(), []byte(head), replace, 1) + } + + ct.Write(newcontent) +} diff --git a/transform/hugogeneratorinject_test.go b/transform/hugogeneratorinject_test.go new file mode 100644 index 000000000..3f8b26de7 --- /dev/null +++ b/transform/hugogeneratorinject_test.go @@ -0,0 +1,60 @@ +// Copyright 2016 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 transform + +import ( + "bytes" + "testing" + + "github.com/spf13/hugo/helpers" +) + +func TestHugoGeneratorInject(t *testing.T) { + hugoGeneratorTag = "META" + for i, this := range []struct { + in string + expect string + }{ + {` + +`, ` + META + +`}, + {` + +`, ` + META + +`}, + {``, ``}, + {``, ``}, + {``, ``}, + {``, ``}, + {"", ""}, + {"", ""}, + {"", "\n\tMETA"}, + } { + in := helpers.StringToReader(this.in) + out := new(bytes.Buffer) + + tr := NewChain(HugoGeneratorInject) + tr.Apply(out, in, []byte("")) + + if out.String() != this.expect { + t.Errorf("[%d] Expected \n%q got \n%q", i, this.expect, out.String()) + } + } + +}