224 lines
4.8 KiB
Go
224 lines
4.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"io"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
type (
|
|
CommonTmplData struct {
|
|
Title string
|
|
AccountID int
|
|
}
|
|
|
|
GenericTmplData struct {
|
|
Common CommonTmplData
|
|
}
|
|
|
|
AccountTmplData struct {
|
|
Common CommonTmplData
|
|
Account *TAccountSummary
|
|
}
|
|
|
|
CharacterTmplData struct {
|
|
Common CommonTmplData
|
|
Character *TCharacterProfile
|
|
}
|
|
|
|
KillStatisticsTmplData struct {
|
|
Common CommonTmplData
|
|
World *TWorld
|
|
KillStatistics []TKillStatistics
|
|
}
|
|
|
|
WorldTmplData struct {
|
|
Common CommonTmplData
|
|
World *TWorld
|
|
OnlineCharacters []TOnlineCharacter
|
|
}
|
|
|
|
WorldListTmplData struct {
|
|
Common CommonTmplData
|
|
Worlds []TWorld
|
|
}
|
|
|
|
MessageTmplData struct {
|
|
Common CommonTmplData
|
|
Heading string
|
|
Message string
|
|
}
|
|
)
|
|
|
|
var (
|
|
g_Templates *template.Template
|
|
)
|
|
|
|
func InitTemplates() bool {
|
|
var Err error
|
|
g_Templates, Err = template.ParseGlob("templates/*.tmpl")
|
|
if Err != nil {
|
|
g_LogErr.Printf("Failed to parse templates: %v", Err)
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func ExitTemplates() {
|
|
g_Templates = nil
|
|
}
|
|
|
|
func ExecuteTemplate(Writer io.Writer, FileName string, Data any) {
|
|
Err := g_Templates.ExecuteTemplate(Writer, FileName, Data)
|
|
if Err != nil {
|
|
g_LogErr.Printf("Failed to execute template \"%v\": %v", FileName, Err)
|
|
}
|
|
}
|
|
|
|
func RenderRequestError(Context *THttpRequestContext, Status int) {
|
|
StatusText := http.StatusText(Status)
|
|
ExecuteTemplate(Context.Writer, "message.tmpl",
|
|
MessageTmplData{
|
|
Common: CommonTmplData{
|
|
Title: StatusText,
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Heading: strconv.Itoa(Status),
|
|
Message: StatusText,
|
|
})
|
|
}
|
|
|
|
func RenderMessage(Context *THttpRequestContext, Heading string, Message string) {
|
|
ExecuteTemplate(Context.Writer, "message.tmpl",
|
|
MessageTmplData{
|
|
Common: CommonTmplData{
|
|
Title: Heading,
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Heading: Heading,
|
|
Message: Message,
|
|
})
|
|
}
|
|
|
|
func RenderAccountSummary(Context *THttpRequestContext) {
|
|
Data := AccountTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Account Summary",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Account: nil,
|
|
}
|
|
|
|
Result, Account := GetAccountSummary(Context.AccountID)
|
|
if Result == 0 {
|
|
Data.Account = &Account
|
|
}
|
|
|
|
ExecuteTemplate(Context.Writer, "account_summary.tmpl", Data)
|
|
}
|
|
|
|
func RenderAccountLogin(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "account_login.tmpl",
|
|
GenericTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Login",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
})
|
|
}
|
|
|
|
func RenderAccountCreate(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "account_create.tmpl",
|
|
GenericTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Create Account",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
})
|
|
}
|
|
|
|
func RenderAccountRecover(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "account_recover.tmpl",
|
|
GenericTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Recover Account",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
})
|
|
}
|
|
|
|
func RenderCharacterCreate(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "character_create.tmpl",
|
|
WorldListTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Create Character",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Worlds: GetWorlds(),
|
|
})
|
|
}
|
|
|
|
func RenderCharacterProfile(Context *THttpRequestContext, Character *TCharacterProfile) {
|
|
Title := "Search Character"
|
|
if Character != nil {
|
|
Title = fmt.Sprintf("%v's Profile", Character.Name)
|
|
}
|
|
|
|
ExecuteTemplate(Context.Writer, "character_profile.tmpl",
|
|
CharacterTmplData{
|
|
Common: CommonTmplData{
|
|
Title: Title,
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Character: Character,
|
|
})
|
|
}
|
|
|
|
func RenderKillStatisticsList(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "killstatistics_list.tmpl",
|
|
WorldListTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Kill Statistics",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Worlds: GetWorlds(),
|
|
})
|
|
}
|
|
|
|
func RenderKillStatistics(Context *THttpRequestContext, WorldName string) {
|
|
ExecuteTemplate(Context.Writer, "killstatistics.tmpl",
|
|
KillStatisticsTmplData{
|
|
Common: CommonTmplData{
|
|
Title: fmt.Sprintf("Kill Statistics - %v", WorldName),
|
|
AccountID: Context.AccountID,
|
|
},
|
|
World: GetWorld(WorldName),
|
|
KillStatistics: GetKillStatistics(WorldName),
|
|
})
|
|
}
|
|
|
|
func RenderWorldList(Context *THttpRequestContext) {
|
|
ExecuteTemplate(Context.Writer, "world_list.tmpl",
|
|
WorldListTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Worlds",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
Worlds: GetWorlds(),
|
|
})
|
|
}
|
|
|
|
func RenderWorldInfo(Context *THttpRequestContext, WorldName string) {
|
|
ExecuteTemplate(Context.Writer, "world_info.tmpl",
|
|
WorldTmplData{
|
|
Common: CommonTmplData{
|
|
Title: "Worlds",
|
|
AccountID: Context.AccountID,
|
|
},
|
|
World: GetWorld(WorldName),
|
|
OnlineCharacters: GetOnlineCharacters(WorldName),
|
|
})
|
|
}
|