generated from ElnuDev/go-project
Reload all templates on change to preserve load order
This commit is contained in:
parent
e70916c6c1
commit
df8e0f8903
1 changed files with 15 additions and 13 deletions
|
@ -13,7 +13,7 @@ import (
|
||||||
type TemplateSet struct {
|
type TemplateSet struct {
|
||||||
templates *template.Template
|
templates *template.Template
|
||||||
paths []string
|
paths []string
|
||||||
modTimes map[string]time.Time
|
loadTimes map[string]time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet {
|
func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet {
|
||||||
|
@ -33,7 +33,7 @@ func newTemplateSet(partials *TemplateSet, paths ...string) TemplateSet {
|
||||||
return TemplateSet{
|
return TemplateSet{
|
||||||
templates: templates,
|
templates: templates,
|
||||||
paths: allPaths,
|
paths: allPaths,
|
||||||
modTimes: modTimes,
|
loadTimes: modTimes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,19 +49,21 @@ func (templateSet *TemplateSet) ExecuteTemplate(wr io.Writer, name string, data
|
||||||
return templateSet.templates.ExecuteTemplate(wr, name, data)
|
return templateSet.templates.ExecuteTemplate(wr, name, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (templateSet *TemplateSet) reloadTemplateIfModified(path string) {
|
func (templateSet *TemplateSet) reloadTemplatesIfModified() {
|
||||||
|
for path, loadTime := range templateSet.loadTimes {
|
||||||
fileInfo, _ := os.Stat(path)
|
fileInfo, _ := os.Stat(path)
|
||||||
modTime := fileInfo.ModTime()
|
modTime := fileInfo.ModTime()
|
||||||
if modTime.After(templateSet.modTimes[path]) {
|
if modTime.After(loadTime) {
|
||||||
fmt.Printf("Reloading template %s...\n", path)
|
fmt.Printf("%s updated: reloading templates...\n", path)
|
||||||
templateSet.templates.ParseFiles(path)
|
goto update
|
||||||
templateSet.modTimes[path] = modTime
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
func (templateSet *TemplateSet) reloadTemplatesIfModified() {
|
update:
|
||||||
|
now := time.Now()
|
||||||
for _, path := range templateSet.paths {
|
for _, path := range templateSet.paths {
|
||||||
templateSet.reloadTemplateIfModified(path)
|
templateSet.templates.ParseFiles(path)
|
||||||
|
templateSet.loadTimes[path] = now
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue