Erweitere Einkaufssuche um Archiv und Unsortiert
This commit is contained in:
@@ -10,19 +10,68 @@
|
||||
</section>
|
||||
|
||||
<section class="panel compact-form-panel">
|
||||
<form method="post" class="inline-form">
|
||||
{{ csrf_input() }}
|
||||
<select name="item_id">
|
||||
<option value="">Bestehenden Eintrag hinzufügen</option>
|
||||
<div class="stack-sections">
|
||||
<label>
|
||||
Lebensmittel suchen
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Nach Lebensmitteln suchen"
|
||||
data-filter-input
|
||||
data-filter-target="#shopping-add-list"
|
||||
data-filter-limit="8"
|
||||
>
|
||||
</label>
|
||||
<div class="shopping-add-grid" id="shopping-add-list">
|
||||
{% for item in addable_items %}
|
||||
<option value="{{ item.id }}">
|
||||
{{ item.name }} · {{ item_kind_labels[item.kind] }} · {{ item.visibility_label }}
|
||||
{% if item.availability_state == 'home' %} · zuhause{% endif %}
|
||||
</option>
|
||||
{% set item_icon_class = {
|
||||
'protein': 'icon-component-protein',
|
||||
'carb': 'icon-component-carb',
|
||||
'veg': 'icon-component-veg',
|
||||
'fruit': 'icon-component-fruit',
|
||||
'dairy': 'icon-component-dairy',
|
||||
'nuts': 'icon-component-nuts',
|
||||
'seeds': 'icon-component-seeds',
|
||||
'neutral': 'icon-component-neutral',
|
||||
}.get(item.primary_builder_key or item.base_type, 'icon-component-neutral') %}
|
||||
<form method="post" data-filter-label="{{ item.name|lower }} {{ item.base_type_label|lower }} {{ item.for_label|lower }}">
|
||||
{{ csrf_input() }}
|
||||
<input type="hidden" name="item_id" value="{{ item.id }}">
|
||||
<button class="shopping-add-card" type="submit">
|
||||
<span class="shopping-add-card-visual">
|
||||
{% if item.photo_filename %}
|
||||
<img
|
||||
src="{{ image_url(item.photo_filename, 'md') }}"
|
||||
srcset="{{ image_srcset(item.photo_filename) }}"
|
||||
sizes="{{ image_sizes('grid') }}"
|
||||
alt=""
|
||||
loading="lazy">
|
||||
{% else %}
|
||||
<span class="shopping-add-card-fallback">
|
||||
<span class="ui-icon {{ item_icon_class }}"></span>
|
||||
</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
<span class="shopping-add-card-copy">
|
||||
<strong>{{ item.name }}</strong>
|
||||
<small>
|
||||
{% if item.is_archived %}
|
||||
Archiviert
|
||||
{% elif item.is_quick_added %}
|
||||
Unsortiert
|
||||
{% elif item.is_home %}
|
||||
Zuhause · trotzdem ergänzen
|
||||
{% else %}
|
||||
Gerade nicht da
|
||||
{% endif %}
|
||||
</small>
|
||||
</span>
|
||||
</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<p class="shopping-add-empty muted">Gerade ist nichts zusätzlich offen.</p>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<button type="submit">Auf Liste setzen</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% if entries %}
|
||||
@@ -34,35 +83,117 @@
|
||||
</section>
|
||||
<section class="stack-list">
|
||||
{% for entry in entries %}
|
||||
<article class="list-row stacked-mobile roomy-row">
|
||||
<div>
|
||||
<strong>{{ entry.item_name }}</strong>
|
||||
<p class="muted">{{ item_kind_labels[entry.item_kind] }}</p>
|
||||
<div class="chip-row">
|
||||
<span class="chip">{{ entry.visibility_label }}</span>
|
||||
<span class="chip status-soft">{{ entry.owner_label }}</span>
|
||||
<span class="chip">{{ entry.for_label }}</span>
|
||||
{% if entry.needed_for_label %}
|
||||
<span class="chip status-home">
|
||||
Für {{ entry.needed_for_label }}
|
||||
{% if entry.needed_daypart_name %} · {{ entry.needed_daypart_name }}{% endif %}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% set entry_icon_class = {
|
||||
'protein': 'icon-component-protein',
|
||||
'carb': 'icon-component-carb',
|
||||
'veg': 'icon-component-veg',
|
||||
'fruit': 'icon-component-fruit',
|
||||
'dairy': 'icon-component-dairy',
|
||||
'nuts': 'icon-component-nuts',
|
||||
'seeds': 'icon-component-seeds',
|
||||
'neutral': 'icon-component-neutral',
|
||||
}.get(entry.primary_builder_key or entry.base_type, 'icon-component-neutral') %}
|
||||
<article class="shopping-entry-card">
|
||||
<div class="shopping-entry-row">
|
||||
<div
|
||||
class="shopping-entry-open"
|
||||
data-dialog-open="shopping-entry-dialog-{{ entry.id }}"
|
||||
tabindex="0"
|
||||
role="button"
|
||||
aria-label="{{ entry.item_name }} öffnen"
|
||||
>
|
||||
<div class="shopping-entry-main">
|
||||
<div class="shopping-entry-visual">
|
||||
{% if entry.photo_filename %}
|
||||
<img
|
||||
src="{{ image_url(entry.photo_filename, 'md') }}"
|
||||
srcset="{{ image_srcset(entry.photo_filename) }}"
|
||||
sizes="{{ image_sizes('grid') }}"
|
||||
alt=""
|
||||
loading="lazy">
|
||||
{% else %}
|
||||
<span class="shopping-entry-fallback">
|
||||
<span class="ui-icon {{ entry_icon_class }}"></span>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="shopping-entry-copy">
|
||||
<strong>{{ entry.item_name }}</strong>
|
||||
{% if entry.needed_for_label %}
|
||||
<p class="muted">
|
||||
Für {{ entry.needed_for_label }}
|
||||
{% if entry.needed_daypart_name %} · {{ entry.needed_daypart_name }}{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-actions">
|
||||
<form method="post" action="{{ url_for('main.shopping_check', entry_id=entry.id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button type="submit">Eingekauft</button>
|
||||
</form>
|
||||
{% if entry.can_edit %}
|
||||
<form method="post" action="{{ url_for('main.shopping_remove', entry_id=entry.id) }}">
|
||||
<div class="shopping-entry-actions">
|
||||
<form method="post" action="{{ url_for('main.shopping_check', entry_id=entry.id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="ghost-button" type="submit">Entfernen</button>
|
||||
<button type="submit">Eingekauft</button>
|
||||
</form>
|
||||
</div>
|
||||
{% if entry.can_edit %}
|
||||
<form method="post" action="{{ url_for('main.shopping_remove', entry_id=entry.id) }}" class="shopping-entry-close-form">
|
||||
{{ csrf_input() }}
|
||||
<button class="shopping-entry-close" type="submit" aria-label="{{ entry.item_name }} entfernen">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
<dialog class="shopping-entry-dialog week-entry-dialog" id="shopping-entry-dialog-{{ entry.id }}">
|
||||
<div class="shopping-entry-dialog-card week-entry-dialog-card">
|
||||
<div class="week-entry-dialog-head">
|
||||
<div>
|
||||
<h3>{{ entry.item_name }}</h3>
|
||||
<p>
|
||||
{% if entry.needed_for_label %}
|
||||
Für {{ entry.needed_for_label }}
|
||||
{% if entry.needed_daypart_name %} · {{ entry.needed_daypart_name }}{% endif %}
|
||||
{% elif entry.is_home %}
|
||||
Zuhause vorhanden
|
||||
{% else %}
|
||||
Gerade nicht da
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<button class="ghost-button" type="button" data-dialog-close>Schließen</button>
|
||||
</div>
|
||||
<div class="shopping-entry-dialog-actions">
|
||||
{% if entry.can_edit %}
|
||||
<a class="ghost-button" href="{{ url_for('main.item_edit', item_id=entry.item_id) }}">Bearbeiten</a>
|
||||
{% endif %}
|
||||
<form method="post" action="{{ url_for('main.shopping_check', entry_id=entry.id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button type="submit">Eingekauft</button>
|
||||
</form>
|
||||
{% if entry.can_edit %}
|
||||
<form method="post" action="{{ url_for('main.shopping_remove', entry_id=entry.id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="ghost-button" type="submit">Von Einkaufsliste nehmen</button>
|
||||
</form>
|
||||
{% if entry.is_home %}
|
||||
<form method="post" action="{{ url_for('main.item_set_not_home', item_id=entry.item_id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="ghost-button" type="submit">Nicht mehr da</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<form method="post" action="{{ url_for('main.item_set_home', item_id=entry.item_id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="ghost-button" type="submit">Als zuhause markieren</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
<form method="post" action="{{ url_for('main.item_archive', item_id=entry.item_id) }}">
|
||||
{{ csrf_input() }}
|
||||
<button class="ghost-button" type="submit">Archivieren</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% else %}
|
||||
|
||||
Reference in New Issue
Block a user