This commit is contained in:
lubiana 2025-06-18 20:12:17 +02:00
parent c99032044d
commit 5cb66c5012
Signed by: lubiana
SSH key fingerprint: SHA256:vW1EA0fRR3Fw+dD/sM0K+x3Il2gSry6YRYHqOeQwrfk
34 changed files with 1236 additions and 132 deletions

View file

@ -1,4 +1,4 @@
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_start(form, {'attr': {'class': 'mb-3'}}) }}
{{ form_widget(form, {'attr': {'class': 'form-control'}}) }}
<button class="btn btn-primary mt-2">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

View file

@ -11,19 +11,53 @@
{% endblock %}
</head>
<body>
<header>
<p>Hello {{ app.request.cookies.get('username', 'nobody') }} - <a href="{{ path('username') }}">change name</a></p>
<nav>
<a href="{{ path('app_food_order_index') }}">Orders</a> /
<a href="{{ path('app_food_vendor_index') }}">Vendors</a> /
<a
href="https://git.hannover.ccc.de/lubiana/futtern/issues/new"
target="_blank"
>Create Issue</a> /
<a href="/api">API</a>
<header class="mb-4">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<span class="navbar-brand">Futtern</span>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item"><a class="nav-link" href="{{ path('app_food_order_index') }}">Orders</a></li>
<li class="nav-item"><a class="nav-link" href="{{ path('app_food_vendor_index') }}">Vendors</a></li>
<li class="nav-item"><a class="nav-link" href="/api">API</a></li>
<li class="nav-item"><a class="nav-link" href="https://git.hannover.ccc.de/lubiana/futtern/issues/new" target="_blank">Create Issue</a></li>
</ul>
<div class="btn-group ms-auto" role="group" aria-label="Mode selection">
<input type="radio" class="btn-check" name="mode" id="normal" autocomplete="off" checked>
<label class="btn btn-outline-primary" for="normal">
Normal
<span class="emoji-normal">😌</span>
<span class="emoji-enhanced">😌🍑</span>
<span class="emoji-bonkers">😌🍑🍆💦👅💋😈🏳️‍🌈✨</span>
</label>
<input type="radio" class="btn-check" name="mode" id="enhanced" autocomplete="off">
<label class="btn btn-outline-primary" for="enhanced">
Enhanced
<span class="emoji-normal">✨</span>
<span class="emoji-enhanced">✨🍑🍆</span>
<span class="emoji-bonkers">✨🍑🍆💦👅💋😈🏳️‍🌈</span>
</label>
<input type="radio" class="btn-check" name="mode" id="bonkers" autocomplete="off">
<label class="btn btn-outline-primary" for="bonkers">
Bonkers
<span class="emoji-normal">💦</span>
<span class="emoji-enhanced">💦🍑🍆</span>
<span class="emoji-bonkers">💦🍑🍆👅💋😈🏳️‍🌈✨🥵😳🤤😍🥴💕💗💘💝💞💟💌💏💑</span>
</label>
</div>
<span class="navbar-text">
Hello {{ app.request.cookies.get('username', 'nobody') }} - <a class="text-light" href="{{ path('username') }}">change name</a>
</span>
</div>
</div>
</nav>
</header>
<main>
<main class="container pb-5">
{% block body %}{% endblock %}
</main>
</body>

View file

@ -3,10 +3,12 @@
{% block title %}Edit FoodOrder{% endblock %}
{% block body %}
<h1>Edit FoodOrder</h1>
<h1 class="mb-4">Edit FoodOrder</h1>
{{ include('_form.html.twig', {'button_label': 'Update'}) }}
<div class="mb-4">
{{ include('_form.html.twig', {'button_label': 'Update'}) }}
</div>
<a href="{{ path('app_food_order_index') }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_food_order_index') }}">back to list</a>
{% endblock %}

View file

