123 lines
5.8 KiB
HTML
123 lines
5.8 KiB
HTML
{{template "kopf" .}}
|
|
|
|
<div class="seitenkopf">
|
|
<div class="seitenkopf-titel">
|
|
<h1>Einträge {{template "hilfelink" "weboberflaeche#finden"}}</h1>
|
|
<span class="hilfe">
|
|
{{if .Project.Description}}{{.Project.Description}}{{else}}Wissen dieses Projekts — von Menschen und Agenten.{{end}}
|
|
</span>
|
|
</div>
|
|
{{if or .Session.CanWrite .Session.CanDownloadProject}}
|
|
<div class="seitenkopf-aktionen reihe">
|
|
{{/* 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="knopf zweitrangig" href="/p/{{.Project.Slug}}/export.zip" download>Als ZIP herunterladen</a>
|
|
{{end}}
|
|
{{if .Session.CanWrite}}
|
|
<a class="knopf" href="/p/{{.Project.Slug}}/new"
|
|
data-kuerzel="n" aria-keyshortcuts="n" title="Neuer Eintrag (Taste n)">Neuer Eintrag</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
<form method="GET" action="/p/{{.Project.Slug}}/" class="werkzeugleiste" role="search">
|
|
<input type="search" name="q" value="{{.Data.Query}}" placeholder="Im Projekt suchen… ( / )" autocomplete="off"
|
|
aria-keyshortcuts="/">
|
|
<button type="submit" class="zweitrangig">Suchen</button>
|
|
{{/* Filter "veraltet": nur sichtbar, wenn es welche gibt — ein Link auf
|
|
eine leere Liste wäre nur Rauschen. */}}
|
|
{{if and .Data.VeraltetAnzahl (not .Data.Veraltet)}}
|
|
<a class="filter-link" href="/p/{{.Project.Slug}}/?veraltet=1"
|
|
title="Seit über einem Jahr unverändert. Prüfen, ob das noch stimmt.">{{.Data.VeraltetAnzahl}} veraltet</a>
|
|
{{end}}
|
|
</form>
|
|
|
|
{{if .Data.Query}}
|
|
<p class="hilfe">{{len .Data.Entries}} Treffer für „{{.Data.Query}}“ ·
|
|
<a href="/p/{{.Project.Slug}}/">Suche zurücksetzen</a></p>
|
|
{{else if .Data.Tag}}
|
|
<p class="hilfe">{{len .Data.Entries}} Einträge mit „{{.Data.Tag}}“ ·
|
|
<a href="/p/{{.Project.Slug}}/">Filter aufheben</a></p>
|
|
{{else if .Data.Veraltet}}
|
|
<p class="hilfe">{{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="eintraege">
|
|
{{$slug := .Project.Slug}}
|
|
{{range .Data.Entries}}
|
|
<li>
|
|
{{if $sammelbearbeitung}}
|
|
<label class="eintrag-auswahl">
|
|
<input type="checkbox" name="ids" value="{{.Entry.ID}}" aria-label="{{.Entry.Title}} auswählen">
|
|
</label>
|
|
{{end}}
|
|
|
|
<div class="eintrag-inhalt">
|
|
<a class="eintrag-titel" href="/p/{{$slug}}/e/{{.Entry.Slug}}">{{.Entry.Title}}</a>
|
|
|
|
<div class="meta">
|
|
{{if .Entry.Curated}}<span class="marke betont">kuratiert</span>{{end}}
|
|
{{if .Stale}}<span class="marke warnung" title="Seit über einem Jahr unverändert. Vor Verwendung prüfen, ob das noch stimmt.">veraltet</span>{{end}}
|
|
<span class="marke">{{if eq .Entry.Source "agent"}}Agent{{else}}Mensch{{end}}</span>
|
|
{{range .Entry.Tags}}<a class="marke" href="/p/{{$slug}}/?tag={{.}}">{{.}}</a>{{end}}
|
|
<span>{{datum .Entry.UpdatedAt}}</span>
|
|
{{if .Entry.Author}}<span>· {{.Entry.Author}}</span>{{end}}
|
|
</div>
|
|
|
|
{{if .Snippet}}<p class="eintrag-ausschnitt">{{.Snippet}}</p>{{end}}
|
|
</div>
|
|
</li>
|
|
{{end}}
|
|
</ul>
|
|
|
|
{{if $sammelbearbeitung}}
|
|
<div class="sammelleiste">
|
|
<span class="hilfe">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="zweitrangig">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="warnung" 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="leer">
|
|
{{if .Data.Query}}
|
|
<p>Nichts gefunden für „{{.Data.Query}}“.</p>
|
|
<p class="hilfe">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.Veraltet}}
|
|
<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="hilfe">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 "fuss" .}}
|