Some minor frontend things

This commit is contained in:
Simon Martens
2026-01-22 09:42:18 +01:00
parent c0146aadfb
commit 7f48ef48d3
12 changed files with 1114 additions and 990 deletions

View File

@@ -125,11 +125,15 @@ func (p *AlmanachContentsEditPage) GETItemEdit(engine *templating.Engine, app co
} }
var prevContent *dbmodels.Content var prevContent *dbmodels.Content
var nextContent *dbmodels.Content var nextContent *dbmodels.Content
contentIndex := 0
contentTotal := 0
if len(contents) > 0 { if len(contents) > 0 {
contentTotal = len(contents)
for i, c := range contents { for i, c := range contents {
if c.Id != content.Id { if c.Id != content.Id {
continue continue
} }
contentIndex = i + 1
if i > 0 { if i > 0 {
prevContent = contents[i-1] prevContent = contents[i-1]
} }
@@ -158,6 +162,8 @@ func (p *AlmanachContentsEditPage) GETItemEdit(engine *templating.Engine, app co
data["content_agents"] = contentAgentsMap[content.Id] data["content_agents"] = contentAgentsMap[content.Id]
data["prev_content"] = prevContent data["prev_content"] = prevContent
data["next_content"] = nextContent data["next_content"] = nextContent
data["content_index"] = contentIndex
data["content_total"] = contentTotal
if msg := e.Request.URL.Query().Get("saved_message"); msg != "" { if msg := e.Request.URL.Query().Get("saved_message"); msg != "" {
data["success"] = msg data["success"] = msg
@@ -253,11 +259,15 @@ func (p *AlmanachContentsEditPage) renderItemError(engine *templating.Engine, ap
} }
var prevContent *dbmodels.Content var prevContent *dbmodels.Content
var nextContent *dbmodels.Content var nextContent *dbmodels.Content
contentIndex := 0
contentTotal := 0
if len(entryContents) > 0 { if len(entryContents) > 0 {
contentTotal = len(entryContents)
for i, c := range entryContents { for i, c := range entryContents {
if c.Id != content.Id { if c.Id != content.Id {
continue continue
} }
contentIndex = i + 1
if i > 0 { if i > 0 {
prevContent = entryContents[i-1] prevContent = entryContents[i-1]
} }
@@ -286,6 +296,8 @@ func (p *AlmanachContentsEditPage) renderItemError(engine *templating.Engine, ap
data["content_agents"] = contentAgentsMap[content.Id] data["content_agents"] = contentAgentsMap[content.Id]
data["prev_content"] = prevContent data["prev_content"] = prevContent
data["next_content"] = nextContent data["next_content"] = nextContent
data["content_index"] = contentIndex
data["content_total"] = contentTotal
data["error"] = message data["error"] = message
return engine.Response200(e, TEMPLATE_ALMANACH_CONTENTS_ITEM_EDIT, data, p.Layout) return engine.Response200(e, TEMPLATE_ALMANACH_CONTENTS_ITEM_EDIT, data, p.Layout)
@@ -555,13 +567,6 @@ func (p *AlmanachContentsEditPage) POSTSave(engine *templating.Engine, app core.
if shouldUpdateFTS { if shouldUpdateFTS {
touched := updatedContents touched := updatedContents
if len(contentInputs) > 0 { if len(contentInputs) > 0 {
tempToCreated := map[string]string{}
for idx, tempID := range newContentIDs {
if idx >= len(createdContents) {
break
}
tempToCreated[tempID] = createdContents[idx].Id
}
touchedIDs := map[string]struct{}{} touchedIDs := map[string]struct{}{}
for id := range contentInputs { for id := range contentInputs {
if createdID, ok := tempToCreated[id]; ok { if createdID, ok := tempToCreated[id]; ok {
@@ -583,7 +588,20 @@ func (p *AlmanachContentsEditPage) POSTSave(engine *templating.Engine, app core.
go updateContentsFTS5(app, entry, touched) go updateContentsFTS5(app, entry, touched)
} }
redirect := fmt.Sprintf("/almanach/%s/contents/edit?saved_message=%s", id, url.QueryEscape("Änderungen gespeichert.")) savedMessage := url.QueryEscape("Änderungen gespeichert.")
if contentID != "" {
effectiveContentID := contentID
if mappedID, ok := tempToCreated[effectiveContentID]; ok {
effectiveContentID = mappedID
}
if effectiveContentID != "" {
if resolved, err := dbmodels.Contents_IDs(app, []any{effectiveContentID}); err == nil && len(resolved) > 0 {
redirect := fmt.Sprintf("/almanach/%s/contents/%d/edit?saved_message=%s", id, resolved[0].MusenalmID(), savedMessage)
return e.Redirect(http.StatusSeeOther, redirect)
}
}
}
redirect := fmt.Sprintf("/almanach/%s/contents/edit?saved_message=%s", id, savedMessage)
return e.Redirect(http.StatusSeeOther, redirect) return e.Redirect(http.StatusSeeOther, redirect)
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -75,6 +75,10 @@
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline">
A&thinsp;-&thinsp;Z A&thinsp;-&thinsp;Z
@@ -88,23 +92,27 @@
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
</div> </div>
<div class="">{{ $model.result.Entry.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $model.result.Entry.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums">
<span>{{ GermanDate $model.result.Entry.Updated }}</span>, <span>{{ GermanDate $model.result.Entry.Updated }}</span>,
<span>{{ GermanTime $model.result.Entry.Updated }}</span>h <span>{{ GermanTime $model.result.Entry.Updated }}</span>h
</div> </div>

View File

@@ -5,7 +5,7 @@
<div class="flex flex-row w-full justify-between"> <div class="flex flex-row w-full justify-between">
<div class="flex flex-col justify-end-safe flex-2/5"> <div class="flex flex-col justify-end-safe flex-2/5">
<div class="mb-1"> <div class="mb-1">
<i class="ri-file-list-3-line"></i> Beiträge <i class="ri-file-list-3-line"></i> Beitrag
</div> </div>
<h1 class="text-2xl w-full font-bold text-slate-900 mb-1"> <h1 class="text-2xl w-full font-bold text-slate-900 mb-1">
{{- if $model.result -}} {{- if $model.result -}}
@@ -13,7 +13,7 @@
{{- if $model.is_new -}} {{- if $model.is_new -}}
<span class="text-base font-semibold text-slate-700">Neuer Beitrag</span> <span class="text-base font-semibold text-slate-700">Neuer Beitrag</span>
{{- else -}} {{- else -}}
<span class="text-base font-semibold text-slate-700">Beitrag Nr. {{ $model.content.MusenalmID }}</span> <span class="mt-1 mb-1 block text-base font-semibold text-slate-900">Beitrag Nr. {{ $model.content.MusenalmID }}</span>
{{- end -}} {{- end -}}
{{- else -}} {{- else -}}
Beiträge bearbeiten Beiträge bearbeiten
@@ -59,7 +59,7 @@
{{- end -}} {{- end -}}
<div> <div>
<a href="/almanach/{{- $model.result.Entry.MusenalmID -}}/contents/edit" class="text-gray-700 no-underline hover:text-slate-950 block"> <a href="/almanach/{{- $model.result.Entry.MusenalmID -}}/contents/edit" class="text-gray-700 no-underline hover:text-slate-950 block">
<i class="ri-arrow-left-line"></i> Zurück zur Liste <i class="ri-arrow-left-line"></i> Liste
</a> </a>
</div> </div>
&middot; &middot;
@@ -97,9 +97,13 @@
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline tabular-nums whitespace-nowrap">
{{ $model.content.MusenalmID }} <span class="inline-block w-[2.5ch] text-right">{{ $model.content_index }}</span>&thinsp;/&thinsp;<span class="inline-block w-[2.5ch] text-left">{{ $model.content_total }}</span>
</span> </span>
{{- if $model.next_content -}} {{- if $model.next_content -}}
<tool-tip position="top" class="!inline"> <tool-tip position="top" class="!inline">
@@ -118,6 +122,10 @@
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
{{- else -}} {{- else -}}
<span class="text-gray-800 font-bold no-underline">Neu</span> <span class="text-gray-800 font-bold no-underline">Neu</span>
@@ -125,19 +133,19 @@
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
</div> </div>
<div class="">{{ $model.content.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $model.content.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums">
<span>{{ GermanDate $model.result.Entry.Updated }}</span>, <span>{{ GermanDate $model.result.Entry.Updated }}</span>,
<span>{{ GermanTime $model.result.Entry.Updated }}</span>h <span>{{ GermanTime $model.result.Entry.Updated }}</span>h
</div> </div>
@@ -194,13 +202,18 @@
<i class="ri-question-line"></i> <i class="ri-question-line"></i>
</tool-tip> </tool-tip>
</div> </div>
<button type="button" id="content-{{ $model.content_id }}-musenalm-type-toggle" class="text-sm font-bold text-gray-700 hover:text-slate-950 no-underline pr-3">
<i class="ri-link"></i> Typ verlinken
</button>
</div> </div>
<div class="px-2 py-2"> <div class="px-2 py-2">
<multi-select-simple <multi-select-simple
id="content-{{ $model.content_id }}-musenalm-type" id="content-{{ $model.content_id }}-musenalm-type"
name="content_{{ $model.content_id }}_musenalm_type[]" name="content_{{ $model.content_id }}_musenalm_type[]"
data-external-toggle-id="content-{{ $model.content_id }}-musenalm-type-toggle"
show-create-button="false" show-create-button="false"
placeholder="Musenalm-Typen suchen..." placeholder="Musenalm-Typen suchen..."
data-toggle-label='<i class="ri-add-circle-line"></i>'
data-empty-text="Keine Typen verknüpft" data-empty-text="Keine Typen verknüpft"
value='[{{- range $i, $t := $model.content.MusenalmType -}}{{- if $i }},{{ end -}}"{{ $t }}"{{- end -}}]' value='[{{- range $i, $t := $model.content.MusenalmType -}}{{- if $i }},{{ end -}}"{{ $t }}"{{- end -}}]'
data-initial-options='[{{- range $i, $t := $model.musenalm_types -}}{{- if $i }},{{ end -}}{{ printf "{\"id\":%q,\"name\":%q}" $t $t }}{{- end -}}]' data-initial-options='[{{- range $i, $t := $model.musenalm_types -}}{{- if $i }},{{ end -}}{{ printf "{\"id\":%q,\"name\":%q}" $t $t }}{{- end -}}]'
@@ -211,17 +224,24 @@
<div class="inputwrapper"> <div class="inputwrapper">
<div class="inputlabelrow"> <div class="inputlabelrow">
<label for="content-{{ $model.content_id }}-language" class="inputlabel">Sprache</label> <label for="content-{{ $model.content_id }}-language" class="inputlabel">Sprache</label>
<button type="button" id="content-{{ $model.content_id }}-language-toggle" class="text-sm font-bold text-gray-700 hover:text-slate-950 no-underline pr-3">
<i class="ri-link"></i> Sprache verlinken
</button>
</div> </div>
<div class="px-2 py-2">
<multi-select-simple <multi-select-simple
id="content-{{ $model.content_id }}-language" id="content-{{ $model.content_id }}-language"
name="content_{{ $model.content_id }}_language[]" name="content_{{ $model.content_id }}_language[]"
data-external-toggle-id="content-{{ $model.content_id }}-language-toggle"
show-create-button="false" show-create-button="false"
placeholder="Sprachen suchen..." placeholder="Sprachen suchen..."
data-toggle-label='<i class="ri-add-circle-line"></i>'
data-empty-text="Keine Sprachen verknüpft" data-empty-text="Keine Sprachen verknüpft"
value='[{{- range $i, $lang := $model.content.Language -}}{{- if $i }},{{ end -}}"{{ $lang }}"{{- end -}}]' value='[{{- range $i, $lang := $model.content.Language -}}{{- if $i }},{{ end -}}"{{ $lang }}"{{- end -}}]'
data-initial-values='[{{- range $i, $lang := $model.content.Language -}}{{- if $i }},{{ end -}}{{ printf "%q" $lang }}{{- end -}}]'> data-initial-values='[{{- range $i, $lang := $model.content.Language -}}{{- if $i }},{{ end -}}{{ printf "%q" $lang }}{{- end -}}]'>
</multi-select-simple> </multi-select-simple>
</div> </div>
</div>
{{- template "_content_images_panel" (Dict {{- template "_content_images_panel" (Dict
"content" $model.content "content" $model.content
"entry" $model.result.Entry "entry" $model.result.Entry
@@ -236,7 +256,11 @@
<div class="flex items-center gap-3 self-end flex-wrap"> <div class="flex items-center gap-3 self-end flex-wrap">
<a href="/almanach/{{ $model.result.Entry.MusenalmID }}/contents/edit" class="resetbutton w-40 flex items-center gap-2 justify-center"> <a href="/almanach/{{ $model.result.Entry.MusenalmID }}/contents/edit" class="resetbutton w-40 flex items-center gap-2 justify-center">
<i class="ri-arrow-left-line"></i> <i class="ri-arrow-left-line"></i>
<span>Zurück</span> <span>Liste</span>
</a>
<a href="/almanach/{{ $model.result.Entry.MusenalmID }}/contents/new" class="resetbutton w-40 flex items-center gap-2 justify-center">
<i class="ri-add-line"></i>
<span>Neuer Beitrag</span>
</a> </a>
{{- if not $model.is_new -}} {{- if not $model.is_new -}}
<button type="button" class="resetbutton w-40 flex items-center gap-2 justify-center bg-red-50 text-red-800 hover:bg-red-100 hover:text-red-900" data-role="content-delete"> <button type="button" class="resetbutton w-40 flex items-center gap-2 justify-center bg-red-50 text-red-800 hover:bg-red-100 hover:text-red-900" data-role="content-delete">

View File

@@ -99,6 +99,10 @@ type AlmanachResult struct {
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline">
A&thinsp;-&thinsp;Z A&thinsp;-&thinsp;Z
@@ -112,11 +116,15 @@ type AlmanachResult struct {
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
@@ -125,14 +133,14 @@ type AlmanachResult struct {
<i class="ri-information-line"></i> <i class="ri-information-line"></i>
</tool-tip> </tool-tip>
</div> </div>
<div class="">{{ $model.result.Entry.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $model.result.Entry.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit" id="almanach-updated-stamp"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums" id="almanach-updated-stamp">
<span id="almanach-updated-date">{{ GermanDate $model.result.Entry.Updated }}</span>, <span id="almanach-updated-date">{{ GermanDate $model.result.Entry.Updated }}</span>,
<span id="almanach-updated-time">{{ GermanTime $model.result.Entry.Updated }}</span>h <span id="almanach-updated-time">{{ GermanTime $model.result.Entry.Updated }}</span>h
</div> </div>

View File

@@ -49,6 +49,10 @@
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline">
A&thinsp;-&thinsp;Z A&thinsp;-&thinsp;Z
@@ -62,23 +66,27 @@
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
</div> </div>
<div class="">{{ $place.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $place.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit" id="place-updated-stamp"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums" id="place-updated-stamp">
<span id="place-updated-date">{{ GermanDate $place.Updated }}</span>, <span id="place-updated-date">{{ GermanDate $place.Updated }}</span>,
<span id="place-updated-time">{{ GermanTime $place.Updated }}</span>h <span id="place-updated-time">{{ GermanTime $place.Updated }}</span>h
</div> </div>

View File

@@ -51,6 +51,10 @@
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline">
A&thinsp;-&thinsp;Z A&thinsp;-&thinsp;Z
@@ -64,23 +68,27 @@
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
</div> </div>
<div class="">{{ $agent.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $agent.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit" id="person-updated-stamp"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums" id="person-updated-stamp">
<span id="person-updated-date">{{ GermanDate $agent.Updated }}</span>, <span id="person-updated-date">{{ GermanDate $agent.Updated }}</span>,
<span id="person-updated-time">{{ GermanTime $agent.Updated }}</span>h <span id="person-updated-time">{{ GermanTime $agent.Updated }}</span>h
</div> </div>

View File

@@ -51,6 +51,10 @@
<i class="ri-arrow-left-s-line"></i> <i class="ri-arrow-left-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-left-s-line"></i>
</span>
{{- end -}} {{- end -}}
<span class="text-gray-800 font-bold no-underline"> <span class="text-gray-800 font-bold no-underline">
A&thinsp;-&thinsp;Z A&thinsp;-&thinsp;Z
@@ -64,23 +68,27 @@
<i class="ri-arrow-right-s-line"></i> <i class="ri-arrow-right-s-line"></i>
</a> </a>
</tool-tip> </tool-tip>
{{- else -}}
<span class="text-gray-700 opacity-0 pointer-events-none">
<i class="ri-arrow-right-s-line"></i>
</span>
{{- end -}} {{- end -}}
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-10"> <div class="flex flex-col justify-end gap-y-6 pr-10 w-40 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm"> <div class="font-bold text-sm">
<i class="ri-database-2-line"></i> Datenbank-ID <i class="ri-database-2-line"></i> Datenbank-ID
</div> </div>
<div class="">{{ $series.Id }}</div> <div class="whitespace-nowrap tabular-nums">{{ $series.Id }}</div>
</div> </div>
</div> </div>
<div class="flex flex-col justify-end gap-y-6 pr-4"> <div class="flex flex-col justify-end gap-y-6 pr-4 w-48 shrink-0">
<div class=""> <div class="">
<div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div> <div class="font-bold text-sm mb-1"><i class="ri-calendar-line"></i> Zuletzt bearbeitet</div>
<div> <div>
<div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit" id="series-updated-stamp"> <div class="px-1.5 py-0.5 rounded-xs bg-gray-200 w-fit whitespace-nowrap tabular-nums" id="series-updated-stamp">
<span id="series-updated-date">{{ GermanDate $series.Updated }}</span>, <span id="series-updated-date">{{ GermanDate $series.Updated }}</span>,
<span id="series-updated-time">{{ GermanTime $series.Updated }}</span>h <span id="series-updated-time">{{ GermanTime $series.Updated }}</span>h
</div> </div>

View File

@@ -232,7 +232,7 @@
{{- range $i, $c := $contents -}} {{- range $i, $c := $contents -}}
{{- $rels := index $model.result.ContentsAgents $c.Id -}} {{- $rels := index $model.result.ContentsAgents $c.Id -}}
{{- template "_content" Arr $c $e $rels $model.result.Agents false true {{- template "_content" Arr $c $e $rels $model.result.Agents false true
$model.parameters $model.parameters $model.request
-}} -}}
{{- end -}} {{- end -}}
</div> </div>

View File

@@ -22,6 +22,8 @@ export class FabMenu extends HTMLElement {
reiheUpdated = ""; reiheUpdated = "";
let hasPerson = false, let hasPerson = false,
personId = ""; personId = "";
let hasReihenList = false;
let hasPersonenList = false;
let hasEntry = false, let hasEntry = false,
entryId = "", entryId = "",
entryUpdated = ""; entryUpdated = "";
@@ -98,11 +100,14 @@ export class FabMenu extends HTMLElement {
} else if (path === "/" || path === "/index/") { } else if (path === "/" || path === "/index/") {
hasPage = true; hasPage = true;
pageKey = "index"; pageKey = "index";
} else if (path === "/reihen" || path === "/reihen/") {
hasPage = true;
pageKey = "reihen";
} }
} }
if (path === "/reihen" || path === "/reihen/") {
hasReihenList = true;
}
if (path === "/personen" || path === "/personen/") {
hasPersonenList = true;
}
// Try to find CSRF token from page forms // Try to find CSRF token from page forms
let csrfToken = ""; let csrfToken = "";
@@ -112,7 +117,7 @@ export class FabMenu extends HTMLElement {
} }
const hasCsrf = csrfToken !== ""; const hasCsrf = csrfToken !== "";
this.hasContext = hasReihe || hasPerson || hasEntry || hasContent || hasPage; this.hasContext = hasReihe || hasPerson || hasEntry || hasContent || hasPage || hasReihenList || hasPersonenList;
// Build half-open menu content // Build half-open menu content
let halfOpenContent = ""; let halfOpenContent = "";
@@ -172,6 +177,26 @@ export class FabMenu extends HTMLElement {
<span class="text-gray-900">Neuer Beitrag</span> <span class="text-gray-900">Neuer Beitrag</span>
</a> </a>
`; `;
} else if (isAdminOrEditor && hasReihenList) {
halfOpenContent = `
<div class="px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider">
Reihen
</div>
<a href="/reihen/new/" class="flex items-center px-4 py-2 hover:bg-gray-100 transition-colors no-underline text-sm">
<i class="ri-add-line text-base text-gray-700 mr-2.5"></i>
<span class="text-gray-900">Neue Reihe</span>
</a>
`;
} else if (isAdminOrEditor && hasPersonenList) {
halfOpenContent = `
<div class="px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider">
Personen
</div>
<a href="/personen/new/" class="flex items-center px-4 py-2 hover:bg-gray-100 transition-colors no-underline text-sm">
<i class="ri-add-line text-base text-gray-700 mr-2.5"></i>
<span class="text-gray-900">Neue Person</span>
</a>
`;
} else if (isAdminOrEditor && hasPage) { } else if (isAdminOrEditor && hasPage) {
halfOpenContent = ` halfOpenContent = `
<div class="px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider"> <div class="px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider">

View File

@@ -510,7 +510,7 @@
} }
#entrydata .entryrow { #entrydata .entryrow {
@apply flex flex-row gap-x-3.5 items-start py-0.5; @apply flex flex-row gap-x-3.5 items-baseline py-0.5;
} }
#entrydata { #entrydata {
@@ -576,7 +576,7 @@
} }
.content .fields { .content .fields {
@apply grid grid-cols-10 gap-y-0 w-full gap-x-3; @apply grid grid-cols-10 gap-y-0 w-full gap-x-3 items-baseline;
} }
.content .fieldlabel { .content .fieldlabel {