@ -3,17 +3,18 @@
{% block title %}FoodOrder index{% endblock %}
{% block body %}
<h1>FoodOrder index</h1>
<div>
<h1 class="mb-4">FoodOrder index</h1>
<div class="mb-3">
<button
class="btn btn-primary"
hx-get="{{ path('app_food_order_new') }}"
hx-trigger="click"
hx-target="closest div"
>Create new</button>
</div>
<hr>
<table class="table">
<thead>
<table class="table table-striped table-hover">
<thead class="table-light">
<tr>
<th>CreatedBy</th>
<th>Vendor</th>
@ -28,7 +29,7 @@
{% endfor %}
{% if food_orders|length < 10 %}
<tr>
<td colspan="5">
<td colspan="5" class="text-center text-muted">
check the <a href="{{ path('app_food_order_archive') }}">archive</a>
for older orders
</td>
@ -36,10 +37,12 @@
{% endif %}
</tbody>
</table>
{% if prev_page > 0 %}
<a href="{{ path('app_food_order_archive', {'page': prev_page}) }}">previous page</a> |
{% endif %}
{% if next_page > current_page %}
<a href="{{ path('app_food_order_archive', {'page': next_page}) }}">next page</a>
{% endif %}
<div class="d-flex gap-2">
{% if prev_page > 0 %}
<a class="btn btn-outline-secondary btn-sm" href="{{ path('app_food_order_archive', {'page': prev_page}) }}">previous page</a>
{% endif %}
{% if next_page > current_page %}
<a class="btn btn-outline-secondary btn-sm" href="{{ path('app_food_order_archive', {'page': next_page}) }}">next page</a>
{% endif %}
</div>
{% endblock %}

View file

@ -1,2 +1,4 @@
{{ include('_form.html.twig') }}
<div class="mb-4">
{{ include('_form.html.twig') }}
</div>

View file

@ -3,9 +3,9 @@
{% block title %}FoodOrder{% endblock %}
{% block body %}
<h1>FoodOrder</h1>
<h1 class="mb-4">FoodOrder</h1>
<table class="table">
<table class="table table-bordered table-striped w-auto">
<tbody>
<tr>
<th>Vendor</th>
@ -29,16 +29,18 @@
</tr>
</tbody>
</table>
<a class="button" href="{{ path('app_food_order_index') }}">back to list</a>
{% if(food_order.isClosed) %}
<a class="button" href="{{ path('app_food_order_open', {'id': food_order.id}) }}">reopen</a>
{% else %}
<a class="button" href="{{ path('app_food_order_close', {'id': food_order.id}) }}">close</a>
{% endif %}
<div class="mb-3 d-flex gap-2">
<a class="btn btn-secondary" href="{{ path('app_food_order_index') }}">back to list</a>
{% if(food_order.isClosed) %}
<a class="btn btn-warning" href="{{ path('app_food_order_open', {'id': food_order.id}) }}">reopen</a>
{% else %}
<a class="btn btn-success" href="{{ path('app_food_order_close', {'id': food_order.id}) }}">close</a>
{% endif %}
</div>
<h2>Items</h2>
<table class="table">
<thead>
<h2 class="mt-5">Items</h2>
<table class="table table-hover">
<thead class="table-light">
<tr>
<th>Index</th>
<th>username</th>
@ -57,15 +59,15 @@
<td>
{% if(food_order.isClosed) %}
{% else %}
<a href="{{ path('app_order_item_edit', {'id': item.id}) }}">edit</a>
<a href="{{ path('app_order_item_copy', {'id': item.id}) }}">copy</a>
<a href="{{ path('app_order_item_delete', {'id': item.id}) }}">remove</a>
<a class="btn btn-sm btn-outline-primary me-1" href="{{ path('app_order_item_edit', {'id': item.id}) }}">edit</a>
<a class="btn btn-sm btn-outline-secondary me-1" href="{{ path('app_order_item_copy', {'id': item.id}) }}">copy</a>
<a class="btn btn-sm btn-outline-danger" href="{{ path('app_order_item_delete', {'id': item.id}) }}">remove</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a class="button" href="{{ path('app_order_item_new', {'foodOrder': food_order.id}) }}">New Item</a>
<a class="btn btn-primary mt-2" href="{{ path('app_order_item_new', {'foodOrder': food_order.id}) }}">New Item</a>
{% endblock %}

