Fixed custom templates for static builds (#1087)
This commit is contained in:
		
							parent
							
								
									d21d5fd736
								
							
						
					
					
						commit
						db6777d369
					
				
					 2 changed files with 89 additions and 15 deletions
				
			
		|  | @ -49,7 +49,7 @@ func NewFuncMap() []template.FuncMap { | |||
| 			return setting.AppVer | ||||
| 		}, | ||||
| 		"AppBuiltWith": func() string { | ||||
| 				return setting.AppBuiltWith | ||||
| 			return setting.AppBuiltWith | ||||
| 		}, | ||||
| 		"AppDomain": func() string { | ||||
| 			return setting.Domain | ||||
|  |  | |||
|  | @ -7,7 +7,10 @@ | |||
| package templates | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"html/template" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"path" | ||||
| 	"strings" | ||||
|  | @ -15,7 +18,6 @@ import ( | |||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"github.com/Unknwon/com" | ||||
| 	"github.com/go-macaron/bindata" | ||||
| 	"gopkg.in/macaron.v1" | ||||
| ) | ||||
| 
 | ||||
|  | @ -23,22 +25,94 @@ var ( | |||
| 	templates = template.New("") | ||||
| ) | ||||
| 
 | ||||
| type templateFileSystem struct { | ||||
| 	files []macaron.TemplateFile | ||||
| } | ||||
| 
 | ||||
| func (templates templateFileSystem) ListFiles() []macaron.TemplateFile { | ||||
| 	return templates.files | ||||
| } | ||||
| 
 | ||||
| func (templates templateFileSystem) Get(name string) (io.Reader, error) { | ||||
| 	for i := range templates.files { | ||||
| 		if templates.files[i].Name()+templates.files[i].Ext() == name { | ||||
| 			return bytes.NewReader(templates.files[i].Data()), nil | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil, fmt.Errorf("file '%s' not found", name) | ||||
| } | ||||
| 
 | ||||
| // Renderer implements the macaron handler for serving the templates.
 | ||||
| func Renderer() macaron.Handler { | ||||
| 	fs := templateFileSystem{} | ||||
| 	fs.files = make([]macaron.TemplateFile, 0, 10) | ||||
| 
 | ||||
| 	for _, assetPath := range AssetNames() { | ||||
| 		if strings.HasPrefix(assetPath, "mail/") { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		if !strings.HasSuffix(assetPath, ".tmpl") { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		content, err := Asset(assetPath) | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			log.Warn("Failed to read embedded %s template. %v", assetPath, err) | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		fs.files = append(fs.files, macaron.NewTplFile( | ||||
| 			strings.TrimSuffix( | ||||
| 				assetPath, | ||||
| 				".tmpl", | ||||
| 			), | ||||
| 			content, | ||||
| 			".tmpl", | ||||
| 		)) | ||||
| 	} | ||||
| 
 | ||||
| 	customDir := path.Join(setting.CustomPath, "templates") | ||||
| 
 | ||||
| 	if com.IsDir(customDir) { | ||||
| 		files, err := com.StatDir(customDir) | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			log.Warn("Failed to read %s templates dir. %v", customDir, err) | ||||
| 		} else { | ||||
| 			for _, filePath := range files { | ||||
| 				if strings.HasPrefix(filePath, "mail/") { | ||||
| 					continue | ||||
| 				} | ||||
| 
 | ||||
| 				if !strings.HasSuffix(filePath, ".tmpl") { | ||||
| 					continue | ||||
| 				} | ||||
| 
 | ||||
| 				content, err := ioutil.ReadFile(path.Join(customDir, filePath)) | ||||
| 
 | ||||
| 				if err != nil { | ||||
| 					log.Warn("Failed to read custom %s template. %v", filePath, err) | ||||
| 					continue | ||||
| 				} | ||||
| 
 | ||||
| 				fs.files = append(fs.files, macaron.NewTplFile( | ||||
| 					strings.TrimSuffix( | ||||
| 						filePath, | ||||
| 						".tmpl", | ||||
| 					), | ||||
| 					content, | ||||
| 					".tmpl", | ||||
| 				)) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return macaron.Renderer(macaron.RenderOptions{ | ||||
| 		Funcs: NewFuncMap(), | ||||
| 		AppendDirectories: []string{ | ||||
| 			path.Join(setting.CustomPath, "templates"), | ||||
| 		}, | ||||
| 		TemplateFileSystem: bindata.Templates( | ||||
| 			bindata.Options{ | ||||
| 				Asset:      Asset, | ||||
| 				AssetDir:   AssetDir, | ||||
| 				AssetInfo:  AssetInfo, | ||||
| 				AssetNames: AssetNames, | ||||
| 				Prefix:     "", | ||||
| 			}, | ||||
| 		), | ||||
| 		Funcs:              NewFuncMap(), | ||||
| 		TemplateFileSystem: fs, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue