...
1
2 package vfstemplate
3
4 import (
5 "fmt"
6 "html/template"
7 "net/http"
8 "path"
9
10 "github.com/shurcooL/httpfs/path/vfspath"
11 "github.com/shurcooL/httpfs/vfsutil"
12 )
13
14
15
16
17
18 func ParseFiles(fs http.FileSystem, t *template.Template, filenames ...string) (*template.Template, error) {
19 return parseFiles(fs, t, filenames...)
20 }
21
22
23
24
25
26
27 func ParseGlob(fs http.FileSystem, t *template.Template, pattern string) (*template.Template, error) {
28 filenames, err := vfspath.Glob(fs, pattern)
29 if err != nil {
30 return nil, err
31 }
32 if len(filenames) == 0 {
33 return nil, fmt.Errorf("vfs/html/vfstemplate: pattern matches no files: %#q", pattern)
34 }
35 return parseFiles(fs, t, filenames...)
36 }
37
38
39
40 func parseFiles(fs http.FileSystem, t *template.Template, filenames ...string) (*template.Template, error) {
41 if len(filenames) == 0 {
42
43 return nil, fmt.Errorf("vfs/html/vfstemplate: no files named in call to ParseFiles")
44 }
45 for _, filename := range filenames {
46 b, err := vfsutil.ReadFile(fs, filename)
47 if err != nil {
48 return nil, err
49 }
50 s := string(b)
51 name := path.Base(filename)
52
53
54
55
56
57
58 var tmpl *template.Template
59 if t == nil {
60 t = template.New(name)
61 }
62 if name == t.Name() {
63 tmpl = t
64 } else {
65 tmpl = t.New(name)
66 }
67 _, err = tmpl.Parse(s)
68 if err != nil {
69 return nil, err
70 }
71 }
72 return t, nil
73 }
74
View as plain text