View file

@ -4,6 +4,6 @@
<td>{{ food_order.createdAt ? food_order.createdAt|date('Y-m-d H:i:s', 'Europe/Berlin') : '' }}</td>
<td>{{ food_order.closedAt ? food_order.closedAt|date('Y-m-d H:i:s', 'Europe/Berlin') : '' }}</td>
<td>
<a href="{{ path('app_food_order_show', {'id': food_order.id}) }}">show</a>
<a class="btn btn-sm btn-outline-info" href="{{ path('app_food_order_show', {'id': food_order.id}) }}">show</a>
</td>
</tr>

View file

@ -1,4 +1,4 @@
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_start(form, {'attr': {'class': 'mb-3'}}) }}
{{ form_widget(form, {'attr': {'class': 'form-control'}}) }}
<button class="btn btn-primary mt-2">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

View file

@ -3,9 +3,11 @@
{% block title %}Edit FoodVendor{% endblock %}
{% block body %}
<h1>Edit FoodVendor</h1>
<h1 class="mb-4">Edit FoodVendor</h1>
{{ include('food_vendor/_form.html.twig', {'button_label': 'Update'}) }}
<div class="mb-4">
{{ include('food_vendor/_form.html.twig', {'button_label': 'Update'}) }}
</div>
<a href="{{ path('app_food_vendor_index') }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_food_vendor_index') }}">back to list</a>
{% endblock %}

View file

@ -3,10 +3,10 @@
{% block title %}FoodVendor index{% endblock %}
{% block body %}
<h1>FoodVendor index</h1>
<h1 class="mb-4">FoodVendor index</h1>
<table class="table">
<thead>
<table class="table table-striped table-hover">
<thead class="table-light">
<tr>
<th>Name</th>
<th>actions</th>
@ -17,17 +17,17 @@
<tr>
<td>{{ food_vendor.name }}</td>
<td>
<a href="{{ path('app_food_vendor_show', {'id': food_vendor.id}) }}">show</a>
<a href="{{ path('app_food_vendor_edit', {'id': food_vendor.id}) }}">edit</a>
<a class="btn btn-sm btn-outline-info me-1" href="{{ path('app_food_vendor_show', {'id': food_vendor.id}) }}">show</a>
<a class="btn btn-sm btn-outline-primary" href="{{ path('app_food_vendor_edit', {'id': food_vendor.id}) }}">edit</a>
</td>
</tr>
{% else %}
<tr>
<td colspan="3">no records found</td>
<td colspan="3" class="text-center text-muted">no records found</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="{{ path('app_food_vendor_new') }}">Create new</a>
<a class="btn btn-primary" href="{{ path('app_food_vendor_new') }}">Create new</a>
{% endblock %}

View file

@ -3,9 +3,11 @@
{% block title %}New FoodVendor{% endblock %}
{% block body %}
<h1>Create new FoodVendor</h1>
<h1 class="mb-4">Create new FoodVendor</h1>
{{ include('food_vendor/_form.html.twig') }}
<div class="mb-4">
{{ include('food_vendor/_form.html.twig') }}
</div>
<a href="{{ path('app_food_vendor_index') }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_food_vendor_index') }}">back to list</a>
{% endblock %}

View file

