Diff -- /var/www/vhosts/3dshawn.com/ptmatrix.3dshawn.com/TEMPLATES/tf_kanban.html

O Operator
Diff

/var/www/vhosts/3dshawn.com/ptmatrix.3dshawn.com/TEMPLATES/tf_kanban.html

added on local at 2026-07-01 12:34:59

Added
+101
lines
Removed
-0
lines
Context
0
unchanged
Blobs
from
to 1a9f979ed3a9
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
1
2[if:$has_switcher]
3<form method="GET" action="/kanban.cgi" style="display:inline-block;margin-left:10px">
4 <select name="project" id="switcher-projects-select" onchange="this.form.submit()" style="padding:6px 10px;border-radius:6px;border:1px solid var(--col-border);background:var(--col-bg-3);color:var(--col-text);font-size:13px">
5 [loop:@switcher_projects]
6 <option value="$loop1.id"[if:$loop1.is_current] selected[/if]>$loop1.name</option>
7 [/loop]
8 </select>
9</form>
10[/if]
11
12<div class="crumbs"><a href="/projects.cgi">$term_projects</a><span class="sep">/</span><a href="/project.cgi?id=$proj_id">$proj_name</a><span class="sep">/</span>Kanban</div>
13<div class="page-header">
14 <div><h1 style="display:flex;align-items:center;gap:10px"><span style="width:14px;height:14px;border-radius:4px;background:$proj_color"></span>$proj_name</h1><p class="subtitle">Drag $term_tasks_lower between $term_columns_lower to update status.</p></div>
15 <div class="flex-end">
16 <a href="/project.cgi?id=$proj_id" class="btn" data-tip="Back to the $term_project_lower overview &mdash; stats, recent $term_tasks_lower, team.">Overview</a>
17 <a href="/gantt.cgi?project=$proj_id" class="btn" data-tip="See the same $term_tasks_lower on a timeline. Drag to reschedule.">Gantt</a>
18 <button class="btn btn-primary" onclick="window.tfOpenNewTaskDrawer && window.tfOpenNewTaskDrawer('')" data-tip="Add a $term_task_lower. Opens the same right-side drawer as edit, with all the same fields including the custom color picker.">$term_new_task_button</button>
19 </div>
20</div>
21
22<!-- Filter toolbar: scope (all / mine / department) + archived toggle -->
23<div class="board-toolbar" data-tip="Filter the board without changing what others see. Your choice is bookmarked in the URL.">
24 <div class="filter-chips">
25 <a class="chip[if:$filter_all] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=all[if:$show_archived]&archived=1[/if][if:$show_pending]&pending=1[/if]">All $term_tasks</a>
26 <a class="chip[if:$filter_mine] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=mine[if:$show_archived]&archived=1[/if][if:$show_pending]&pending=1[/if]">My $term_tasks</a>
27 [if:$has_team_scope]<a class="chip[if:$filter_team] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=team[if:$show_archived]&archived=1[/if][if:$show_pending]&pending=1[/if]">My team</a>[/if]
28 [if:$has_dept]<a class="chip[if:$filter_dept] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=dept[if:$show_archived]&archived=1[/if][if:$show_pending]&pending=1[/if]">My department</a>[/if]
29 </div>
30 <div class="filter-chips">
31 [if:$has_pending]<a class="chip chip-warn[if:$show_pending] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=$filter[if:!$show_pending]&pending=1[/if]" data-tip="Show $term_tasks_lower marked Pending Archive that a manager hasn't approved yet.">Pending archive &middot; $pending_count</a>[/if]
32 <a class="chip[if:$show_archived] chip-on[/if]" href="/kanban.cgi?project=$proj_id&filter=$filter[if:!$show_archived]&archived=1[/if]" data-tip="Toggle visibility of archived $term_tasks_lower. They're never deleted &mdash; you can always restore.">Show archived</a>
33 </div>
34</div>
35
36<div class="kanban-board board-grad-$card_gradient_mode density-$board_density" id="kanbanBoard" data-project-id="$proj_id" data-project-color="$proj_color" style="--grad-from:$card_gradient_from;--grad-to:$card_gradient_to">
37[loop:@cols]
38<div class="kanban-column" data-column-id="$loop1.id">
39 <div class="kanban-column-header" data-tip="**$loop1.name**\nDrop a $term_task_lower here to move it to this $term_column_lower.[if:$loop1.wip_limit]\n\n**WIP limit:** $loop1.wip_limit. Going over warns the team to finish-before-starting.[/if]">
40 <span class="dot" style="background:$loop1.color"></span>
41 <span class="title">$loop1.name</span>
42 <span class="count" data-tip="$loop1.count $term_tasks_lower in this $term_column_lower.[if:$loop1.wip_limit] WIP limit is $loop1.wip_limit.[/if]">$loop1.count[if:$loop1.wip_limit] / $loop1.wip_limit[/if]</span>
43 <button type="button" class="col-add-top" onclick="window.tfOpenNewTaskDrawer && window.tfOpenNewTaskDrawer('$loop1.id')" data-tip="Create a new $term_task_lower in **$loop1.name**." aria-label="New $term_task_lower in this $term_column_lower">+</button>
44 </div>
45 <div class="kanban-column-body" data-column-id="$loop1.id">
46 [loop:@loop1.tasks]
47 <div class="kanban-card[if:$loop2.is_pending_arch] card-pending-arch[/if][if:$loop2.is_archived] card-archived[/if]" data-task-id="$loop2.id" data-assignee-id="$loop2.assignee_id" data-priority="$loop2.priority" style="--card-edge:$loop2.edge_color;--card-accent:$loop2.accent_color;border-left-color:$loop2.edge_color" data-tip="Click to edit in the side drawer. Drag to move between $term_columns_lower.">
48 <div style="display:flex;justify-content:space-between;align-items:start;gap:6px">
49 <span class="ticket">$loop2.display_ticket</span>
50 <span class="priority-pill priority-$loop2.priority">$loop2.priority</span>
51 </div>
52 <div class="title">$loop2.title</div>
53 [if:$loop2.has_type_chip]
54 <div style="margin-top:4px;display:inline-flex;align-items:center;gap:4px;font-size:10px;letter-spacing:.4px;text-transform:uppercase;color:var(--col-text-muted);font-weight:600">
55 <span style="width:6px;height:6px;border-radius:50%;background:$loop2.type_color"></span>
56 $loop2.type_name_h
57 </div>
58 [/if]
59 [if:$loop2.has_dept_badge]
60 <div style="margin-top:5px;display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;background:var(--col-bg-2);font-size:10px;color:var(--col-text);font-weight:600" data-tip="Routed to **$loop2.dept_name** department">
61 <span style="width:7px;height:7px;border-radius:50%;background:$loop2.dept_color"></span>$loop2.dept_name
62 </div>
63 [/if]
64 [if:$loop2.has_cf_chips]
65 <div style="margin-top:6px;display:flex;flex-wrap:wrap;gap:4px">
66 [loop:@loop2.cf_chips]
67 <span style="font-size:10px;padding:2px 7px;border-radius:6px;background:var(--col-bg-2);color:var(--col-text-muted);font-weight:500" data-tip="**$loop3.label**: $loop3.value"><span style="color:var(--col-text-dim);margin-right:3px">$loop3.label:</span><span style="color:var(--col-text)">$loop3.value</span></span>
68 [/loop]
69 </div>
70 [/if]
71 <div class="meta">
72 <div class="meta-left">
73 [if:$loop2.due_label]<span class="meta-due[if:$loop2.is_overdue] is-overdue[/if]">$loop2.due_label</span>[/if]
74 [if:$loop2.has_atts]<span class="meta-pill" data-tip="$loop2.att_n attachment(s)">&#128206; $loop2.att_n</span>[/if]
75 [if:$loop2.has_cmts]<span class="meta-pill" data-tip="$loop2.cmt_n comment(s)">&#128172; $loop2.cmt_n</span>[/if]
76 [if:$loop2.is_pending_arch]<span class="meta-pill pill-warn" data-tip="Marked complete and pending archive approval.">pending archive</span>[/if]
77 [if:$loop2.is_archived]<span class="meta-pill pill-muted">archived</span>[/if]
78 </div>
79 [if:$loop2.has_assignee]<div class="avatar avatar-sm" style="background:$loop2.assignee_color" title="$loop2.assignee_name">$loop2.assignee_initials</div>[/if]
80 </div>
81 </div>
82 [/loop]
83 <div class="kanban-add-task" onclick="window.tfOpenNewTaskDrawer && window.tfOpenNewTaskDrawer('$loop1.id')" data-tip="Create a $term_task_lower in this $term_column_lower.">+ Add $term_task_lower</div>
84 </div>
85</div>
86[/loop]
87[if:$can_edit]
88<div class="kanban-column" style="opacity:.7;background:transparent;border-style:dashed">
89 <div class="kanban-column-header"><span class="title" style="color:var(--col-text-dim)">+ Add $term_column_lower</span></div>
90 <div class="kanban-column-body">
91 <form method="POST" action="/project_action.cgi" style="padding:6px">
92 <input type="hidden" name="act" value="add_column">
93 <input type="hidden" name="project_id" value="$proj_id">
94 <input class="input mb-1" name="name" placeholder="$term_column name" required data-tip="What label appears in the $term_column_lower header. e.g. 'QA', 'Blocked', 'Shipping today'.">
95 <input class="input mb-1" type="color" name="color" value="#5aa9ff" style="height:34px;padding:2px" data-tip="Pick a color for the dot at the top of this $term_column_lower.">
96 <button type="submit" class="btn btn-primary btn-sm" style="width:100%" data-tip="Adds a new $term_column_lower to the right side of the board. You can drag $term_tasks_lower into it immediately.">Add $term_column_lower</button>
97 </form>
98 </div>
99</div>
100[/if]
101</div>