123 lines
5.8 KiB
HTML
123 lines
5.8 KiB
HTML
{{template "header" .}}
|
|
|
|
<div class="page-header">
|
|
<div class="page-header-title">
|
|
<h1>Einträge {{template "helplink" "weboberflaeche#finden"}}</h1>
|
|
<span class="help">
|
|
{{if .Project.Description}}{{.Project.Description}}{{else}}Wissen dieses Projekts — von Menschen und Agenten.{{end}}
|
|
</span>
|
|
</div>
|
|
{{if or .Session.CanWrite .Session.CanDownloadProject}}
|
|
<div class="page-header-actions row">
|
|
{{/* Derselbe Platz wie "Alle als ZIP herunterladen" unter Projekte.
|
|
download: Der Browser speichert das ZIP, statt die Seite zu wechseln.
|
|
Wer das darf, steht in Session.CanDownloadProject. */}}
|
|
{{if .Session.CanDownloadProject}}
|
|
<a class="button secondary" href="/p/{{.Project.Slug}}/export.zip" download>Als ZIP herunterladen</a>
|
|
{{end}}
|
|
{{if .Session.CanWrite}}
|
|
<a class="button" href="/p/{{.Project.Slug}}/new"
|
|
data-shortcut="n" aria-keyshortcuts="n" title="Neuer Eintrag (Taste n)">Neuer Eintrag</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
<form method="GET" action="/p/{{.Project.Slug}}/" class="toolbar" role="search">
|
|
<input type="search" name="q" value="{{.Data.Query}}" placeholder="Im Projekt suchen… ( / )" autocomplete="off"
|
|
aria-keyshortcuts="/">
|
|
<button type="submit" class="secondary">Suchen</button>
|
|
{{/* Filter "veraltet": nur sichtbar, wenn es welche gibt — ein Link auf
|
|
eine leere Liste wäre nur Rauschen. */}}
|
|
{{if and .Data.StaleCount (not .Data.Stale)}}
|
|
<a class="filter-link" href="/p/{{.Project.Slug}}/?veraltet=1"
|
|
title="Seit über einem Jahr unverändert. Prüfen, ob das noch stimmt.">{{.Data.StaleCount}} veraltet</a>
|
|
{{end}}
|
|
</form>
|
|
|
|
{{if .Data.Query}}
|
|
<p class="help">{{len .Data.Entries}} Treffer für „{{.Data.Query}}“ ·
|
|
<a href="/p/{{.Project.Slug}}/">Suche zurücksetzen</a></p>
|
|
{{else if .Data.Tag}}
|
|
<p class="help">{{len .Data.Entries}} Einträge mit „{{.Data.Tag}}“ ·
|
|
<a href="/p/{{.Project.Slug}}/">Filter aufheben</a></p>
|
|
{{else if .Data.Stale}}
|
|
<p class="help">{{len .Data.Entries}} Einträge seit über einem Jahr unverändert, älteste zuletzt.
|
|
Jeweils prüfen: stimmt das noch? Dann einmal speichern (oder kuratieren), sonst
|
|
korrigieren oder löschen. ·
|
|
<a href="/p/{{.Project.Slug}}/">Filter aufheben</a></p>
|
|
{{end}}
|
|
|
|
{{if .Data.Entries}}
|
|
{{$sammelbearbeitung := .Session.CanWrite}}
|
|
{{if $sammelbearbeitung}}
|
|
<form method="POST" action="/p/{{.Project.Slug}}/entries/bulk-tags" id="sammelform">
|
|
<input type="hidden" name="csrf_token" value="{{.CSRFToken}}">
|
|
{{if .Data.Tag}}<input type="hidden" name="tag" value="{{.Data.Tag}}">{{end}}
|
|
{{if .Data.Query}}<input type="hidden" name="q" value="{{.Data.Query}}">{{end}}
|
|
{{end}}
|
|
|
|
<ul class="entries">
|
|
{{$slug := .Project.Slug}}
|
|
{{range .Data.Entries}}
|
|
<li>
|
|
{{if $sammelbearbeitung}}
|
|
<label class="entry-select">
|
|
<input type="checkbox" name="ids" value="{{.Entry.ID}}" aria-label="{{.Entry.Title}} auswählen">
|
|
</label>
|
|
{{end}}
|
|
|
|
<div class="entry-content">
|
|
<a class="entry-title" href="/p/{{$slug}}/e/{{.Entry.Slug}}">{{.Entry.Title}}</a>
|
|
|
|
<div class="meta">
|
|
{{if .Entry.Curated}}<span class="badge emphasis">kuratiert</span>{{end}}
|
|
{{if .Stale}}<span class="badge warning" title="Seit über einem Jahr unverändert. Vor Verwendung prüfen, ob das noch stimmt.">veraltet</span>{{end}}
|
|
<span class="badge">{{if eq .Entry.Source "agent"}}Agent{{else}}Mensch{{end}}</span>
|
|
{{range .Entry.Tags}}<a class="badge" href="/p/{{$slug}}/?tag={{.}}">{{.}}</a>{{end}}
|
|
<span>{{datetime .Entry.UpdatedAt}}</span>
|
|
{{if .Entry.Author}}<span>· {{.Entry.Author}}</span>{{end}}
|
|
</div>
|
|
|
|
{{if .Snippet}}<p class="entry-excerpt">{{.Snippet}}</p>{{end}}
|
|
</div>
|
|
</li>
|
|
{{end}}
|
|
</ul>
|
|
|
|
{{if $sammelbearbeitung}}
|
|
<div class="bulk-bar">
|
|
<span class="help">Ausgewählte Einträge:</span>
|
|
<input type="text" name="add_tags" placeholder="Schlagworte hinzufügen, kommagetrennt" autocomplete="off">
|
|
<input type="text" name="remove_tags" placeholder="Schlagworte entfernen, kommagetrennt" autocomplete="off">
|
|
<button type="submit" class="secondary">Anwenden</button>
|
|
{{/* formaction schickt dasselbe Formular an eine andere Adresse. Der
|
|
Knopf steht bewusst hinter "Anwenden": Enter in einem Textfeld
|
|
löst immer den ersten Knopf aus, und das soll nie das Löschen
|
|
sein. Die Rückfrage liest static/confirm.js am Knopf. */}}
|
|
<button type="submit" class="warning" formaction="/p/{{.Project.Slug}}/entries/bulk-delete"
|
|
data-confirm="Die ausgewählten Einträge in den Papierkorb legen? Sie lassen sich dort {{.Data.RetentionDays}} Tage lang wiederherstellen.">In den Papierkorb</button>
|
|
</div>
|
|
</form>
|
|
{{end}}
|
|
{{else}}
|
|
<div class="empty">
|
|
{{if .Data.Query}}
|
|
<p>Nichts gefunden für „{{.Data.Query}}“.</p>
|
|
<p class="help">Es wird auch nach Wortanfängen gesucht — vielleicht hilft ein anderer Begriff.</p>
|
|
{{else if .Data.Tag}}
|
|
<p>Keine Einträge mit dem Schlagwort „{{.Data.Tag}}“.</p>
|
|
<p><a href="/p/{{.Project.Slug}}/">Alle Einträge anzeigen</a></p>
|
|
{{else if .Data.Stale}}
|
|
<p>Keine veralteten Einträge.</p>
|
|
<p><a href="/p/{{.Project.Slug}}/">Alle Einträge anzeigen</a></p>
|
|
{{else}}
|
|
<p>Noch keine Einträge.</p>
|
|
<p class="help">Agenten legen sie über MCP an, Menschen über „Neuer Eintrag“.</p>
|
|
<p><a href="/hilfe/mcp-einrichten">Einen Agenten anbinden</a> ·
|
|
<a href="/hilfe/mit-agenten-arbeiten">So nutzen Agenten das Gedächtnis wirklich</a></p>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
{{template "footer" .}}
|