@ -3,9 +3,9 @@
{% block title %}FoodVendor{% endblock %}
{% block body %}
<h1>FoodVendor</h1>
<h1 class="mb-4">FoodVendor</h1>
<table class="table">
<table class="table table-bordered w-auto">
<tbody>
<tr>
<th>Name</th>
@ -18,23 +18,22 @@
</tbody>
</table>
<section>
<section class="mb-4">
<h2>known menuitems</h2>
<ul>
<ul class="list-group list-group-flush">
{% for item in food_vendor.menuItems %}
<li>
<li class="list-group-item">
<a href="{{ path('app_menu_item_show', {'id': item.id}) }}">{{ item.name }}</a>
{% if(item.aliasOf) %}
(alias of: {{ item.aliasOf.name }})
<span class="text-muted">(alias of: {{ item.aliasOf.name }})</span>
{% endif %}
</li>
{% endfor %}
</ul>
</section>
<a href="{{ path('app_food_vendor_index') }}">back to list</a>
<a href="{{ path('app_food_vendor_edit', {'id': food_vendor.id}) }}">edit</a>
<div class="d-flex gap-2">
<a class="btn btn-secondary" href="{{ path('app_food_vendor_index') }}">back to list</a>
<a class="btn btn-primary" href="{{ path('app_food_vendor_edit', {'id': food_vendor.id}) }}">edit</a>
</div>
{% endblock %}

View file

@ -1,4 +1,4 @@
<form method="post" action="{{ path('app_menu_item_delete', {'id': menu_item.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ menu_item.id) }}">
<button class="btn">Delete</button>
<button class="btn btn-danger btn-sm">Delete</button>
</form>

View file

@ -1,4 +1,4 @@
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_start(form, {'attr': {'class': 'mb-3'}}) }}
{{ form_widget(form, {'attr': {'class': 'form-control'}}) }}
<button class="btn btn-primary mt-2">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

View file

@ -3,9 +3,13 @@
{% block title %}Edit MenuItem{% endblock %}
{% block body %}
<h1>Edit MenuItem</h1>
<h1 class="mb-4">Edit MenuItem</h1>
{{ include('menu_item/_form.html.twig', {'button_label': 'Update'}) }}
<div class="mb-4">
{{ include('menu_item/_form.html.twig', {'button_label': 'Update'}) }}
</div>
{{ include('menu_item/_delete_form.html.twig') }}
<div class="d-flex gap-2">
{{ include('menu_item/_delete_form.html.twig') }}
</div>
{% endblock %}

View file

@ -3,10 +3,10 @@
{% block title %}MenuItem index{% endblock %}
{% block body %}
<h1>MenuItem index</h1>
<h1 class="mb-4">MenuItem index</h1>
<table class="table">
<thead>
<table class="table table-striped table-hover">
<thead class="table-light">
<tr>
<th>Id</th>
<th>Name</th>
@ -19,17 +19,17 @@
<td>{{ menu_item.id }}</td>
<td>{{ menu_item.name }}</td>
<td>
<a href="{{ path('app_menu_item_show', {'id': menu_item.id}) }}">show</a>
<a href="{{ path('app_menu_item_edit', {'id': menu_item.id}) }}">edit</a>
<a class="btn btn-sm btn-outline-info me-1" href="{{ path('app_menu_item_show', {'id': menu_item.id}) }}">show</a>
<a class="btn btn-sm btn-outline-primary" href="{{ path('app_menu_item_edit', {'id': menu_item.id}) }}">edit</a>
</td>
</tr>
{% else %}
<tr>
<td colspan="3">no records found</td>
<td colspan="3" class="text-center text-muted">no records found</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="{{ path('app_menu_item_new') }}">Create new</a>
<a class="btn btn-primary" href="{{ path('app_menu_item_new') }}">Create new</a>
{% endblock %}

View file

@ -3,9 +3,11 @@
{% block title %}New MenuItem{% endblock %}
{% block body %}
<h1>Create new MenuItem</h1>
<h1 class="mb-4">Create new MenuItem</h1>
{{ include('menu_item/_form.html.twig') }}
<div class="mb-4">
{{ include('menu_item/_form.html.twig') }}
</div>
<a href="{{ path('app_menu_item_index') }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_menu_item_index') }}">back to list</a>
{% endblock %}

View file

