mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2025-03-10 21:48:20 +00:00

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 ae78e5e459b1e980ba89bf29e61f75c0625ed2c7. * 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,
|
|
},
|
|
}
|
|
}
|