mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-29 09:15:33 +00:00
Static files handling
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/mattn/go-sqlite3"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
)
|
||||
|
||||
@@ -120,6 +121,8 @@ func (app *App) Serve() error {
|
||||
})
|
||||
|
||||
app.PB.OnServe().BindFunc(func(e *core.ServeEvent) error {
|
||||
e.Router.GET("/assets/{path...}", apis.Static(views.StaticFS, true))
|
||||
|
||||
for _, page := range app.Pages {
|
||||
page.Setup(e.Router, e.App, engine)
|
||||
}
|
||||
|
||||
@@ -40,6 +40,8 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
placesmap := datatypes.MakeMap(places, func(record *dbmodels.Place) string { return record.Name() })
|
||||
|
||||
series, err := seed.RecordsFromReihentitel(app, adb.Reihen)
|
||||
if err == nil {
|
||||
for _, record := range series {
|
||||
@@ -51,7 +53,7 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
entries, err := seed.RecordsFromBände(app, *adb)
|
||||
entries, err := seed.RecordsFromBände(app, *adb, placesmap)
|
||||
if err == nil {
|
||||
for _, record := range entries {
|
||||
if err = app.Save(record); err != nil {
|
||||
@@ -62,7 +64,9 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if records, err := seed.ItemsFromBändeAndBIBLIO(app, adb.Bände, adb.BIBLIO); err == nil {
|
||||
entriesmap := datatypes.MakeMap(entries, func(record *dbmodels.Entry) string { return record.MusenalmID() })
|
||||
|
||||
if records, err := seed.ItemsFromBändeAndBIBLIO(app, adb.Bände, adb.BIBLIO, entriesmap); err == nil {
|
||||
for _, record := range records {
|
||||
if err = app.Save(record); err != nil {
|
||||
app.Logger().Error("Error saving record", "error", err, "record", record)
|
||||
@@ -72,8 +76,6 @@ func init() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
entriesmap := datatypes.MakeMap(entries, func(record *dbmodels.Entry) string { return record.MusenalmID() })
|
||||
|
||||
contents, err := seed.RecordsFromInhalte(app, adb.Inhalte, entriesmap)
|
||||
if err == nil {
|
||||
for _, record := range contents {
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
func RecordsFromBände(
|
||||
app core.App,
|
||||
adb xmlmodels.AccessDB,
|
||||
places map[string]*dbmodels.Place,
|
||||
) ([]*dbmodels.Entry, error) {
|
||||
collection, err := app.FindCollectionByNameOrId(dbmodels.ENTRIES_TABLE)
|
||||
records := make([]*dbmodels.Entry, 0, len(adb.Bände.Bände))
|
||||
@@ -74,7 +75,7 @@ func RecordsFromBände(
|
||||
|
||||
handlePreferredTitleEntry(record, band, rmap, relmap)
|
||||
handleDeprecated(record, band)
|
||||
handleOrte(record, band, omap, app, ocoll)
|
||||
handleOrte(record, band, omap, app, ocoll, places)
|
||||
|
||||
records = append(records, record)
|
||||
}
|
||||
@@ -122,6 +123,7 @@ func handleOrte(
|
||||
orte map[string]xmlmodels.Ort,
|
||||
app core.App,
|
||||
ocollection *core.Collection,
|
||||
places map[string]*dbmodels.Place,
|
||||
) {
|
||||
for _, v := range band.Orte {
|
||||
o, ok := orte[v.Value]
|
||||
@@ -133,8 +135,8 @@ func handleOrte(
|
||||
e = true
|
||||
}
|
||||
|
||||
ort, err := app.FindFirstRecordByData(dbmodels.PLACES_TABLE, dbmodels.PLACES_NAME_FIELD, n)
|
||||
if err == nil {
|
||||
ort, ok := places[n]
|
||||
if ok {
|
||||
before := record.Places()
|
||||
record.SetPlaces(append(before, ort.Id))
|
||||
} else {
|
||||
|
||||
@@ -16,6 +16,7 @@ func ItemsFromBändeAndBIBLIO(
|
||||
app core.App,
|
||||
entries xmlmodels.Bände,
|
||||
biblio map[int]xmlmodels.BIBLIOEintrag,
|
||||
entriesmap map[string]*dbmodels.Entry,
|
||||
) ([]*dbmodels.Item, error) {
|
||||
collection, err := app.FindCollectionByNameOrId(dbmodels.ITEMS_TABLE)
|
||||
records := make([]*dbmodels.Item, 0, len(entries.Bände))
|
||||
@@ -27,9 +28,9 @@ func ItemsFromBändeAndBIBLIO(
|
||||
|
||||
for i := 0; i < len(entries.Bände); i++ {
|
||||
band := entries.Bände[i]
|
||||
banddb, err := app.FindFirstRecordByData(dbmodels.ENTRIES_TABLE, dbmodels.MUSENALMID_FIELD, band.ID)
|
||||
if err != nil {
|
||||
app.Logger().Error("Error finding record", "error", err, "collection", dbmodels.ENTRIES_TABLE, "field", dbmodels.MUSENALMID_FIELD, "value", band.ID)
|
||||
banddb, ok := entriesmap[band.ID]
|
||||
if !ok {
|
||||
app.Logger().Error("Error finding entry", "error", err, "entry", band.ID)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package pages
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/Theodor-Springmann-Stiftung/musenalm/app"
|
||||
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
|
||||
@@ -33,7 +34,12 @@ func (p *IndexPage) Down(app core.App) error {
|
||||
|
||||
func (p *IndexPage) Setup(router *router.Router[*core.RequestEvent], app core.App, engine *templating.Engine) error {
|
||||
router.GET("/{$}", func(e *core.RequestEvent) error {
|
||||
return e.String(http.StatusOK, "Hello, World!")
|
||||
var builder strings.Builder
|
||||
err := engine.Render(&builder, "/", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return e.HTML(http.StatusOK, builder.String())
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
23
scratchpad.md
Normal file
23
scratchpad.md
Normal file
@@ -0,0 +1,23 @@
|
||||
Vorteile PocketBase
|
||||
- Log-Datenbank
|
||||
- User-Management
|
||||
- Kurze Übernahme neuer Features
|
||||
- Backup
|
||||
- Email
|
||||
|
||||
- Hooks
|
||||
|
||||
|
||||
Nachteile PocketBase
|
||||
- Alles muss über Hooks gemacht werden
|
||||
- Eigener HTTP-Server
|
||||
- Eigene Cache-Implemtation
|
||||
- Eigene Cookies on Auth
|
||||
|
||||
- Eine weitere Abhängigkeit
|
||||
|
||||
|
||||
Für einen Umzug:
|
||||
Alle PB-Abfragen die Record benutzen, nach sql-Abfragen umwandeln.
|
||||
Eigene DB-Connection
|
||||
Modelle umwandeln (zzt RecordProxy)
|
||||
File diff suppressed because one or more lines are too long
@@ -1,3 +1 @@
|
||||
<div class="mt-8">
|
||||
<h1 class="text-2xl">Königsberger gelehrte und politische Zeitungen</h1>
|
||||
</div>
|
||||
MALM
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
{{ $a := . }}
|
||||
{{ if and $a (ne (len $a.Names) 0) }}
|
||||
<div class="pb-4">
|
||||
{{ index $a.Names 0 }}
|
||||
<div>
|
||||
{{ $gnd := GetGND $a.GND }}
|
||||
{{ if (ne $gnd nil) }}
|
||||
{{- if ne (len $gnd.DateOfBirth) 0 -}}
|
||||
<i class="ri-asterisk text-xs relative bottom-0.5"></i>
|
||||
{{- HRDateShort (index $gnd.DateOfBirth 0) -}}
|
||||
{{- end -}}
|
||||
{{- if ne (len $gnd.DateOfDeath) 0 }}
|
||||
 <i class="ri-cross-fill text-xs relative bottom-0.5"></i
|
||||
> {{ HRDateShort (index $gnd.DateOfDeath 0) }}
|
||||
{{ end }}
|
||||
{{- if ne (len $gnd.ProfessionOrOccupation) 0 -}}
|
||||
<div>
|
||||
{{- (index $gnd.ProfessionOrOccupation 0).Label -}}
|
||||
{{- if gt (len $gnd.ProfessionOrOccupation) 1 -}}
|
||||
,
|
||||
{{ (index $gnd.ProfessionOrOccupation 1).Label -}}
|
||||
{{ end -}}
|
||||
{{- if gt (len $gnd.ProfessionOrOccupation) 2 -}}
|
||||
,
|
||||
{{ (index $gnd.ProfessionOrOccupation 2).Label -}}
|
||||
{{ end -}}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<div class="flex gap-x-2 flex-row">
|
||||
<a href="/akteure/{{ $a.ID }}" class="no-underline!"><i class="ri-links-line"></i></a>
|
||||
|
||||
{{- if ne $gnd nil -}}
|
||||
<a href="{{ $a.GND }}" target="_blank">GND →</a>
|
||||
{{- if ne (len $gnd.Wikipedia) 0 -}}
|
||||
<a href="{{ (index $gnd.Wikipedia 0).Label }}" target="_blank">WIKI →</a>
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ $works := LookupWorks $a }}
|
||||
{{- if ne (len $works) 0 -}}
|
||||
<div>
|
||||
{{ range $_, $w := $works }}
|
||||
{{- if ne (len $w.Item.Citation.InnerXML ) 0 -}}
|
||||
<script type="application/xml" xslt-template="transform-citation" xslt-onload>
|
||||
<xml>
|
||||
{{- Safe $w.Item.Citation.InnerXML -}}
|
||||
</xml>
|
||||
</script>
|
||||
{{- end -}}
|
||||
{{ range $_, $url := $w.Item.URLs }}
|
||||
<div>
|
||||
<a href="{{ $url.Address }}" target="_blank">{{ $url.Chardata }}</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ $pieces := LookupPieces $w.Item }}
|
||||
{{ if len $pieces }}
|
||||
<div>
|
||||
{{ range $_, $p := $pieces }}
|
||||
{{- range $_, $i := $p.Item.IssueRefs -}}
|
||||
<div>
|
||||
<a href="/{{ $i.When }}/{{ $i.Nr }}">{{ $i.Nr }}/{{ $i.When }}</a>
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ $pieces := LookupPieces $a }}
|
||||
{{- if ne (len $pieces) 0 -}}
|
||||
<div>
|
||||
{{ range $_, $p := $pieces }}
|
||||
{{- range $_, $i := $p.Item.IssueRefs -}}
|
||||
<div>
|
||||
<a href="/{{ $i.When }}/{{ $i.Nr }}">{{ $i.Nr }}/{{ $i.When }}</a>
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
</div>
|
||||
{{ end }}
|
||||
Reference in New Issue
Block a user