events
This commit is contained in:
parent
10a9024b08
commit
95eff6118a
|
@ -5,6 +5,7 @@ go 1.18
|
||||||
require (
|
require (
|
||||||
github.com/cheggaaa/pb/v3 v3.0.8
|
github.com/cheggaaa/pb/v3 v3.0.8
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
|
github.com/iancoleman/strcase v0.2.0
|
||||||
github.com/pkg/profile v1.6.0
|
github.com/pkg/profile v1.6.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@ github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
|
github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=
|
||||||
|
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
||||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||||
|
|
|
@ -2,15 +2,10 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func andList(list []string) string {
|
"github.com/iancoleman/strcase"
|
||||||
if len(list) > 1 {
|
"github.com/robertjanetzko/LegendsBrowser2/backend/util"
|
||||||
return strings.Join(list[:len(list)-1], ", ") + " and " + list[len(list)-1]
|
)
|
||||||
}
|
|
||||||
return strings.Join(list, ", ")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *Honor) Requirement() string {
|
func (x *Honor) Requirement() string {
|
||||||
var list []string
|
var list []string
|
||||||
|
@ -287,25 +282,183 @@ func (x *HistoricalEventAssumeIdentity) Html() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HistoricalEventAttackedSite) Html() string { return "UNKNWON HistoricalEventAttackedSite" }
|
func (x *HistoricalEventAttackedSite) Html() string {
|
||||||
func (x *HistoricalEventBodyAbused) Html() string { return "UNKNWON HistoricalEventBodyAbused" }
|
atk := entity(x.AttackerCivId)
|
||||||
|
def := entity(x.DefenderCivId)
|
||||||
|
if x.SiteCivId != x.DefenderCivId {
|
||||||
|
def = entity(x.SiteCivId) + " of " + def
|
||||||
|
}
|
||||||
|
generals := ""
|
||||||
|
if x.AttackerGeneralHfid != -1 {
|
||||||
|
generals += ". " + util.Capitalize(hf(x.AttackerGeneralHfid)) + " led the attack"
|
||||||
|
if x.DefenderGeneralHfid != -1 {
|
||||||
|
generals += ", and the defenders were led by " + hf(x.DefenderGeneralHfid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mercs := ""
|
||||||
|
if x.AttackerMercEnid != -1 {
|
||||||
|
mercs += fmt.Sprintf(". %s were hired by the attackers", entity(x.AttackerMercEnid))
|
||||||
|
}
|
||||||
|
if x.ASupportMercEnid != -1 {
|
||||||
|
mercs += fmt.Sprintf(". %s were hired as scouts by the attackers", entity(x.ASupportMercEnid))
|
||||||
|
}
|
||||||
|
if x.DefenderMercEnid != -1 {
|
||||||
|
mercs += fmt.Sprintf(". The defenders hired %s", entity(x.DefenderMercEnid))
|
||||||
|
}
|
||||||
|
if x.DSupportMercEnid != -1 {
|
||||||
|
mercs += fmt.Sprintf(". The defenders hired %s as scouts", entity(x.DSupportMercEnid))
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s attacked %s at %s%s%s", atk, def, site(x.SiteId, ""), generals, mercs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *HistoricalEventBodyAbused) Html() string {
|
||||||
|
s := "the " + util.If(len(x.Bodies) > 1, "bodies", "body") + " of " + hfList(x.Bodies) + " " + util.If(len(x.Bodies) > 1, "were", "was")
|
||||||
|
|
||||||
|
switch x.AbuseType {
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Animated:
|
||||||
|
s += " animated" + util.If(x.Histfig != -1, " by "+hf(x.Histfig), "") + site(x.SiteId, " in ")
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Flayed:
|
||||||
|
s += " flayed and the skin stretched over " + structure(x.SiteId, x.Structure) + " by " + entity(x.Civ) + site(x.SiteId, " in ")
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Hung:
|
||||||
|
s += " hung from a tree by " + entity(x.Civ) + site(x.SiteId, " in ")
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Impaled:
|
||||||
|
s += " impaled on " + articled(x.ItemMat+" "+x.ItemSubtype.String()) + " by " + entity(x.Civ) + site(x.SiteId, " in ")
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Mutilated:
|
||||||
|
s += " horribly mutilated by " + entity(x.Civ) + site(x.SiteId, " in ")
|
||||||
|
case HistoricalEventBodyAbusedAbuseType_Piled:
|
||||||
|
s += " added to a "
|
||||||
|
switch x.PileType {
|
||||||
|
case HistoricalEventBodyAbusedPileType_Grislymound:
|
||||||
|
s += "grisly mound"
|
||||||
|
case HistoricalEventBodyAbusedPileType_Grotesquepillar:
|
||||||
|
s += "grotesque pillar"
|
||||||
|
case HistoricalEventBodyAbusedPileType_Gruesomesculpture:
|
||||||
|
s += "gruesome sculpture"
|
||||||
|
}
|
||||||
|
s += " by " + entity(x.Civ) + site(x.SiteId, " in ")
|
||||||
|
}
|
||||||
|
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func (x *HistoricalEventBuildingProfileAcquired) Html() string {
|
func (x *HistoricalEventBuildingProfileAcquired) Html() string {
|
||||||
return "UNKNWON HistoricalEventBuildingProfileAcquired"
|
return util.If(x.AcquirerEnid != -1, entity(x.AcquirerEnid), hf(x.AcquirerHfid)) +
|
||||||
|
util.If(x.PurchasedUnowned, " purchased ", " inherited ") +
|
||||||
|
property(x.SiteId, x.BuildingProfileId) + site(x.SiteId, " in") +
|
||||||
|
util.If(x.LastOwnerHfid != -1, " formerly owned by "+hf(x.LastOwnerHfid), "")
|
||||||
}
|
}
|
||||||
func (x *HistoricalEventCeremony) Html() string { return "UNKNWON HistoricalEventCeremony" }
|
|
||||||
|
func (x *HistoricalEventCeremony) Html() string {
|
||||||
|
r := entity(x.CivId) + " held a ceremony in " + site(x.SiteId, "")
|
||||||
|
if e, ok := world.Entities[x.CivId]; ok {
|
||||||
|
o := e.Occasion[x.OccasionId]
|
||||||
|
r += " as part of " + o.Name()
|
||||||
|
s := o.Schedule[x.ScheduleId]
|
||||||
|
if len(s.Feature) > 0 {
|
||||||
|
r += ". The event featured " + andList(util.Map(s.Feature, feature))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
func (x *HistoricalEventChangeHfBodyState) Html() string {
|
func (x *HistoricalEventChangeHfBodyState) Html() string {
|
||||||
return "UNKNWON HistoricalEventChangeHfBodyState"
|
r := hf(x.Hfid)
|
||||||
|
switch x.BodyState {
|
||||||
|
case HistoricalEventChangeHfBodyStateBodyState_EntombedAtSite:
|
||||||
|
r += " was entombed"
|
||||||
|
}
|
||||||
|
if x.StructureId != -1 {
|
||||||
|
r += " within " + structure(x.SiteId, x.StructureId)
|
||||||
|
}
|
||||||
|
r += site(x.SiteId, " in ")
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *HistoricalEventChangeHfJob) Html() string {
|
||||||
|
w := ""
|
||||||
|
if x.SubregionId != -1 {
|
||||||
|
w = " in " + region(x.SubregionId)
|
||||||
|
}
|
||||||
|
if x.SiteId != -1 {
|
||||||
|
w = " in " + site(x.SiteId, "")
|
||||||
|
}
|
||||||
|
old := articled(strcase.ToDelimited(x.OldJob, ' '))
|
||||||
|
new := articled(strcase.ToDelimited(x.NewJob, ' '))
|
||||||
|
if x.OldJob == "standard" {
|
||||||
|
return hf(x.Hfid) + " became " + new + w
|
||||||
|
} else if x.NewJob == "standard" {
|
||||||
|
return hf(x.Hfid) + " stopped being " + old + w
|
||||||
|
} else {
|
||||||
|
return hf(x.Hfid) + " gave up being " + old + " to become a " + new + w
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func (x *HistoricalEventChangeHfJob) Html() string { return "UNKNWON HistoricalEventChangeHfJob" }
|
|
||||||
func (x *HistoricalEventChangeHfState) Html() string {
|
func (x *HistoricalEventChangeHfState) Html() string {
|
||||||
|
r := ""
|
||||||
|
switch x.Reason {
|
||||||
|
case HistoricalEventChangeHfStateReason_BeWithMaster:
|
||||||
|
r = " in order to be with the master"
|
||||||
|
case HistoricalEventChangeHfStateReason_ConvictionExile:
|
||||||
|
r = " after being exiled following a criminal conviction"
|
||||||
|
case HistoricalEventChangeHfStateReason_ExiledAfterConviction:
|
||||||
|
r = " after being exiled following a criminal conviction"
|
||||||
|
case HistoricalEventChangeHfStateReason_FailedMood:
|
||||||
|
r = " after failing to create an artifact"
|
||||||
|
case HistoricalEventChangeHfStateReason_Flight:
|
||||||
|
case HistoricalEventChangeHfStateReason_GatherInformation:
|
||||||
|
r = " to gather information"
|
||||||
|
case HistoricalEventChangeHfStateReason_GreatDealOfStress:
|
||||||
|
r = " after a great deal of stress" // TODO check
|
||||||
|
case HistoricalEventChangeHfStateReason_LackOfSleep:
|
||||||
|
r = " after a lack of sleep" // TODO check
|
||||||
|
case HistoricalEventChangeHfStateReason_OnAPilgrimage:
|
||||||
|
r = " on a pilgrimage"
|
||||||
|
case HistoricalEventChangeHfStateReason_Scholarship:
|
||||||
|
r = " in order to pursue scholarship"
|
||||||
|
case HistoricalEventChangeHfStateReason_UnableToLeaveLocation:
|
||||||
|
r = " after being unable to leave the location" // TODO check
|
||||||
|
}
|
||||||
|
|
||||||
switch x.State {
|
switch x.State {
|
||||||
|
case HistoricalEventChangeHfStateState_Refugee:
|
||||||
|
return hf(x.Hfid) + " fled " + location(x.SiteId, "to", x.SubregionId, "into")
|
||||||
case HistoricalEventChangeHfStateState_Settled:
|
case HistoricalEventChangeHfStateState_Settled:
|
||||||
switch x.Reason {
|
switch x.Reason {
|
||||||
case HistoricalEventChangeHfStateReason_BeWithMaster:
|
case HistoricalEventChangeHfStateReason_BeWithMaster, HistoricalEventChangeHfStateReason_Scholarship:
|
||||||
return hf(x.Hfid) + " moved to study " + site(x.SiteId, "in") + " in order to be with the master"
|
return hf(x.Hfid) + " moved to study " + site(x.SiteId, "in") + r
|
||||||
default:
|
case HistoricalEventChangeHfStateReason_Flight:
|
||||||
return hf(x.Hfid) + " settled " + site(x.SiteId, "in")
|
return hf(x.Hfid) + " fled " + site(x.SiteId, "to")
|
||||||
|
case HistoricalEventChangeHfStateReason_ConvictionExile, HistoricalEventChangeHfStateReason_ExiledAfterConviction:
|
||||||
|
return hf(x.Hfid) + " departed " + site(x.SiteId, "to") + r
|
||||||
|
case HistoricalEventChangeHfStateReason_None:
|
||||||
|
return hf(x.Hfid) + " settled " + location(x.SiteId, "in", x.SubregionId, "in")
|
||||||
}
|
}
|
||||||
|
case HistoricalEventChangeHfStateState_Visiting:
|
||||||
|
return hf(x.Hfid) + " visited " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateState_Wandering:
|
||||||
|
if x.SubregionId != -1 {
|
||||||
|
return hf(x.Hfid) + " began wandering " + region(x.SubregionId)
|
||||||
|
} else {
|
||||||
|
return hf(x.Hfid) + " began wandering the wilds"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch x.Mood { // todo catatonic
|
||||||
|
case HistoricalEventChangeHfStateMood_Berserk:
|
||||||
|
return hf(x.Hfid) + " went berserk " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Fell:
|
||||||
|
return hf(x.Hfid) + " was taken by a fell mood " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Fey:
|
||||||
|
return hf(x.Hfid) + " was taken by a fey mood " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Insane:
|
||||||
|
return hf(x.Hfid) + " became crazed " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Macabre:
|
||||||
|
return hf(x.Hfid) + " began to skulk and brood " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Melancholy:
|
||||||
|
return hf(x.Hfid) + " was striken by melancholy " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Possessed:
|
||||||
|
return hf(x.Hfid) + " was posessed " + site(x.SiteId, "in") + r
|
||||||
|
case HistoricalEventChangeHfStateMood_Secretive:
|
||||||
|
return hf(x.Hfid) + " withdrew from society " + site(x.SiteId, "in") + r
|
||||||
}
|
}
|
||||||
return "UNKNWON HistoricalEventChangeHfState"
|
return "UNKNWON HistoricalEventChangeHfState"
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,10 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/iancoleman/strcase"
|
||||||
"github.com/robertjanetzko/LegendsBrowser2/backend/util"
|
"github.com/robertjanetzko/LegendsBrowser2/backend/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -54,6 +57,20 @@ func containsInt(list []int, id int) bool {
|
||||||
|
|
||||||
var world *DfWorld
|
var world *DfWorld
|
||||||
|
|
||||||
|
func andList(list []string) string {
|
||||||
|
if len(list) > 1 {
|
||||||
|
return strings.Join(list[:len(list)-1], ", ") + " and " + list[len(list)-1]
|
||||||
|
}
|
||||||
|
return strings.Join(list, ", ")
|
||||||
|
}
|
||||||
|
|
||||||
|
func articled(s string) string {
|
||||||
|
if ok, _ := regexp.MatchString("^([aeio]|un|ul).*", s); ok {
|
||||||
|
return "an " + s
|
||||||
|
}
|
||||||
|
return "a " + s
|
||||||
|
}
|
||||||
|
|
||||||
func artifact(id int) string {
|
func artifact(id int) string {
|
||||||
if x, ok := world.Artifacts[id]; ok {
|
if x, ok := world.Artifacts[id]; ok {
|
||||||
return fmt.Sprintf(`<a class="artifact" href="/artifact/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
return fmt.Sprintf(`<a class="artifact" href="/artifact/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
||||||
|
@ -75,6 +92,10 @@ func hf(id int) string {
|
||||||
return "UNKNOWN HISTORICAL FIGURE"
|
return "UNKNOWN HISTORICAL FIGURE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hfList(ids []int) string {
|
||||||
|
return andList(util.Map(ids, hf))
|
||||||
|
}
|
||||||
|
|
||||||
func pronoun(id int) string {
|
func pronoun(id int) string {
|
||||||
if x, ok := world.HistoricalFigures[id]; ok {
|
if x, ok := world.HistoricalFigures[id]; ok {
|
||||||
if x.Female() {
|
if x.Female() {
|
||||||
|
@ -100,6 +121,18 @@ func structure(siteId, structureId int) string {
|
||||||
return "UNKNOWN STRUCTURE"
|
return "UNKNOWN STRUCTURE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func property(siteId, propertyId int) string {
|
||||||
|
if x, ok := world.Sites[siteId]; ok {
|
||||||
|
if y, ok := x.SiteProperties[propertyId]; ok {
|
||||||
|
if y.StructureId != -1 {
|
||||||
|
return structure(siteId, y.StructureId)
|
||||||
|
}
|
||||||
|
return articled(y.Type.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "UNKNOWN PROPERTY"
|
||||||
|
}
|
||||||
|
|
||||||
func region(id int) string {
|
func region(id int) string {
|
||||||
if x, ok := world.Regions[id]; ok {
|
if x, ok := world.Regions[id]; ok {
|
||||||
return fmt.Sprintf(`<a class="region" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
return fmt.Sprintf(`<a class="region" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
||||||
|
@ -107,9 +140,63 @@ func region(id int) string {
|
||||||
return "UNKNOWN REGION"
|
return "UNKNOWN REGION"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func location(siteId int, sitePrefix string, regionId int, regionPrefix string) string {
|
||||||
|
if siteId != -1 {
|
||||||
|
return site(siteId, sitePrefix)
|
||||||
|
}
|
||||||
|
if regionId != -1 {
|
||||||
|
return regionPrefix + " " + region(regionId)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func identity(id int) string {
|
func identity(id int) string {
|
||||||
if x, ok := world.Identities[id]; ok {
|
if x, ok := world.Identities[id]; ok {
|
||||||
return fmt.Sprintf(`<a class="identity" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
return fmt.Sprintf(`<a class="identity" href="/region/%d">%s</a>`, x.Id(), util.Title(x.Name()))
|
||||||
}
|
}
|
||||||
return "UNKNOWN IDENTITY"
|
return "UNKNOWN IDENTITY"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func feature(x *Feature) string {
|
||||||
|
switch x.Type {
|
||||||
|
case FeatureType_DancePerformance:
|
||||||
|
return "a perfomance of " + danceForm(x.Reference)
|
||||||
|
case FeatureType_Images:
|
||||||
|
if x.Reference != -1 {
|
||||||
|
return "images of " + hf(x.Reference)
|
||||||
|
}
|
||||||
|
return "images"
|
||||||
|
case FeatureType_MusicalPerformance:
|
||||||
|
return "a perfomance of " + musicalForm(x.Reference)
|
||||||
|
case FeatureType_PoetryRecital:
|
||||||
|
return "a recital of " + poeticForm(x.Reference)
|
||||||
|
case FeatureType_Storytelling:
|
||||||
|
if x.Reference != -1 {
|
||||||
|
return "a telling of the story of " + hf(x.Reference)
|
||||||
|
}
|
||||||
|
return "a story recital"
|
||||||
|
default:
|
||||||
|
return strcase.ToDelimited(x.Type.String(), ' ')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func danceForm(id int) string {
|
||||||
|
if x, ok := world.DanceForms[id]; ok {
|
||||||
|
return fmt.Sprintf(`<a class="artform" href="/danceForm/%d">%s</a>`, id, util.Title(x.Name()))
|
||||||
|
}
|
||||||
|
return "UNKNOWN DANCE FORM"
|
||||||
|
}
|
||||||
|
|
||||||
|
func musicalForm(id int) string {
|
||||||
|
if x, ok := world.MusicalForms[id]; ok {
|
||||||
|
return fmt.Sprintf(`<a class="artform" href="/musicalForm/%d">%s</a>`, id, util.Title(x.Name()))
|
||||||
|
}
|
||||||
|
return "UNKNOWN MUSICAL FORM"
|
||||||
|
}
|
||||||
|
|
||||||
|
func poeticForm(id int) string {
|
||||||
|
if x, ok := world.PoeticForms[id]; ok {
|
||||||
|
return fmt.Sprintf(`<a class="artform" href="/poeticForm/%d">%s</a>`, id, util.Title(x.Name()))
|
||||||
|
}
|
||||||
|
return "UNKNOWN POETIC FORM"
|
||||||
|
}
|
||||||
|
|
|
@ -5,14 +5,6 @@
|
||||||
"HistoricalEventAddHfSiteLink": {
|
"HistoricalEventAddHfSiteLink": {
|
||||||
"Site": "SiteId"
|
"Site": "SiteId"
|
||||||
},
|
},
|
||||||
"HistoricalEventCreatedStructure": {
|
|
||||||
"Structure": "StructureId"
|
|
||||||
},
|
|
||||||
"HistoricalEventDiplomatLost": {
|
|
||||||
"Entity": "SiteId",
|
|
||||||
"Involved": "SiteId",
|
|
||||||
"Site": "SiteId"
|
|
||||||
},
|
|
||||||
"HistoricalEventPeaceAccepted": {
|
"HistoricalEventPeaceAccepted": {
|
||||||
"Site": "SiteId"
|
"Site": "SiteId"
|
||||||
},
|
},
|
||||||
|
@ -25,7 +17,11 @@
|
||||||
"HistoricalEventRemoveHfSiteLink": {
|
"HistoricalEventRemoveHfSiteLink": {
|
||||||
"Site": "SiteId"
|
"Site": "SiteId"
|
||||||
},
|
},
|
||||||
"HistoricalFigure": {
|
"HistoricalEventReplacedStructure": {
|
||||||
"Sex": "BreedId"
|
"Civ": "OldAbId",
|
||||||
|
"NewStructure": "OldAbId",
|
||||||
|
"OldStructure": "OldAbId",
|
||||||
|
"Site": "OldAbId",
|
||||||
|
"SiteCiv": "OldAbId"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@ a {
|
||||||
}
|
}
|
||||||
|
|
||||||
.json {
|
.json {
|
||||||
color: #ddd;
|
color: #aaa;
|
||||||
font-size: 50%;
|
font-size: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,10 @@ func Title(input string) string {
|
||||||
return strings.Join(words, " ")
|
return strings.Join(words, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Capitalize(input string) string {
|
||||||
|
return strings.ToUpper(input[:1]) + input[1:]
|
||||||
|
}
|
||||||
|
|
||||||
func Json(obj any) template.HTML {
|
func Json(obj any) template.HTML {
|
||||||
b, err := json.MarshalIndent(obj, "", " ")
|
b, err := json.MarshalIndent(obj, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -54,3 +58,19 @@ func Json(obj any) template.HTML {
|
||||||
}
|
}
|
||||||
return template.HTML(`<span class="json">` + string(b) + `</span>`)
|
return template.HTML(`<span class="json">` + string(b) + `</span>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func If[T any](cond bool, v1, v2 T) T {
|
||||||
|
if cond {
|
||||||
|
return v1
|
||||||
|
} else {
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Map[U, V any](list []U, mapper func(U) V) []V {
|
||||||
|
var newList = make([]V, 0, len(list))
|
||||||
|
for _, i := range list {
|
||||||
|
newList = append(newList, mapper(i))
|
||||||
|
}
|
||||||
|
return newList
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue