From 4bf3a68f43e4fcea34fe0a16cb3e1eecb97d332a Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Mon, 10 Sep 2018 14:40:33 +0200 Subject: Fixed assets rendering --- src/Renderer/Twig/Extensions/Assets.php | 42 +++++++++++++++++++ src/Renderer/TwigServiceProvider.php | 2 + templates/layouts/app.twig | 27 ++++--------- tests/Unit/Renderer/Twig/Extensions/AssetsTest.php | 47 ++++++++++++++++++++++ 4 files changed, 98 insertions(+), 20 deletions(-) create mode 100644 src/Renderer/Twig/Extensions/Assets.php create mode 100644 tests/Unit/Renderer/Twig/Extensions/AssetsTest.php diff --git a/src/Renderer/Twig/Extensions/Assets.php b/src/Renderer/Twig/Extensions/Assets.php new file mode 100644 index 00000000..2cdfb0fd --- /dev/null +++ b/src/Renderer/Twig/Extensions/Assets.php @@ -0,0 +1,42 @@ +urlGenerator = $urlGenerator; + } + + /** + * @return TwigFunction[] + */ + public function getFunctions() + { + return [ + new TwigFunction('asset', [$this, 'getAsset']), + ]; + } + + /** + * @param string $path + * @return UrlGenerator|string + */ + public function getAsset($path) + { + $path = ltrim($path, '/'); + + return $this->urlGenerator->to('/' . $path); + } +} diff --git a/src/Renderer/TwigServiceProvider.php b/src/Renderer/TwigServiceProvider.php index 0f453989..c70fb303 100644 --- a/src/Renderer/TwigServiceProvider.php +++ b/src/Renderer/TwigServiceProvider.php @@ -3,6 +3,7 @@ namespace Engelsystem\Renderer; use Engelsystem\Container\ServiceProvider; +use Engelsystem\Renderer\Twig\Extensions\Assets; use Engelsystem\Renderer\Twig\Extensions\Config; use Engelsystem\Renderer\Twig\Extensions\Globals; use Engelsystem\Renderer\Twig\Extensions\Session; @@ -15,6 +16,7 @@ class TwigServiceProvider extends ServiceProvider { /** @var array */ protected $extensions = [ + 'assets' => Assets::class, 'config' => Config::class, 'globals' => Globals::class, 'session' => Session::class, diff --git a/templates/layouts/app.twig b/templates/layouts/app.twig index 42d5610c..aa45484d 100644 --- a/templates/layouts/app.twig +++ b/templates/layouts/app.twig @@ -1,19 +1,20 @@ {% set theme = user.color|default(config('theme')) %} - + {% block head %} {% block title %}{{ title }}{% endblock %} - Engelsystem + - - - - - + + + + {% if atom_feed -%} {% endif %} + {% endblock %} @@ -67,20 +68,6 @@ {% endblock %} - - - - - - - - - - {% endblock %} diff --git a/tests/Unit/Renderer/Twig/Extensions/AssetsTest.php b/tests/Unit/Renderer/Twig/Extensions/AssetsTest.php new file mode 100644 index 00000000..2d7ba6cd --- /dev/null +++ b/tests/Unit/Renderer/Twig/Extensions/AssetsTest.php @@ -0,0 +1,47 @@ +createMock(UrlGenerator::class); + + $extension = new Assets($urlGenerator); + $functions = $extension->getFunctions(); + + $this->assertExtensionExists('asset', [$extension, 'getAsset'], $functions); + } + + /** + * @covers \Engelsystem\Renderer\Twig\Extensions\Assets::getAsset + */ + public function testGetAsset() + { + /** @var UrlGenerator|MockObject $urlGenerator */ + $urlGenerator = $this->createMock(UrlGenerator::class); + + $urlGenerator->expects($this->exactly(2)) + ->method('to') + ->with('/assets/foo.css') + ->willReturn('https://foo.bar/project/assets/foo.css'); + + $extension = new Assets($urlGenerator); + + $return = $extension->getAsset('assets/foo.css'); + $this->assertEquals('https://foo.bar/project/assets/foo.css', $return); + + $return = $extension->getAsset('/assets/foo.css'); + $this->assertEquals('https://foo.bar/project/assets/foo.css', $return); + } +} -- cgit v1.2.3-54-g00ecf