shithub: hugo

Download patch

ref: 0987e98db368611ceae6e83f14bbf57b8330c110
parent: 29e786aac5b3674b26f24fae6a8dd6ad92a12137
author: Jonathan Anderson <[email protected]>
date: Thu Jun 18 18:59:08 EDT 2015

Add support for baseof.ace templates in themes.

When we find a template that requires a base template, we should also look
for that base template in the current theme.

Fixes #1215.

--- a/docs/content/templates/ace.md
+++ b/docs/content/templates/ace.md
@@ -35,6 +35,8 @@
 2. <current-path>/baseof.ace
 3. _default/<template-name>-baseof.ace, e.g. list-baseof.ace.
 4. _default/baseof.ace	
+5. <themedir>/layouts/_default/<template-name>-baseof.ace
+6. <themedir>/layouts/_default/baseof.ace
 ```
 
 In the above, `current-path` is where the corresponding inner template lives, `list.ace`, `single.ace`, `index.ace` ...
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -21,6 +21,7 @@
 	"github.com/spf13/hugo/helpers"
 	"github.com/spf13/hugo/hugofs"
 	jww "github.com/spf13/jwalterweatherman"
+	"github.com/spf13/viper"
 	"github.com/yosssi/ace"
 	"html/template"
 	"io"
@@ -300,15 +301,22 @@
 					//   2. <current-path>/baseof.ace
 					//   3. _default/<template-name>-baseof.ace, e.g. list-baseof.ace.
 					//   4. _default/baseof.ace
+					//   5. <themedir>/layouts/_default/<template-name>-baseof.ace
+					//   6. <themedir>/layouts/_default/baseof.ace
 
 					currBaseAceFilename := fmt.Sprintf("%s-%s", helpers.Filename(path), baseAceFilename)
 					templateDir := filepath.Dir(path)
+					themeDir := filepath.Join(
+						viper.GetString("WorkingDir"), "themes", viper.GetString("theme"))
 
 					pathsToCheck := []string{
 						filepath.Join(templateDir, currBaseAceFilename),
 						filepath.Join(templateDir, baseAceFilename),
 						filepath.Join(absPath, "_default", currBaseAceFilename),
-						filepath.Join(absPath, "_default", baseAceFilename)}
+						filepath.Join(absPath, "_default", baseAceFilename),
+						filepath.Join(themeDir, "layouts", "_default", currBaseAceFilename),
+						filepath.Join(themeDir, "layouts", "_default", baseAceFilename),
+					}
 
 					for _, pathToCheck := range pathsToCheck {
 						if ok, err := helpers.Exists(pathToCheck, hugofs.OsFs); err == nil && ok {