diff --git a/app/pb.go b/app/pb.go index 858441f..20e9d3c 100644 --- a/app/pb.go +++ b/app/pb.go @@ -3,6 +3,7 @@ package app import ( "database/sql" "fmt" + "html/template" "log/slog" "sort" "strings" @@ -181,6 +182,27 @@ func (app *App) createEngine() (*templating.Engine, error) { defer app.htmlMutex.RUnlock() return app.htmlCache.Get(key) }) + engine.AddFunc("help", func(table string, field ...string) template.HTML { + app.ensureHtmlCache() + key := "help." + table + if len(field) > 0 && field[0] != "" { + key = key + "." + field[0] + } + app.htmlMutex.RLock() + defer app.htmlMutex.RUnlock() + return template.HTML(app.htmlCache.GetString(key)) + }) + engine.AddFunc("helpOr", func(table, field, fallback string) template.HTML { + app.ensureHtmlCache() + key := "help." + table + "." + field + app.htmlMutex.RLock() + value := app.htmlCache.GetString(key) + app.htmlMutex.RUnlock() + if value == "" { + value = fallback + } + return template.HTML(value) + }) engine.AddFunc("htmlPrefix", func(prefix string) map[string]any { app.ensureHtmlCache() app.htmlMutex.RLock() @@ -226,6 +248,20 @@ func (c *PrefixCache) Get(key string) any { return c.data[key] } +func (c *PrefixCache) GetString(key string) string { + if c == nil { + return "" + } + value, ok := c.data[key] + if !ok || value == nil { + return "" + } + if s, ok := value.(string); ok { + return s + } + return fmt.Sprint(value) +} + func (c *PrefixCache) GetPrefix(prefix string) map[string]any { if c == nil || len(c.keys) == 0 { return map[string]any{} diff --git a/migrations/03_field_help.go b/migrations/03_field_help.go index 613013b..b9acd1c 100644 --- a/migrations/03_field_help.go +++ b/migrations/03_field_help.go @@ -197,58 +197,37 @@ var fieldHelpSeed = []FieldHelpTable{ TableName: "R_" + dbmodels.ENTRIES_TABLE + "_" + dbmodels.AGENTS_TABLE, Help: "Liste aller Verknüpfungen von Einträgen und Personen/Körperschaften", Description: "Diese Tabelle enthält alle Verknüpfungen von Einträgen und Personen/Körperschaften, die in der Musenalm-Datenbank verwendet werden. Diese Liste wird für die Erstellung von Verknüpfungen verwendet.", - Common: []FieldHelpEntry{ - {FieldName: dbmodels.ID_FIELD, Help: "Eindeutige Identifikationsnummer", Description: "Systemgenerierte eindeutige ID für diese Relation"}, - {FieldName: dbmodels.CREATED_FIELD, Help: "Erstellungsdatum", Description: "Zeitpunkt der Erstellung dieser Relation"}, - {FieldName: dbmodels.UPDATED_FIELD, Help: "Aktualisierungsdatum", Description: "Zeitpunkt der letzten Änderung dieser Relation"}, - {FieldName: dbmodels.ANNOTATION_FIELD, Help: "Anmerkungen", Description: "Zusätzliche Anmerkungen zu dieser Relation"}, - {FieldName: dbmodels.COMMENT_FIELD, Help: "Bearbeitungskommentar", Description: "Kommentare zur Bearbeitung"}, - }, - Entries: []FieldHelpEntry{ - {FieldName: dbmodels.ENTRIES_TABLE, Help: "Band", Description: "Verknüpfter Almanachband"}, - {FieldName: dbmodels.AGENTS_TABLE, Help: "Person/Körperschaft", Description: "Verknüpfte Person oder Körperschaft"}, - {FieldName: dbmodels.RELATION_TYPE_FIELD, Help: "Relationstyp", Description: "Art der Beziehung (Autor, Herausgeber, etc.)"}, - {FieldName: dbmodels.RELATION_CONJECTURE_FIELD, Help: "Vermutung", Description: "Ist diese Zuordnung eine Vermutung?"}, - {FieldName: dbmodels.RELATION_UNCERTAIN_FIELD, Help: "Unsicher", Description: "Ist diese Zuordnung unsicher?"}, - }, }, { TableName: "R_" + dbmodels.CONTENTS_TABLE + "_" + dbmodels.AGENTS_TABLE, Help: "Liste aller Verknüpfungen von Inhaltsbeiträgen und Personen/Körperschaften", Description: "Diese Tabelle enthält alle Verknüpfungen von Inhaltsbeiträgen und Personen/Körperschaften, die in der Musenalm-Datenbank verwendet werden. Diese Liste wird für die Erstellung von Verknüpfungen verwendet.", - Common: []FieldHelpEntry{ - {FieldName: dbmodels.ID_FIELD, Help: "Eindeutige Identifikationsnummer", Description: "Systemgenerierte eindeutige ID für diese Relation"}, - {FieldName: dbmodels.CREATED_FIELD, Help: "Erstellungsdatum", Description: "Zeitpunkt der Erstellung dieser Relation"}, - {FieldName: dbmodels.UPDATED_FIELD, Help: "Aktualisierungsdatum", Description: "Zeitpunkt der letzten Änderung dieser Relation"}, - {FieldName: dbmodels.ANNOTATION_FIELD, Help: "Anmerkungen", Description: "Zusätzliche Anmerkungen zu dieser Relation"}, - {FieldName: dbmodels.COMMENT_FIELD, Help: "Bearbeitungskommentar", Description: "Kommentare zur Bearbeitung"}, - }, - Entries: []FieldHelpEntry{ - {FieldName: dbmodels.CONTENTS_TABLE, Help: "Inhalt", Description: "Verknüpfter Inhaltsbeitrag"}, - {FieldName: dbmodels.AGENTS_TABLE, Help: "Person/Körperschaft", Description: "Verknüpfte Person oder Körperschaft"}, - {FieldName: dbmodels.RELATION_TYPE_FIELD, Help: "Relationstyp", Description: "Art der Beziehung (Autor, Stecher, etc.)"}, - {FieldName: dbmodels.RELATION_CONJECTURE_FIELD, Help: "Vermutung", Description: "Ist diese Zuordnung eine Vermutung?"}, - {FieldName: dbmodels.RELATION_UNCERTAIN_FIELD, Help: "Unsicher", Description: "Ist diese Zuordnung unsicher?"}, - }, }, { TableName: "R_" + dbmodels.ENTRIES_TABLE + "_" + dbmodels.SERIES_TABLE, Help: "Liste aller Verknüpfungen von Einträgen und Reihentiteln", Description: "Diese Tabelle enthält alle Verknüpfungen von Einträgen und Reihentiteln, die in der Musenalm-Datenbank verwendet werden. Diese Liste wird für die Erstellung von Verknüpfungen verwendet.", - Common: []FieldHelpEntry{ - {FieldName: dbmodels.ID_FIELD, Help: "Eindeutige Identifikationsnummer", Description: "Systemgenerierte eindeutige ID für diese Relation"}, - {FieldName: dbmodels.CREATED_FIELD, Help: "Erstellungsdatum", Description: "Zeitpunkt der Erstellung dieser Relation"}, - {FieldName: dbmodels.UPDATED_FIELD, Help: "Aktualisierungsdatum", Description: "Zeitpunkt der letzten Änderung dieser Relation"}, - {FieldName: dbmodels.ANNOTATION_FIELD, Help: "Anmerkungen", Description: "Zusätzliche Anmerkungen zu dieser Relation"}, - {FieldName: dbmodels.COMMENT_FIELD, Help: "Bearbeitungskommentar", Description: "Kommentare zur Bearbeitung"}, - }, - Entries: []FieldHelpEntry{ - {FieldName: dbmodels.ENTRIES_TABLE, Help: "Band", Description: "Verknüpfter Almanachband"}, - {FieldName: dbmodels.SERIES_TABLE, Help: "Reihe", Description: "Verknüpfter Reihentitel"}, - {FieldName: dbmodels.RELATION_TYPE_FIELD, Help: "Relationstyp", Description: "Art der Beziehung (Bevorzugter Titel, Alternative, etc.)"}, - {FieldName: dbmodels.RELATION_CONJECTURE_FIELD, Help: "Vermutung", Description: "Ist diese Zuordnung eine Vermutung?"}, - {FieldName: dbmodels.RELATION_UNCERTAIN_FIELD, Help: "Unsicher", Description: "Ist diese Zuordnung unsicher?"}, - }, + }, +} + +var additionalFieldHelpSeed = []FieldHelp{ + { + TableName: dbmodels.ENTRIES_TABLE, + FieldName: dbmodels.EDITION_FIELD, + Help: "Hinweis zur Ausgabe oder Edition.", + Description: "Angaben zur Ausgabe, Edition oder Besonderheiten der Veroeffentlichung.", + }, + { + TableName: dbmodels.ENTRIES_TABLE, + FieldName: dbmodels.SERIES_TABLE, + Help: "Verknuepfte Reihen fuer diesen Almanach.", + Description: "Reihen, die mit diesem Almanach verbunden sind.", + }, + { + TableName: dbmodels.ENTRIES_TABLE, + FieldName: dbmodels.AGENTS_TABLE, + Help: "Beteiligte Personen oder Koerperschaften.", + Description: "Personen oder Koerperschaften, die an diesem Almanach beteiligt sind.", }, } @@ -364,5 +343,7 @@ func getAllFieldHelps() []FieldHelp { } } + helps = append(helps, additionalFieldHelpSeed...) + return helps } diff --git a/views/routes/almanach/edit/body.gohtml b/views/routes/almanach/edit/body.gohtml index 71160d4..300bb07 100644 --- a/views/routes/almanach/edit/body.gohtml +++ b/views/routes/almanach/edit/body.gohtml @@ -55,7 +55,7 @@ type AlmanachResult struct {