kanban
This commit is contained in:
114
public/kan.html
114
public/kan.html
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user