Node.js + Express 5 backend with flat NDJSON key-value store (borrowed from electronics-inventory). Sequential integer IDs per namespace. Vanilla JS SPA with filters for status, priority, and tags. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
1.4 KiB
HTML
52 lines
1.4 KiB
HTML
<!-- Task list item -->
|
|
<template id="t-task-row">
|
|
<div class="task-row">
|
|
<span class="task-id"></span>
|
|
<span class="task-status"></span>
|
|
<span class="task-priority"></span>
|
|
<span class="task-title"></span>
|
|
<span class="task-tags"></span>
|
|
<div class="task-actions">
|
|
<button class="btn-edit">Edit</button>
|
|
<button class="btn-delete">Delete</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- Task form dialog -->
|
|
<template id="t-task-dialog">
|
|
<dialog class="task-dialog">
|
|
<form method="dialog">
|
|
<h2 class="dialog-title"></h2>
|
|
<label>Title
|
|
<input name="title" type="text" required autocomplete="off">
|
|
</label>
|
|
<label>Body
|
|
<textarea name="body" rows="4"></textarea>
|
|
</label>
|
|
<label>Status
|
|
<select name="status">
|
|
<option value="open">Open</option>
|
|
<option value="deferred">Deferred</option>
|
|
<option value="done">Done</option>
|
|
<option value="cancelled">Cancelled</option>
|
|
</select>
|
|
</label>
|
|
<label>Priority
|
|
<select name="priority">
|
|
<option value="high">High</option>
|
|
<option value="normal" selected>Normal</option>
|
|
<option value="low">Low</option>
|
|
</select>
|
|
</label>
|
|
<label>Tags (comma-separated)
|
|
<input name="tags" type="text" autocomplete="off">
|
|
</label>
|
|
<div class="dialog-buttons">
|
|
<button type="submit" class="btn-save">Save</button>
|
|
<button type="button" class="btn-cancel">Cancel</button>
|
|
</div>
|
|
</form>
|
|
</dialog>
|
|
</template>
|