Didn't have the chance to migrate //all// templates just yet. We'll get there.
* Implement yet another template system
* Move orphans to the new system and fix a bug in it
* Link orphans in the admin panel
* Move the backlink handlers to the web package
* Move auth routing to web
* Move /user-list to the new system
* Move change password and translate it
* Move stuff
* Move admin-related stuff to the web
* Move a lot of files into internal dir
Outside of it are web and stuff that needs further refactoring
* Fix static not loading and de-qtpl tree
* Move tree to internal
* Keep the globe on the same line #230
* Revert "Keep the globe on the same line #230"
This reverts commit ae78e5e459.
* Migrate templates from hypview: delete, edit, start empty and existing WIP
The delete media view was removed, I didn't even know it still existed as a GET. A rudiment.
* Make views multi-file and break compilation
* Megarefactoring of hypha views
* Auth-related stuffs
* Fix some of those weird imports
* Migrate cat views
* Fix cat js
* Lower standards
* Internalize trauma
47 lines
934 B
Go
47 lines
934 B
Go
package static
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"os"
|
|
)
|
|
|
|
//go:embed *.css *.js *.txt icon
|
|
var embedFS embed.FS
|
|
|
|
// FS serves all static files.
|
|
var FS HybridFS
|
|
|
|
// HybridFS is a filesystem that implements fs.FS. It can serve files
|
|
// from multiple filesystems, falling back on failures.
|
|
type HybridFS struct {
|
|
fs []fs.FS
|
|
}
|
|
|
|
// Open tries to open the requested file using all filesystems provided.
|
|
// If neither succeeds, it returns the last error.
|
|
func (f HybridFS) Open(name string) (fs.File, error) {
|
|
var file fs.File
|
|
var err error
|
|
|
|
for _, candidate := range f.fs {
|
|
file, err = candidate.Open(name)
|
|
if err == nil {
|
|
return file, nil
|
|
}
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
// InitFS initializes the global HybridFS singleton with the wiki's own static
|
|
// files directory as a primary filesystem and the embedded one as a fallback.
|
|
func InitFS(localPath string) {
|
|
FS = HybridFS{
|
|
fs: []fs.FS{
|
|
os.DirFS(localPath),
|
|
embedFS,
|
|
},
|
|
}
|
|
}
|