Remove uneeded template
This commit is contained in:
parent
19c79427ed
commit
814c114dcd
1 changed files with 0 additions and 146 deletions
|
@ -1,146 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<link rel="stylesheet" type="text/css"
|
|
||||||
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" />
|
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
|
||||||
<title>Kanban Board</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container mt-4">
|
|
||||||
<h1>Kanban Board</h1>
|
|
||||||
<form action="/update-task-status" method="POST" class="my-4">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="title" class="form-label">Task Title</label>
|
|
||||||
<input type="text" class="form-control" id="title" name="title" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="description" class="form-label">Task Description</label>
|
|
||||||
<textarea class="form-control" id="description" name="description" required></textarea>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="status" class="form-label">Status</label>
|
|
||||||
<select class="form-select" id="status" name="status" required>
|
|
||||||
<option value="todo">To Do</option>
|
|
||||||
<option value="in_progress">In Progress</option>
|
|
||||||
<option value="done">Done</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<input type="hidden" name="task_id" id="task_id">
|
|
||||||
<button type="submit" class="btn btn-primary" onclick="updateTaskStatus(event)">Add Task</button>
|
|
||||||
</form>
|
|
||||||
<h2>Tasks:</h2>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col" id="todo">
|
|
||||||
<h3>To Do</h3>
|
|
||||||
<div class="sortable" data-status="todo">
|
|
||||||
{{ range .Tasks }}
|
|
||||||
{{ if eq .Status "todo" }}
|
|
||||||
<div class="card my-2" data-id="{{ .ID }}">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">{{ .Title }}</h5>
|
|
||||||
<p class="card-text">{{ .Description }}</p>
|
|
||||||
<p class="card-text"><strong>Status:</strong> {{ .Status }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="in-progress">
|
|
||||||
<h3>In Progress</h3>
|
|
||||||
<div class="sortable" data-status="in_progress">
|
|
||||||
{{ range .Tasks }}
|
|
||||||
{{ if eq .Status "in_progress" }}
|
|
||||||
<div class="card my-2" data-id="{{ .ID }}">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">{{ .Title }}</h5>
|
|
||||||
<p class="card-text">{{ .Description }}</p>
|
|
||||||
<p class="card-text"><strong>Status:</strong> {{ .Status }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col" id="done">
|
|
||||||
<h3>Done</h3>
|
|
||||||
<div class="sortable" data-status="done">
|
|
||||||
{{ range .Tasks }}
|
|
||||||
{{ if eq .Status "done" }}
|
|
||||||
<div class="card my-2" data-id="{{ .ID }}">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">{{ .Title }}</h5>
|
|
||||||
<p class="card-text">{{ .Description }}</p>
|
|
||||||
<p class="card-text"><strong>Status:</strong> {{ .Status }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.13.0/Sortable.min.js"></script>
|
|
||||||
<script>
|
|
||||||
function updateTaskStatus(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
var form = event.target.closest('form');
|
|
||||||
var taskId = form.querySelector('#task_id').value;
|
|
||||||
var newStatus = form.querySelector('#status').value;
|
|
||||||
fetch(form.action, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ id: taskId, status: newStatus })
|
|
||||||
}).then(function () {
|
|
||||||
// Update the task status in the card
|
|
||||||
var card = form.closest('.card');
|
|
||||||
card.querySelector('.card-text:last-child').innerHTML = '<strong>Status:</strong> ' + newStatus;
|
|
||||||
}).catch(function (error) {
|
|
||||||
console.error('Error:', error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
var sortableContainers = [].slice.call(document.querySelectorAll('.sortable'));
|
|
||||||
sortableContainers.forEach(function (container) {
|
|
||||||
new Sortable(container, {
|
|
||||||
group: 'kanban',
|
|
||||||
draggable: '.card',
|
|
||||||
animation: 150,
|
|
||||||
handle: '.card',
|
|
||||||
onEnd: function (evt) {
|
|
||||||
var taskId = evt.item.getAttribute('data-id');
|
|
||||||
var newStatus = evt.to.getAttribute('data-status');
|
|
||||||
|
|
||||||
// Update the task status in the backend
|
|
||||||
fetch('/update-task-status', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ id: taskId, status: newStatus })
|
|
||||||
}).then(function (response) {
|
|
||||||
if (response.ok) {
|
|
||||||
// Update the task status in the card
|
|
||||||
evt.item.querySelector('.card-text:last-child').innerHTML = '<strong>Status:</strong> ' + newStatus;
|
|
||||||
} else {
|
|
||||||
console.error('Failed to update task status:', response.status);
|
|
||||||
}
|
|
||||||
}).catch(function (error) {
|
|
||||||
console.error('Error:', error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
Loading…
Reference in a new issue