@@ -84,6 +84,9 @@ type Options struct {
84
84
Headers map [string ]string
85
85
SessionCookieName string
86
86
StorageDir string
87
+ AssetsDir string
88
+ StaticDir string
89
+ TemplatesDir string
87
90
GoogleAnalyticsID string
88
91
RememberMeDays int
89
92
DefaultFrom string
@@ -168,27 +171,44 @@ func New(o Options) (s *Server, err error) {
168
171
}
169
172
s .salt = salt
170
173
}
171
-
172
- // Create assets server
173
- assetsServer := fileServer .New ("/assets" , "" , & fileServer.Options {
174
- Hasher : fileServer.MD5Hasher {HashLength : 8 },
175
- NoHashQueryStrings : true ,
176
- RedirectTrailingSlash : true ,
177
- IndexPage : "index.html" ,
178
- Filesystem : & assetfs.AssetFS {
174
+ var assetsFS http.FileSystem
175
+ if o .AssetsDir == "" {
176
+ assetsFS = & assetfs.AssetFS {
179
177
Asset : assets .Asset ,
180
178
AssetDir : assets .AssetDir ,
181
179
AssetInfo : assets .AssetInfo ,
182
- },
180
+ }
181
+ } else {
182
+ assetsFS = http .Dir (o .AssetsDir )
183
+ }
184
+
185
+ // Create assets server
186
+ assetsServer := fileServer .New ("/assets" , "" , & fileServer.Options {
187
+ Hasher : fileServer.MD5Hasher {HashLength : 8 },
188
+ NoHashQueryStrings : true ,
189
+ RedirectTrailingSlash : true ,
190
+ IndexPage : "index.html" ,
191
+ Filesystem : assetsFS ,
183
192
NotFoundHandler : http .HandlerFunc (s .htmlNotFoundHandler ),
184
193
ForbiddenHandler : http .HandlerFunc (s .htmlForbiddenHandler ),
185
194
InternalServerErrorHandler : http .HandlerFunc (s .htmlInternalServerErrorHandler ),
186
195
})
187
196
188
197
// Parse static HTML documents used as loadable fragments in templates
189
- fragments , err := parseMarkdownData ("fragments" )
190
- if err != nil {
191
- return nil , fmt .Errorf ("parse fragments: %v" , err )
198
+ var fileReadFunc templates.FileReadFunc
199
+ var fragments map [string ]interface {}
200
+ if o .TemplatesDir == "" {
201
+ fileReadFunc = dataTemplates .Asset
202
+ fragments , err = parseMarkdownData ("fragments" )
203
+ if err != nil {
204
+ return nil , fmt .Errorf ("parse fragments: %v" , err )
205
+ }
206
+ } else {
207
+ fileReadFunc = ioutil .ReadFile
208
+ fragments , err = parseMarkdown (filepath .Join (o .TemplatesDir , "fragments" ))
209
+ if err != nil {
210
+ return nil , fmt .Errorf ("parse fragments: %v" , err )
211
+ }
192
212
}
193
213
194
214
s .html , err = templates .New (
@@ -214,7 +234,8 @@ func New(o Options) (s *Server, err error) {
214
234
templates .WithFunction ("is_gopherpit_domain" , func (domain string ) bool {
215
235
return strings .HasSuffix (domain , "." + o .Domain )
216
236
}),
217
- templates .WithFileReadFunc (dataTemplates .Asset ),
237
+ templates .WithBaseDir (o .TemplatesDir ),
238
+ templates .WithFileReadFunc (fileReadFunc ),
218
239
templates .WithTemplatesFromFiles (htmlTemplates ),
219
240
)
220
241
if err != nil {
0 commit comments