{% extends "base.html" %}
|
{% block title %}{{ "Tool bearbeiten" if software else "Neues Tool" }} – Server-Bibliothek{% endblock %}
|
{% block content %}
|
|
<div class="page-head">
|
<div>
|
<p class="eyebrow">{{ "Bearbeiten" if software else "Neu anlegen" }}</p>
|
<h1>{{ software.name if software else "Neues Software-Tool" }}</h1>
|
</div>
|
</div>
|
|
<form method="post" class="form-grid">
|
<div class="field">
|
<label for="name">Name *</label>
|
<input type="text" id="name" name="name" required value="{{ software.name if software else '' }}" placeholder="z. B. 7-Zip, Adobe Reader, Firmen-VPN-Client">
|
</div>
|
|
<div class="field">
|
<label for="kategorie">Kategorie</label>
|
<input type="text" id="kategorie" name="kategorie" value="{{ software.kategorie if software else '' }}" placeholder="z. B. Basis-Software, Sicherheit, Inhouse-Tool">
|
</div>
|
|
<div class="field">
|
<label for="version">Aktuelle Version</label>
|
<input type="text" id="version" name="version" value="{{ software.version if software else '' }}" placeholder="z. B. 24.08">
|
</div>
|
|
<div class="field">
|
<label for="installer_pfad">Ablageordner</label>
|
<input type="text" id="installer_pfad" name="installer_pfad" value="{{ software.installer_pfad if software else '' }}" placeholder="z. B. C:\Bibliothek ablage\7-Zip\">
|
<div class="hint">Nur der Ordner – das Tool legt automatisch einen eigenen Unterordner und Dateinamen an, auch wenn ihr überall denselben Basisordner eintragt.</div>
|
</div>
|
|
<div class="field">
|
<label for="install_parameter">Silent-Install-Parameter</label>
|
<input type="text" id="install_parameter" name="install_parameter" value="{{ software.install_parameter if software else '' }}" placeholder="z. B. /S oder /quiet /norestart">
|
</div>
|
|
<div class="field">
|
<label for="dokumentation">Dokumentation / Einrichtungshinweise</label>
|
<textarea id="dokumentation" name="dokumentation" rows="8" placeholder="Schritt-fuer-Schritt Anleitung, Lizenzhinweise, Besonderheiten…">{{ software.dokumentation if software else '' }}</textarea>
|
</div>
|
|
<div class="field panel" style="padding:16px 18px;">
|
<label style="display:flex; align-items:center; gap:8px; font-size:14px;">
|
<input type="checkbox" id="auto_update" name="auto_update" style="width:auto;"
|
{{ "checked" if software and software.auto_update }}>
|
Automatische Aktualisierung aktivieren
|
</label>
|
<div class="hint">Wenn aktiv, sucht das Tool selbststaendig nach neuen Versionen und ersetzt die
|
Installer-Datei automatisch – ohne Rueckfrage. Die alte Datei wird vorher immer gesichert.</div>
|
|
<div id="update_quelle_felder" style="margin-top:14px; display:{{ 'block' if software and software.auto_update else 'none' }};">
|
<div class="auto-update-layout">
|
<div class="auto-update-fields">
|
<div class="field">
|
<label for="update_quelle">Update-Quelle</label>
|
<select id="update_quelle" name="update_quelle" onchange="updateQuelleHinweis()">
|
<option value="">– auswaehlen –</option>
|
<option value="winget" {{ "selected" if software and software.update_quelle == "winget" }}>winget (Windows-Paketverwaltung)</option>
|
<option value="github" {{ "selected" if software and software.update_quelle == "github" }}>GitHub-Projekt (Releases)</option>
|
<option value="direkt" {{ "selected" if software and software.update_quelle == "direkt" }}>Direkter Download-Link</option>
|
</select>
|
</div>
|
<div class="field">
|
<label for="update_wert" id="update_wert_label">Update-Wert</label>
|
<input type="text" id="update_wert" name="update_wert" value="{{ software.update_wert if software else '' }}" placeholder="– zuerst Update-Quelle auswaehlen –">
|
</div>
|
</div>
|
|
<div class="mini-doku" id="mini_doku">
|
<div class="mini-doku-titel" id="mini_doku_titel">Wo pruefen?</div>
|
<div id="mini_doku_inhalt">Zuerst eine Update-Quelle auswaehlen, dann erscheinen hier die Pruef-Schritte.</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<div class="form-actions">
|
<button type="submit" class="btn">{{ "Speichern" if software else "Tool anlegen" }}</button>
|
<a href="{{ url_for('software_detail', software_id=software.id) if software else url_for('dashboard') }}" class="btn btn-secondary">Abbrechen</a>
|
</div>
|
</form>
|
|
<script>
|
document.getElementById("auto_update").addEventListener("change", function () {
|
document.getElementById("update_quelle_felder").style.display = this.checked ? "block" : "none";
|
});
|
|
const MINI_DOKU = {
|
"": {
|
label: "Update-Wert",
|
platzhalter: "– zuerst Update-Quelle auswaehlen –",
|
inhalt: "Zuerst eine Update-Quelle auswaehlen, dann erscheinen hier die Pruef-Schritte."
|
},
|
"winget": {
|
label: "winget-Paket-ID",
|
platzhalter: "z. B. 7zip.7zip",
|
inhalt: `
|
<ol>
|
<li><strong>winstall.app</strong> oeffnen, Tool-Namen eingeben</li>
|
<li>Im grauen Befehlskasten das Wort direkt nach <code>--id</code> kopieren (bis zum naechsten Leerzeichen)</li>
|
<li>Exakt einfuegen wie kopiert – Gross-/Kleinschreibung ist wichtig, nicht abtippen</li>
|
</ol>
|
<div class="beispiel">--id <strong>Google.Chrome</strong> → Google.Chrome</div>`
|
},
|
"github": {
|
label: "GitHub-Projekt",
|
platzhalter: "z. B. videolan/vlc",
|
inhalt: `
|
<ol>
|
<li>Auf <strong>github.com</strong> nach dem Tool suchen</li>
|
<li>Auf der Projektseite rechts auf „Releases" schauen</li>
|
<li>Pruefen: liegt dort eine .exe- oder .msi-Datei?</li>
|
</ol>
|
<div class="beispiel">Beispiel: videolan/vlc<br>(aus github.com/videolan/vlc)</div>
|
<div class="hint" style="margin-top:8px;">Auch okay, falls aus Versehen die ganze Adresse eingefuegt wird (z. B. https://github.com/videolan/vlc) – wird automatisch erkannt.</div>`
|
},
|
"direkt": {
|
label: "Download-Link",
|
platzhalter: "z. B. https://beispiel.de/tool/aktuell.exe",
|
inhalt: `
|
<ol>
|
<li>Download-Seite des Herstellers oeffnen</li>
|
<li>Nach einem Link suchen, der immer zur neuesten Datei fuehrt (oft bei Portable-Tools)</li>
|
</ol>
|
<div class="beispiel">Versionsnummer ist hier technisch, keine echte Nummer.</div>`
|
}
|
};
|
|
function updateQuelleHinweis() {
|
const quelle = document.getElementById("update_quelle").value;
|
const angaben = MINI_DOKU[quelle] || MINI_DOKU[""];
|
document.getElementById("update_wert_label").textContent = angaben.label;
|
document.getElementById("update_wert").placeholder = angaben.platzhalter;
|
document.getElementById("mini_doku_inhalt").innerHTML = angaben.inhalt;
|
}
|
updateQuelleHinweis();
|
|
// Ordner-Vorschlag: merkt sich den zuletzt genutzten Basis-Ordner und
|
// schlaegt ihn bei neuen Tools automatisch vor - so muss der Ablageort
|
// nur beim allerersten Tool einmal komplett eingetippt werden.
|
(function () {
|
var nameFeld = document.getElementById("name");
|
var pfadFeld = document.getElementById("installer_pfad");
|
var SPEICHER_KEY = "sb_basis_ordner";
|
|
function sanitisiere(text) {
|
return (text || "").trim().replace(/[<>:"/\\|?*]/g, "");
|
}
|
|
if (nameFeld && pfadFeld && !pfadFeld.value) {
|
nameFeld.addEventListener("blur", function () {
|
if (pfadFeld.value.trim() !== "" || !nameFeld.value.trim()) return;
|
var basis = localStorage.getItem(SPEICHER_KEY);
|
if (!basis) return;
|
pfadFeld.value = basis.replace(/[\\/]+$/, "") + "\\" + sanitisiere(nameFeld.value) + "\\";
|
});
|
}
|
|
if (pfadFeld) {
|
pfadFeld.addEventListener("change", function () {
|
var wert = pfadFeld.value.trim();
|
if (!wert) return;
|
var teile = wert.replace(/[\\/]+$/, "").split(/[\\/]/);
|
if (teile.length > 1) {
|
teile.pop();
|
var basis = teile.join("\\");
|
if (basis) localStorage.setItem(SPEICHER_KEY, basis);
|
}
|
});
|
}
|
})();
|
</script>
|
|
{% endblock %}
|