diff --git a/handler.go b/handler.go index 211cfc3..deec36f 100644 --- a/handler.go +++ b/handler.go @@ -70,3 +70,39 @@ func handleToggleTask(w http.ResponseWriter, r *http.Request) { } tmpl.ExecuteTemplate(w, "CompletedCount", map[string]any{"Count": completedCount, "SwapOOB": true}) } + +func handleDeleteTask(w http.ResponseWriter, r *http.Request) { + id, err := strconv.Atoi(chi.URLParam(r, "id")) + if err != nil { + log.Printf("error parsing id into int %v", err) + return + } + err = deleteTask(r.Context(), id) + if err != nil { + log.Printf("error deleting task %v", err) + } + count, err := fetchCount() + if err != nil { + log.Printf("error fetching count %v", err) + } + completedCount, err := fetchCompletedCount() + if err != nil { + log.Printf("error fetching completed count %v", err) + } + tmpl.ExecuteTemplate(w, "TotalCount", map[string]any{"Count": count, "SwapOOB": true}) + tmpl.ExecuteTemplate(w, "CompletedCount", map[string]any{"Count": completedCount, "SwapOOB": true}) +} + +func handleEditTask(w http.ResponseWriter, r *http.Request) { + id, err := strconv.Atoi(chi.URLParam(r, "id")) + if err != nil { + log.Printf("error parsing id into int %v", err) + return + } + task, err := fetchTask(id) + if err != nil { + log.Printf("error fetching task with id %d %v", id, err) + return + } + tmpl.ExecuteTemplate(w, "Item", map[string]any{"Item": task, "Editing": true}) +} diff --git a/main.go b/main.go index 084f397..fb0173a 100644 --- a/main.go +++ b/main.go @@ -28,5 +28,7 @@ func main() { r.Get("/", handleGetTasks) r.Post("/tasks", handleCreateTask) r.Put("/tasks/{id}/toggle", handleToggleTask) + r.Delete("/tasks/{id}", handleDeleteTask) + r.Get("/tasks/{id}/edit", handleEditTask) http.ListenAndServe("localhost:3000", r) } diff --git a/sqlite3.db b/sqlite3.db index 32c61a4..ea8eedb 100644 Binary files a/sqlite3.db and b/sqlite3.db differ diff --git a/static/index.css b/static/index.css index 070a997..1ac1797 100644 --- a/static/index.css +++ b/static/index.css @@ -534,6 +534,27 @@ video { --tw-backdrop-sepia: ; } +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.inset-y-0 { + top: 0px; + bottom: 0px; +} + +.right-2 { + right: 0.5rem; +} + +.right-2\.5 { + right: 0.625rem; +} + .mx-auto { margin-left: auto; margin-right: auto; @@ -595,6 +616,10 @@ video { max-width: 768px; } +.flex-1 { + flex: 1 1 0%; +} + .cursor-move { cursor: move; } @@ -696,6 +721,26 @@ video { padding-bottom: 0.625rem; } +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +.px-2\.5 { + padding-left: 0.625rem; + padding-right: 0.625rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-1\.5 { + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} + .text-center { text-align: center; } diff --git a/templates/form.html b/templates/form.html index f860484..7283268 100644 --- a/templates/form.html +++ b/templates/form.html @@ -39,11 +39,47 @@ /> -

{{ .Item.Title }}

+ {{ if .Editing }} +
+
+ + + + +
+
+ {{ else }} +

{{ .Item.Title }}

+ {{ end }}
- -