- Storage: nested object buckets per type, integrated next_id into meta, migration from old flat task:N key format, seeded default types (task/idea/note) - Server: /api/entry-types CRUD + /api/entries replacing /api/tasks, type validation, blocks deletion if entries exist - Frontend: dynamic nav per type, Entry_Type_Dialog, Entry_Dialog with type selector, type chip in All view, Manage Types view Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
118 lines
3.7 KiB
HTML
118 lines
3.7 KiB
HTML
<!-- Entry list item -->
|
||
<template id="t-entry-row">
|
||
<div class="task-row">
|
||
<button class="btn-expand" hidden></button>
|
||
<span class="task-id"></span>
|
||
<span class="task-status"></span>
|
||
<span class="task-priority"></span>
|
||
<div class="task-main">
|
||
<div class="entry-type-chip" hidden></div>
|
||
<div class="task-title markup"></div>
|
||
<div class="task-body markup" hidden></div>
|
||
</div>
|
||
<span class="task-tags"></span>
|
||
<div class="task-actions">
|
||
<button class="btn-sub">+ Sub</button>
|
||
<button class="btn-edit">Edit</button>
|
||
<button class="btn-delete">Delete</button>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<!-- Entry form dialog -->
|
||
<template id="t-entry-dialog">
|
||
<dialog class="task-dialog">
|
||
<form method="dialog">
|
||
<h2 class="dialog-title"></h2>
|
||
<div class="type-section">
|
||
<span class="type-section-label">Type</span>
|
||
<span class="type-display" hidden></span>
|
||
<select name="type" class="type-select" hidden></select>
|
||
</div>
|
||
<label>Title
|
||
<input name="title" type="text" required autocomplete="off">
|
||
</label>
|
||
<div class="parent-section">
|
||
<span class="parent-section-label">Parent</span>
|
||
<input type="hidden" name="parent_id">
|
||
<span class="parent-display">—</span>
|
||
<button type="button" class="btn-set-parent">Set parent…</button>
|
||
<button type="button" class="btn-clear-parent" hidden>× Remove</button>
|
||
</div>
|
||
<div class="field-with-tabs">
|
||
<div class="tab-bar">
|
||
<button type="button" class="tab-btn active" data-tab="edit">Edit</button>
|
||
<button type="button" class="tab-btn" data-tab="preview">Preview</button>
|
||
<span class="tab-label">Body</span>
|
||
</div>
|
||
<div class="tab-pane" data-tab="edit">
|
||
<textarea name="body" rows="8"></textarea>
|
||
</div>
|
||
<div class="tab-pane" data-tab="preview" hidden>
|
||
<div class="markup preview-content"></div>
|
||
</div>
|
||
</div>
|
||
<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>
|
||
|
||
<!-- Entry picker dialog -->
|
||
<template id="t-entry-picker">
|
||
<dialog class="task-picker-dialog">
|
||
<h2>Make subtask of…</h2>
|
||
<input type="text" class="picker-search" placeholder="Search entries…" autocomplete="off">
|
||
<div class="picker-list"></div>
|
||
<div class="dialog-buttons">
|
||
<button type="button" class="btn-cancel">Cancel</button>
|
||
</div>
|
||
</dialog>
|
||
</template>
|
||
|
||
<!-- Entry type form dialog -->
|
||
<template id="t-entry-type-dialog">
|
||
<dialog class="entry-type-dialog">
|
||
<form method="dialog">
|
||
<h2 class="dialog-title"></h2>
|
||
<label class="id-label">ID
|
||
<input name="id" type="text" pattern="[a-z][a-z0-9_]*" autocomplete="off" placeholder="e.g. bug_report">
|
||
</label>
|
||
<div class="id-display-row" hidden>
|
||
<span class="id-display-label">ID</span>
|
||
<code class="id-display-value"></code>
|
||
</div>
|
||
<label>Title
|
||
<input name="title" type="text" autocomplete="off">
|
||
</label>
|
||
<label>Description
|
||
<textarea name="description" rows="3"></textarea>
|
||
</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>
|