diff --git a/config/services.yaml b/config/services.yaml index 57f7d5b..4ee12b9 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -67,4 +67,4 @@ services: # other servces App\Service\ProviderResolver: - arguments: [!tagged app.provider] + arguments: [!tagged app.provider, '%kernel.debug%'] diff --git a/resources/styles/_common.scss b/resources/styles/_common.scss index a93e881..06bb866 100644 --- a/resources/styles/_common.scss +++ b/resources/styles/_common.scss @@ -1,5 +1,6 @@ .list-underlined { @extend .list-unstyled; + margin-bottom: 0; > li { border-bottom: 1px solid $dark; @@ -45,23 +46,37 @@ align-items: center; } -.section__title { - @extend .alert; - @extend .alert-dark; +.section { + margin-bottom: 1rem; - font-size: medium; - background: transparent; - padding-top: .5rem; - padding-bottom: .5rem; + .section__title { + @extend .alert; + @extend .alert-dark; - line-height: $btn-line-height; + font-size: medium; + background: transparent; + padding-top: .5rem; + padding-bottom: .5rem; - &:hover { - background: none; + line-height: $btn-line-height; + + &:hover { + background: none; + } + + .btn { + margin-top: -.5rem; + margin-bottom: -.5rem; + } } +} - .btn { - margin-top: -.5rem; - margin-bottom: -.5rem; +#app { + margin-top: $grid-gutter-width / 2; +} + +@include media-breakpoint-up('md') { + #app { + margin-top: 4rem; } } \ No newline at end of file diff --git a/src/Provider/Dummy/DummyMessageRepository.php b/src/Provider/Dummy/DummyMessageRepository.php new file mode 100644 index 0000000..86ee2f0 --- /dev/null +++ b/src/Provider/Dummy/DummyMessageRepository.php @@ -0,0 +1,33 @@ +<?php + +namespace App\Provider\Dummy; + +use App\Model\Message; +use App\Model\Stop; +use App\Provider\MessageRepository; +use Carbon\Carbon; +use Tightenco\Collect\Support\Collection; + +class DummyMessageRepository implements MessageRepository +{ + public function getAll(): Collection + { + return collect([ + Message::TYPE_INFO, + Message::TYPE_UNKNOWN, + Message::TYPE_BREAKDOWN + ])->map(function ($type) { + return Message::createFromArray([ + 'message' => 'Lorem ipsum dolor sit amet.', + 'type' => $type, + 'validFrom' => Carbon::now(), + 'validTo' => Carbon::now()->addHour() + ]); + }); + } + + public function getForStop(Stop $stop): Collection + { + return $this->getAll(); + } +} \ No newline at end of file diff --git a/src/Provider/Dummy/DummyProvider.php b/src/Provider/Dummy/DummyProvider.php new file mode 100644 index 0000000..3736862 --- /dev/null +++ b/src/Provider/Dummy/DummyProvider.php @@ -0,0 +1,49 @@ +<?php + +namespace App\Provider\Dummy; + +use App\Exception\NotSupportedException; +use App\Provider\DepartureRepository; +use App\Provider\LineRepository; +use App\Provider\MessageRepository; +use App\Provider\Provider; +use App\Provider\StopRepository; +use App\Provider\TrackRepository; + +class DummyProvider implements Provider +{ + public function getDepartureRepository(): DepartureRepository + { + throw new NotSupportedException(); + } + + public function getLineRepository(): LineRepository + { + throw new NotSupportedException(); + } + + public function getStopRepository(): StopRepository + { + throw new NotSupportedException(); + } + + public function getMessageRepository(): MessageRepository + { + return new DummyMessageRepository(); + } + + public function getTrackRepository(): TrackRepository + { + throw new NotSupportedException(); + } + + public function getName() + { + return "Dummy data for debugging"; + } + + public function getIdentifier() + { + return "dummy"; + } +} \ No newline at end of file diff --git a/src/Provider/ZtmGdansk/ZtmGdanskDataUpdateSubscriber.php b/src/Provider/ZtmGdansk/ZtmGdanskDataUpdateSubscriber.php index 86ac191..7dc4584 100644 --- a/src/Provider/ZtmGdansk/ZtmGdanskDataUpdateSubscriber.php +++ b/src/Provider/ZtmGdansk/ZtmGdanskDataUpdateSubscriber.php @@ -9,7 +9,7 @@ use App\Entity\StopEntity; use App\Entity\StopInTrack; use App\Entity\TrackEntity; use App\Model\Line as LineModel; -use App\Provider\ZtmGdanskProvider; +use App\Provider\ZtmGdansk\ZtmGdanskProvider; use App\Service\DataUpdater; use App\Service\IdUtils; use Doctrine\ORM\EntityManagerInterface; diff --git a/src/Provider/ZtmGdansk/ZtmGdanskMessageRepository.php b/src/Provider/ZtmGdansk/ZtmGdanskMessageRepository.php index 1999211..a8ea28a 100644 --- a/src/Provider/ZtmGdansk/ZtmGdanskMessageRepository.php +++ b/src/Provider/ZtmGdansk/ZtmGdanskMessageRepository.php @@ -7,7 +7,7 @@ namespace App\Provider\ZtmGdansk; use App\Model\Message; use App\Model\Stop; use App\Provider\MessageRepository; -use App\Provider\ZtmGdanskProvider; +use App\Provider\ZtmGdansk\ZtmGdanskProvider; use App\Service\IdUtils; use Carbon\Carbon; use Symfony\Component\Cache\Adapter\AdapterInterface; diff --git a/src/Provider/ZtmGdanskProvider.php b/src/Provider/ZtmGdansk/ZtmGdanskProvider.php similarity index 89% rename from src/Provider/ZtmGdanskProvider.php rename to src/Provider/ZtmGdansk/ZtmGdanskProvider.php index edbfd0a..0fa6685 100644 --- a/src/Provider/ZtmGdanskProvider.php +++ b/src/Provider/ZtmGdansk/ZtmGdanskProvider.php @@ -1,12 +1,18 @@ <?php -namespace App\Provider; +namespace App\Provider\ZtmGdansk; use App\Entity\ProviderEntity; use App\Provider\Database\GenericLineRepository; use App\Provider\Database\GenericStopRepository; use App\Provider\Database\GenericTrackRepository; +use App\Provider\DepartureRepository; +use App\Provider\LineRepository; +use App\Provider\MessageRepository; +use App\Provider\Provider; +use App\Provider\StopRepository; +use App\Provider\TrackRepository; use App\Provider\ZtmGdansk\{ZtmGdanskDepartureRepository, ZtmGdanskMessageRepository}; use App\Service\Proxy\ReferenceFactory; use Doctrine\ORM\EntityManagerInterface; diff --git a/src/Service/ProviderResolver.php b/src/Service/ProviderResolver.php index d793a14..85e2758 100644 --- a/src/Service/ProviderResolver.php +++ b/src/Service/ProviderResolver.php @@ -4,17 +4,23 @@ namespace App\Service; use App\Exception\NonExistentServiceException; +use App\Provider\Dummy\DummyProvider; use App\Provider\Provider; use Kadet\Functional\Transforms as t; +use Kadet\Functional\Predicates as p; use Tightenco\Collect\Support\Collection; class ProviderResolver { private $providers; - public function __construct($providers) + public function __construct($providers, bool $debug) { $this->providers = collect($providers)->keyBy(t\property('identifier')); + + if (!$debug) { + $this->providers = $this->providers->filter(p\instance(DummyProvider::class)->negate()); + } } /**\ diff --git a/templates/app.html.twig b/templates/app.html.twig index f6b6719..4e9e119 100644 --- a/templates/app.html.twig +++ b/templates/app.html.twig @@ -3,17 +3,8 @@ {% block body %} <div class="row"> - <div class="col-md-4"> - <section class="picker"> - <h2 class="section__title"> - <fa :icon="['fal', 'sign']" fixed-width></fa> - Przystanki - </h2> - <stop-picker :stops.sync="stops"></stop-picker> - </section> - </div> - <div class="col-md-8"> - <section class="messages" v-show="messages.count > 0"> + <div class="col-md-8 order-md-last"> + <section class="section messages" v-show="messages.count > 0"> <h2 class="section__title flex"> <fa :icon="['fal', 'bullhorn']" fixed-width class="mr-2"></fa> Komunikaty <span class="ml-2 badge badge-pill badge-dark">{{ '{{ messages.count }}' }}</span> @@ -26,7 +17,7 @@ </fold> </section> - <section> + <section class="section"> <h2 class="section__title flex"> <fa :icon="['fal', 'clock']" fixed-width class="mr-1"></fa> Odjazdy @@ -39,6 +30,15 @@ <departures :stops="stops" ref="departures" @update:state="departures.state = $event"></departures> </section> </div> + <div class="col-md-4 order-md-first"> + <section class="section picker"> + <h2 class="section__title"> + <fa :icon="['fal', 'sign']" fixed-width></fa> + Przystanki + </h2> + <stop-picker :stops.sync="stops"></stop-picker> + </section> + </div> </div> {% endblock %} diff --git a/templates/base.html.twig b/templates/base.html.twig index d36c3fe..31bee37 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -8,7 +8,7 @@ <title>{% block title %}Czy dojadÄ™?{% endblock %}</title> </head> <body> - <main role="main" class="container mt-5" id="app"> + <main role="main" class="container" id="app"> {% block body %}{% endblock %} </main>