- Remove card-style spacing (margin, border-radius, background) from capture-item and focus-item - Use border-bottom pattern matching list-row for uniform density - Wrap capture and focus items in .card containers Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
115 lines
5.2 KiB
HTML
115 lines
5.2 KiB
HTML
{% extends "base.html" %}
|
|
{% block content %}
|
|
<div class="page-header">
|
|
<h1 class="page-title">Daily Focus</h1>
|
|
<div class="flex items-center gap-2">
|
|
{% if total_estimated %}<span class="text-sm text-muted">~{{ total_estimated }}min estimated</span>{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex items-center gap-2 mb-4">
|
|
<a href="/focus?focus_date={{ (focus_date|string)[:10] }}" class="btn btn-ghost btn-sm">Today</a>
|
|
<span class="text-sm" style="font-weight:600">{{ focus_date }}</span>
|
|
</div>
|
|
|
|
<!-- Focus items -->
|
|
{% if items %}
|
|
<div class="card">
|
|
{% for item in items %}
|
|
<div class="focus-item {{ 'completed' if item.completed }}">
|
|
{% with reorder_url="/focus/reorder", item_id=item.id, extra_fields={"focus_date": focus_date|string} %}
|
|
{% include 'partials/reorder_arrows.html' %}
|
|
{% endwith %}
|
|
<form action="/focus/{{ item.id }}/toggle" method="post" style="display:inline">
|
|
<div class="row-check">
|
|
<input type="checkbox" id="f-{{ item.id }}" {{ 'checked' if item.completed }} onchange="this.form.submit()">
|
|
<label for="f-{{ item.id }}"></label>
|
|
</div>
|
|
</form>
|
|
<span class="priority-dot priority-{{ item.priority }}"></span>
|
|
<a href="/tasks/{{ item.task_id }}" class="focus-title">{{ item.title }}</a>
|
|
{% if item.project_name %}<span class="row-tag">{{ item.project_name }}</span>{% endif %}
|
|
{% if item.estimated_minutes %}<span class="focus-meta">~{{ item.estimated_minutes }}min</span>{% endif %}
|
|
{% if item.due_date %}<span class="focus-meta">{{ item.due_date }}</span>{% endif %}
|
|
<form action="/focus/{{ item.id }}/remove" method="post" style="display:inline">
|
|
<button class="btn btn-ghost btn-xs" style="color:var(--red)" title="Remove from focus">×</button>
|
|
</form>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="empty-state mb-4"><div class="empty-state-text">No focus items for this day</div></div>
|
|
{% endif %}
|
|
|
|
<!-- Add task to focus -->
|
|
<div class="card mt-4">
|
|
<div class="card-header"><h2 class="card-title">Add to Focus</h2></div>
|
|
|
|
<form class="filters-bar" method="get" action="/focus" id="focus-filters" style="padding: 8px 12px; border-bottom: 1px solid var(--border);">
|
|
<input type="hidden" name="focus_date" value="{{ focus_date }}">
|
|
<select name="domain_id" class="filter-select" id="focus-domain" onchange="this.form.submit()">
|
|
<option value="">All Domains</option>
|
|
{% for d in domains %}
|
|
<option value="{{ d.id }}" {{ 'selected' if current_domain_id == d.id|string }}>{{ d.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<select name="area_id" class="filter-select" onchange="this.form.submit()">
|
|
<option value="">All Areas</option>
|
|
{% for a in areas %}
|
|
<option value="{{ a.id }}" {{ 'selected' if current_area_id == a.id|string }}>{{ a.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<select name="project_id" class="filter-select" id="focus-project" onchange="this.form.submit()">
|
|
<option value="">All Projects</option>
|
|
{% for p in projects %}
|
|
<option value="{{ p.id }}" {{ 'selected' if current_project_id == p.id|string }}>{{ p.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</form>
|
|
|
|
{% for t in available_tasks[:15] %}
|
|
<div class="list-row">
|
|
<span class="priority-dot priority-{{ t.priority }}"></span>
|
|
<span class="row-title">{{ t.title }}</span>
|
|
{% if t.project_name %}<span class="row-tag">{{ t.project_name }}</span>{% endif %}
|
|
{% if t.due_date %}<span class="row-meta">{{ t.due_date }}</span>{% endif %}
|
|
<form action="/focus/add" method="post" style="display:inline">
|
|
<input type="hidden" name="task_id" value="{{ t.id }}">
|
|
<input type="hidden" name="focus_date" value="{{ focus_date }}">
|
|
<button class="btn btn-ghost btn-xs" style="color:var(--green)">+ Focus</button>
|
|
</form>
|
|
</div>
|
|
{% else %}
|
|
<div style="padding: 16px; color: var(--muted); font-size: 0.85rem;">No available tasks matching filters</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<script>
|
|
(function() {
|
|
var domainSel = document.getElementById('focus-domain');
|
|
var projectSel = document.getElementById('focus-project');
|
|
var currentProjectId = '{{ current_project_id }}';
|
|
var form = document.getElementById('focus-filters');
|
|
|
|
domainSel.addEventListener('change', function() {
|
|
var did = domainSel.value;
|
|
if (!did) { form.submit(); return; }
|
|
fetch('/projects/api/by-domain?domain_id=' + encodeURIComponent(did))
|
|
.then(function(r) { return r.json(); })
|
|
.then(function(projects) {
|
|
projectSel.innerHTML = '<option value="">All Projects</option>';
|
|
projects.forEach(function(p) {
|
|
var opt = document.createElement('option');
|
|
opt.value = p.id;
|
|
opt.textContent = p.name;
|
|
if (p.id === currentProjectId) opt.selected = true;
|
|
projectSel.appendChild(opt);
|
|
});
|
|
form.submit();
|
|
})
|
|
.catch(function() { form.submit(); });
|
|
});
|
|
})();
|
|
</script>
|
|
{% endblock %}
|