A web TODO list application
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

91 lines
2.8 KiB

{{ template "base" . }}
{{ define "content" }}
<form action="javascript:void(0);">
<div class="container text-center">
<div class="row">
<div class="col">
<input type="text" class="form-control" id="new-todo-text" placeholder="TODO text">
</div>
<div class="col">
<button id="new-todo-submit" class="btn btn-primary">Add</button>
</div>
</div>
</div>
</form>
<div class="container text-center" style="margin-top: 40px;">
<table id="todos" class="table table-hover"></table>
</div>
<script>
document.addEventListener('DOMContentLoaded', async function() {
let username = getUsername();
let password = getUserPassword();
document.getElementById("new-todo-text").focus();
// Make "Add" button to send
document.getElementById("new-todo-submit").addEventListener("click", async (event) => {
let newTodoTextInput = document.getElementById("new-todo-text");
let newTodoText = newTodoTextInput.value;
if (newTodoText.length < 1) {
newTodoTextInput.setCustomValidity("At least one character is needed!");
return;
} else {
newTodoTextInput.setCustomValidity("");
}
newTodoTextInput.value = "";
// let newTodoDueInput = document.getElementById("new-todo-due");
// let newTodoDue = newTodoDueInput.value;
// newTodoDueInput.value = 0;
// Make a request
let response = await post_new_todo(username, password, {text: newTodoText});
if (response.ok) {
location.reload();
}
});
// Fetch and display TODOs
response = await get_todos(username, password);
let todosJson = await response.json();
let todos = [];
let completeButtonIDs = [];
if (response.ok && todosJson != null) {
let todosDiv = document.getElementById("todos");
todosJson.forEach((item) => {
// Do not work with completed TODOs yet
if (item.isDone == true) {
return;
}
todos.push(item);
let todoCompleteBtnID = "btn-complete-" + String(item.id);
todosDiv.innerHTML += "<tr><td>" + item.text + "</td>" +
"<td><button class='btn btn-success' id='" + todoCompleteBtnID + "'>" +
"Done</button></td></tr>";
completeButtonIDs.push(todoCompleteBtnID);
});
}
for (let i = 0; i < completeButtonIDs.length; i++) {
document.getElementById(completeButtonIDs[i]).addEventListener("click", async (event) => {
response = await delete_todo(username, password, todos[i].id);
if (response.ok) {
location.reload();
}
});
}
}, false)
</script>
{{ end }}