Password ((top)) — Tyviania
function escapeHtml(str) return str.replace(/[&<>]/g, function(m) if(m === '&') return '&'; if(m === '<') return '<'; if(m === '>') return '>'; return m; ).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) return c; );
function renderVault() (entry.username && entry.username.toLowerCase().includes(searchTerm)) ); if(filtered.length === 0) vaultBody.innerHTML = '<tr><td colspan="5" style="text-align:center;">🔎 No matching entries</td></tr>'; return; let html = ''; filtered.forEach((entry, idx) => const realIndex = vault.findIndex(e => e === entry); const strength = evaluateStrength(entry.password); html += `<tr> <td>$escapeHtml(entry.service)</td> <td>$</td> <td style="font-family:monospace;">$maskPassword(entry.password)</td> <td>$strengthBadge(strength)</td> <td class="actions-cell"> <button class="view-pass-btn" data-idx="$realIndex" data-pwd="$escapeHtml(entry.password)">👁️ Show</button> <button class="copy-pass-btn" data-pwd="$escapeHtml(entry.password)">📋 Copy</button> <button class="del-entry-btn" data-idx="$realIndex">🗑️ Del</button> </td> </tr>`; ); vaultBody.innerHTML = html;
<script> // -------- DOM elements ---------- const lengthSlider = document.getElementById('passLength'); const lenValue = document.getElementById('lenValue'); const useUpper = document.getElementById('useUpper'); const useLower = document.getElementById('useLower'); const useDigits = document.getElementById('useDigits'); const useSymbols = document.getElementById('useSymbols'); const generateBtn = document.getElementById('generateBtn'); const generatedPassDiv = document.getElementById('generatedPass'); const copyGenBtn = document.getElementById('copyGenBtn'); const serviceNameInput = document.getElementById('serviceName'); const saveToVaultBtn = document.getElementById('saveToVaultBtn'); const vaultBody = document.getElementById('vaultBody'); const searchVault = document.getElementById('searchVault'); const exportBtn = document.getElementById('exportVaultBtn'); const importBtn = document.getElementById('importVaultBtn'); const importFile = document.getElementById('importFile'); const clearAllBtn = document.getElementById('clearAllBtn'); tyviania password
// --------- helper functions ---------- function loadVault() const raw = localStorage.getItem(STORAGE_KEY); if(!raw) return []; try return JSON.parse(raw); catch(e) return [];
<!-- Vault panel --> <div class="vault-panel"> <h3>🛡️ Password Vault</h3> <div class="search-box"> <input type="text" id="searchVault" placeholder="🔍 Search by service or username..."> </div> <div style="overflow-x: auto;"> <table id="vaultTable"> <thead> <tr><th>Service</th><th>Username (optional)</th><th>Password</th><th>Strength</th><th>Actions</th></tr> </thead> <tbody id="vaultBody"> <tr><td colspan="5" style="text-align:center;">No passwords yet. Generate & save.</td></tr> </tbody> </table> </div> <div style="display: flex; gap: 10px; margin-top: 1rem;"> <button id="exportVaultBtn" style="background:#2a4b6e;">📎 Export JSON (encrypted mindset)</button> <button id="importVaultBtn" style="background:#2a4b6e;">📂 Import JSON</button> <input type="file" id="importFile" accept=".json" style="display:none;"> </div> <button id="clearAllBtn" class="danger-btn">⚠️ CLEAR ALL VAULT (irreversible)</button> </div> </div> <footer> 🔐 Tyviania Password — All data stays in your browser. No cloud, no tracking. Use master lock mindset. </footer> </div> function escapeHtml(str) return str
// attach event listeners to dynamic buttons document.querySelectorAll('.view-pass-btn').forEach(btn => btn.addEventListener('click', (e) => const idx = parseInt(btn.dataset.idx); const vault = loadVault(); if(vault[idx]) alert(`Password for $vault[idx].service:\n$vault[idx].password`); else alert('Entry not found'); ); ); document.querySelectorAll('.copy-pass-btn').forEach(btn => btn.addEventListener('click', async () => const pwd = btn.dataset.pwd; await navigator.clipboard.writeText(pwd); showToast('Copied password!'); ); ); document.querySelectorAll('.del-entry-btn').forEach(btn => btn.addEventListener('click', () => const idx = parseInt(btn.dataset.idx); const vault = loadVault(); if(confirm(`Delete password for "$vault[idx]?.service"?`)) vault.splice(idx,1); saveVault(vault); ); );
function maskPassword(pwd) if(pwd.length <= 8) return '•'.repeat(pwd.length); return pwd.slice(0,4) + '••••••' + pwd.slice(-2); Use master lock mindset
Here’s a useful, ready-to-use tool called . It’s designed to help you generate strong passwords, store them securely (offline or locally encrypted), and check their strength — all in one place.