@ -3,9 +3,9 @@
{% block title %}MenuItem{% endblock %}
{% block body %}
<h1>MenuItem</h1>
<h1 class="mb-4">MenuItem</h1>
<table class="table">
<table class="table table-bordered w-auto">
<tbody>
<tr>
<th>Id</th>
@ -25,9 +25,9 @@
<tr>
<th>Aliases</th>
<td>
<ul>
<ul class="list-group list-group-flush">
{% for alias in menu_item.aliases %}
<li>{{ alias.name }}</li>
<li class="list-group-item">{{ alias.name }}</li>
{% endfor %}
</ul>
</td>
@ -36,9 +36,9 @@
</tbody>
</table>
<a href="{{ path('app_food_vendor_show', { 'id': menu_item.foodVendor.id}) }}">back to list</a>
<a href="{{ path('app_menu_item_edit', {'id': menu_item.id}) }}">edit</a>
{{ include('menu_item/_delete_form.html.twig') }}
<div class="d-flex gap-2">
<a class="btn btn-secondary" href="{{ path('app_food_vendor_show', { 'id': menu_item.foodVendor.id}) }}">back to list</a>
<a class="btn btn-primary" href="{{ path('app_menu_item_edit', {'id': menu_item.id}) }}">edit</a>
{{ include('menu_item/_delete_form.html.twig') }}
</div>
{% endblock %}

View file

@ -1,4 +1,4 @@
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_start(form, {'attr': {'class': 'mb-3'}}) }}
{{ form_widget(form, {'attr': {'class': 'form-control'}}) }}
<button class="btn btn-primary mt-2">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

View file

@ -3,9 +3,11 @@
{% block title %}Edit OrderItem{% endblock %}
{% block body %}
<h1>Edit OrderItem</h1>
<h1 class="mb-4">Edit OrderItem</h1>
{{ include('order_item/_form.html.twig', {'button_label': 'Update'}) }}
<div class="mb-4">
{{ include('order_item/_form.html.twig', {'button_label': 'Update'}) }}
</div>
<a href="{{ path('app_food_order_show', {'id': order_item.foodOrder.id}) }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_food_order_show', {'id': order_item.foodOrder.id}) }}">back to list</a>
{% endblock %}

View file

@ -3,30 +3,32 @@
{% block title %}New OrderItem{% endblock %}
{% block body %}
<h1>Create new OrderItem</h1>
<h1 class="mb-4">Create new OrderItem</h1>
{{ include('order_item/_form.html.twig') }}
<div class="mb-4">
{{ include('order_item/_form.html.twig') }}
</div>
<hr />
{% if food_order.foodVendor.menuLink != '' %}
<a href="{{ food_order.foodVendor.menuLink }}" target="_blank">
<a class="btn btn-outline-secondary mb-3" href="{{ food_order.foodVendor.menuLink }}" target="_blank">
External link to Menu
</a>
{% endif %}
<div>
<div class="mb-2">
<b>click a button to select a given menuitem</b>
</div>
<div>
<div class="mb-3 d-flex flex-wrap gap-2">
{% for menuItem in menuItems %}
<a href="#" data-menu-item>{{ menuItem.name }}</a>
<a class="btn btn-outline-info btn-sm" href="#" data-menu-item>{{ menuItem.name }}</a>
{% endfor %}
</div>
<hr />
<a class="button" href="{{ path('app_food_order_show', { 'id': food_order.id}) }}">back to list</a>
<a class="btn btn-secondary" href="{{ path('app_food_order_show', { 'id': food_order.id}) }}">back to list</a>
<script>
document.querySelectorAll('[data-menu-item]').forEach(function(element) {

View file

@ -3,7 +3,9 @@
{% block title %}Tell me your name{% endblock %}
{% block body %}
<h1>Tell me your name</h1>
<p>By submitting the form, you agree that your username will be stored as a cookie.</p>
{{ include('_form.html.twig') }}
<h1 class="mb-4">Tell me your name</h1>
<p class="mb-3">By submitting the form, you agree that your username will be stored as a cookie.</p>
<div class="mb-4">
{{ include('_form.html.twig') }}
</div>
{% endblock %}