home · contact · privacy
Add foreign key restraints, expand and fix tests, add deletion and forking.
[misc] / todo_templates / todo.html
1 {% extends 'base.html' %}
2
3
4
5 {% block css %}
6 tr.toplevel th { padding-right: 1em; }
7 td.center { text-align: center; }
8 tr.toplevel td, tr.toplevel th { padding-top: 1em; }
9 tr.lowlevel td, tr.lowlevel th { padding-top: 0em; }
10 tr.grey td { background-color: #cccccc; }
11 {% endblock %}
12
13
14
15 {% macro draw_todo(todo) %}<a href="?id={{todo.id_}}">{{todo.title}}</a>{% if todo.comment %}({{todo.comment|e}}){% endif %}{% endmacro %}
16
17
18
19 {% macro task_with_deps(task, indent) %}
20 {% for i in range(indent) %}&nbsp;&nbsp;{% endfor %}+ 
21 ({{task.title.then}})<br />
22 {% for t in task.deps %}
23 {{ task_with_deps(t, indent+1) }}
24 {% endfor %}
25 {% endmacro %}
26
27
28
29 {% macro todo_with_deps(todo, indent) %}
30 {% for i in range(indent) %}&nbsp;&nbsp;&nbsp;{% endfor %}{{ macros.doneness_string(todo) }} {{ draw_todo(todo) }}<br />
31 {% for dep in todo.deps %}
32 {% if dep.been_observed %}
33 {% for i in range(indent+1) %}&nbsp;&nbsp;&nbsp;{% endfor %}{{ macros.doneness_string(dep) }} ({{ draw_todo(dep) }})<br />
34 {% else %}
35 {{ todo_with_deps(dep, indent+1) }}
36 {% endif %}
37 {% endfor %}
38 {{ todo.observe() }}
39 {% endmacro %}
40
41
42
43 {% macro draw_deps(deps) %}
44 {% for t in deps %}
45 <tr class="lowlevel">
46 <td><input name="adopt_dep" type="checkbox" value="{{t.id_}}" checked/></td>
47 <td>{{ macros.doneness_string(t) }}</td>
48 <td>
49 {% if t.deps and not t.been_observed %}
50 <details>
51 <summary>{{ draw_todo(t) }}</summary>
52 {% for dep in t.deps %}
53 {{ todo_with_deps(dep, 0) }}
54 {% endfor %}
55 </details>
56 {% else %}
57 {{ draw_todo(t) }}
58 {% endif %}
59 </td>
60 {{ t.observe() }}
61 </tr>
62 {% endfor %}
63 {% endmacro %}
64
65
66
67 {% block content %}
68 <h3>edit todo</h3>
69
70 <form action="todo" method="POST">
71 <input type="hidden" name="id" value="{{todo.id_}}" />
72 <input type="hidden" name="importance" step=0.1 size=8 value="{{ todo.importance }}" />
73 <table>
74
75 <tr class="toplevel">
76 <th>task</th>
77 <td colspan=2>
78 <a href="task?id={{ todo.task.id_ }}">{{ todo.task.title.then|e }}</a>
79 {% if todo.task.comment %}
80 <pre>{{ todo.task.comment|e }}</pre>
81 {% else %}
82 <br />&nbsp;
83 {% endif %}
84 </td>
85 </tr>
86
87 <tr class="toplevel">
88 <th>work</th>
89 <td>
90 <input type="checkbox" name="done" {% if todo.done %}checked{% endif %} {% if todo.deps_done == false %}disabled{% endif %}/>
91 done<br />
92 (all days: {{todo.all_days_effort}})<br />
93 (dependencies: {{todo.all_days_effort}})
94 </td>
95 <td>
96 <table>
97 <tr class="lowlevel">
98 <th>date</th>
99 <th>effort</th>
100 <th>delete</th>
101 </tr>
102 {% for date, effort in todo.efforts.items() %}
103 <tr class="lowlevel">
104 <td>
105 <input name="effort_date" type="hidden" value="{{date}}">{{date}}
106 </td>
107 <td>
108 <input type="number" name="effort" step=0.1 size=8 value="{{effort}}" placeholder="{{todo.default_effort}}" {% if todo.deps and effort %}disabled{% endif %} />
109 </td>
110 <td>
111 {% if not (todo.deps and effort) %}<input type="checkbox" name="delete_effort" value="{{date}}" />{% endif %}
112 </td>
113 </tr>
114 {% endfor %}
115 <tr class="lowlevel">
116 <td>
117 <input name="effort_date" size=10 value="">
118 </td>
119 <td>
120 <input type="number" name="effort" step=0.1 size=8 value="" {% if todo.deps %} disabled {% else %} placeholder="{{todo.default_effort}}" {% endif %} />
121 </td>
122 </tr>
123 </table>
124 </td>
125 </tr>
126
127 <tr class="toplevel">
128 <th>comment</th>
129 <td class="input" colspan=2>
130 <input name="comment" size=100 value="{{todo.comment|e}}" />
131 </td>
132 </tr>
133
134 <tr class="toplevel">
135 <th>tags</th>
136 <td colspan=2>
137 new: {{ macros.tagselection(submit_name='tag', selected_tags=todo.day_tags, all_tags=tags) }}
138 {% for tag in todo.task.tags.now | sort %}<select disabled><option>{{ tag }}</option></select>{% endfor %}
139 <br />
140 </td>
141 </tr>
142
143 <tr class="toplevel">
144 <th>dependers</th>
145 <td colspan=2>
146 {% if todo.dependers %}
147 <table>
148 {% for path in todo.shortened_depender_paths %}
149 <tr>
150 <td>
151 <input name="depender" type="checkbox" value="{{path[-1].id_}}" checked/>
152 </td>
153 <td>
154 {% if not path[0] %}[…]<br />{% endif %}
155 {% for step in path %}
156 {% if step %}
157 {% if step.dependers %}➛ {% endif %}<a href="todo?id={{step.id_}}">{{step.title}}</a><br />
158 {% endif %}
159 {% endfor %}</td>
160 </tr>
161 {% endfor %}
162 </table>
163 {% endif %}
164 add: <input name="depender" list="todos" autocomplete="off" />
165 </td>
166 </tr>
167
168 <tr class="toplevel">
169 <th>sub-todos</th>
170 <td colspan=2>
171 <table>
172 <tr class="lowlevel"><td colspan=4>expected:</td></tr>
173 {% for dep_slot in dep_slots %}
174 {% if dep_slot.todos %}
175 {{ draw_deps(dep_slot.todos) }}
176 {% else %}
177 <tr class="lowlevel">
178 <td></td>
179 <td>[ ]</td>
180 <td>
181 {% if dep_slot.task.deps %} <details>
182 <summary>({{dep_slot.task.title.then}})</summary>
183 {% for task in dep_slot.task.deps %}
184 {{ task_with_deps(task, 1) }}
185 {% endfor %}
186 </details>
187 {% else %}
188 ({{dep_slot.task.title.then}})
189 {% endif %}
190 </td>
191 </tr>
192 {% endif %}
193 {% endfor %}
194 {% if additional_deps %}
195 <tr class="lowlevel"><td colspan=4>bonus:</td></tr>
196 {{ draw_deps(additional_deps) }}
197 {% endif %}
198 </table>
199 </td>
200 </tr>
201
202 <tr class="toplevel">
203 <th>suggestions</th>
204 <td colspan=2>
205 {% if todo.task.deps %}
206 <table>
207 {% for dep in todo.task.deps %}
208 <tr class="lowlevel">
209 <td><input name="birth_dep" type="checkbox" value="{{dep.id_}}"></td>
210 <td>make new</td>
211 <td><a href="task?id={{dep.id_}}">{{dep.title.then}}</a></td>
212 </tr>
213 {% for suggested_todo in suggested_todos[dep.id_] %}
214 <tr class="lowlevel">
215 <td><input name="adopt_dep" type="checkbox" value="{{suggested_todo.id_}}" /></td>
216 <td>adopt</td>
217 <td><a href="todo?id={{suggested_todo.id_}}">{{suggested_todo.day.date}}:{{suggested_todo.title}}{% if suggested_todo.deps %}:+{% endif %}</a></td>
218 <td>{{suggested_todo.comment}}</td>
219 </tr>
220 {% endfor %}
221 {% endfor %}
222 </table>
223 {% endif %}
224 </td>
225 </tr>
226
227 <tr class="toplevel">
228 <th>free add</th>
229 <td colspan=2>
230 make from task ({{ macros.parenthood_selector(parenthood) }}):<br />
231 <input name="birth_dep" list="tasks" size=100 autocomplete="off"><br />
232 adopt:<br />
233 <input name="adopt_dep" list="todos" size=100 autocomplete="off">
234 <datalist id="todos">
235 {% for t in filtered_todos %}
236 <option value="{{t.id_}}">
237 {{ macros.doneness_string(t, datalist_hack=true) }}
238 {{t.day.date}} {{t.title}} {{t.comment}}
239 {% if t.dependers %}
240 (dependers:
241 {% for path in t.depender_paths %}
242 {{ path[0].title }}{% if path|count > 1 %}➛{% endif %}{% if path|count > 3 %}…➛{% endif %}{% if path|count > 1 %}{{ path[-1].title }}{% endif %}
243 {% endfor %})
244 {% endif %}
245 </option>
246 {% endfor %}
247 </datalist>
248 </td>
249 </tr>
250 {{ macros.datalist_tasks(filtered_tasks) }}
251
252 <tr class="toplevel">
253 <th>as chain</th>
254 <td colspan=2>
255 <table>
256 {% for dep in todo.deps_chain %}
257 <tr class="lowlevel">
258 <td class="number">{{dep.deps_depth}}</td>
259 <td>{% if dep.deps_done %}{{ macros.doneness_string(dep) }}{% endif %}</td>
260 <td>{{ draw_todo(dep) }}</td>
261 </tr>
262 {% endfor %}
263 </table>
264 </td>
265 </tr>
266
267 </table>
268 <input id="update_button" class="update" name="update" type="submit" value="update" />
269 <div class="delete">
270 <input class="delete" type="submit" name="delete" value="delete" />
271 </div>
272 </form>
273 {% endblock %}