Todo/pages/templates/root.templ

111 lines
4.2 KiB
Plaintext
Raw Normal View History

2024-08-18 04:29:25 +00:00
package templates
import (
"fmt"
"github.com/Cameron-Reed1/todo-web/types"
)
templ RootPage() {
<!Doctype HTML>
<html lang="en-US">
<head>
<title>Todo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/css/styles.css"/>
2024-08-19 22:02:45 +00:00
<script src="/js/script.js"></script>
2024-08-18 04:29:25 +00:00
<script src="/js/lib/htmx.min.js"></script>
<!-- Font Awesome -->
<script src="https://kit.fontawesome.com/469cdddb31.js" crossorigin="anonymous"></script>
</head>
<body>
<nav>
<div id="nav-container">
<div id="nav-left">
<a id="new-button" href="#create-item">New</a>
</div>
<div id="nav-center"></div>
<div id="nav-right"></div>
</div>
</nav>
<div id="main-content">
<div id="lists">
<div id="overdue-list" class="todo-list">
<div class="todo-list-title">Overdue</div>
<div class="todo-list-items" hx-get="/overdue" hx-trigger="load" hx-swap="outerHTML"></div>
2024-08-19 22:02:45 +00:00
<div class="new-item"></div>
2024-08-18 04:29:25 +00:00
</div>
<div id="today-list" class="todo-list">
<div class="todo-list-title">Today</div>
<div class="todo-list-items" hx-get="/today" hx-trigger="load" hx-swap="outerHTML"></div>
2024-08-19 22:02:45 +00:00
<div class="new-item"></div>
2024-08-18 04:29:25 +00:00
</div>
<div id="upcoming-list" class="todo-list">
<div class="todo-list-title">Upcoming</div>
<div class="todo-list-items" hx-get="/upcoming" hx-trigger="load" hx-swap="outerHTML"></div>
2024-08-19 22:02:45 +00:00
<div class="new-item"></div>
2024-08-18 04:29:25 +00:00
</div>
</div>
2024-08-19 22:02:45 +00:00
<form id="create-item" hx-post="/new" hx-swap="none">
2024-08-18 04:29:25 +00:00
<div id="create-item-title">Create new Todo</div>
<div id="create-item-form-container">
<div class="create-item-form-column">
<div class="create-item-form-column">
<label for="name">Name</label>
<br/>
<input type="text" name="name"/>
<br/>
<label for="start">Start</label>
<br/>
2024-08-19 22:02:45 +00:00
<input id="create-item-form-start" name="start" type="datetime-local"/>
2024-08-18 04:29:25 +00:00
<br/>
<label for="due">Due</label>
<br/>
2024-08-19 22:02:45 +00:00
<input id="create-item-form-due" name="due" type="datetime-local"/>
2024-08-18 04:29:25 +00:00
</div>
</div>
<div class="create-item-form-column"></div>
</div>
<div id="create-item-button-container">
2024-08-19 22:02:45 +00:00
<button id="create-item-save-button" class="button" type="submit">Save</button>
2024-08-18 04:29:25 +00:00
<a id="create-item-close-button" class="button" href="#">Close</a>
</div>
</form>
</div>
</body>
</html>
}
templ TodoItem(item types.Todo) {
2024-08-19 22:02:45 +00:00
<div class="todo-item" data-start={ fmt.Sprintf("%d", item.Start) } data-due={ fmt.Sprintf("%d", item.Due) }>
2024-08-18 04:29:25 +00:00
<input type="checkbox" name="completed" checked?={ item.Completed } hx-patch={ string(templ.URL(fmt.Sprintf("/set/%d", item.Id))) }/>
<div class="todo-text">{ item.Text }</div>
<div class="todo-item-actions">
<i class="action-edit fa-solid fa-pencil"></i>
<i class="action-delete fa-solid fa-trash" hx-delete={ fmt.Sprintf("/delete/%d", item.Id) } hx-target="closest .todo-item" hx-swap="outerHTML"></i>
</div>
</div>
}
2024-08-19 22:02:45 +00:00
templ OobTodoItem(targetSelector string, item types.Todo) {
<div hx-swap-oob={ fmt.Sprintf("%s:%s", "afterend", targetSelector) } >
@TodoItem(item)
</div>
}
templ TodoList(fillerText string, items []types.Todo) {
<div class="todo-list-items" data-item-count={ fmt.Sprintf("%d", len(items)) }>
<div class="filler-item">{ fillerText }</div>
2024-08-18 04:29:25 +00:00
for _, item := range items {
@TodoItem(item)
}
</div>
}