- 3.7: MCP-Werkzeug "related" liefert Nachbarn im Verweisgraphen in beide
Richtungen, bis zur zweiten Reihe (store.RelatedEntries).
- 3.5: Einträge, die seit über einem Jahr unverändert sind, tragen in
recall/get/list/related "stale": true; get und recall geben einen
Hinweis, die Eintragsseite eine Marke. instructions erklären das Feld.
- 3.2: Import von Markdown-Dateien als ZIP unter /p/{projekt}/import
(Rolle admin), mit Vorschau, überspringen/überschreiben, Erkennung von
Unverändertem und Papierkorb. Neue Einträge behalten Autor, Herkunft,
Prüfvermerk und Zeitstempel aus dem Export.
Nebenbei behoben: Das 1-MB-Body-Limit für Formulare lag über dem ganzen
Mux und begrenzte damit auch /mcp auf 1 MB statt MAX_API_BODY_BYTES.
LimitBodies wählt die Grenze jetzt einmal außen je Route.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
82 lines
3.4 KiB
HTML
82 lines
3.4 KiB
HTML
{{template "kopf" .}}
|
|
|
|
<div class="seitenkopf">
|
|
<div class="seitenkopf-titel">
|
|
<h1>Import {{template "hilfelink" "weboberflaeche#import"}}</h1>
|
|
<span class="hilfe">Markdown-Dateien als ZIP-Archiv hochladen: einen Export aus Munin
|
|
oder vorhandene Dokumentation. Jede Datei wird ein Eintrag.</span>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="abschnitt">
|
|
<div class="karte">
|
|
{{/* enctype="multipart/form-data" ist nötig, damit der Browser die Datei
|
|
selbst mitschickt und nicht nur ihren Namen. */}}
|
|
<form method="POST" action="/p/{{.Project.Slug}}/import" enctype="multipart/form-data" class="formular">
|
|
<input type="hidden" name="csrf_token" value="{{.CSRFToken}}">
|
|
|
|
<div class="feld mittel">
|
|
<label for="archiv">ZIP-Archiv</label>
|
|
<span class="hilfe">Dateien auf <code>.md</code>, auch in Unterordnern, höchstens
|
|
{{.Data.MaxDateien}} Stück. Alles andere wird übergangen.</span>
|
|
<input type="file" id="archiv" name="archiv" accept=".zip,application/zip" required>
|
|
</div>
|
|
|
|
<div class="feld kurz">
|
|
<label for="modus">Wenn es den Bezeichner schon gibt</label>
|
|
<select id="modus" name="modus">
|
|
<option value="skip" {{if eq .Data.Modus "skip"}}selected{{end}}>überspringen — Vorhandenes bleibt, wie es ist</option>
|
|
<option value="overwrite" {{if eq .Data.Modus "overwrite"}}selected{{end}}>überschreiben — alter Stand wandert in den Verlauf</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="feld ankreuz">
|
|
{{/* Beim ersten Aufruf ist die Vorschau angehakt. Wer eine
|
|
Vorschau gesehen hat, bekommt das Formular ohne Haken
|
|
zurück: Der nächste Schritt ist dann das Übernehmen. */}}
|
|
<input type="checkbox" id="vorschau" name="vorschau" value="1" {{if not .Data.Bericht}}checked{{end}}>
|
|
<label for="vorschau">
|
|
Nur Vorschau
|
|
<span class="hilfe">Zeigt, was passieren würde, ohne etwas zu schreiben.</span>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="formular-aktionen">
|
|
<button type="submit">Hochladen</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
|
|
{{with .Data.Bericht}}
|
|
<section class="abschnitt">
|
|
<h2>{{if $.Data.Vorschau}}Vorschau{{else}}Ergebnis{{end}}</h2>
|
|
<div class="tabelle-huelle">
|
|
<table class="tabelle">
|
|
<thead>
|
|
<tr>
|
|
<th>Datei</th>
|
|
<th>Bezeichner</th>
|
|
<th>Titel</th>
|
|
<th>Ergebnis</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .Zeilen}}
|
|
<tr>
|
|
<td><code>{{.Pfad}}</code></td>
|
|
<td>{{if .Slug}}<code>{{.Slug}}</code>{{end}}</td>
|
|
<td>{{.Title}}</td>
|
|
<td>
|
|
<span class="marke{{if eq .Aktion "Fehler"}} warnung{{else if eq .Aktion "neu"}} betont{{end}}">{{.Aktion}}</span>
|
|
{{if .Grund}}<span class="hilfe">{{.Grund}}</span>{{end}}
|
|
</td>
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
{{end}}
|
|
|
|
{{template "fuss" .}}
|