You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+24-5Lines changed: 24 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
-
# PyBehaviorLog 0.9.1
1
+
# PyBehaviorLog 0.9.4
2
2
3
3
PyBehaviorLog is an ASGI-first behavioral observation platform built with Django 6.0.3. It is designed for research teams who need video-assisted coding, live observations, structured ethograms, review workflows, and exportable analytics without being locked into a desktop-only workflow.
4
4
5
-
## What is in this 0.9.1 archive
5
+
## What is in this 0.9.4 archive
6
6
7
7
This version extends the earlier CowLog/BORIS-inspired foundations with:
8
8
@@ -23,7 +23,7 @@ This version extends the earlier CowLog/BORIS-inspired foundations with:
23
23
- PostgreSQL 18 + Redis 8 container stack
24
24
- Argon2 password hashing
25
25
- database-backed sessions
26
-
- Django 6 built-in CSP middleware support
26
+
- Django CSP middleware support
27
27
- unit tests, coverage gate, pre-commit, and GitHub Actions CI
28
28
- built-in BORIS/CowLog round-trip certification fixtures and comparison helpers
<divclass="align-end"><buttontype="submit" class="secondary">{% trans 'Apply filters' %}</button></div>
92
+
</form>
37
93
<divclass="table-wrapper">
38
94
<table>
39
95
<thead><tr><th>{% trans 'Project' %}</th><th>{% trans 'Session' %}</th><th>{% trans 'Segment' %}</th><th>{% trans 'Range' %}</th><th>{% trans 'Status' %}</th><th>{% trans 'Assignee' %}</th><th>{% trans 'Reviewer' %}</th></tr></thead>
<label><inputtype="checkbox" name="set_reviewer" value="1"> {% trans 'Apply reviewer' %}</label>
261
+
</div>
262
+
<div>
263
+
<labelfor="batch-status">{% trans 'Status' %}</label>
264
+
<selectid="batch-status" name="status">
265
+
{% for value, label in segment_form.fields.status.choices %}
266
+
<optionvalue="{{ value }}">{{ label }}</option>
267
+
{% endfor %}
268
+
</select>
269
+
<label><inputtype="checkbox" name="set_status" value="1"> {% trans 'Apply status' %}</label>
270
+
</div>
271
+
<divclass="align-end"><buttontype="submit" class="secondary">{% trans 'Batch assign selected segments' %}</button></div>
272
+
</div>
238
273
<divclass="table-wrapper compact-table-wrapper">
239
274
<table>
240
-
<thead><tr><th>{% trans 'Title' %}</th><th>{% trans 'Range' %}</th><th>{% trans 'Status' %}</th><th>{% trans 'Assignee' %}</th><th>{% trans 'Reviewer' %}</th><th>{% trans 'Actions' %}</th></tr></thead>
275
+
<thead><tr>{% if can_review_session %}<th>{% trans 'Select' %}</th>{% endif %}<th>{% trans 'Title' %}</th><th>{% trans 'Range' %}</th><th>{% trans 'Status' %}</th><th>{% trans 'Assignee' %}</th><th>{% trans 'Reviewer' %}</th><th>{% trans 'Actions' %}</th></tr></thead>
241
276
<tbody>
242
277
{% for segment in segments %}
243
278
<tr>
279
+
{% if can_review_session %}<td><inputtype="checkbox" name="segment_ids" value="{{ segment.pk }}"></td>{% endif %}
@@ -253,12 +289,34 @@ <h3>{% trans 'Review segments' %}</h3>
253
289
{% else %}—{% endif %}
254
290
</td>
255
291
</tr>
292
+
{% empty %}
293
+
<tr><tdcolspan="{% if can_review_session %}7{% else %}6{% endif %}">{% trans 'No review segments defined yet.' %}</td></tr>
294
+
{% endfor %}
295
+
</tbody>
296
+
</table>
297
+
</div>
298
+
</form>
299
+
{% else %}
300
+
<divclass="table-wrapper compact-table-wrapper">
301
+
<table>
302
+
<thead><tr><th>{% trans 'Title' %}</th><th>{% trans 'Range' %}</th><th>{% trans 'Status' %}</th><th>{% trans 'Assignee' %}</th><th>{% trans 'Reviewer' %}</th><th>{% trans 'Actions' %}</th></tr></thead>
0 commit comments