Working on ui

This commit is contained in:
Your Name
2025-09-24 14:05:19 -04:00
parent 6f46fce625
commit f10ee66972
3 changed files with 105 additions and 47 deletions

View File

@@ -48,7 +48,7 @@
<div><strong>Events in Queue:</strong> <span id="events-queued">0</span></div>
<div><strong>Info Status:</strong> <span id="thrower-info-status">Loading...</span></div>
<div><strong>Last Updated:</strong> <span id="thrower-info-updated">Never</span></div>
<div><strong>Refresh Rate:</strong> <span id="thrower-info-refresh">60 seconds</span></div>
<div><strong>Refresh Rate:</strong> <span id="thrower-info-refresh">300 seconds</span></div>
</div>
</div>
@@ -71,7 +71,7 @@
<div class="input-group">
<label>Add New Relay:</label>
<div class="add-relay-form">
<input type="url" id="new-relay-url" placeholder="wss://relay.example.com">
<input type="url" id="new-relay-url" placeholder="wss://relay.example.com (or comma-separated list)">
<select id="new-relay-type">
<option value="">Both</option>
<option value="read">Read</option>
@@ -151,7 +151,7 @@
</div>
<div class="input-group">
<label for="edit-refresh-rate">Refresh Rate (seconds):</label>
<input type="number" id="edit-refresh-rate" placeholder="60" value="60" min="10" max="3600">
<input type="number" id="edit-refresh-rate" placeholder="300" value="300" min="10" max="3600">
</div>
<div class="input-group">
<label for="edit-thrower-content">Additional Content (optional):</label>
@@ -616,35 +616,95 @@
}
// Add new relay
// Add new relay (supports comma-separated list)
function addRelay() {
const url = document.getElementById('new-relay-url').value.trim();
const input = document.getElementById('new-relay-url').value.trim();
const type = document.getElementById('new-relay-type').value;
if (!url) {
if (!input) {
showStatus('relay-status', 'Please enter a relay URL', 'error');
return;
}
if (!url.startsWith('wss://') && !url.startsWith('ws://')) {
showStatus('relay-status', 'Relay URL must start with wss:// or ws://', 'error');
return;
}
// Check if input contains commas (multiple URLs)
const urls = input.includes(',') ?
input.split(',').map(url => url.trim()).filter(url => url.length > 0) :
[input];
// Check for duplicates
if (currentRelays.some(r => r.url === url)) {
showStatus('relay-status', 'Relay already exists', 'error');
return;
}
const results = {
added: [],
failed: [],
duplicates: []
};
currentRelays.push({ url, type });
// Process each URL
urls.forEach(url => {
// Validate URL format
if (!url.startsWith('wss://') && !url.startsWith('ws://')) {
results.failed.push({ url, reason: 'Must start with wss:// or ws://' });
return;
}
// Check for duplicates
if (currentRelays.some(r => r.url === url)) {
results.duplicates.push(url);
return;
}
// Add relay
currentRelays.push({ url, type, authStatus: 'unknown', lastTested: null });
results.added.push(url);
});
// Update display
displayRelayList();
// Clear form
document.getElementById('new-relay-url').value = '';
document.getElementById('new-relay-type').value = '';
showStatus('relay-status', 'Relay added (remember to save)', 'info');
// Provide detailed feedback
const messages = [];
if (results.added.length > 0) {
const typeText = type ? ` (${type === 'read' ? 'Read only' : type === 'write' ? 'Write only' : 'Both'})` : ' (Both)';
if (results.added.length === 1) {
messages.push(`✅ Added: ${results.added[0]}${typeText}`);
} else {
messages.push(`✅ Added ${results.added.length} relays${typeText}:`);
results.added.forEach(url => messages.push(`${url}`));
}
}
if (results.duplicates.length > 0) {
if (results.duplicates.length === 1) {
messages.push(`⚠️ Duplicate skipped: ${results.duplicates[0]}`);
} else {
messages.push(`⚠️ ${results.duplicates.length} duplicates skipped:`);
results.duplicates.forEach(url => messages.push(`${url}`));
}
}
if (results.failed.length > 0) {
if (results.failed.length === 1) {
messages.push(`❌ Failed: ${results.failed[0].url} (${results.failed[0].reason})`);
} else {
messages.push(`${results.failed.length} failed:`);
results.failed.forEach(item => messages.push(`${item.url} (${item.reason})`));
}
}
// Show comprehensive status
const statusMessage = messages.join('\n');
const statusType = results.added.length > 0 ? 'info' :
results.failed.length > 0 ? 'error' : 'info';
// Add reminder to save if any were added
const finalMessage = results.added.length > 0 ?
statusMessage + '\n\n💾 Remember to save your relay configuration!' :
statusMessage;
showStatus('relay-status', finalMessage, statusType);
}
// Remove relay
@@ -1067,7 +1127,7 @@
version: '1.0.0',
privacyPolicy: '',
termsOfService: '',
refreshRate: 60,
refreshRate: 300,
content: event.content || ''
};
@@ -1084,7 +1144,7 @@
else if (tag[0] === 'version') currentThrowerInfo.version = tag[1] || '1.0.0';
else if (tag[0] === 'privacy_policy') currentThrowerInfo.privacyPolicy = tag[1] || '';
else if (tag[0] === 'terms_of_service') currentThrowerInfo.termsOfService = tag[1] || '';
else if (tag[0] === 'refresh_rate') currentThrowerInfo.refreshRate = parseInt(tag[1]) || 60;
else if (tag[0] === 'refresh_rate') currentThrowerInfo.refreshRate = parseInt(tag[1]) || 300;
});
lastThrowerInfoPublish = event.created_at;
@@ -1103,7 +1163,7 @@
version: '1.0.0',
privacyPolicy: '',
termsOfService: '',
refreshRate: 60,
refreshRate: 300,
content: ''
};
displayThrowerInfo(currentThrowerInfo);
@@ -1148,7 +1208,7 @@
document.getElementById('edit-version').value = currentThrowerInfo.version || '1.0.0';
document.getElementById('edit-privacy-policy').value = currentThrowerInfo.privacyPolicy || '';
document.getElementById('edit-terms-service').value = currentThrowerInfo.termsOfService || '';
document.getElementById('edit-refresh-rate').value = currentThrowerInfo.refreshRate || 60;
document.getElementById('edit-refresh-rate').value = currentThrowerInfo.refreshRate || 300;
document.getElementById('edit-thrower-content').value = currentThrowerInfo.content || '';
}
@@ -1172,7 +1232,7 @@
const version = document.getElementById('edit-version').value.trim();
const privacyPolicy = document.getElementById('edit-privacy-policy').value.trim();
const termsOfService = document.getElementById('edit-terms-service').value.trim();
const refreshRate = parseInt(document.getElementById('edit-refresh-rate').value) || 60;
const refreshRate = parseInt(document.getElementById('edit-refresh-rate').value) || 300;
const content = document.getElementById('edit-thrower-content').value.trim();
try {