CH-J Toolsserverio valdymas per SSH
Meniu
Paskelbtas šaltinis

CH-J Tools

Naršyti aplankus ir failus konkrečiai programai išleisti.

Atsisiųsti šaltinį ZIP
CH-J / Server Manager 1704 failai
0.1.2-beta Pridėta: · Pastatytas:
index.html Pridėta: Data neregistruota 51,6 KB · 459 eilutės
Kodas Atsiųsti failą
1<!doctype html>
2<html lang="cs">
3<head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <title>CH-J Tools</title>
7 <link rel="stylesheet" href="vendor/xterm/xterm.css">
8 <link rel="stylesheet" href="theme.css">
9 <link rel="stylesheet" href="styles.css">
10 <link rel="stylesheet" href="diagnostics.css">
11</head>
12<body>
13 <div class="window-titlebar" aria-hidden="true">
14 <span class="window-titlebar-mark">CJ</span>
15 <span class="window-titlebar-title">CH-J Tools</span>
16 </div>
17 <div id="vaultOverlay" class="vault-overlay" hidden>
18 <form id="vaultForm" class="vault-dialog">
19 <select id="vaultLanguageSelect" class="vault-language" aria-label="Jazyk" data-i18n-aria-label="settings.language" disabled></select>
20 <div class="vault-mark">CJ</div>
21 <span id="vaultModeText" class="eyebrow" data-i18n="vault.storage">ŠIFROVANÉ LOKÁLNÍ ÚLOŽIŠTĚ</span>
22 <h1 id="vaultTitle" data-i18n="vault.unlockTitle">Odemknout Server Manager</h1>
23 <p id="vaultDescription" data-i18n="vault.unlockIntro">Zadejte hlavní heslo. Heslo se neukládá na disk.</p>
24 <label><span data-i18n="vault.password">Hlavní heslo</span><input id="vaultPassword" type="password" autocomplete="current-password" required></label>
25 <label id="vaultConfirmLabel" hidden><span data-i18n="vault.confirmPassword">Potvrzení hesla</span><input id="vaultPasswordConfirm" type="password" autocomplete="new-password"></label>
26 <p id="vaultMessage" class="form-message" aria-live="polite"></p>
27 <button id="vaultSubmit" class="button primary wide" type="submit" data-i18n="vault.unlock">Odemknout</button>
28 <button id="vaultDismiss" class="button wide" type="button" data-i18n="vault.cancel">Zrušit</button>
29 <button id="biometricUnlockButton" class="button wide" type="button" hidden></button>
30 <button id="showVaultResetButton" class="button ghost wide vault-reset-link" type="button" hidden data-i18n="vault.forgot">Zapomenuté heslo / obnovit vault</button>
31 <div id="vaultResetPanel" class="vault-reset-panel" hidden>
32 <strong data-i18n="vault.resetIrreversible">Obnovení nelze vrátit zpět</strong>
33 <p data-i18n="vault.resetDescription">Smažou se všechny serverové profily, uložené host fingerprinty a další šifrovaná data. Instalované pluginy a nastavení aktualizací zůstanou zachované.</p>
34 <label><span data-i18n="vault.resetInstruction">Pro potvrzení napište SMAZAT</span><input id="vaultResetConfirmation" maxlength="6" autocomplete="off" spellcheck="false"></label>
35 <div class="reset-actions"><button id="cancelVaultResetButton" class="button" type="button" data-i18n="vault.cancel">Zrušit</button><button id="confirmVaultResetButton" class="button danger" type="button" data-i18n="vault.resetAction">Smazat data a obnovit heslo</button></div>
36 </div>
37 </form>
38 </div>
39 <div class="app-shell">
40 <aside id="sidebar" class="sidebar">
41 <div class="brand">
42 <div class="brand-mark">CJ</div>
43 <div><strong>CH-J</strong><span>Server Manager</span></div>
44 </div>
45 <div class="sidebar-modes" role="radiogroup" aria-label="Zobrazení menu" data-i18n-aria-label="nav.sidebarModes">
46 <button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="full" aria-label="Ikony a názvy" data-i18n-aria-label="nav.modeFull"><span aria-hidden="true">☰</span></button>
47 <button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="compact" aria-label="Jen ikony" data-i18n-aria-label="nav.modeCompact"><span aria-hidden="true">▮</span></button>
48 <button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="split" aria-label="Ikony ve dvou sloupcích" data-i18n-aria-label="nav.modeSplit"><span aria-hidden="true">▚</span></button>
49 </div>
50 <label class="navigation-edit-toggle"><input id="navigationEditToggle" type="checkbox"><span data-i18n="nav.editOrder">Upravit pořadí</span></label>
51 <nav id="mainNavigation" aria-label="Hlavní navigace" data-i18n-aria-label="nav.aria">
52 <button class="nav-button active" data-view="overview"><span>●</span><span class="nav-label" data-i18n="nav.overview">Přehled</span></button>
53 <button class="nav-button" data-view="terminal"><span>&gt;_</span><span class="nav-label" data-i18n="nav.terminal">Terminál</span></button>
54 <button class="nav-button" data-view="profiles"><span>▤</span><span class="nav-label" data-i18n="nav.servers">Servery</span></button>
55 <button class="nav-button" data-view="keychain"><span>⚿</span><span class="nav-label" data-i18n="nav.keychain">Keychain</span></button>
56 <button class="nav-button" data-view="plugins"><span>◇</span><span class="nav-label" data-i18n="nav.plugins">Pluginy</span></button>
57 <button class="nav-button" data-view="diagnostics"><span>⌁</span><span class="nav-label" data-i18n="nav.diagnostics">Diagnostika web serveru</span></button>
58 <button id="hashToolButton" class="nav-button" type="button"><span>#</span><span class="nav-label" data-i18n="nav.hash">Hash a kontrolní součty</span></button>
59 <button class="nav-button" data-view="settings"><span>⌘</span><span class="nav-label" data-i18n="nav.settings">Nastavení</span></button>
60 </nav>
61 <div id="openModulesNav" class="open-modules" hidden>
62 <span class="open-modules-title" data-i18n="plugins.openModules">Otevřené moduly</span>
63 <div id="openModulesItems" class="open-modules-items"></div>
64 </div>
65 <div class="sidebar-footer">
66 <span class="status-dot"></span>
67 <div><strong data-i18n="app.coreRunning">Core běží</strong><span id="sidebarVersion">—</span></div>
68 </div>
69 <div id="sidebarResizer" class="sidebar-resizer" role="separator" aria-orientation="vertical" tabindex="0" aria-valuemin="220" aria-valuemax="420" aria-label="Změnit šířku menu" data-i18n-aria-label="nav.resize"></div>
70 </aside>
71 <div id="sidebarTooltip" class="sidebar-tooltip" role="tooltip" hidden></div>
73 <main>
74 <header class="topbar">
75 <button id="sidebarToggle" class="sidebar-toggle" type="button" aria-controls="sidebar" aria-expanded="true" aria-label="Skrýt menu" title="Skrýt menu"><span aria-hidden="true">☰</span></button>
76 <div class="topbar-title"><span class="eyebrow" data-i18n="app.newArchitecture">NOVÁ ARCHITEKTURA</span><h1 id="viewTitle">Přehled Core</h1></div>
77 <div id="terminalStrip" class="terminal-strip" hidden>
78 <div id="terminalTabs" class="terminal-tabs" role="tablist" aria-label="SSH" data-i18n-aria-label="terminal.aria"></div>
79 <div class="terminal-strip-tools">
80 <div id="terminalLayout" class="terminal-layout" role="radiogroup" aria-label="Layout" data-i18n-aria-label="terminal.layout">
81 <button type="button" role="radio" data-layout="single" data-label="terminal.single"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/></svg></button>
82 <button type="button" role="radio" data-layout="split" data-label="terminal.sideBySide"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/><path d="M8 2.5v11"/></svg></button>
83 <button type="button" role="radio" data-layout="stacked" data-label="terminal.stacked"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/><path d="M1.5 8h13"/></svg></button>
84 </div>
85 <button id="terminalSwap" class="terminal-layout-button" type="button" hidden><svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2 5.5h11M10.5 3 13 5.5 10.5 8M14 10.5H3M5.5 8 3 10.5 5.5 13"/></svg></button>
86 </div>
87 </div>
88 <div class="topbar-actions"><div class="runtime-badge"><span class="status-dot"></span><span id="runtimeText" data-i18n="app.initializing">Inicializace…</span></div><button id="lockVaultButton" class="button ghost" data-i18n="app.lock">Zamknout</button></div>
89 </header>
91 <section class="view active" data-view-panel="overview">
92 <div class="hero">
93 <div><span id="heroVersion" class="eyebrow">CORE</span><h2 data-i18n="overview.cleanTitle">Čistý základ nové aplikace</h2><p data-i18n="overview.cleanDescription">Oddělené služby, omezené IPC, plugin runtime a bezpečný aktualizační kanál.</p></div>
94 <div class="hero-orbit"><span>CORE</span></div>
95 </div>
96 <div class="card-grid">
97 <article class="card"><span class="card-icon blue">◎</span><div><small data-i18n="overview.coreApi">Core API</small><strong id="coreApiValue">—</strong><p data-i18n="overview.coreApiDescription">Stabilní aplikační kontrakt</p></div></article>
98 <article class="card"><span class="card-icon green">#</span><div><small data-i18n="overview.dataSchema">Data schema</small><strong id="dataSchemaValue">—</strong><p data-i18n="overview.dataSchemaDescription">Verzované uživatelské úložiště</p></div></article>
99 <article class="card"><span class="card-icon violet">◇</span><div><small data-i18n="overview.installedPlugins">Nainstalované pluginy</small><strong id="pluginCountValue">0</strong><p data-i18n="overview.noToolsNeeded">Core funguje i bez Tools</p></div></article>
100 </div>
101 <article class="panel roadmap-panel">
102 <div><span class="eyebrow" data-i18n="overview.currentSlice">AKTUÁLNÍ ŘEZ</span><h3 data-i18n="overview.sliceTitle">Vault + profily + SSH terminál</h3><p data-i18n="overview.sliceDescription">Funkční připojení s povinnou kontrolou host klíče a odděleným SessionManagerem.</p></div>
103 <div class="progress"><span></span></div>
104 </article>
105 </section>
107 <section class="view" data-view-panel="terminal">
108 <div id="terminalPanes" class="terminal-panes">
109 <article id="terminalPane" class="terminal-panel" data-kind="disconnected">
110 <div class="terminal-pane-heading">
111 <strong>T1</strong>
112 <div class="terminal-toolbar">
113 <label><span class="sr-only" data-i18n="terminal.server">Server</span><select id="terminalProfileSelect"><option value="" data-i18n="terminal.selectServer">Vyberte server…</option></select></label>
114 <label id="credentialLabel"><span id="credentialLabelText" class="sr-only" data-i18n="terminal.password">Heslo</span><input id="terminalCredential" type="password" autocomplete="off" placeholder="SSH heslo" data-i18n-placeholder="terminal.sshPassword"></label>
115 <button id="jumpToggle" class="button jump-toggle" type="button" aria-expanded="false"><span aria-hidden="true">⇢</span><span id="jumpToggleText" class="jump-toggle-text"></span></button>
116 <button id="connectButton" class="button primary" type="button" data-i18n="terminal.connect">Připojit</button>
117 </div>
118 <div class="terminal-session">
119 <span id="terminalState" class="connection-badge disconnected" data-i18n="terminal.disconnected">Odpojeno</span>
120 <span id="terminalHost" class="terminal-host" data-i18n="terminal.noProfile">Nejprve vytvořte profil serveru.</span>
121 <span id="terminalLatency" class="terminal-latency" hidden></span>
122 <button id="disconnectButton" class="button" type="button" disabled data-i18n="terminal.disconnect">Odpojit</button>
123 </div>
124 </div>
125 <div id="terminal" class="terminal-screen" aria-label="SSH terminál" data-i18n-aria-label="terminal.aria"></div>
126 </article>
127 <div id="terminalDivider" class="terminal-divider" role="separator" tabindex="0" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="80" aria-label="Resize" data-i18n-aria-label="terminal.resize" hidden></div>
128 </div>
129 </section>
131 <section class="view" data-view-panel="keychain">
132 <div class="panel keychain-panel">
133 <h2>Keychain</h2>
134 <p data-i18n="keychain.description"></p>
135 <div class="keychain-tabs" role="tablist">
136 <button type="button" role="tab" class="keychain-tab active" data-keychain-tab="openpgp" aria-selected="true">PGP</button>
137 <button type="button" role="tab" class="keychain-tab" data-keychain-tab="ssh" aria-selected="false">SSH</button>
138 <button type="button" role="tab" class="keychain-tab" data-keychain-tab="passwords" aria-selected="false" data-i18n="passwords.title">Hesla</button>
139 </div>
140 <div id="keychainKeysPane">
141 <div class="keychain-toolbar">
142 <button class="tool-button" type="button" data-generator-mode="openpgp" data-keychain-only="openpgp"><span aria-hidden="true">+</span><span data-i18n="keychain.new">Nový</span></button>
143 <button class="tool-button" type="button" data-generator-mode="ssh" data-keychain-only="ssh"><span aria-hidden="true">+</span><span data-i18n="keychain.new">Nový</span></button>
144 <button id="keychainImportOpen" class="tool-button" type="button"><span aria-hidden="true">⤓</span><span data-i18n="keychain.importShort">Importovat</span></button>
145 <details class="tool-menu" id="keychainExportMenu"><summary class="tool-button"><span aria-hidden="true">⤒</span><span data-i18n="keychain.exportShort">Exportovat</span></summary><div class="tool-menu-list" id="keychainExportList"></div></details>
146 <span class="toolbar-spacer"></span>
147 <select id="keychainCategory" aria-label="Kategorie" data-i18n-aria-label="keychain.category"><option value="all" data-i18n="keychain.all">Všechny klíče</option><option value="post-quantum" data-i18n="keychain.pqc">Post-Quantum / Hybrid</option><option value="classic" data-i18n="keychain.classic">Klasické algoritmy</option></select>
148 <input id="keychainFilter" type="search" autocomplete="off" spellcheck="false" placeholder="Filtr" data-i18n-placeholder="keychain.filter">
149 </div>
150 <p id="keychainMessage" class="form-message" aria-live="polite"></p>
151 <div class="keychain-table-wrap">
152 <table class="keychain-table">
153 <thead><tr><th data-i18n="keychain.col.type">Typ</th><th data-i18n="keychain.col.name">Jméno</th><th data-i18n="keychain.col.email" data-keychain-only="openpgp">E-mail</th><th data-i18n="keychain.col.created">Vytvořeno</th><th data-i18n="keychain.col.fingerprint">Otisk</th><th data-i18n="keychain.col.validity">Platnost</th><th data-i18n="keychain.col.server" data-keychain-only="openpgp">Server</th></tr></thead>
154 <tbody id="keychainRows"></tbody>
155 </table>
156 </div>
157 <div class="keychain-footer"><span id="keychainCount"></span><label class="check-label"><span data-i18n="keychain.secretOnly">Zobrazit pouze tajné klíče</span><input id="keychainSecretOnly" type="checkbox"></label></div>
158 <p class="hint" data-i18n="keychain.serverIntro" data-keychain-only="openpgp"></p>
159 <div id="keychainDetail" class="keychain-detail" hidden>
160 <div class="keychain-detail-head"><span id="keychainAvatar" class="keychain-avatar" aria-hidden="true"></span><div><strong id="keychainDetailName"></strong><span id="keychainDetailSub"></span></div></div>
161 <div class="keychain-tabs keychain-subtabs" role="tablist">
162 <button type="button" class="keychain-tab active" data-keychain-detail="key" data-i18n="keychain.tab.key">Klíč</button>
163 <button type="button" class="keychain-tab" data-keychain-detail="uids" data-keychain-only="openpgp" data-i18n="keychain.tab.uids">ID uživatele</button>
164 <button type="button" class="keychain-tab" data-keychain-detail="subkeys" data-keychain-only="openpgp" data-i18n="keychain.tab.subkeys">Podklíče</button>
165 </div>
166 <div id="keychainDetailBody"></div>
167 <label id="keychainDetailPassphraseField" class="keychain-passphrase"><span data-i18n="keychain.keyPassphrase">Heslo klíče (podpis, úpravy, odvolání)</span><input id="keychainDetailPassphrase" type="password" autocomplete="off"></label>
168 <div id="keychainDetailActions" class="keychain-actions"></div>
169 </div>
170 <details id="keySyncBar" class="keysync-bar" data-keychain-only="openpgp">
171 <summary><span id="keySyncSummary">KeySync</span><span id="keySyncLast" class="hint"></span></summary>
172 <div class="keysync-body">
173 <div class="keysync-head"><span id="keySyncInterval" class="hint"></span><button id="keySyncRun" class="button small" type="button" data-i18n="keysync.runNow">Zkontrolovat nyní</button></div>
174 <div id="keySyncJobs"></div>
175 </div>
176 </details>
177 <dialog id="keychainImportDialog" class="profile-import-dialog" aria-labelledby="keychainImportTitle">
178 <h2 id="keychainImportTitle" data-i18n="keychain.importShort">Importovat</h2>
179 <form id="keychainForm" class="profile-form">
180 <label><span data-i18n="keychain.importLabel"></span><input id="keychainLabel" maxlength="200" autocomplete="off"></label>
181 <label><span data-i18n="keychain.passphrase"></span><input id="keychainPassphrase" type="password" autocomplete="off"></label>
182 <div class="button-row"><button id="keychainImport" class="button primary" type="submit" data-i18n="keychain.import"></button><button id="keychainImportCancel" class="button" type="button" data-i18n="vault.cancel">Zrušit</button></div>
183 </form>
184 </dialog>
185 </div>
186 </div>
187 <div id="keychainPasswordsPane" class="panel keychain-passwords" hidden>
188 <h2 data-i18n="passwords.title">Hesla</h2>
189 <p data-i18n="passwords.description">Hesla se ukládají jen do šifrovaného trezoru. Zobrazení nebo zkopírování vyžaduje ověření.</p>
190 <div class="keychain-toolbar"><button class="button" type="button" data-generator-mode="password" data-i18n="keychain.openPasswordGenerator"></button></div>
191 <form id="passwordForm" class="profile-form">
192 <input id="passwordId" type="hidden">
193 <label><span data-i18n="passwords.label">Název</span><input id="passwordLabel" maxlength="200" autocomplete="off" required></label>
194 <div class="form-columns"><label><span data-i18n="passwords.username">Uživatel</span><input id="passwordUsername" maxlength="256" autocomplete="off" spellcheck="false"></label><label><span data-i18n="passwords.url">Adresa / host</span><input id="passwordUrl" maxlength="2048" autocomplete="off" spellcheck="false"></label></div>
195 <label><span data-i18n="passwords.password">Heslo</span><input id="passwordValue" type="password" maxlength="4096" autocomplete="new-password"></label>
196 <label><span data-i18n="passwords.note">Poznámka</span><textarea id="passwordNote" maxlength="4000" rows="2"></textarea></label>
197 <div class="button-row"><button class="button primary" type="submit" data-i18n="passwords.save">Uložit heslo</button><button id="passwordNew" class="button" type="button" data-i18n="passwords.new">Nové heslo</button></div>
198 </form>
199 <p id="passwordMessage" class="form-message" aria-live="polite"></p>
200 <div id="passwordRows"></div>
201 </div>
202 <dialog id="secretDialog" class="profile-import-dialog" aria-labelledby="secretTitle">
203 <h2 id="secretTitle"></h2>
204 <div id="secretAuth" class="profile-form" hidden>
205 <label><span data-i18n="secret.vaultPassword">Heslo trezoru</span><input id="secretVaultPassword" type="password" autocomplete="off"></label>
206 <div class="button-row"><button id="secretAuthConfirm" class="button primary" type="button" data-i18n="secret.confirm">Ověřit a zobrazit</button></div>
207 </div>
208 <textarea id="secretText" class="secret-text" readonly rows="12" spellcheck="false" hidden></textarea>
209 <p id="secretMessage" class="form-message" aria-live="polite"></p>
210 <div class="button-row"><button id="secretCopy" class="button" type="button" data-i18n="secret.copy" hidden>Kopírovat</button><button id="secretClose" class="button" type="button" data-i18n="secret.close">Zavřít</button></div>
211 </dialog>
212 </section>
213 <section class="view" data-view-panel="profiles">
214 <div class="section-heading"><div><span class="eyebrow" data-i18n="profiles.eyebrow">ŠIFROVANÉ PROFILY</span><h2 data-i18n="profiles.title">Správa serverů</h2></div><button id="newProfileButton" class="button" data-i18n="profiles.new">Nový server</button></div>
215 <article class="panel profile-transfer-panel">
216 <div class="button-row"><button id="importProfilesButton" class="button" type="button" data-i18n="transfer.import">Importovat</button><select id="profileExportFormat" aria-label="Formát exportu" data-i18n-aria-label="transfer.format"><option value="json">JSON</option><option value="csv">CSV</option></select><button id="exportProfilesButton" class="button" type="button" data-i18n="transfer.export">Exportovat</button><label class="checkbox-label"><input id="exportSelectedProfiles" type="checkbox"><span data-i18n="transfer.selectedOnly">Pouze označené servery</span></label></div>
217 <p data-i18n="transfer.secrets">Přenáší se pouze název, původní adresa, uživatel a port. Bez hesel, klíčů, tokenů a jejich cest.</p>
218 <p id="profileTransferMessage" class="form-message" aria-live="polite"></p>
219 </article>
220 <dialog id="profileImportDialog" class="profile-import-dialog" aria-labelledby="profileImportTitle">
221 <h2 id="profileImportTitle" data-i18n="transfer.preview">Náhled importu</h2><p data-i18n="transfer.authRequired">Importované a aktualizované profily vyžadují nové přiřazení autentizace. Aktualizace odstraní dříve uložené heslo i cestu ke klíči.</p>
222 <p id="profileImportSummary"></p><div class="profile-preview-scroll"><table><thead><tr><th data-i18n="profiles.name">Název</th><th data-i18n="profiles.host">Host / IP</th><th data-i18n="profiles.user">Uživatel</th><th data-i18n="profiles.port">Port</th><th data-i18n="transfer.duplicate">Duplicita</th></tr></thead><tbody id="profileImportRows"></tbody></table></div>
223 <label><span data-i18n="transfer.duplicates">Při shodě adresy, portu a uživatele</span><select id="profileDuplicatePolicy"><option value="skip" data-i18n="transfer.skip">Přeskočit</option><option value="update" data-i18n="transfer.update">Aktualizovat</option><option value="create" data-i18n="transfer.create">Vytvořit nový profil</option></select></label>
224 <p id="profileImportMessage" class="form-message" aria-live="polite"></p><div class="button-row"><button id="confirmProfileImport" type="button" class="button primary" data-i18n="transfer.confirm">Potvrdit import</button><button id="cancelProfileImport" type="button" class="button" data-i18n="vault.cancel">Zrušit</button></div>
225 </dialog>
226 <div class="profiles-layout">
227 <article class="panel profile-list-panel">
228 <div id="profileRows" class="profile-rows"></div>
229 </article>
230 <form id="profileForm" class="panel profile-form">
231 <input id="profileId" type="hidden">
232 <label><span data-i18n="profiles.name">Název</span><input id="profileLabel" maxlength="100" placeholder="Produkční server" data-i18n-placeholder="profiles.namePlaceholder" required></label>
233 <div class="form-columns"><label><span data-i18n="profiles.host">Host / IP</span><input id="profileHost" placeholder="192.168.1.20" required></label><label><span data-i18n="profiles.port">Port</span><input id="profilePort" type="number" min="1" max="65535" value="22" required></label></div>
234 <label><span data-i18n="profiles.user">Uživatel</span><input id="profileUsername" maxlength="128" placeholder="root" required></label>
235 <label><span data-i18n="ssh.kexPolicy">Politika KEX</span><select id="profileKexPolicy"><option value="prefer-hybrid" data-i18n="ssh.kexPrefer">Upřednostnit hybridní KEX</option><option value="hybrid-only" data-i18n="ssh.kexStrict">Pouze hybridní KEX</option></select></label>
236 <label><span data-i18n="profiles.auth">Ověření</span><select id="profileAuthMethod"><option value="password" data-i18n="profiles.authPassword">Heslo při připojení</option><option value="privateKey" data-i18n="profiles.authKey">Soukromý klíč</option><option value="keychain" data-i18n="profiles.authKeychain">Klíč z Keychainu</option></select></label>
237 <label id="keychainKeyField" hidden><span data-i18n="profiles.keychainKey">SSH klíč z Keychainu</span><select id="profileKeychainKeyId"></select></label>
238 <label><span data-i18n="terminal.jumpHost">Jump host</span><select id="profileJumpProfileId"></select></label>
239 <div id="passwordStorageField" class="password-storage-field">
240 <label class="check-label"><input id="profileStorePassword" type="checkbox"><span id="profileStorePasswordText" data-i18n="profiles.storePassword">Uložit heslo do šifrovaného vaultu</span></label>
241 <label><span id="profileStoredPasswordText" data-i18n="profiles.storedPassword">SSH heslo</span><input id="profileStoredPassword" type="password" maxlength="1024" autocomplete="new-password" placeholder="Zadejte heslo k uložení" data-i18n-placeholder="profiles.storePasswordPlaceholder" disabled></label>
242 <small data-i18n="profiles.passwordSecurity">Heslo se ukládá pouze uvnitř šifrovaného vaultu.</small>
243 </div>
244 <div id="privateKeyField" class="key-field" hidden><label><span data-i18n="profiles.privateKey">Soukromý klíč</span><input id="profilePrivateKeyPath" readonly placeholder="Vyberte soubor…" data-i18n-placeholder="profiles.selectFile"></label><button id="selectPrivateKeyButton" class="button" type="button" data-i18n="profiles.select">Vybrat</button></div>
245 <p id="profileMessage" class="form-message" aria-live="polite"></p>
246 <div class="button-row"><button class="button primary" type="submit" data-i18n="profiles.save">Uložit profil</button><button id="deleteProfileButton" class="button danger" type="button" hidden data-i18n="profiles.delete">Smazat</button></div>
247 </form>
248 </div>
249 </section>
251 <section class="view module-view" data-view-panel="module">
252 <header class="module-bar">
253 <div id="moduleTabs" class="module-tabs" role="tablist" aria-label="Otevřené moduly" data-i18n-aria-label="plugins.openModules"></div>
254 <div class="module-bar-actions">
255 <button id="moduleDetach" class="module-action" type="button" data-i18n="chrome.detach">Otevřít v okně</button>
256 <button id="moduleCollapse" class="module-action" type="button" data-i18n="chrome.collapse">Sbalit</button>
257 <button id="moduleClose" class="module-action" type="button" data-i18n="chrome.close">Zavřít</button>
258 </div>
259 </header>
260 <div id="moduleHostArea" class="module-host-area"></div>
261 </section>
263 <section class="view" data-view-panel="plugins">
264 <div class="section-heading"><div><span class="eyebrow" data-i18n="plugins.eyebrow">NÁSTROJE APLIKACE</span><h2 data-i18n="plugins.title">Správa pluginů</h2></div></div>
265 <p class="plugins-description" data-i18n="plugins.description">Zvolte, které nástroje chcete používat a mít po ruce v levém menu.</p>
266 <article class="panel table-panel">
267 <div class="table-header installed-plugin-row"><span data-i18n="plugins.plugin">Plugin</span><span data-i18n="plugins.version">Verze</span><span data-i18n="plugins.show">Zobrazit</span><span data-i18n="plugins.inMenu">V menu</span><span></span></div>
268 <div id="pluginRows" class="plugin-rows"></div>
269 </article>
270 <details class="plugin-catalog-disclosure">
271 <summary data-i18n="plugins.more">Další pluginy a aktualizace</summary>
272 <div class="plugin-catalog-toolbar"><div class="catalog-controls"><label><span data-i18n="plugins.channelFilter">Kanál katalogu</span><select id="pluginViewChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label><button id="checkPluginCatalogButton" class="button" data-i18n="plugins.checkCatalog">Načíst webový katalog</button></div><span id="pluginCatalogSource"></span></div>
273 <article class="panel table-panel">
274 <div class="table-header plugin-table-row"><span data-i18n="plugins.plugin">Plugin</span><span data-i18n="plugins.version">Verze</span><span data-i18n="plugins.permissions">Oprávnění</span><span></span></div>
275 <div id="pluginCatalogRows" class="plugin-rows"><div class="plugin-catalog-empty" data-i18n="plugins.catalogBeforeCheck">Nejprve načtěte katalog z povoleného update serveru.</div></div>
276 </article>
277 </details>
278 </section>
280 <section class="view" data-view-panel="diagnostics" id="diagnosticsView"></section>
282 <section class="view" data-view-panel="settings">
283 <div class="section-heading"><div><span class="eyebrow" data-i18n="settings.eyebrow">LOKÁLNÍ KONFIGURACE</span><h2 data-i18n="settings.title">Nastavení Core</h2></div></div>
284 <div class="settings-layout">
285 <div id="settingsTabs" class="settings-tabs" role="tablist" aria-orientation="vertical">
286 <button type="button" role="tab" data-settings-tab="general" data-i18n="settings.tab.general">Obecné</button>
287 <button type="button" role="tab" data-settings-tab="updates" data-i18n="settings.tab.updates">Aktualizace</button>
288 <button type="button" role="tab" data-settings-tab="servers" data-i18n="settings.tab.servers">Dostupnost serverů</button>
289 <button type="button" role="tab" data-settings-tab="suggest" data-i18n="settings.tab.suggest">Našeptávač</button>
290 <button type="button" role="tab" data-settings-tab="appearance" data-i18n="settings.tab.appearance">Vzhled terminálu</button>
291 <button type="button" role="tab" data-settings-tab="security" data-i18n="settings.tab.security">Zabezpečení</button>
292 <button type="button" role="tab" data-settings-tab="standby" data-i18n="settings.tab.standby">Standby Helper</button>
293 <button type="button" role="tab" data-settings-tab="legal" data-i18n="settings.tab.legal">Právní informace</button>
294 </div>
295 <div class="settings-pages">
296 <form id="settingsForm" class="panel settings-panel">
297 <div class="settings-page" data-settings-page="general">
298 <label><span data-i18n="settings.language">Jazyk</span><select id="languageSelect"></select></label>
299 </div>
300 <div class="settings-page" data-settings-page="updates">
301 <label><span data-i18n="settings.updateChannel">Kanál aktualizací</span><select id="channelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label>
302 <label><span data-i18n="settings.pluginChannel">Kanál pluginů</span><select id="pluginChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label>
303 <label class="check-label"><input id="autoCheckInput" type="checkbox"><span data-i18n="settings.autoCheck">Automaticky kontrolovat při startu</span></label>
304 <div class="field"><span data-i18n="settings.allowedServers">Povolené update servery</span><code id="baseUrlsText"></code></div>
305 </div>
306 <div class="settings-page" data-settings-page="servers">
307 <div class="settings-group">
308 <label class="check-label"><input id="monitoringEnabled" type="checkbox"><span data-i18n="availability.settingsEnabled">Automaticky kontrolovat dostupnost serverů</span></label>
309 <label><span data-i18n="availability.settingsInterval">Interval kontroly</span><select id="monitoringInterval"></select></label>
310 <div class="button-row"><button id="refreshAvailabilityButton" class="button" type="button" data-i18n="availability.refreshNow">Obnovit dostupnost</button></div>
311 <small data-i18n="availability.meaning">Offline znamená, že SSH port není dostupný z této sítě; samotný server přitom může běžet.</small>
312 </div>
313 </div>
314 <div class="settings-page" data-settings-page="suggest">
315 <div class="settings-group">
316 <label class="check-label"><input id="suggestEnabled" type="checkbox"><span data-i18n="terminal.suggest.enabled">Nabízet příkazy a cesty při psaní</span></label>
317 <label class="check-label"><input id="suggestRepair" type="checkbox"><span data-i18n="terminal.suggest.repair">Navrhovat opravy cest ve stylu Windows (\ na /)</span></label>
318 <label><span data-i18n="terminal.suggest.customLabel">Můj slovník, jeden příkaz na řádek</span><textarea id="suggestCustom" rows="4" spellcheck="false" autocomplete="off" autocapitalize="off"></textarea></label>
319 <label><span data-i18n="terminal.suggest.hiddenLabel">Skryté návrhy, jeden příkaz na řádek</span><textarea id="suggestHidden" rows="3" spellcheck="false" autocomplete="off" autocapitalize="off"></textarea></label>
320 <small data-i18n="terminal.suggest.dictionaryHint">Slovník je v šifrovaném trezoru a dostupný po odemknutí. Hesla a klíče do něj nepište.</small>
321 </div>
322 </div>
323 <div class="settings-page" data-settings-page="appearance">
324 <div class="settings-group">
325 <label><span data-i18n="terminal.appearance.profile">Profil</span><select id="appearanceProfile"></select></label>
326 <div class="button-row"><input id="appearanceProfileName" maxlength="40" autocomplete="off" data-i18n-placeholder="terminal.appearance.profileNamePlaceholder" placeholder="Název profilu"><button id="appearanceProfileSave" class="button" type="button" data-i18n="terminal.appearance.profileSave">Uložit jako nový profil</button><button id="appearanceProfileDelete" class="button" type="button" data-i18n="terminal.appearance.profileDelete">Smazat profil</button></div>
327 <pre id="appearancePreview" class="terminal-appearance-preview" dir="ltr">root@server:~# systemctl status nginx
328Active: active (running)
3290123456789 Il1 O0 /etc/nginx/
330<span id="appearanceSwatches" class="terminal-appearance-swatches"></span></pre>
331 </div>
332 <details class="settings-group" open>
333 <summary data-i18n="terminal.appearance.fontSection">Písmo a kurzor</summary>
334 <label><span data-i18n="terminal.appearance.font">Písmo</span><select id="appearanceFont"></select></label>
335 <label id="appearanceCustomRow" hidden><span data-i18n="terminal.appearance.fontName">Název písma v počítači</span><input id="appearanceCustomFont" maxlength="80" spellcheck="false" autocomplete="off"></label>
336 <small id="appearanceFontWarning" hidden data-i18n="terminal.appearance.proportional">Toto písmo nemá stejnou šířku znaků, takže se tabulky a programy jako htop mohou rozhodit.</small>
337 <label><span data-i18n="terminal.appearance.size">Velikost písma</span><input id="appearanceSize" type="number" min="8" max="32" step="1"></label>
338 <label><span data-i18n="terminal.appearance.weight">Tloušťka</span><select id="appearanceWeight"><option value="normal" data-i18n="terminal.appearance.normal">Normální</option><option value="bold" data-i18n="terminal.appearance.bold">Tučné</option></select></label>
339 <label><span data-i18n="terminal.appearance.lineHeight">Řádkování</span><input id="appearanceLineHeight" type="number" min="1" max="2" step="0.1"></label>
340 <label><span data-i18n="terminal.appearance.letterSpacing">Rozestup znaků</span><input id="appearanceLetterSpacing" type="number" min="-2" max="5" step="0.5"></label>
341 <label><span data-i18n="terminal.appearance.cursor">Tvar kurzoru</span><select id="appearanceCursorStyle"><option value="block" data-i18n="terminal.appearance.cursorBlock">Blok</option><option value="underline" data-i18n="terminal.appearance.cursorUnderline">Podtržítko</option><option value="bar" data-i18n="terminal.appearance.cursorBar">Svislá čára</option></select></label>
342 </details>
343 <details class="settings-group" open>
344 <summary data-i18n="terminal.appearance.colorSection">Barvy</summary>
345 <div class="terminal-appearance-colors"><label><span data-i18n="terminal.appearance.foreground">Text</span><input id="appearanceForeground" type="color"></label><label><span data-i18n="terminal.appearance.background">Pozadí</span><input id="appearanceBackground" type="color"></label><label><span data-i18n="terminal.appearance.cursorColor">Kurzor</span><input id="appearanceCursor" type="color"></label><label><span data-i18n="terminal.appearance.selection">Výběr</span><input id="appearanceSelection" type="color"></label></div>
346 </details>
347 <details class="settings-group">
348 <summary data-i18n="terminal.appearance.ansiSection">16 barev ANSI</summary>
349 <div class="terminal-appearance-colors terminal-appearance-ansi" dir="ltr"><label><span>black</span><input data-ansi="black" type="color"></label><label><span>red</span><input data-ansi="red" type="color"></label><label><span>green</span><input data-ansi="green" type="color"></label><label><span>yellow</span><input data-ansi="yellow" type="color"></label><label><span>blue</span><input data-ansi="blue" type="color"></label><label><span>magenta</span><input data-ansi="magenta" type="color"></label><label><span>cyan</span><input data-ansi="cyan" type="color"></label><label><span>white</span><input data-ansi="white" type="color"></label><label><span>brightBlack</span><input data-ansi="brightBlack" type="color"></label><label><span>brightRed</span><input data-ansi="brightRed" type="color"></label><label><span>brightGreen</span><input data-ansi="brightGreen" type="color"></label><label><span>brightYellow</span><input data-ansi="brightYellow" type="color"></label><label><span>brightBlue</span><input data-ansi="brightBlue" type="color"></label><label><span>brightMagenta</span><input data-ansi="brightMagenta" type="color"></label><label><span>brightCyan</span><input data-ansi="brightCyan" type="color"></label><label><span>brightWhite</span><input data-ansi="brightWhite" type="color"></label></div>
350 </details>
351 <details class="settings-group">
352 <summary data-i18n="terminal.appearance.shareSection">Import a export</summary>
353 <small data-i18n="terminal.appearance.shareHint">Profil se přenáší jako text JSON. Export ho sem vloží, import ho odtud načte.</small>
354 <textarea id="appearanceShare" rows="6" spellcheck="false" autocomplete="off" dir="ltr"></textarea>
355 <div class="button-row"><button id="appearanceExport" class="button" type="button" data-i18n="terminal.appearance.export">Exportovat aktuální vzhled</button><button id="appearanceImport" class="button" type="button" data-i18n="terminal.appearance.import">Importovat jako nový profil</button></div>
356 </details>
357 <div class="button-row"><button id="appearanceReset" class="button" type="button" data-i18n="terminal.appearance.reset">Obnovit výchozí vzhled CH-J</button><span id="appearanceStatus" aria-live="polite"></span></div>
358 </div>
359 <div class="button-row"><button class="button primary" type="submit" data-i18n="settings.save">Uložit nastavení</button><span id="settingsStatus"></span></div>
360 </form>
361 <div class="settings-page settings-updates" data-settings-page="updates">
362 <div class="section-heading updates-heading"><div><h2 data-i18n="updates.title">Aktualizace Core</h2></div><div class="catalog-controls"><label><span data-i18n="updates.channelFilter">Kanál</span><select id="updateViewChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label><span class="alpha-badge">LAN</span></div></div>
363 <article class="panel update-panel">
364 <div class="update-version"><small data-i18n="updates.installed">Nainstalovaná verze</small><strong id="currentVersion">—</strong><span id="updateChannel">kanál alpha</span></div>
365 <div class="update-copy"><h3 id="updateHeadline" data-i18n="updates.ready">Připraveno ke kontrole</h3><p id="updateMessage" data-i18n="updates.integrityIntro">Core ověří platformu, architekturu, velikost a SHA-512.</p><code id="updateHash" hidden></code></div>
366 <div class="button-row">
367 <button id="checkUpdateButton" class="button primary" data-i18n="updates.check">Zkontrolovat</button>
368 <button id="downloadUpdateButton" class="button" disabled data-i18n="updates.download">Stáhnout a ověřit</button>
369 <button id="installUpdateButton" class="button primary" hidden data-i18n="updates.install">Spustit instalátor</button>
370 <button id="revealUpdateButton" class="button ghost" hidden data-i18n="updates.reveal">Zobrazit soubor</button>
371 </div>
372 </article>
373 <article class="panel release-catalog-panel">
374 <div class="release-catalog-header"><div><span class="eyebrow" data-i18n="updates.catalogEyebrow">KATALOG VYDÁNÍ</span><h3 data-i18n="updates.catalogTitle">Dostupná vydání</h3></div><span id="updateReleaseCount">0</span></div>
375 <div id="updateReleaseRows" class="update-release-rows"><div class="update-release-empty" data-i18n="updates.catalogBeforeCheck">Po kontrole se zde zobrazí všechna kompatibilní vydání.</div></div>
376 </article>
377 <div class="notice"><strong data-i18n="updates.alphaSecurity">Bezpečnostní režim</strong><p data-i18n="updates.alphaDescription">SHA-512 kontroluje integritu stažení. Instalace se nespouští automaticky a zdroj je omezený na povolenou HTTPS doménu.</p></div>
378 </div>
379 <form id="securityForm" class="panel settings-panel security-panel settings-page" data-settings-page="security">
380 <h3 data-i18n="security.title">Zabezpečení</h3>
381 <p id="biometricStatus" aria-live="polite"></p>
382 <p id="biometricProtection"></p>
383 <div class="button-row">
384 <button id="enableBiometricsButton" class="button" type="button" data-i18n="security.enable">Zapnout biometrické odemykání</button>
385 <button id="disableBiometricsButton" class="button" type="button" data-i18n="security.remove">Vypnout a odstranit registraci</button>
386 <button id="testBiometricsButton" class="button" type="button" data-i18n="security.test">Otestovat systémové ověření</button>
387 </div>
388 <label class="check-label"><input id="autoLockEnabled" type="checkbox"><span data-i18n="security.autoLock">Automaticky zamknout při nečinnosti</span></label>
389 <label><span data-i18n="security.timeout">Doba nečinnosti</span><select id="autoLockMinutes"><option value="0" data-i18n="security.never">Nikdy</option><option value="1">1 min</option><option value="5">5 min</option><option value="10">10 min</option><option value="15">15 min</option><option value="30">30 min</option><option value="60">60 min</option></select></label>
390 <label class="check-label"><input id="lockOnBlur" type="checkbox"><span data-i18n="security.blur">Zamknout při ztrátě zaměření aplikace</span></label>
391 <label class="check-label"><input id="requireSystemAuthentication" type="checkbox"><span data-i18n="security.sensitive">Vyžadovat systémové ověření citlivých operací</span></label>
392 <p data-i18n="security.scope">Ověření chrání odstranění profilu, instalaci/odstranění pluginu, spuštění instalátoru a reset odemčeného Vaultu. Příkazy vzdáleného terminálu tímto ověřením chráněny nejsou.</p>
393 <p data-i18n="security.lockEffect">Zamknutí ukončí aktivní SSH relace, zavře pluginy a zastaví diagnostiku.</p>
394 <label><span data-i18n="security.confirmPassword">Hlavní heslo pro změnu pravidel zamykání</span><input id="securityMasterPassword" type="password" autocomplete="current-password" required></label>
395 <div class="button-row"><button class="button primary" type="submit" data-i18n="settings.save">Uložit nastavení</button><span id="securityMessage" aria-live="polite"></span></div>
396 </form>
397 <section id="standbyPanel" class="panel settings-panel settings-page" data-settings-page="standby" hidden>
398 <h3 data-i18n="standby.title">CH-J Standby Helper</h3>
399 <p data-i18n="standby.description">Malý samostatný proces bez okna. Přidá do kontextového menu systému ověření a podpis souboru OpenPGP a spouští jen malé okno aplikace, nikdy celé hlavní okno. Podpis vždy vyžaduje výběr klíče a heslo.</p>
400 <label class="check-label"><input id="standbyEnabled" type="checkbox"><span data-i18n="standby.enabled">Zapnout Standby Helper</span></label>
401 <fieldset id="standbyOptions" class="standby-options">
402 <label class="check-label"><input id="standbyMenuVerify" type="checkbox"><span data-i18n="standby.menuVerify">Položka „Ověřit podpis“ v kontextovém menu</span></label>
403 <label class="check-label"><input id="standbyMenuSign" type="checkbox"><span data-i18n="standby.menuSign">Položka „Podepsat (OpenPGP)“ v kontextovém menu</span></label>
404 <label class="check-label"><input id="standbyLogin" type="checkbox"><span data-i18n="standby.login">Spouštět na pozadí po přihlášení</span></label>
405 <label id="standbyMonitorRow" class="check-label" hidden><input id="standbyMonitorEnabled" type="checkbox"><span data-i18n="standby.monitorEnabled">Hlídat dostupnost uložených serverů na pozadí (i při zavřené aplikaci)</span></label>
406 <fieldset id="standbyMonitorOptions" class="standby-options" hidden>
407 <label><span data-i18n="standby.monitorCheck">Výchozí kontrola</span> <select id="standbyMonitorCheck"><option value="ssh" data-i18n="standby.checkSsh">SSH port serveru (obvykle 22)</option><option value="https" data-i18n="standby.checkHttps">Web HTTPS (port 443)</option><option value="custom" data-i18n="standby.checkCustom">Vlastní port</option></select></label>
408 <label id="standbyMonitorPortRow"><span data-i18n="standby.monitorPort">Port</span> <input id="standbyMonitorPort" type="number" min="1" max="65535" step="1" inputmode="numeric"></label>
409 <label><span data-i18n="standby.monitorInterval">Interval kontrol</span> <select id="standbyMonitorInterval"><option value="30" data-i18n="standby.interval30">30 sekund</option><option value="60" data-i18n="standby.interval60">60 sekund (doporučeno)</option><option value="300" data-i18n="standby.interval300">5 minut</option></select></label>
410 <div class="standby-servers"><span data-i18n="standby.monitorServers">Sledované servery</span><div id="standbyMonitorServers"></div><p class="hint" data-i18n="standby.monitorChecksHint">Kontroly oddělené čárkou, např. ssh, web-443, smb-445, dns-53, ftp-21, rdp, 8080. Prázdné pole = výchozí kontrola.</p></div>
411 <label id="standbyMonitorAddressesRow" class="check-label" hidden><input id="standbyMonitorAddresses" type="checkbox"><span data-i18n="standby.monitorAddresses">Zobrazovat adresy serverů ve widgetu</span></label>
412 <p class="hint" data-i18n="standby.monitorNote">Pro helper se ukládá seznam serverů (název, adresa, port – bez uživatelů, hesel a klíčů) nešifrovaně v datové složce aplikace, přístupný jen tvému účtu; po vypnutí se smaže. Servery za jump hostem se nehlídají. Otevřený port ještě neznamená plně funkční službu. Hlídání běží, když helper běží na pozadí.</p>
413 </fieldset>
414 </fieldset>
415 <p id="standbyStatus" aria-live="polite"></p>
416 <p class="hint" id="standbyPlatformNote"></p>
417 <div class="button-row"><button id="standbyRefresh" class="button" type="button" data-i18n="standby.refresh">Obnovit stav</button><span id="standbyMessage" aria-live="polite"></span></div>
418 </section>
419 <div class="legal-page settings-page" data-settings-page="legal">
420 <p class="legal-lead" data-i18n="legal.description">CH-J Tools je poskytován pod CH-J Proprietary Software License 1.14.</p>
421 <section class="legal-group"><h3 data-i18n="legal.groupLicenses">Licence</h3>
422 <button class="legal-row" type="button" data-legal-document="application"><span data-i18n="legal.application">Licence aplikace</span><span class="legal-open" aria-hidden="true">›</span></button>
423 <button class="legal-row" type="button" data-legal-document="notice"><span data-i18n="legal.notice">Autorské oznámení</span><span class="legal-open" aria-hidden="true">›</span></button>
424 </section>
425 <section class="legal-group"><h3 data-i18n="legal.groupThirdParty">Komponenty třetích stran</h3>
426 <button class="legal-row" type="button" data-legal-document="thirdParty"><span data-i18n="legal.thirdParty">Licence třetích stran</span><span class="legal-open" aria-hidden="true">›</span></button>
427 <button class="legal-row" type="button" data-legal-document="thirdPartyBundle"><span data-i18n="legal.thirdPartyBundle">Kompletní licenční balík</span><span class="legal-open" aria-hidden="true">›</span></button>
428 </section>
429 <section class="legal-group"><h3 data-i18n="legal.groupSafety">Provozní bezpečnost a zálohování</h3>
430 <button class="legal-row" type="button" data-legal-document="safetyCzech"><span data-i18n="legal.safetyCzech">Bezpečnost a zálohování (CS)</span><span class="legal-open" aria-hidden="true">›</span></button>
431 <button class="legal-row" type="button" data-legal-document="safetyEnglish"><span data-i18n="legal.safetyEnglish">Bezpečnost a zálohování (EN)</span><span class="legal-open" aria-hidden="true">›</span></button>
432 <button class="legal-row" type="button" data-legal-document="safetyGerman"><span data-i18n="legal.safetyGerman">Bezpečnost a zálohování (DE)</span><span class="legal-open" aria-hidden="true">›</span></button>
433 </section>
434 <section class="legal-group"><h3 data-i18n="legal.documentation">Dokumentace</h3>
435 <button class="legal-row" type="button" data-legal-document="documentation"><span data-i18n="legal.documentation">Dokumentace</span><span class="legal-open" aria-hidden="true">›</span></button>
436 </section>
437 </div>
438 </div>
439 </div>
440 </section>
441 </main>
442 </div>
443 <dialog id="updateAvailableDialog" class="update-available-dialog" aria-labelledby="updateAvailableTitle">
444 <h3 id="updateAvailableTitle" data-i18n="updates.availableTitle">Je dostupná novější verze</h3>
445 <p id="updateAvailableMessage"></p>
446 <div class="button-row"><button id="updateAvailableLater" class="button ghost" type="button" data-i18n="updates.later">Později</button><button id="updateAvailableOpen" class="button primary" type="button" data-i18n="updates.openSettings">Otevřít aktualizace</button></div>
447 </dialog>
448 <script src="vendor/xterm/xterm.js"></script>
449 <script src="vendor/xterm/addon-fit.js"></script>
450 <script src="vendor/lucide/icons.js"></script>
451 <script src="navIcons.js"></script>
452 <script src="i18n.js"></script>
453 <script src="diagnosticsI18n.js"></script>
454 <script src="diagnostics.js"></script>
455 <script src="terminalAppearance.js"></script>
456 <script src="terminalSuggest.js"></script>
457 <script src="app.js"></script>
458</body>
459</html>
SHA-2564d63217c2ccf58b59f7aad85dd44c39273651f284f825a8f12df357e72e9d10d

CH-J Proprietary Software License 1.14 · Šaltinis pateiktas pagal CH-J Proprietary Software License 1.14. Jo prieinamumas nekeičia licencijos sąlygų ir nesuteikia papildomų teisių.

Archyvas SHA-256ac8fe790f4ba60fc098f8c985fc2656cfcc6cdc21fb34b30e308a2b54e62258f
Failai