Skip to content

Commit e65951f

Browse files
committed
v2: post/redirect/get mark-as-... functionality. #318
1 parent be4fd90 commit e65951f

File tree

2 files changed

+66
-9
lines changed

2 files changed

+66
-9
lines changed

src/reader/_app/v2/__init__.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from functools import partial
22

3+
from flask import abort
34
from flask import Blueprint
5+
from flask import redirect
46
from flask import request
57

68
from .. import get_reader
@@ -22,9 +24,9 @@ def entries():
2224
# TODO: if search/tags is active, search/tags box should not be hidden
2325
# TODO: highlight active filter preset + uncollapse more
2426
# TODO: feed filter
25-
# TODO: pagination
27+
# TODO: paqgination
2628
# TODO: read time
27-
# TODO: mark as ...
29+
# TODO: htmx mark as ...
2830

2931
form = EntryFilter(request.args)
3032
kwargs = dict(form.data)
@@ -40,3 +42,33 @@ def entries():
4042
return stream_template(
4143
'v2/entries.html', presets=ENTRY_FILTER_PRESETS, form=form, entries=entries
4244
)
45+
46+
47+
@blueprint.route('/mark-as', methods=['POST'])
48+
def mark_as():
49+
reader = get_reader()
50+
51+
entry = request.form['feed-url'], request.form['entry-id']
52+
53+
if 'read' in request.form:
54+
match request.form['read']:
55+
case 'true':
56+
reader.set_entry_read(entry, True)
57+
case 'false':
58+
reader.set_entry_read(entry, False)
59+
case _:
60+
abort(422)
61+
62+
if 'important' in request.form:
63+
match request.form['important']:
64+
case 'true':
65+
reader.set_entry_important(entry, True)
66+
case 'false':
67+
reader.set_entry_important(entry, False)
68+
case 'none':
69+
reader.set_entry_important(entry, None)
70+
case _:
71+
abort(422)
72+
73+
print(request.form['next'])
74+
return redirect(request.form['next'], code=303)

src/reader/_app/v2/templates/v2/entries.html

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646

4747

4848
{% for entry in entries %}
49-
<div class="mb-4">
49+
<div class="mb-4" id="entry-{{ loop.index }}">
5050

5151
<ul class="list-inline" style="margin-bottom: 0.125rem">
5252

@@ -95,19 +95,37 @@ <h2 class="h5 mb-1" style="font-size: 1.125rem">
9595
</p>
9696
{% endif %}
9797

98-
<form class="my-2">
99-
{# TODO: aria stuff #}
98+
<form action="{{ url_for('.mark_as') }}" method="post" class="my-2">
99+
{#- TODO: aria stuff #}
100100

101-
<button type="submit" class="btn btn-outline-secondary btn-sm" style="width: 4rem">
101+
<button type="submit" name="read"
102+
value="{{ 'false' if entry.read else 'true' }}"
103+
class="btn btn-outline-secondary btn-sm{% if entry.read %} active{% endif %}"
104+
{% if entry.read -%}
105+
aria-pressed="true"
106+
{% endif -%}
107+
style="width: 4rem">
102108
<i class="bi bi-check-lg"></i>
103109
</button>
104110

105111
<div class="btn-group" role="group" aria-label="importance">
106-
<button type="submit" class="btn btn-outline-secondary btn-sm" style="width: 2rem">
107-
<i class="bi bi-star"></i>
112+
<button type="submit" name="important"
113+
value="{{ 'none' if entry.important is true else 'true' }}"
114+
class="btn btn-outline-secondary btn-sm {% if entry.important is true %} active{% endif %}"
115+
{% if entry.important is true -%}
116+
aria-pressed="true"
117+
{% endif -%}
118+
style="width: 2rem">
119+
<i class="bi {{ 'bi-star-fill' if entry.important is true else 'bi-star' }}"></i>
108120
</button>
109121

110-
<button type="submit" class="btn btn-outline-secondary btn-sm" style="width: 2rem">
122+
<button type="submit" name="important"
123+
value="{{ 'none' if entry.important is false else 'false' }}"
124+
class="btn btn-outline-secondary btn-sm {% if entry.important is false %} active{% endif %}"
125+
{% if entry.important is false -%}
126+
aria-pressed="true"
127+
{% endif -%}
128+
style="width: 2rem">
111129
<i class="bi bi-arrow-down"></i>
112130
</button>
113131
</div>
@@ -122,6 +140,13 @@ <h2 class="h5 mb-1" style="font-size: 1.125rem">
122140
</a>
123141
{%- endfor %}
124142

143+
<input type="hidden" name="feed-url" value="{{ entry.feed_url }}">
144+
<input type="hidden" name="entry-id" value="{{ entry.id }}">
145+
146+
{% set next = loop.index if not loop.last else loop.index - 1 -%}
147+
<input type="hidden" name="next"
148+
value="{{ url_for('.entries', **request.args) }}#entry-{{ next }}">
149+
125150
</form>
126151

127152
</div>

0 commit comments

Comments
 (0)