package templates import ( "arimelody-web/log" _ "embed" "fmt" "html/template" "strings" "time" ) //go:embed "html/layout.html" var layoutHTML string //go:embed "html/prideflag.html" var prideflagHTML string //go:embed "html/index.html" var indexHTML string //go:embed "html/register.html" var registerHTML string //go:embed "html/login.html" var loginHTML string //go:embed "html/login-totp.html" var loginTotpHTML string //go:embed "html/totp-confirm.html" var totpConfirmHTML string //go:embed "html/totp-setup.html" var totpSetupHTML string //go:embed "html/logout.html" var logoutHTML string //go:embed "html/logs.html" var logsHTML string //go:embed "html/edit-account.html" var editAccountHTML string //go:embed "html/releases.html" var releasesHTML string //go:embed "html/artists.html" var artistsHTML string //go:embed "html/tracks.html" var tracksHTML string //go:embed "html/edit-release.html" var editReleaseHTML string //go:embed "html/edit-artist.html" var editArtistHTML string //go:embed "html/edit-track.html" var editTrackHTML string //go:embed "html/components/credit/newcredit.html" var componentNewCreditHTML string //go:embed "html/components/credit/addcredit.html" var componentAddCreditHTML string //go:embed "html/components/credit/editcredits.html" var componentEditCreditsHTML string //go:embed "html/components/link/editlinks.html" var componentEditLinksHTML string //go:embed "html/components/release/release.html" var componentReleaseHTML string //go:embed "html/components/artist/artist.html" var componentArtistHTML string //go:embed "html/components/track/track.html" var componentTrackHTML string //go:embed "html/components/track/newtrack.html" var componentNewTrackHTML string //go:embed "html/components/track/addtrack.html" var componentAddTrackHTML string //go:embed "html/components/track/edittracks.html" var componentEditTracksHTML string var BaseTemplate = template.Must( template.New("base").Funcs( template.FuncMap{ "hasPrefix": strings.HasPrefix, }, ).Parse(strings.Join([]string{ layoutHTML, prideflagHTML, }, "\n"))) var IndexTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ indexHTML, componentReleaseHTML, componentArtistHTML, componentTrackHTML, }, "\n"), )) var LoginTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(loginHTML)) var LoginTOTPTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(loginTotpHTML)) var RegisterTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(registerHTML)) var LogoutTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(logoutHTML)) var AccountTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(editAccountHTML)) var TOTPSetupTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(totpSetupHTML)) var TOTPConfirmTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(totpConfirmHTML)) var LogsTemplate = template.Must(template.Must(BaseTemplate.Clone()).Funcs(template.FuncMap{ "parseLevel": parseLevel, "titleCase": titleCase, "toLower": toLower, "prettyTime": prettyTime, }).Parse(logsHTML)) var ReleasesTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ releasesHTML, componentReleaseHTML, }, "\n"), )) var ArtistsTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ artistsHTML, componentArtistHTML, }, "\n"), )) var TracksTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ tracksHTML, componentTrackHTML, }, "\n"), )) var EditReleaseTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ editReleaseHTML, componentTrackHTML, }, "\n"), )) var EditArtistTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(editArtistHTML)) var EditTrackTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse( strings.Join([]string{ editTrackHTML, componentReleaseHTML, }, "\n"), )) var EditCreditsTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentEditCreditsHTML)) var AddCreditTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentAddCreditHTML)) var NewCreditTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentNewCreditHTML)) var EditLinksTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentEditLinksHTML)) var EditTracksTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentEditTracksHTML)) var AddTrackTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentAddTrackHTML)) var NewTrackTemplate = template.Must(template.Must(BaseTemplate.Clone()).Parse(componentNewTrackHTML)) func parseLevel(level log.LogLevel) string { switch level { case log.LEVEL_INFO: return "INFO" case log.LEVEL_WARN: return "WARN" } return fmt.Sprintf("%d?", level) } func titleCase(logType string) string { runes := []rune(logType) for i, r := range runes { if (i == 0 || runes[i - 1] == ' ') && r >= 'a' && r <= 'z' { runes[i] = r + ('A' - 'a') } } return string(runes) } func toLower(str string) string { return strings.ToLower(str) } func prettyTime(t time.Time) string { // return t.Format("2006-01-02 15:04:05") // return t.Format("15:04:05, 2 Jan 2006") return t.Format("02 Jan 2006, 15:04:05") }