|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>PrivFingaa - Enhanced Interface</title> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
.window { |
|
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
|
transition: all 0.3s ease; |
|
} |
|
.window-header { |
|
cursor: move; |
|
} |
|
.window.minimized { |
|
height: 40px; |
|
overflow: hidden; |
|
} |
|
.window.minimized .window-body { |
|
display: none; |
|
} |
|
.draggable { |
|
position: absolute; |
|
z-index: 1000; |
|
} |
|
.resizable { |
|
resize: both; |
|
overflow: auto; |
|
} |
|
.input-line { |
|
transition: background-color 0.2s; |
|
} |
|
.input-line:hover { |
|
background-color: rgba(59, 130, 246, 0.1); |
|
} |
|
.tab-active { |
|
border-bottom: 2px solid #3b82f6; |
|
color: #3b82f6; |
|
} |
|
.json-viewer { |
|
font-family: monospace; |
|
white-space: pre; |
|
} |
|
.status-indicator { |
|
width: 10px; |
|
height: 10px; |
|
border-radius: 50%; |
|
display: inline-block; |
|
margin-right: 5px; |
|
} |
|
.status-connected { |
|
background-color: #10B981; |
|
} |
|
.status-disconnected { |
|
background-color: #EF4444; |
|
} |
|
</style> |
|
</head> |
|
<body class="bg-gray-100 font-sans p-4"> |
|
<div class="container mx-auto"> |
|
<header class="mb-6"> |
|
<h1 class="text-3xl font-bold text-gray-800 flex items-center"> |
|
<i class="fas fa-lock mr-3 text-blue-500"></i> |
|
PrivFingaa <span class="text-sm ml-2 bg-blue-100 text-blue-800 px-2 py-1 rounded">Enhanced</span> |
|
</h1> |
|
<div class="flex items-center mt-2"> |
|
<span id="connection-status" class="status-indicator status-connected"></span> |
|
<span id="connection-text" class="text-sm text-gray-600">Connected to PrivFingaa API</span> |
|
<button id="refresh-btn" class="ml-4 text-blue-500 hover:text-blue-700"> |
|
<i class="fas fa-sync-alt"></i> Refresh |
|
</button> |
|
</div> |
|
</header> |
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-4"> |
|
|
|
<div id="main-window" class="window draggable resizable bg-white rounded-lg overflow-hidden" style="width: 600px; height: 500px; left: 20px; top: 100px;"> |
|
<div class="window-header bg-blue-600 text-white px-4 py-2 flex justify-between items-center"> |
|
<div class="flex items-center"> |
|
<i class="fas fa-database mr-2"></i> |
|
<span>PrivFingaa Data Manager</span> |
|
</div> |
|
<div class="window-controls"> |
|
<button class="minimize-btn px-2 hover:bg-blue-700 rounded"> |
|
<i class="fas fa-minus"></i> |
|
</button> |
|
<button class="close-btn px-2 hover:bg-blue-700 rounded ml-1"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
</div> |
|
</div> |
|
<div class="window-body p-4 h-full overflow-auto"> |
|
<div class="tabs flex border-b mb-4"> |
|
<button class="tab-btn py-2 px-4 font-medium tab-active" data-tab="data-tab">Data Records</button> |
|
<button class="tab-btn py-2 px-4 font-medium text-gray-600" data-tab="api-tab">API Integration</button> |
|
<button class="tab-btn py-2 px-4 font-medium text-gray-600" data-tab="settings-tab">Settings</button> |
|
</div> |
|
|
|
<div id="data-tab" class="tab-content"> |
|
<div class="mb-4 flex justify-between items-center"> |
|
<h3 class="text-lg font-semibold">PrivFingaa Data Records</h3> |
|
<div class="flex space-x-2"> |
|
<button class="import-btn bg-green-500 hover:bg-green-600 text-white px-3 py-1 rounded text-sm flex items-center"> |
|
<i class="fas fa-file-import mr-1"></i> Import |
|
</button> |
|
<button class="export-btn bg-purple-500 hover:bg-purple-600 text-white px-3 py-1 rounded text-sm flex items-center"> |
|
<i class="fas fa-file-export mr-1"></i> Export |
|
</button> |
|
<button class="add-line-btn bg-blue-500 hover:bg-blue-600 text-white px-3 py-1 rounded text-sm flex items-center"> |
|
<i class="fas fa-plus mr-1"></i> Add Record |
|
</button> |
|
</div> |
|
</div> |
|
|
|
<div class="data-lines space-y-2"> |
|
|
|
</div> |
|
</div> |
|
|
|
<div id="api-tab" class="tab-content hidden"> |
|
<h3 class="text-lg font-semibold mb-4">PrivFingaa API Integration</h3> |
|
<div class="space-y-4"> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">API Endpoint</label> |
|
<input type="text" id="api-endpoint" class="w-full p-2 border rounded" value="https://api.privfingaa.com/v1/data" placeholder="Enter API endpoint"> |
|
</div> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">API Key</label> |
|
<div class="flex"> |
|
<input type="password" id="api-key" class="w-full p-2 border rounded-l" placeholder="Enter your API key"> |
|
<button id="toggle-key" class="bg-gray-200 px-3 rounded-r border border-l-0"> |
|
<i class="fas fa-eye"></i> |
|
</button> |
|
</div> |
|
</div> |
|
<div class="grid grid-cols-2 gap-4"> |
|
<button id="test-connection" class="bg-blue-500 hover:bg-blue-600 text-white py-2 px-4 rounded flex items-center justify-center"> |
|
<i class="fas fa-plug mr-2"></i> Test Connection |
|
</button> |
|
<button id="sync-data" class="bg-green-500 hover:bg-green-600 text-white py-2 px-4 rounded flex items-center justify-center"> |
|
<i class="fas fa-sync-alt mr-2"></i> Sync Data |
|
</button> |
|
</div> |
|
<div id="api-response" class="bg-gray-50 p-3 rounded text-sm font-mono h-32 overflow-auto hidden"> |
|
<div class="text-gray-500">API response will appear here...</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div id="settings-tab" class="tab-content hidden"> |
|
<h3 class="text-lg font-semibold mb-4">PrivFingaa Settings</h3> |
|
<div class="space-y-4"> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Data Storage</label> |
|
<select id="storage-type" class="w-full p-2 border rounded"> |
|
<option value="local">Local Storage</option> |
|
<option value="indexeddb">IndexedDB</option> |
|
<option value="api">PrivFingaa Cloud</option> |
|
</select> |
|
</div> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Auto-save Interval (minutes)</label> |
|
<input type="number" id="autosave-interval" class="w-full p-2 border rounded" value="5" min="1" max="60"> |
|
</div> |
|
<div> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Data Encryption</label> |
|
<div class="flex items-center"> |
|
<input type="checkbox" id="enable-encryption" class="mr-2" checked> |
|
<span>Enable AES-256 encryption</span> |
|
</div> |
|
</div> |
|
<div id="encryption-key-container" class="hidden"> |
|
<label class="block text-sm font-medium text-gray-700 mb-1">Encryption Key</label> |
|
<input type="password" id="encryption-key" class="w-full p-2 border rounded" placeholder="Enter encryption key"> |
|
</div> |
|
<button id="save-settings" class="bg-blue-500 hover:bg-blue-600 text-white py-2 px-4 rounded w-full"> |
|
Save Settings |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div id="tools-window" class="window draggable bg-white rounded-lg overflow-hidden" style="width: 350px; height: 300px; left: 650px; top: 100px;"> |
|
<div class="window-header bg-green-600 text-white px-4 py-2 flex justify-between items-center"> |
|
<div class="flex items-center"> |
|
<i class="fas fa-tools mr-2"></i> |
|
<span>PrivFingaa Tools</span> |
|
</div> |
|
<div class="window-controls"> |
|
<button class="minimize-btn px-2 hover:bg-green-700 rounded"> |
|
<i class="fas fa-minus"></i> |
|
</button> |
|
<button class="close-btn px-2 hover:bg-green-700 rounded ml-1"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
</div> |
|
</div> |
|
<div class="window-body p-4"> |
|
<div class="space-y-3"> |
|
<button id="validate-data" class="w-full bg-blue-100 hover:bg-blue-200 text-blue-800 py-2 px-4 rounded flex items-center justify-between"> |
|
<span>Validate Data</span> |
|
<i class="fas fa-check-circle"></i> |
|
</button> |
|
<button id="export-json" class="w-full bg-purple-100 hover:bg-purple-200 text-purple-800 py-2 px-4 rounded flex items-center justify-between"> |
|
<span>Export as JSON</span> |
|
<i class="fas fa-file-code"></i> |
|
</button> |
|
<button id="export-csv" class="w-full bg-green-100 hover:bg-green-200 text-green-800 py-2 px-4 rounded flex items-center justify-between"> |
|
<span>Export as CSV</span> |
|
<i class="fas fa-file-csv"></i> |
|
</button> |
|
<button id="clear-all" class="w-full bg-red-100 hover:bg-red-200 text-red-800 py-2 px-4 rounded flex items-center justify-between"> |
|
<span>Clear All Data</span> |
|
<i class="fas fa-trash-alt"></i> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div id="preview-window" class="window draggable bg-white rounded-lg overflow-hidden" style="width: 350px; height: 300px; left: 650px; top: 420px;"> |
|
<div class="window-header bg-purple-600 text-white px-4 py-2 flex justify-between items-center"> |
|
<div class="flex items-center"> |
|
<i class="fas fa-eye mr-2"></i> |
|
<span>PrivFingaa Preview</span> |
|
</div> |
|
<div class="window-controls"> |
|
<button class="minimize-btn px-2 hover:bg-purple-700 rounded"> |
|
<i class="fas fa-minus"></i> |
|
</button> |
|
<button class="close-btn px-2 hover:bg-purple-700 rounded ml-1"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
</div> |
|
</div> |
|
<div class="window-body p-4 overflow-auto"> |
|
<div class="tabs flex border-b mb-2"> |
|
<button class="preview-tab-btn py-1 px-3 text-sm font-medium tab-active" data-preview="table">Table View</button> |
|
<button class="preview-tab-btn py-1 px-3 text-sm font-medium text-gray-600" data-preview="json">JSON View</button> |
|
</div> |
|
<div id="table-preview" class="preview-content"> |
|
<p class="text-gray-500 text-sm">No data to preview. Add some records in the main window.</p> |
|
</div> |
|
<div id="json-preview" class="preview-content json-viewer hidden"> |
|
<p class="text-gray-500 text-sm">No data to preview. Add some records in the main window.</p> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const windows = document.querySelectorAll('.window'); |
|
windows.forEach(window => { |
|
const header = window.querySelector('.window-header'); |
|
let isDragging = false; |
|
let offsetX, offsetY; |
|
|
|
header.addEventListener('mousedown', (e) => { |
|
isDragging = true; |
|
offsetX = e.clientX - window.getBoundingClientRect().left; |
|
offsetY = e.clientY - window.getBoundingClientRect().top; |
|
window.style.zIndex = 1000; |
|
}); |
|
|
|
document.addEventListener('mousemove', (e) => { |
|
if (!isDragging) return; |
|
window.style.left = (e.clientX - offsetX) + 'px'; |
|
window.style.top = (e.clientY - offsetY) + 'px'; |
|
}); |
|
|
|
document.addEventListener('mouseup', () => { |
|
isDragging = false; |
|
}); |
|
}); |
|
|
|
|
|
document.querySelectorAll('.minimize-btn').forEach(btn => { |
|
btn.addEventListener('click', function() { |
|
const window = this.closest('.window'); |
|
window.classList.toggle('minimized'); |
|
const icon = this.querySelector('i'); |
|
if (window.classList.contains('minimized')) { |
|
icon.classList.replace('fa-minus', 'fa-plus'); |
|
} else { |
|
icon.classList.replace('fa-plus', 'fa-minus'); |
|
} |
|
}); |
|
}); |
|
|
|
document.querySelectorAll('.close-btn').forEach(btn => { |
|
btn.addEventListener('click', function() { |
|
const window = this.closest('.window'); |
|
window.style.display = 'none'; |
|
}); |
|
}); |
|
|
|
|
|
document.querySelectorAll('.tab-btn').forEach(tab => { |
|
tab.addEventListener('click', function() { |
|
|
|
document.querySelectorAll('.tab-btn').forEach(t => { |
|
t.classList.remove('tab-active'); |
|
t.classList.add('text-gray-600'); |
|
}); |
|
|
|
|
|
this.classList.add('tab-active'); |
|
this.classList.remove('text-gray-600'); |
|
|
|
|
|
document.querySelectorAll('.tab-content').forEach(content => { |
|
content.classList.add('hidden'); |
|
}); |
|
|
|
|
|
const tabId = this.getAttribute('data-tab'); |
|
document.getElementById(tabId).classList.remove('hidden'); |
|
}); |
|
}); |
|
|
|
|
|
document.querySelectorAll('.preview-tab-btn').forEach(tab => { |
|
tab.addEventListener('click', function() { |
|
|
|
document.querySelectorAll('.preview-tab-btn').forEach(t => { |
|
t.classList.remove('tab-active'); |
|
t.classList.add('text-gray-600'); |
|
}); |
|
|
|
|
|
this.classList.add('tab-active'); |
|
this.classList.remove('text-gray-600'); |
|
|
|
|
|
document.querySelectorAll('.preview-content').forEach(content => { |
|
content.classList.add('hidden'); |
|
}); |
|
|
|
|
|
const previewType = this.getAttribute('data-preview'); |
|
document.getElementById(`${previewType}-preview`).classList.remove('hidden'); |
|
}); |
|
}); |
|
|
|
|
|
const addLineBtn = document.querySelector('.add-line-btn'); |
|
const dataLinesContainer = document.querySelector('.data-lines'); |
|
let lineCounter = 1; |
|
|
|
addLineBtn.addEventListener('click', function() { |
|
const lineId = `line-${lineCounter++}`; |
|
const lineHtml = ` |
|
<div class="input-line bg-white border rounded p-3 flex items-center" id="${lineId}"> |
|
<div class="flex-grow grid grid-cols-3 gap-2"> |
|
<input type="text" class="p-2 border rounded focus:ring-2 focus:ring-blue-300 focus:border-blue-500" placeholder="ID" data-field="id"> |
|
<input type="text" class="p-2 border rounded focus:ring-2 focus:ring-blue-300 focus:border-blue-500" placeholder="Name" data-field="name"> |
|
<input type="text" class="p-2 border rounded focus:ring-2 focus:ring-blue-300 focus:border-blue-500" placeholder="Value" data-field="value"> |
|
</div> |
|
<button class="delete-line-btn ml-3 text-red-500 hover:text-red-700 p-2" data-line="${lineId}"> |
|
<i class="fas fa-trash-alt"></i> |
|
</button> |
|
</div> |
|
`; |
|
dataLinesContainer.insertAdjacentHTML('beforeend', lineHtml); |
|
|
|
|
|
updatePreview(); |
|
}); |
|
|
|
|
|
dataLinesContainer.addEventListener('click', function(e) { |
|
if (e.target.closest('.delete-line-btn')) { |
|
const btn = e.target.closest('.delete-line-btn'); |
|
const lineId = btn.getAttribute('data-line'); |
|
document.getElementById(lineId).remove(); |
|
|
|
|
|
updatePreview(); |
|
} |
|
}); |
|
|
|
|
|
function updatePreview() { |
|
const tablePreview = document.getElementById('table-preview'); |
|
const jsonPreview = document.getElementById('json-preview'); |
|
const lines = document.querySelectorAll('.input-line'); |
|
|
|
if (lines.length === 0) { |
|
tablePreview.innerHTML = '<p class="text-gray-500 text-sm">No data to preview. Add some records in the main window.</p>'; |
|
jsonPreview.innerHTML = '<p class="text-gray-500 text-sm">No data to preview. Add some records in the main window.</p>'; |
|
return; |
|
} |
|
|
|
|
|
let tableHtml = ` |
|
<div class="overflow-x-auto"> |
|
<table class="min-w-full divide-y divide-gray-200 text-sm"> |
|
<thead class="bg-gray-50"> |
|
<tr> |
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th> |
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Name</th> |
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Value</th> |
|
</tr> |
|
</thead> |
|
<tbody class="bg-white divide-y divide-gray-200"> |
|
`; |
|
|
|
|
|
let jsonData = []; |
|
|
|
lines.forEach(line => { |
|
const inputs = line.querySelectorAll('input'); |
|
const id = inputs[0].value || 'empty'; |
|
const name = inputs[1].value || 'empty'; |
|
const value = inputs[2].value || 'empty'; |
|
|
|
|
|
tableHtml += ` |
|
<tr> |
|
<td class="px-4 py-2 whitespace-nowrap">${id}</td> |
|
<td class="px-4 py-2 whitespace-nowrap">${name}</td> |
|
<td class="px-4 py-2 whitespace-nowrap">${value}</td> |
|
</tr> |
|
`; |
|
|
|
|
|
jsonData.push({ |
|
id: id, |
|
name: name, |
|
value: value |
|
}); |
|
}); |
|
|
|
tableHtml += ` |
|
</tbody> |
|
</table> |
|
</div> |
|
`; |
|
|
|
tablePreview.innerHTML = tableHtml; |
|
jsonPreview.textContent = JSON.stringify(jsonData, null, 2); |
|
} |
|
|
|
|
|
dataLinesContainer.addEventListener('input', function(e) { |
|
if (e.target.tagName === 'INPUT') { |
|
updatePreview(); |
|
} |
|
}); |
|
|
|
|
|
document.getElementById('toggle-key').addEventListener('click', function() { |
|
const keyInput = document.getElementById('api-key'); |
|
const icon = this.querySelector('i'); |
|
if (keyInput.type === 'password') { |
|
keyInput.type = 'text'; |
|
icon.classList.replace('fa-eye', 'fa-eye-slash'); |
|
} else { |
|
keyInput.type = 'password'; |
|
icon.classList.replace('fa-eye-slash', 'fa-eye'); |
|
} |
|
}); |
|
|
|
|
|
document.getElementById('test-connection').addEventListener('click', function() { |
|
const endpoint = document.getElementById('api-endpoint').value; |
|
const apiKey = document.getElementById('api-key').value; |
|
const responseContainer = document.getElementById('api-response'); |
|
|
|
responseContainer.classList.remove('hidden'); |
|
responseContainer.innerHTML = '<div class="text-blue-500">Testing connection to PrivFingaa API...</div>'; |
|
|
|
|
|
setTimeout(() => { |
|
if (endpoint && apiKey) { |
|
responseContainer.innerHTML = ` |
|
<div class="text-green-500">✓ Successfully connected to PrivFingaa API</div> |
|
<div class="text-gray-500 mt-2">Endpoint: ${endpoint}</div> |
|
<div class="text-gray-500">API Key: ${'*'.repeat(apiKey.length)}</div> |
|
`; |
|
} else { |
|
responseContainer.innerHTML = '<div class="text-red-500">✗ Connection failed. Please check your endpoint and API key.</div>'; |
|
} |
|
}, 1500); |
|
}); |
|
|
|
|
|
document.getElementById('sync-data').addEventListener('click', function() { |
|
const responseContainer = document.getElementById('api-response'); |
|
responseContainer.classList.remove('hidden'); |
|
responseContainer.innerHTML = '<div class="text-blue-500">Syncing data with PrivFingaa API...</div>'; |
|
|
|
|
|
setTimeout(() => { |
|
responseContainer.innerHTML = ` |
|
<div class="text-green-500">✓ Data sync completed successfully</div> |
|
<div class="text-gray-500 mt-2">Last sync: ${new Date().toLocaleString()}</div> |
|
`; |
|
}, 2000); |
|
}); |
|
|
|
|
|
document.getElementById('export-json').addEventListener('click', function() { |
|
const lines = document.querySelectorAll('.input-line'); |
|
if (lines.length === 0) { |
|
alert('No data to export'); |
|
return; |
|
} |
|
|
|
let jsonData = []; |
|
lines.forEach(line => { |
|
const inputs = line.querySelectorAll('input'); |
|
jsonData.push({ |
|
id: inputs[0].value || '', |
|
name: inputs[1].value || '', |
|
value: inputs[2].value || '' |
|
}); |
|
}); |
|
|
|
const blob = new Blob([JSON.stringify(jsonData, null, 2)], { type: 'application/json' }); |
|
const url = URL.createObjectURL(blob); |
|
const a = document.createElement('a'); |
|
a.href = url; |
|
a.download = 'privfingaa-data.json'; |
|
document.body.appendChild(a); |
|
a.click(); |
|
document.body.removeChild(a); |
|
URL.revokeObjectURL(url); |
|
}); |
|
|
|
|
|
document.getElementById('export-csv').addEventListener('click', function() { |
|
const lines = document.querySelectorAll('.input-line'); |
|
if (lines.length === 0) { |
|
alert('No data to export'); |
|
return; |
|
} |
|
|
|
let csvContent = "ID,Name,Value\n"; |
|
lines.forEach(line => { |
|
const inputs = line.querySelectorAll('input'); |
|
csvContent += `"${inputs[0].value || ''}","${inputs[1].value || ''}","${inputs[2].value || ''}"\n`; |
|
}); |
|
|
|
const blob = new Blob([csvContent], { type: 'text/csv' }); |
|
const url = URL.createObjectURL(blob); |
|
const a = document.createElement('a'); |
|
a.href = url; |
|
a.download = 'privfingaa-data.csv'; |
|
document.body.appendChild(a); |
|
a.click(); |
|
document.body.removeChild(a); |
|
URL.revokeObjectURL(url); |
|
}); |
|
|
|
|
|
document.getElementById('clear-all').addEventListener('click', function() { |
|
if (confirm('Are you sure you want to clear all data?')) { |
|
document.querySelector('.data-lines').innerHTML = ''; |
|
updatePreview(); |
|
} |
|
}); |
|
|
|
|
|
document.getElementById('validate-data').addEventListener('click', function() { |
|
const lines = document.querySelectorAll('.input-line'); |
|
let valid = true; |
|
|
|
lines.forEach(line => { |
|
const inputs = line.querySelectorAll('input'); |
|
if (!inputs[0].value || !inputs[1].value || !inputs[2].value) { |
|
line.style.backgroundColor = 'rgba(239, 68, 68, 0.1)'; |
|
valid = false; |
|
} else { |
|
line.style.backgroundColor = 'rgba(16, 185, 129, 0.1)'; |
|
} |
|
}); |
|
|
|
if (lines.length === 0) { |
|
alert('No data to validate'); |
|
} else if (valid) { |
|
alert('All records are valid!'); |
|
} else { |
|
alert('Some records are incomplete. Invalid records are highlighted in red.'); |
|
} |
|
}); |
|
|
|
|
|
document.getElementById('enable-encryption').addEventListener('change', function() { |
|
const container = document.getElementById('encryption-key-container'); |
|
if (this.checked) { |
|
container.classList.remove('hidden'); |
|
} else { |
|
container.classList.add('hidden'); |
|
} |
|
}); |
|
|
|
|
|
document.getElementById('save-settings').addEventListener('click', function() { |
|
alert('Settings saved successfully!'); |
|
}); |
|
|
|
|
|
document.getElementById('refresh-btn').addEventListener('click', function() { |
|
const statusIndicator = document.getElementById('connection-status'); |
|
const statusText = document.getElementById('connection-text'); |
|
|
|
statusText.textContent = 'Refreshing connection...'; |
|
|
|
|
|
setTimeout(() => { |
|
statusIndicator.className = 'status-indicator status-connected'; |
|
statusText.textContent = 'Connected to PrivFingaa API'; |
|
}, 1000); |
|
}); |
|
|
|
|
|
setTimeout(() => { |
|
addLineBtn.click(); |
|
addLineBtn.click(); |
|
addLineBtn.click(); |
|
|
|
|
|
const inputs = document.querySelectorAll('.input-line input'); |
|
if (inputs.length >= 3) { |
|
inputs[0].value = 'user_001'; |
|
inputs[1].value = 'John Doe'; |
|
inputs[2].value = 'admin'; |
|
|
|
inputs[3].value = 'user_002'; |
|
inputs[4].value = 'Jane Smith'; |
|
inputs[5].value = 'editor'; |
|
|
|
inputs[6].value = 'user_003'; |
|
inputs[7].value = 'Bob Johnson'; |
|
inputs[8].value = 'viewer'; |
|
|
|
updatePreview(); |
|
} |
|
}, 300); |
|
}); |
|
</script> |
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=privateuserh/privfingaa-data-vbeta1-01" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
</html> |