Compare commits

..

1 commit

Author SHA1 Message Date
4e7c014eac
#98 make background more bonkers
All checks were successful
/ ls (pull_request) Successful in 1m32s
2025-06-21 15:30:44 +02:00
8 changed files with 3 additions and 222 deletions

View file

@ -14,11 +14,9 @@ import './javascript/theme.js';
import './javascript/emoji-footprint.js'; import './javascript/emoji-footprint.js';
import './javascript/modes.js'; import './javascript/modes.js';
import './javascript/htmx.js'; import './javascript/htmx.js';
import emojiButtonListener from './javascript/emoji-button.js';
import 'bootstrap'; import 'bootstrap';
import { initRadioState } from './javascript/radioState.js'; import { initRadioState } from './javascript/radioState.js';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
initRadioState(); initRadioState();
emojiButtonListener();
}); });

View file

@ -1,14 +0,0 @@
const emojiButtonListener = function () {
const buttons = document.querySelectorAll('.emoji-buttons .btn.btn-primary');
buttons.forEach(button => {
button.addEventListener('click', function() {
const emojiField = document.querySelector('#food_vendor_emojis');
if (emojiField) {
emojiField.value += this.textContent;
}
});
});
}
export default emojiButtonListener;

View file

@ -27,6 +27,6 @@ return [
'type' => 'css', 'type' => 'css',
], ],
'htmx.org' => [ 'htmx.org' => [
'version' => '2.0.5', 'version' => '1.9.12',
], ],
]; ];

View file

@ -1,47 +0,0 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20250621131822 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql(<<<'SQL'
ALTER TABLE food_vendor ADD COLUMN emojis VARCHAR(30) DEFAULT NULL
SQL);
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql(<<<'SQL'
CREATE TEMPORARY TABLE __temp__food_vendor AS SELECT name, phone, menu_link, id FROM food_vendor
SQL);
$this->addSql(<<<'SQL'
DROP TABLE food_vendor
SQL);
$this->addSql(<<<'SQL'
CREATE TABLE food_vendor (name VARCHAR(50) NOT NULL, phone VARCHAR(50) DEFAULT '', menu_link VARCHAR(255) DEFAULT NULL, id BLOB NOT NULL, PRIMARY KEY(id))
SQL);
$this->addSql(<<<'SQL'
INSERT INTO food_vendor (name, phone, menu_link, id) SELECT name, phone, menu_link, id FROM __temp__food_vendor
SQL);
$this->addSql(<<<'SQL'
DROP TABLE __temp__food_vendor
SQL);
}
}

View file

@ -7,27 +7,23 @@ use App\Repository\FoodVendorRepository;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator; use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator;
use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Bridge\Doctrine\Types\UlidType;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Uid\Ulid; use Symfony\Component\Uid\Ulid;
use Symfony\Component\Validator\Constraints\Length;
use function mb_strlen;
#[ORM\Entity(repositoryClass: FoodVendorRepository::class)] #[ORM\Entity(repositoryClass: FoodVendorRepository::class)]
#[ApiResource] #[ApiResource]
class FoodVendor class FoodVendor
{ {
#[ORM\Column(length: 50)] #[ORM\Column(length: 50)]
#[Groups(['food_order:latest', 'food_vendor:read'])] #[Groups(['food_order:latest'])]
private string|null $name = null; private string|null $name = null;
#[ORM\Column(length: 50, nullable: true, options: [ #[ORM\Column(length: 50, nullable: true, options: [
'default' => '', 'default' => '',
])] ])]
#[Groups(['food_order:latest', 'food_vendor:read'])] #[Groups(['food_order:latest'])]
private string|null $phone = null; private string|null $phone = null;
/** /**
@ -46,14 +42,6 @@ class FoodVendor
#[Groups(['food_order:latest'])] #[Groups(['food_order:latest'])]
private string|null $menuLink = null; private string|null $menuLink = null;
/**
* String of emojis (max 30 characters)
*/
#[ORM\Column(length: 30, nullable: true)]
#[Groups(['food_order:latest', 'food_vendor:read'])]
#[Length(max: 10)]
private string|null $emojis = null;
public function __construct( public function __construct(
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'CUSTOM')] #[ORM\GeneratedValue(strategy: 'CUSTOM')]
@ -167,19 +155,4 @@ class FoodVendor
$this->phone = $phone; $this->phone = $phone;
return $this; return $this;
} }
public function getEmojis(): string|null
{
return $this->emojis;
}
public function setEmojis(string|null $emojis): static
{
if ($emojis !== null && mb_strlen($emojis) > 30) {
throw new InvalidArgumentException('A maximum of 30 characters is allowed for emojis');
}
$this->emojis = $emojis;
return $this;
}
} }

