package static import ( "embed" "html/template" "io/fs" "log" "os" "path/filepath" "github.com/pkg/errors" ) //go:embed web/* //go:embed web/_next/static //go:embed web/_next/static/chunks/pages/*.js //go:embed web/_next/static/*/*.js var webFiles embed.FS // GetWeb will return an embedded filesystem reference to the admin web app. func GetWeb() fs.FS { wf, err := fs.Sub(webFiles, "web") if err != nil { log.Fatal(err) } return wf } //go:embed img/emoji/* var emojiFiles embed.FS // GetEmoji will return the emoji files. func GetEmoji() fs.FS { ef, err := fs.Sub(emojiFiles, "img/emoji") if err != nil { log.Fatal(err) } return ef } // GetWebIndexTemplate will return the bot/scraper metadata template. func GetWebIndexTemplate() (*template.Template, error) { webFiles := GetWeb() name := "index.html" t, err := template.ParseFS(webFiles, name) if err != nil { return nil, errors.Wrap(err, "unable to open index.html template") } tmpl := template.Must(t, err) return tmpl, err } //go:embed offline.tsclip var offlineVideoSegment []byte // GetOfflineSegment will return the offline video segment data. func GetOfflineSegment() []byte { return getFileSystemStaticFileOrDefault("offline.tsclip", offlineVideoSegment) } //go:embed img/logo.png var logo []byte // GetLogo will return the logo data. func GetLogo() []byte { return getFileSystemStaticFileOrDefault("img/logo.png", logo) } func getFileSystemStaticFileOrDefault(path string, defaultData []byte) []byte { fullPath := filepath.Join("static", path) data, err := os.ReadFile(fullPath) //nolint: gosec if err != nil { return defaultData } return data } //go:embed metadata.html.tmpl var botMetadataTemplate embed.FS // GetBotMetadataTemplate will return the bot/scraper metadata template. func GetBotMetadataTemplate() (*template.Template, error) { name := "metadata.html.tmpl" t, err := template.ParseFS(botMetadataTemplate, name) tmpl := template.Must(t, err) return tmpl, err }