This commit is contained in:
Tour
2025-12-10 09:02:15 +01:00
parent 683823de6f
commit e85412e71f

View File

@@ -23,7 +23,7 @@
.control-panel {
background: #f3f4f6; padding: 20px; border-radius: 15px;
margin-bottom: 30px; border: 2px dashed #9ca3af;
margin-bottom: 30px; border: 2px dashed #9ca3af; position: relative;
}
.control-panel h3 { margin-bottom: 10px; color: #667eea; }
.control-textarea {
@@ -35,6 +35,13 @@
font-size: 0.85em; color: #6b7280; font-family: monospace;
background: white; padding: 10px; border-radius: 5px; margin-top: 10px;
}
.save-indicator {
position: absolute; top: 10px; right: 10px;
background: #10b981; color: white; padding: 5px 10px;
border-radius: 5px; font-size: 0.8em; opacity: 0;
transition: opacity 0.3s ease;
}
.save-indicator.show { opacity: 1; }
.progress-section {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
@@ -54,6 +61,7 @@
.project-card.dual-boot { border-left-color: #f59e0b; }
.project-card.ai { border-left-color: #10b981; }
.project-card.autocomplete { border-left-color: #ef4444; }
.project-card.quick-actions { border-left-color: #8b5cf6; background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); }
.project-header { display: flex; align-items: center; margin-bottom: 20px; }
.project-icon { font-size: 2em; margin-right: 15px; }
@@ -64,6 +72,7 @@
.task-item:hover { background: #f9fafb; border-radius: 5px; margin: 0 -10px; padding: 10px; }
.task-checkbox { width: 18px; height: 18px; margin-right: 12px; cursor: pointer; accent-color: #667eea; }
.task-text { flex: 1; }
.task-text.completed { text-decoration: line-through; opacity: 0.6; }
.task-status { font-size: 0.85em; padding: 3px 10px; border-radius: 12px; margin-left: 10px; font-weight: 500; }
.status-todo { background: #f3f4f6; color: #666; }
.status-progress { background: #dbeafe; color: #1d4ed8; }
@@ -74,7 +83,6 @@
.priority-medium { background: #f59e0b; }
.priority-low { background: #10b981; }
.quick-actions { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); padding: 25px; border-radius: 15px; margin-bottom: 30px; border-left: 5px solid #f59e0b; }
.action-list { list-style: none; }
.action-list li { padding: 10px 0; display: flex; align-items: center; }
.action-checkbox { margin-right: 12px; width: 18px; height: 18px; cursor: pointer; accent-color: #f59e0b; }
@@ -100,24 +108,12 @@
<div class="control-panel">
<h3>🎮 Control Panel - Edit tasks below:</h3>
<div class="save-indicator" id="saveIndicator">✓ Saved to browser</div>
<textarea class="control-textarea" id="taskControl" placeholder="Enter tasks in format: PROJECT|Task description|status|priority|notes
Click 'Update Dashboard' to apply changes...">DEFRAG|App initialization|todo||local
DEFRAG|In-screen dynamic console|progress||local
DEFRAG|Disk cleanup tool integration|todo||local
DEFRAG|Athena monitoring dashboard|todo||athena
DUAL_BOOT|Partition disk space (50GB+)|todo|high|local
DUAL_BOOT|Install Ubuntu dual boot|todo|high|local
DUAL_BOOT|Configure boot loader|todo|medium|local
AI|Auctiora: Set up object detection pipeline|todo||local
AI|Auctiora: Test model inference|todo||local
AI|Scraper: Configure for mobile network|todo||mobile
AI|Scraper: Test connectivity & performance|todo||mobile
AUTOCOMPLETE|Deploy autocomplete API endpoint|todo||athena
AUTOCOMPLETE|Test integration with existing infrastructure|todo||athena
QUICK_ACTIONS|Free up disk space (50GB+)|todo||local
QUICK_ACTIONS|Install dual boot setup|todo||local
QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
<button onclick="updateDashboard()" style="background: #667eea; color: white; padding: 10px 20px; border: none; border-radius: 8px; cursor: pointer; font-weight: 600;">🔄 Update Dashboard</button>
Click 'Update Dashboard' to apply changes..."></textarea>
<button onclick="updateDashboard()" style="background: #667eea; color: white; padding: 10px 20px; border: none; border-radius: 8px; cursor: pointer; font-weight: 600; margin-right: 10px;">🔄 Update Dashboard</button>
<button onclick="resetToDefault()" style="background: #ef4444; color: white; padding: 10px 20px; border: none; border-radius: 8px; cursor: pointer; font-weight: 600; margin-right: 10px;">🔄 Reset to Default</button>
<button onclick="exportTasks()" style="background: #10b981; color: white; padding: 10px 20px; border: none; border-radius: 8px; cursor: pointer; font-weight: 600;">📥 Export Tasks</button>
<div class="control-hint">
Format: PROJECT|Task|status|priority|notes<br>
PROJECT: DEFRAG, DUAL_BOOT, AI, AUTOCOMPLETE, QUICK_ACTIONS<br>
@@ -181,13 +177,51 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
</div>
<script>
// Initial task data
// Default task data
const DEFAULT_TASKS = `DEFRAG|App initialization|todo||local
DEFRAG|In-screen dynamic console|progress||local
DEFRAG|Disk cleanup tool integration|todo||local
DEFRAG|Athena monitoring dashboard|todo||athena
DUAL_BOOT|Partition disk space (50GB+)|todo|high|local
DUAL_BOOT|Install Ubuntu dual boot|todo|high|local
DUAL_BOOT|Configure boot loader|todo|medium|local
AI|Auctiora: Set up object detection pipeline|todo||local
AI|Auctiora: Test model inference|todo||local
AI|Scraper: Configure for mobile network|todo||mobile
AI|Scraper: Test connectivity & performance|todo||mobile
AUTOCOMPLETE|Deploy autocomplete API endpoint|todo||athena
AUTOCOMPLETE|Test integration with existing infrastructure|todo||athena
QUICK_ACTIONS|Free up disk space (50GB+)|todo||local
QUICK_ACTIONS|Install dual boot setup|todo||local
QUICK_ACTIONS|Migrate development environment|todo||local`;
let allTasks = [];
// Load from localStorage or use defaults
function loadTasks() {
const stored = localStorage.getItem('dashboardTasks');
if (stored) {
document.getElementById('taskControl').value = stored;
} else {
document.getElementById('taskControl').value = DEFAULT_TASKS;
saveToLocalStorage(); // Save defaults on first load
}
}
// Save to localStorage with visual feedback
function saveToLocalStorage() {
const value = document.getElementById('taskControl').value;
localStorage.setItem('dashboardTasks', value);
// Show save indicator
const indicator = document.getElementById('saveIndicator');
indicator.classList.add('show');
setTimeout(() => indicator.classList.remove('show'), 2000);
}
// Parse task data from control textarea
function parseTasks() {
const textarea = document.getElementById('taskControl');
const lines = textarea.value.trim().split('\n');
const lines = document.getElementById('taskControl').value.trim().split('\n');
allTasks = [];
lines.forEach((line, index) => {
@@ -226,6 +260,9 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
// Update control textarea
updateControlTextarea();
// Save to localStorage
saveToLocalStorage();
// Re-render dashboard
renderDashboard();
}
@@ -282,7 +319,7 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
<input type="checkbox" class="action-checkbox"
${task.status === 'completed' ? 'checked' : ''}
onchange="toggleTask(${task.id})">
<span style="${task.status === 'completed' ? 'text-decoration: line-through; opacity: 0.6;' : ''}">${task.description}</span>
<span class="${task.status === 'completed' ? 'task-text completed' : 'task-text'}">${task.description}</span>
</li>
`).join('')}
</ul>
@@ -312,7 +349,7 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
<input type="checkbox" class="task-checkbox"
${task.status === 'completed' ? 'checked' : ''}
onchange="toggleTask(${task.id})">
<span class="task-text">${task.description.replace('Auctiora: ', '')}</span>
<span class="${task.status === 'completed' ? 'task-text completed' : 'task-text'}">${task.description.replace('Auctiora: ', '')}</span>
<span class="task-status status-${task.status}">${task.status.toUpperCase()}</span>
</div>
`).join('')}
@@ -323,7 +360,7 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
<input type="checkbox" class="task-checkbox"
${task.status === 'completed' ? 'checked' : ''}
onchange="toggleTask(${task.id})">
<span class="task-text">${task.description.replace('Scraper: ', '')}</span>
<span class="${task.status === 'completed' ? 'task-text completed' : 'task-text'}">${task.description.replace('Scraper: ', '')}</span>
<span class="task-status status-${task.status}">${task.status.toUpperCase()}</span>
</div>
`).join('')}
@@ -342,7 +379,7 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
<input type="checkbox" class="task-checkbox"
${task.status === 'completed' ? 'checked' : ''}
onchange="toggleTask(${task.id})">
<span class="task-text">${task.description}</span>
<span class="${task.status === 'completed' ? 'task-text completed' : 'task-text'}">${task.description}</span>
<span class="task-status status-${task.status}">${task.status.toUpperCase()}</span>
${task.priority ? `<span class="priority-badge priority-${task.priority}" title="${task.priority} priority"></span>` : ''}
${task.notes ? `<span style="margin-left: 8px; font-size: 0.85em; color: #6b7280;">(${task.notes})</span>` : ''}
@@ -358,11 +395,36 @@ QUICK_ACTIONS|Migrate development environment|todo||local</textarea>
// Update dashboard from control textarea
function updateDashboard() {
saveToLocalStorage();
renderDashboard();
}
// Reset to default tasks
function resetToDefault() {
if (confirm('Are you sure you want to reset to default tasks? This will overwrite your current data.')) {
document.getElementById('taskControl').value = DEFAULT_TASKS;
saveToLocalStorage();
renderDashboard();
}
}
// Export tasks to clipboard
function exportTasks() {
const tasks = document.getElementById('taskControl').value;
navigator.clipboard.writeText(tasks).then(() => {
const indicator = document.getElementById('saveIndicator');
indicator.textContent = '✓ Copied to clipboard!';
indicator.classList.add('show');
setTimeout(() => {
indicator.textContent = '✓ Saved to browser';
indicator.classList.remove('show');
}, 2000);
});
}
// Initialize on load
window.onload = function() {
loadTasks();
renderDashboard();
};
</script>