View file

@ -17,7 +17,6 @@ final class FoodVendorType extends AbstractType
->add('name') ->add('name')
->add('menuLink') ->add('menuLink')
->add('phone') ->add('phone')
->add('emojis')
; ;
} }

View file

@ -9,121 +9,5 @@
{{ include('food_vendor/_form.html.twig', {'button_label': 'Update'}) }} {{ include('food_vendor/_form.html.twig', {'button_label': 'Update'}) }}
</div> </div>
<div class="mb-4 emoji-buttons" data-role="emoji-selector">
<button class="btn btn-primary">🍕</button>
<button class="btn btn-primary">🍔</button>
<button class="btn btn-primary">🌮</button>
<button class="btn btn-primary">🍜</button>
<button class="btn btn-primary">🥗</button>
<button class="btn btn-primary">☕</button>
<button class="btn btn-primary">🍣</button>
<button class="btn btn-primary">🍤</button>
<button class="btn btn-primary">🍦</button>
<button class="btn btn-primary">🍩</button>
<button class="btn btn-primary">🍪</button>
<button class="btn btn-primary">🍰</button>
<button class="btn btn-primary">🍫</button>
<button class="btn btn-primary">🍿</button>
<button class="btn btn-primary">🍩</button>
<button class="btn btn-primary">🍭</button>
<button class="btn btn-primary">🍮</button>
<button class="btn btn-primary">🍯</button>
<button class="btn btn-primary">🍎</button>
<button class="btn btn-primary">🍊</button>
<button class="btn btn-primary">🍋</button>
<button class="btn btn-primary">🍌</button>
<button class="btn btn-primary">🍉</button>
<button class="btn btn-primary">🍇</button>
<button class="btn btn-primary">🍓</button>
<button class="btn btn-primary">🍈</button>
<button class="btn btn-primary">🍒</button>
<button class="btn btn-primary">🍍</button>
<button class="btn btn-primary">🥭</button>
<button class="btn btn-primary">🥥</button>
<button class="btn btn-primary">🥝</button>
<button class="btn btn-primary">🍅</button>
<button class="btn btn-primary">🍆</button>
<button class="btn btn-primary">🥑</button>
<button class="btn btn-primary">🥦</button>
<button class="btn btn-primary">🥒</button>
<button class="btn btn-primary">🌽</button>
<button class="btn btn-primary">🥕</button>
<button class="btn btn-primary">🧄</button>
<button class="btn btn-primary">🧅</button>
<button class="btn btn-primary">🥔</button>
<button class="btn btn-primary">🍠</button>
<button class="btn btn-primary">🥐</button>
<button class="btn btn-primary">🥯</button>
<button class="btn btn-primary">🍞</button>
<button class="btn btn-primary">🥖</button>
<button class="btn btn-primary">🥨</button>
<button class="btn btn-primary">🧀</button>
<button class="btn btn-primary">🥚</button>
<button class="btn btn-primary">🍳</button>
<button class="btn btn-primary">🥞</button>
<button class="btn btn-primary">🧇</button>
<button class="btn btn-primary">🥓</button>
<button class="btn btn-primary">🥩</button>
<button class="btn btn-primary">🍗</button>
<button class="btn btn-primary">🍖</button>
<button class="btn btn-primary">🌭</button>
<button class="btn btn-primary">🍔</button>
<button class="btn btn-primary">🍟</button>
<button class="btn btn-primary">🍕</button>
<button class="btn btn-primary">🥪</button>
<button class="btn btn-primary">🌮</button>
<button class="btn btn-primary">🌯</button>
<button class="btn btn-primary">🥙</button>
<button class="btn btn-primary">🧆</button>
<button class="btn btn-primary">🥘</button>
<button class="btn btn-primary">🍲</button>
<button class="btn btn-primary">🥣</button>
<button class="btn btn-primary">🥗</button>
<button class="btn btn-primary">🍿</button>
<button class="btn btn-primary">🧈</button>
<button class="btn btn-primary">🧂</button>
<button class="btn btn-primary">🥫</button>
<button class="btn btn-primary">🍱</button>
<button class="btn btn-primary">🍛</button>
<button class="btn btn-primary">🍚</button>
<button class="btn btn-primary">🍙</button>
<button class="btn btn-primary">🍘</button>
<button class="btn btn-primary">🍢</button>
<button class="btn btn-primary">🍡</button>
<button class="btn btn-primary">🍧</button>
<button class="btn btn-primary">🍨</button>
<button class="btn btn-primary">🍦</button>
<button class="btn btn-primary">🥧</button>
<button class="btn btn-primary">🍰</button>
<button class="btn btn-primary">🎂</button>
<button class="btn btn-primary">🍮</button>
<button class="btn btn-primary">🍭</button>
<button class="btn btn-primary">🍬</button>
<button class="btn btn-primary">🍫</button>
<button class="btn btn-primary">🍿</button>
<button class="btn btn-primary">🍩</button>
<button class="btn btn-primary">🍪</button>
<button class="btn btn-primary">🌰</button>
<button class="btn btn-primary">🥜</button>
<button class="btn btn-primary">🍯</button>
<button class="btn btn-primary">🥛</button>
<button class="btn btn-primary">🍼</button>
<button class="btn btn-primary">☕</button>
<button class="btn btn-primary">🍵</button>
<button class="btn btn-primary">🍶</button>
<button class="btn btn-primary">🍾</button>
<button class="btn btn-primary">🍷</button>
<button class="btn btn-primary">🍸</button>
<button class="btn btn-primary">🍹</button>
<button class="btn btn-primary">🍺</button>
<button class="btn btn-primary">🍻</button>
<button class="btn btn-primary">🥂</button>
<button class="btn btn-primary">🥃</button>
<button class="btn btn-primary">🥤</button>
<button class="btn btn-primary">🧃</button>
<button class="btn btn-primary">🧉</button>
<button class="btn btn-primary">🧊</button>
</div>
<a class="btn btn-secondary" 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 %} {% endblock %}

