251 lines
24 KiB
HTML
251 lines
24 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<meta name="color-scheme" content="dark light">
|
||
<title>PAW Toolbox</title>
|
||
<link rel="stylesheet" href="/static/app.css">
|
||
</head>
|
||
<body>
|
||
<header class="topbar">
|
||
<div class="brand">
|
||
<div class="brand-mark">P</div>
|
||
<div><strong>PAW Toolbox</strong><span>Apps · Transfer · Admin-Werkzeuge</span></div>
|
||
</div>
|
||
<nav class="nav" aria-label="Hauptnavigation">
|
||
<button class="nav-btn active" data-view="dashboard">Übersicht</button>
|
||
<button class="nav-btn" data-view="clipboard">Zwischenablage</button>
|
||
<button class="nav-btn" data-view="password">Passwort</button>
|
||
<button class="nav-btn" data-view="files">Dateien</button>
|
||
<button class="nav-btn" data-view="tools">Werkzeuge</button>
|
||
</nav>
|
||
</header>
|
||
|
||
<main class="shell">
|
||
<section id="view-dashboard" class="view active">
|
||
<div class="hero">
|
||
<div>
|
||
<p class="eyebrow">Zentrale Arbeitsoberfläche</p>
|
||
<h1>Ein Einstiegspunkt für die PAW</h1>
|
||
<p class="lead">Interne Anwendungen öffnen, Werte zwischen Sitzungen übertragen, Kennwörter erzeugen, Dateien austauschen und typische Admin-Aufgaben ohne externe Webseiten erledigen.</p>
|
||
</div>
|
||
<div class="hero-status"><span class="dot"></span><span id="statusText">Status wird geladen…</span></div>
|
||
</div>
|
||
|
||
<div class="quick-grid four">
|
||
<button class="quick-card" data-open-view="clipboard"><span class="quick-icon">⌘</span><strong>Zwischenablage</strong><small>Text und einmalige Secrets</small></button>
|
||
<button class="quick-card" data-open-view="password"><span class="quick-icon">✦</span><strong>Passwortgenerator</strong><small>Direkt in einen Raum ablegen</small></button>
|
||
<button class="quick-card" data-open-view="files"><span class="quick-icon">⇅</span><strong>Dateiaustausch</strong><small>Upload, Download, Löschen, SHA-256</small></button>
|
||
<button class="quick-card" data-open-view="tools"><span class="quick-icon">⌁</span><strong>Admin-Werkzeuge</strong><small>16 Offline- und Netzwerkhelfer</small></button>
|
||
</div>
|
||
|
||
<div class="section-head">
|
||
<div><p class="eyebrow">App Launcher</p><h2>Interne Anwendungen</h2></div>
|
||
<div class="filters"><input id="appSearch" type="search" placeholder="Suchen…"><select id="appCategory"><option value="">Alle Kategorien</option></select></div>
|
||
</div>
|
||
<div id="appsGrid" class="apps-grid"></div>
|
||
</section>
|
||
|
||
<section id="view-clipboard" class="view">
|
||
<div class="section-head"><div><p class="eyebrow">Tier-übergreifender Transfer</p><h1>Virtuelle Zwischenablage</h1></div></div>
|
||
<article class="panel room-panel">
|
||
<div class="panel-head">
|
||
<div><h2>Räume</h2><p class="hint room-hint">Klick auf einen Raum öffnet ihn. Leeren behält den Raum, Löschen entfernt ihn dauerhaft.</p></div>
|
||
<button id="clipRoomsRefresh" class="btn small">Aktualisieren</button>
|
||
</div>
|
||
<div id="clipRooms" class="room-list"></div>
|
||
</article>
|
||
<div class="two-col">
|
||
<article class="panel">
|
||
<h2>Eintrag ablegen</h2>
|
||
<label>Raum<input id="clipRoom" value="default" maxlength="64" autocomplete="off"></label>
|
||
<div class="actions"><button id="clipOpenRoom" class="btn small" type="button">Raum öffnen / anlegen</button></div>
|
||
<label>Inhalt<textarea id="clipContent" rows="7" placeholder="Text oder Wert…"></textarea></label>
|
||
<div class="form-grid">
|
||
<label>Autor<input id="clipAuthor" placeholder="optional" autocomplete="off"></label>
|
||
<label>TTL in Minuten<input id="clipTTL" type="number" min="0" max="1440" value="30"></label>
|
||
</div>
|
||
<div class="checks">
|
||
<label class="check"><input id="clipSecret" type="checkbox"> <span>Als Secret maskieren</span></label>
|
||
<label class="check"><input id="clipOneTime" type="checkbox"> <span>Nach erstem Abruf löschen</span></label>
|
||
</div>
|
||
<div class="actions"><button id="clipSubmit" class="btn primary">Ablegen</button><button id="clipPasteLocal" class="btn">Lokale Zwischenablage einfügen</button></div>
|
||
<p class="hint">Secrets sind in der Verlaufsliste maskiert und werden standardmäßig persistent gespeichert. Bei „einmalig“ wird der Eintrag nach dem expliziten Abruf dauerhaft entfernt.</p>
|
||
</article>
|
||
|
||
<article class="panel">
|
||
<div class="panel-head"><div><h2>Verlauf</h2><span id="clipRoomBadge" class="badge">default</span></div><div class="actions compact"><button id="clipRefresh" class="btn small">Aktualisieren</button><button id="clipClear" class="btn small danger">Leeren</button></div></div>
|
||
<div id="clipHistory" class="clip-list"></div>
|
||
</article>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="view-password" class="view">
|
||
<div class="section-head"><div><p class="eyebrow">Kryptographisch zufällig</p><h1>Passwortgenerator</h1></div></div>
|
||
<div class="two-col">
|
||
<article class="panel">
|
||
<h2>Generieren</h2>
|
||
<div class="form-grid">
|
||
<label>Anzahl<input id="pwCount" type="number" min="1" max="20" value="1"></label>
|
||
<label>Zielraum<input id="pwRoom" value="default" maxlength="64"></label>
|
||
<label>TTL in Minuten<input id="pwTTL" type="number" min="0" max="1440" value="15"></label>
|
||
</div>
|
||
<div class="checks">
|
||
<label class="check"><input id="pwStore" type="checkbox" checked> <span>In virtueller Zwischenablage ablegen</span></label>
|
||
<label class="check"><input id="pwOneTime" type="checkbox" checked> <span>Nur einmal abrufbar</span></label>
|
||
</div>
|
||
<button id="pwGenerate" class="btn primary">Passwort generieren</button>
|
||
<p class="hint">Generator-Grundeinstellungen werden per <code>PWGEN_*</code>-Umgebungsvariablen festgelegt.</p>
|
||
</article>
|
||
<article class="panel">
|
||
<div class="panel-head"><h2>Ergebnis</h2><button id="pwCopy" class="btn small">Lokal kopieren</button></div>
|
||
<pre id="pwOutput" class="secret-output">Noch kein Passwort erzeugt.</pre>
|
||
<div id="pwMeta" class="meta-row"></div>
|
||
</article>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="view-files" class="view">
|
||
<div class="section-head"><div><p class="eyebrow">Einfacher Dateiaustausch</p><h1>Dateien</h1></div><button id="filesRefresh" class="btn">Aktualisieren</button></div>
|
||
<article class="panel upload-panel">
|
||
<form id="uploadForm">
|
||
<label class="file-drop">Datei auswählen<input id="uploadFile" name="file" type="file" required><span id="filePicked">Keine Datei ausgewählt</span></label>
|
||
<label>Quelle / Bearbeiter<input id="fileUploader" name="uploader" placeholder="z. B. Sandbox, Tier-0, Kürzel"></label>
|
||
<button class="btn primary" type="submit">Hochladen</button>
|
||
</form>
|
||
<p id="uploadStatus" class="hint">Maximale Dateigröße: wird vom Server vorgegeben.</p>
|
||
</article>
|
||
<div id="filesList" class="file-list"></div>
|
||
</section>
|
||
|
||
<section id="view-tools" class="view">
|
||
<div class="section-head tool-head">
|
||
<div><p class="eyebrow">Lokale Admin-Helfer</p><h1>Werkzeuge</h1><p class="lead small-lead">Die meisten Werkzeuge verarbeiten Inhalte ausschließlich im Browser. Nur DNS, TCP-Test und serverseitige Datei-/Zertifikats-/ZIP-Analyse verwenden die Toolbox-API.</p></div>
|
||
<input id="toolSearch" class="tool-search" type="search" placeholder="Werkzeug suchen…">
|
||
</div>
|
||
|
||
<div class="tool-layout">
|
||
<aside id="toolNav" class="tool-nav" aria-label="Werkzeuge">
|
||
<button class="tool-nav-btn active" data-tool="onboarding" data-keywords="ad benutzer user onboarding account">Onboarding Assistant</button>
|
||
<button class="tool-nav-btn" data-tool="fileinspect" data-keywords="hash sha md5 datei file magic mime">Hash / File Inspector</button>
|
||
<button class="tool-nav-btn" data-tool="cert" data-keywords="zertifikat certificate pem der pfx crt cer tls">Certificate Inspector</button>
|
||
<button class="tool-nav-btn" data-tool="formatter" data-keywords="json xml yaml formatter config">JSON / XML / YAML</button>
|
||
<button class="tool-nav-btn" data-tool="diff" data-keywords="text diff vergleich">Text Diff</button>
|
||
<button class="tool-nav-btn" data-tool="adconv" data-keywords="ad sid guid uuid timestamp filetime ldap zeit">AD Converter</button>
|
||
<button class="tool-nav-btn" data-tool="dns" data-keywords="dns a aaaa ptr cname mx txt srv ldap kerberos">DNS Lookup</button>
|
||
<button class="tool-nav-btn" data-tool="subnet" data-keywords="ip subnet cidr ipv4 ipv6 netz">IP / Subnet Calculator</button>
|
||
<button class="tool-nav-btn" data-tool="encoder" data-keywords="base64 hex url encode decode">Base64 / Hex / URL</button>
|
||
<button class="tool-nav-btn" data-tool="powershell" data-keywords="powershell command builder ad">PowerShell Builder</button>
|
||
<button class="tool-nav-btn" data-tool="csv" data-keywords="csv tabelle filter export">CSV Viewer</button>
|
||
<button class="tool-nav-btn" data-tool="connectivity" data-keywords="tcp port connectivity host verbindung">Connectivity Checker</button>
|
||
<button class="tool-nav-btn" data-tool="regex" data-keywords="regex regexp tester">Regex Tester</button>
|
||
<button class="tool-nav-btn" data-tool="transform" data-keywords="text transform sort unique prefix suffix case">Text Transformer</button>
|
||
<button class="tool-nav-btn" data-tool="archive" data-keywords="zip archive inhalt viewer">ZIP Archive Viewer</button>
|
||
<button class="tool-nav-btn" data-tool="encoding" data-keywords="encoding utf8 bom windows1252 charset">Encoding Converter</button>
|
||
</aside>
|
||
|
||
<div class="tool-content">
|
||
<article id="tool-onboarding" class="panel tool-panel active">
|
||
<div class="panel-head"><div><h2>Onboarding Assistant</h2><span class="badge">AD</span></div><button id="onbCopy" class="btn small">PowerShell kopieren</button></div>
|
||
<div class="form-grid three">
|
||
<label>Vorname<input id="onbFirst" placeholder="Max"></label><label>Nachname<input id="onbLast" placeholder="Mustermann"></label><label>DisplayName-Format<select id="onbDisplayMode"><option value="lastfirst">Nachname, Vorname</option><option value="firstlast">Vorname Nachname</option></select></label>
|
||
<label>UPN-Suffix<input id="onbDomain" placeholder="example.local"></label><label>E-Mail-Domain<input id="onbMailDomain" placeholder="example.de"></label><label>Basis-OU<input id="onbOU" placeholder="OU=Users,DC=example,DC=local"></label>
|
||
<label>Abteilung<input id="onbDepartment"></label><label>Funktion<input id="onbTitle"></label><label>Standort<input id="onbOffice"></label>
|
||
<label>Gruppen (kommagetrennt)<input id="onbGroups" placeholder="GG_VPN, GG_Office"></label><label>Zielraum für Kennwort<input id="onbRoom" value="onboarding"></label><label>TTL Minuten<input id="onbTTL" type="number" min="1" max="1440" value="15"></label>
|
||
</div>
|
||
<div class="actions top-gap"><button id="onbBuild" class="btn primary">Daten erzeugen</button><button id="onbPassword" class="btn">Kennwort generieren + einmalig ablegen</button></div>
|
||
<div class="result-grid top-gap"><div><span class="result-label">sAMAccountName</span><code id="onbSam">–</code></div><div><span class="result-label">UPN</span><code id="onbUPN">–</code></div><div><span class="result-label">E-Mail</span><code id="onbMail">–</code></div><div><span class="result-label">DisplayName</span><code id="onbDisplay">–</code></div></div>
|
||
<label class="top-gap">PowerShell<textarea id="onbPS" rows="11" class="mono" readonly></textarea></label>
|
||
<p id="onbSecretStatus" class="hint">Der Assistant erzeugt Befehle, führt aber keine AD-Änderungen selbst aus.</p>
|
||
</article>
|
||
|
||
<article id="tool-fileinspect" class="panel tool-panel">
|
||
<div class="panel-head"><h2>Hash / File Inspector</h2><button id="fiCopyHash" class="btn small">SHA-256 kopieren</button></div>
|
||
<form id="fiForm" class="inline-form"><label class="file-drop">Datei analysieren<input id="fiFile" type="file" required><span id="fiPicked">Keine Datei ausgewählt</span></label><button class="btn primary" type="submit">Analysieren</button></form>
|
||
<div id="fiResult" class="kv-list top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-cert" class="panel tool-panel">
|
||
<h2>Certificate Inspector</h2>
|
||
<form id="certForm" class="form-grid top-gap"><label class="file-drop">PEM / CER / CRT / DER / PFX<input id="certFile" type="file" accept=".pem,.cer,.crt,.der,.pfx,.p12" required><span id="certPicked">Keine Datei ausgewählt</span></label><label>PFX/P12-Kennwort (optional)<input id="certPassword" type="password" autocomplete="off"><span class="hint">Nur für die lokale Serveranalyse verwendet.</span></label><div class="actions"><button class="btn primary" type="submit">Zertifikat prüfen</button></div></form>
|
||
<div id="certResult" class="top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-formatter" class="panel tool-panel">
|
||
<div class="panel-head"><h2>JSON / XML / YAML Formatter</h2><div class="actions"><button id="fmtCopy" class="btn small">Ergebnis kopieren</button></div></div>
|
||
<div class="form-grid"><label>Format<select id="fmtType"><option>JSON</option><option>XML</option><option>YAML</option></select></label><label>Aktion<select id="fmtAction"><option value="pretty">Formatieren</option><option value="minify">Minify / kompakt</option><option value="validate">Validieren</option></select></label></div>
|
||
<div class="split-edit top-gap"><label>Eingabe<textarea id="fmtInput" rows="15" class="mono"></textarea></label><label>Ergebnis<textarea id="fmtOutput" rows="15" class="mono" readonly></textarea></label></div>
|
||
<div class="actions top-gap"><button id="fmtRun" class="btn primary">Ausführen</button></div><p id="fmtStatus" class="hint">YAML wird konservativ auf Einrückung und häufige Strukturfehler geprüft; es erfolgt keine semantische Neuordnung.</p>
|
||
</article>
|
||
|
||
<article id="tool-diff" class="panel tool-panel">
|
||
<div class="panel-head"><h2>Text Diff</h2><button id="diffRun" class="btn primary small">Vergleichen</button></div>
|
||
<div class="split-edit"><label>Links<textarea id="diffA" rows="14" class="mono"></textarea></label><label>Rechts<textarea id="diffB" rows="14" class="mono"></textarea></label></div>
|
||
<pre id="diffOutput" class="diff-output top-gap"></pre>
|
||
</article>
|
||
|
||
<article id="tool-adconv" class="panel tool-panel">
|
||
<h2>AD SID / GUID / Timestamp Converter</h2>
|
||
<div class="subtools top-gap">
|
||
<section class="subpanel"><h3>GUID / UUID</h3><label>GUID<input id="guidInput" class="mono" placeholder="00112233-4455-6677-8899-aabbccddeeff"></label><div class="actions top-gap"><button id="guidNew" class="btn">Neue UUID</button><button id="guidConvert" class="btn primary">AD-Bytefolge</button></div><pre id="guidOutput" class="tool-output"></pre></section>
|
||
<section class="subpanel"><h3>SID</h3><label>SID oder Hex<textarea id="sidInput" rows="3" class="mono" placeholder="S-1-5-21-... oder 0105..."></textarea></label><div class="actions top-gap"><button id="sidConvert" class="btn primary">Konvertieren</button></div><pre id="sidOutput" class="tool-output"></pre></section>
|
||
<section class="subpanel"><h3>Zeit</h3><label>ISO, Unix, Unix-ms oder Windows FILETIME<input id="timeInput" class="mono" placeholder="2026-08-12T18:00:00Z"></label><div class="actions top-gap"><button id="timeNow" class="btn">Jetzt</button><button id="timeConvert" class="btn primary">Umrechnen</button></div><pre id="timeOutput" class="tool-output"></pre></section>
|
||
</div>
|
||
</article>
|
||
|
||
<article id="tool-dns" class="panel tool-panel">
|
||
<h2>DNS Lookup</h2><p class="hint">Die DNS-Abfrage erfolgt aus Sicht des PAW-Toolbox-Servers.</p><div class="form-grid three top-gap"><label>Name / IP<input id="dnsName" class="mono" placeholder="_ldap._tcp.example.local"></label><label>Record-Typ<select id="dnsType"><option>A</option><option>AAAA</option><option>CNAME</option><option>MX</option><option>TXT</option><option>SRV</option><option>PTR</option></select></label><div class="actions align-end"><button id="dnsRun" class="btn primary">Abfragen</button></div></div><pre id="dnsOutput" class="tool-output top-gap"></pre>
|
||
</article>
|
||
|
||
<article id="tool-subnet" class="panel tool-panel">
|
||
<h2>IP / Subnet Calculator</h2><div class="form-grid top-gap"><label>IPv4/IPv6 mit CIDR<input id="subnetInput" class="mono" placeholder="10.20.30.40/24"></label><div class="actions align-end"><button id="subnetRun" class="btn primary">Berechnen</button></div></div><div id="subnetOutput" class="kv-list top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-encoder" class="panel tool-panel">
|
||
<div class="panel-head"><h2>Base64 / Hex / URL Encoder</h2><button id="encSwap" class="btn small">Eingabe ⇄ Ergebnis</button></div>
|
||
<div class="form-grid three"><label>Verfahren<select id="encType"><option value="base64">Base64 (UTF-8)</option><option value="hex">Hex (UTF-8)</option><option value="url">URL Component</option></select></label><label>Richtung<select id="encMode"><option value="encode">Encode</option><option value="decode">Decode</option></select></label><div class="actions align-end"><button id="encRun" class="btn primary">Ausführen</button></div></div>
|
||
<div class="split-edit top-gap"><label>Eingabe<textarea id="encInput" rows="12" class="mono"></textarea></label><label>Ergebnis<textarea id="encOutput" rows="12" class="mono" readonly></textarea></label></div>
|
||
</article>
|
||
|
||
<article id="tool-powershell" class="panel tool-panel">
|
||
<div class="panel-head"><h2>PowerShell Command Builder</h2><button id="psCopy" class="btn small">Kopieren</button></div>
|
||
<div class="form-grid three"><label>Befehl<select id="psTemplate"><option value="getuser">Get-ADUser</option><option value="unlock">Unlock-ADAccount</option><option value="addgroup">Add-ADGroupMember</option><option value="resetpw">Set-ADAccountPassword</option><option value="newuser">New-ADUser</option></select></label><label>Benutzer / Identity<input id="psIdentity"></label><label>Gruppe<input id="psGroup"></label><label>Vorname<input id="psFirst"></label><label>Nachname<input id="psLast"></label><label>OU-Pfad<input id="psOU"></label></div>
|
||
<div class="actions top-gap"><button id="psBuild" class="btn primary">Befehl erzeugen</button></div><pre id="psOutput" class="tool-output top-gap"></pre><p class="hint">Nur Generator: Die Toolbox führt keine PowerShell-Kommandos aus.</p>
|
||
</article>
|
||
|
||
<article id="tool-csv" class="panel tool-panel">
|
||
<div class="panel-head"><h2>CSV Viewer</h2><div class="actions"><button id="csvExport" class="btn small">Gefiltert exportieren</button></div></div>
|
||
<div class="form-grid three"><label class="file-drop">CSV laden<input id="csvFile" type="file" accept=".csv,.txt"><span id="csvPicked">Keine Datei ausgewählt</span></label><label>Trennzeichen<select id="csvDelimiter"><option value="auto">Automatisch</option><option value=";">Semikolon ;</option><option value=",">Komma ,</option><option value="\t">Tab</option></select></label><label>Filter<input id="csvFilter" type="search" placeholder="Zeilen filtern…"></label></div>
|
||
<div id="csvMeta" class="hint top-gap"></div><div id="csvTableWrap" class="table-wrap top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-connectivity" class="panel tool-panel">
|
||
<h2>Connectivity Checker</h2><p class="hint">Der TCP-Test erfolgt aus Sicht des PAW-Toolbox-Servers, nicht aus Sicht des Browsers der Tier-VM.</p><div class="form-grid three top-gap"><label>Hostname / IP<input id="connHost" class="mono" placeholder="dc01.example.local"></label><label>Port<input id="connPort" type="number" min="1" max="65535" value="636"></label><label>Timeout ms<input id="connTimeout" type="number" min="100" max="10000" value="3000"></label></div><div class="actions top-gap"><button id="connRun" class="btn primary">TCP-Verbindung prüfen</button></div><div id="connOutput" class="kv-list top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-regex" class="panel tool-panel">
|
||
<div class="panel-head"><h2>Regex Tester</h2><button id="regexRun" class="btn primary small">Testen</button></div><div class="form-grid"><label>Regulärer Ausdruck<input id="regexPattern" class="mono" placeholder="^CN=(.*?),"></label><label>Flags<input id="regexFlags" class="mono" value="gim"></label></div><label class="top-gap">Testtext<textarea id="regexText" rows="10" class="mono"></textarea></label><pre id="regexOutput" class="tool-output top-gap"></pre>
|
||
</article>
|
||
|
||
<article id="tool-transform" class="panel tool-panel">
|
||
<h2>Text Transformer</h2><div class="form-grid three top-gap"><label>Aktion<select id="transformAction"><option value="trim">Zeilen trimmen</option><option value="sort">Zeilen sortieren</option><option value="unique">Duplikate entfernen</option><option value="upper">GROSSSCHRIFT</option><option value="lower">kleinschrift</option><option value="prefix">Prefix hinzufügen</option><option value="suffix">Suffix hinzufügen</option><option value="reverse">Zeilenreihenfolge umkehren</option></select></label><label>Prefix / Suffix<input id="transformAffix"></label><div class="actions align-end"><button id="transformRun" class="btn primary">Transformieren</button></div></div><div class="split-edit top-gap"><label>Eingabe<textarea id="transformInput" rows="13" class="mono"></textarea></label><label>Ergebnis<textarea id="transformOutput" rows="13" class="mono" readonly></textarea></label></div>
|
||
</article>
|
||
|
||
<article id="tool-archive" class="panel tool-panel">
|
||
<h2>ZIP Archive Viewer</h2><form id="archiveForm" class="inline-form top-gap"><label class="file-drop">ZIP auswählen<input id="archiveFile" type="file" accept=".zip" required><span id="archivePicked">Keine Datei ausgewählt</span></label><button class="btn primary" type="submit">Inhalt anzeigen</button></form><div id="archiveMeta" class="hint top-gap"></div><div id="archiveTable" class="table-wrap top-gap"></div>
|
||
</article>
|
||
|
||
<article id="tool-encoding" class="panel tool-panel">
|
||
<h2>Encoding Converter</h2><div class="form-grid three top-gap"><label class="file-drop">Textdatei laden<input id="encodingFile" type="file"><span id="encodingPicked">Keine Datei ausgewählt</span></label><label>Quell-Encoding<select id="encodingSource"><option value="utf-8">UTF-8</option><option value="windows-1252">Windows-1252</option><option value="iso-8859-1">ISO-8859-1</option><option value="utf-16le">UTF-16 LE</option><option value="utf-16be">UTF-16 BE</option></select></label><label>Ziel<select id="encodingTarget"><option value="utf8">UTF-8</option><option value="utf8bom">UTF-8 mit BOM</option></select></label></div><label class="top-gap">Vorschau<textarea id="encodingText" rows="13" class="mono"></textarea></label><div class="actions top-gap"><button id="encodingDownload" class="btn primary">Konvertierte Datei herunterladen</button></div><p class="hint">Die Konvertierung läuft vollständig im Browser.</p>
|
||
</article>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
|
||
<div id="toast" class="toast" role="status" aria-live="polite"></div>
|
||
<script src="/static/app.js" defer></script>
|
||
</body>
|
||
</html>
|