From f716eb554778e8c447f34d605848f553e75d5bcc Mon Sep 17 00:00:00 2001 From: Simon Martens Date: Wed, 14 Jan 2026 15:50:09 +0100 Subject: [PATCH] help migrations/forms --- app/pb.go | 36 +++++++++ migrations/03_field_help.go | 65 ++++++---------- views/routes/almanach/edit/body.gohtml | 82 ++++++++++----------- views/routes/components/_status_edit.gohtml | 10 ++- views/routes/ort/edit/body.gohtml | 10 +-- views/routes/person/edit/body.gohtml | 18 ++--- views/routes/reihe/edit/body.gohtml | 8 +- 7 files changed, 125 insertions(+), 104 deletions(-) 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 {
{{ $model.result.Entry.MusenalmID }} -
Die Alm-Nr ist Teil der URL und wird automatisch vergeben.
+
{{ help "entries" "musenalm_id" }}
@@ -114,7 +114,7 @@ type AlmanachResult struct {
Datenbank-ID -
Die Datenbank-ID kann zur Fehlerdiagnose hilfreich sein.
+
{{ help "entries" "id" }}
@@ -168,7 +168,7 @@ type AlmanachResult struct {
-
Kurzer, eindeutiger Titel für die Anzeige.
+
{{ help "entries" "preferred_title" }}
@@ -193,12 +193,12 @@ type AlmanachResult struct {
- - -
Vollständiger Titel des Almanachs.
- -
-
+ + +
{{ help "entries" "title_statement" }}
+ +
+
@@ -234,7 +234,7 @@ type AlmanachResult struct {
-
Ergänzender Untertitel oder Zusatz.
+
{{ help "entries" "subtitle_statement" }}
@@ -253,7 +253,7 @@ type AlmanachResult struct {
-
Alternative oder abweichende Titelformen.
+
{{ help "entries" "variant_title" }}
@@ -272,7 +272,7 @@ type AlmanachResult struct {
-
Erste Worte oder Anfang des Texts.
+
{{ help "entries" "incipit_statement" }}
@@ -292,7 +292,7 @@ type AlmanachResult struct { -
Angabe zu Herausgebern oder Verantwortlichen.
+
{{ help "entries" "responsibility_statement" }}
@@ -311,7 +311,7 @@ type AlmanachResult struct {
-
Verlags- oder Publikationsangaben.
+
{{ help "entries" "publication_statement" }}
@@ -330,7 +330,7 @@ type AlmanachResult struct {
-
Ort(e) der Veröffentlichung.
+
{{ help "entries" "place_statement" }}
@@ -357,7 +357,7 @@ type AlmanachResult struct {
-
Erscheinungsjahr des Almanachs.
+
{{ help "entries" "year" }}
@@ -370,7 +370,7 @@ type AlmanachResult struct {
-
Hinweis zur Ausgabe oder Edition.
+
{{ helpOr "entries" "edition" "Hinweis zur Ausgabe oder Edition." }}
@@ -400,7 +400,7 @@ type AlmanachResult struct {
-
Verknüpfte Reihen für diesen Almanach.
+
{{ helpOr "entries" "series" "Verknüpfte Reihen für diesen Almanach." }}
@@ -545,7 +545,7 @@ type AlmanachResult struct {
-
Beteiligte Personen oder Körperschaften.
+
{{ helpOr "entries" "agents" "Beteiligte Personen oder Körperschaften." }}
@@ -692,7 +692,7 @@ type AlmanachResult struct {
-
Orte der Veröffentlichung und des Verlags.
+
{{ help "entries" "places" }}
@@ -731,7 +731,7 @@ type AlmanachResult struct {
- {{ template "_status_edit" (Arr $model.result.Entry "type" "type" "almanach") }} + {{ template "_status_edit" (Arr $model.result.Entry "type" "type" "entries" "almanach") }}
@@ -749,7 +749,7 @@ type AlmanachResult struct {
-
Hinweise zu Umfang oder Struktur.
+
{{ help "entries" "extent" }}
@@ -768,7 +768,7 @@ type AlmanachResult struct {
-
Maße oder Formatangaben.
+
{{ help "entries" "dimensions" }}
@@ -791,7 +791,7 @@ type AlmanachResult struct {
-
Sprachen des Almanachs oder der Inhalte.
+
{{ help "entries" "language" }}
@@ -814,12 +814,12 @@ type AlmanachResult struct {
- - -
Literatur- oder Quellenangaben.
- -
-
+ + +
{{ help "entries" "refs" }}
+ +
+
@@ -936,7 +936,7 @@ type AlmanachResult struct {
-
Institution oder Besitzer des Exemplars.
+
{{ help "items" "owner" }}
@@ -944,7 +944,7 @@ type AlmanachResult struct {
-
Interne Signatur oder Kennung.
+
{{ help "items" "identifier" }}
@@ -952,7 +952,7 @@ type AlmanachResult struct {
-
Aufbewahrungsort des Exemplars.
+
{{ help "items" "location" }}
@@ -960,7 +960,7 @@ type AlmanachResult struct {
-
Medientyp oder Verfügbarkeit.
+
{{ help "items" "media" }}
@@ -1053,7 +1053,7 @@ type AlmanachResult struct {
-
Institution oder Besitzer des Exemplars.
+
{{ help "items" "owner" }}
@@ -1061,7 +1061,7 @@ type AlmanachResult struct {
-
Interne Signatur oder Kennung.
+
{{ help "items" "identifier" }}
@@ -1069,7 +1069,7 @@ type AlmanachResult struct {
-
Aufbewahrungsort des Exemplars.
+
{{ help "items" "location" }}
@@ -1077,7 +1077,7 @@ type AlmanachResult struct {
-
Medientyp oder Verfügbarkeit.
+
{{ help "items" "media" }}
diff --git a/views/routes/components/_status_edit.gohtml b/views/routes/components/_status_edit.gohtml index b881431..5ddd894 100644 --- a/views/routes/components/_status_edit.gohtml +++ b/views/routes/components/_status_edit.gohtml @@ -1,9 +1,13 @@ {{- $entity := index . 0 -}} {{- $fieldName := index . 1 -}} {{- $fieldId := index . 2 -}} +{{- $tableName := "" -}} {{- $context := "" -}} {{- if gt (len .) 3 -}} - {{- $context = index . 3 -}} + {{- $tableName = index . 3 -}} +{{- end -}} +{{- if gt (len .) 4 -}} + {{- $context = index . 4 -}} {{- end -}} {{- $isAlmanach := eq $context "almanach" -}} @@ -14,7 +18,7 @@
-
Kurzinfo zum Bearbeitungsstatus.
+
{{ help $tableName "edit_state" }}
@@ -47,7 +51,7 @@
-
Hinweise zum Bearbeitungsstand oder offene Fragen.
+
{{ help $tableName "edit_comment" }}
diff --git a/views/routes/ort/edit/body.gohtml b/views/routes/ort/edit/body.gohtml index 70a56f6..7d62e4a 100644 --- a/views/routes/ort/edit/body.gohtml +++ b/views/routes/ort/edit/body.gohtml @@ -117,7 +117,7 @@
-
Kurze Hilfe zum Ortsnamen.
+
{{ help "places" "name" }}
@@ -133,7 +133,7 @@
-
Weitere gebräuchliche Namen für den Ort.
+
{{ help "places" "pseudonyms" }}
@@ -145,7 +145,7 @@
-
Externe Referenz oder offizielle Webseite.
+
{{ help "places" "uri" }}
@@ -158,7 +158,7 @@ @@ -168,7 +168,7 @@
- {{ template "_status_edit" (Arr $place "status" "status") }} + {{ template "_status_edit" (Arr $place "status" "status" "places") }}
{{ template "_linked_items" (Arr $model.result.Entries nil nil nil nil) }}
diff --git a/views/routes/person/edit/body.gohtml b/views/routes/person/edit/body.gohtml index 9366720..f5c8dcb 100644 --- a/views/routes/person/edit/body.gohtml +++ b/views/routes/person/edit/body.gohtml @@ -119,7 +119,7 @@
-
Vollständiger Name der Person oder Körperschaft.
+
{{ help "agents" "name" }}
@@ -135,7 +135,7 @@
-
Alternative Namen oder Schreibweisen.
+
{{ help "agents" "pseudonyms" }}
@@ -150,7 +150,7 @@ @@ -162,7 +162,7 @@ @@ -175,7 +175,7 @@
-
Kurzbiografie oder Lebensdaten.
+
{{ help "agents" "biographical_data" }}
@@ -187,7 +187,7 @@
-
Beruf oder Tätigkeit.
+
{{ help "agents" "profession" }}
@@ -201,7 +201,7 @@
-
Externer Link oder Normdaten-URL.
+
{{ help "agents" "uri" }}
@@ -213,7 +213,7 @@
-
Quellen oder Belege zur Person.
+
{{ help "agents" "refs" }}
@@ -225,7 +225,7 @@
- {{ template "_status_edit" (Arr $agent "status" "status") }} + {{ template "_status_edit" (Arr $agent "status" "status" "agents") }}
{{ template "_linked_items" (Arr $model.result.Entries $model.result.Contents $model.result.EntryTypes $model.result.ContentTypes $model.result.ContentEntries) }}
diff --git a/views/routes/reihe/edit/body.gohtml b/views/routes/reihe/edit/body.gohtml index 3d6c295..e1b4ccc 100644 --- a/views/routes/reihe/edit/body.gohtml +++ b/views/routes/reihe/edit/body.gohtml @@ -119,7 +119,7 @@
-
Offizieller oder bevorzugter Titel der Reihe.
+
{{ help "series" "title" }}
@@ -136,7 +136,7 @@
-
Quellen oder Belege zur Reihe.
+
{{ help "series" "refs" }}
@@ -148,7 +148,7 @@
-
Wie oft die Reihe veröffentlicht wurde.
+
{{ help "series" "frequency" }}
@@ -160,7 +160,7 @@
- {{ template "_status_edit" (Arr $series "status" "status") }} + {{ template "_status_edit" (Arr $series "status" "status" "series") }}
{{ template "_linked_items" (Arr $model.result.Entries $model.result.Contents nil $model.result.ContentTypes $model.result.ContentEntries) }}