View file

@ -5,7 +5,6 @@ namespace App\Tests\Unit\Entity;
use App\Entity\FoodOrder; use App\Entity\FoodOrder;
use App\Entity\FoodVendor; use App\Entity\FoodVendor;
use App\Entity\MenuItem; use App\Entity\MenuItem;
use InvalidArgumentException;
use Symfony\Component\Uid\Ulid; use Symfony\Component\Uid\Ulid;
use function describe; use function describe;
@ -21,17 +20,6 @@ describe(FoodVendor::class, function (): void {
$vendor->setPhone('1234567890'); $vendor->setPhone('1234567890');
$this->assertEquals('1234567890', $vendor->getPhone()); $this->assertEquals('1234567890', $vendor->getPhone());
// Test emojis field
$this->assertNull($vendor->getEmojis());
$emojis = '😀😂🎉👍❤️';
$vendor->setEmojis($emojis);
$this->assertEquals($emojis, $vendor->getEmojis());
// Test emojis validation
$tooManyEmojis = '😀😂🎉👍❤️🚀🎈🎁🎊🎋🎍🎎🎏🎐🎑🎒🎓🎔🎕🎖🎗🎘🎙🎚🎛🎜🎝🎞🎟🎠🎡🎢';
$this->expectException(InvalidArgumentException::class);
$vendor->setEmojis($tooManyEmojis);
$this->assertCount(0, $vendor->getFoodOrders()); $this->assertCount(0, $vendor->getFoodOrders());
$order1 = new FoodOrder; $order1 = new FoodOrder;
$vendor->addFoodOrder($order1); $vendor->addFoodOrder($order1);