diff --git a/assets/sass/_elements.scss b/assets/sass/_elements.scss index 7f21c80..ab54b77 100644 --- a/assets/sass/_elements.scss +++ b/assets/sass/_elements.scss @@ -1,5 +1,5 @@ body { - font: "DejaVu Sans Mono", "Menlo", "Consolas", monospace; + font-family: var(--font-family-default); background: --color-background; color: --color-foreground; @@ -10,6 +10,10 @@ body { h1 { color: var(--color-blue-dark); + font-family: var(--font-family-headlines); + font-weight: 300; + letter-spacing: .14em; + word-spacing: .3em; } a { diff --git a/assets/sass/_layout.scss b/assets/sass/_layout.scss new file mode 100644 index 0000000..dd8217a --- /dev/null +++ b/assets/sass/_layout.scss @@ -0,0 +1,4 @@ +body > main { + display: grid; + grid-template-columns: var(--width-sidebar-max) 100%; +} diff --git a/assets/sass/_variables.scss b/assets/sass/_variables.scss index 2792e2a..367c61f 100644 --- a/assets/sass/_variables.scss +++ b/assets/sass/_variables.scss @@ -12,5 +12,8 @@ --width-border-default: 0.2rem; - --width-sidebar-max: 10rem; + --width-sidebar-max: 15rem; + + --font-family-default: "DejaVu Sans Mono", "Menlo", "Consolas", monospace; + --font-family-headlines: "Montserrat", "Avenir", "Roboto", sans-serif; } diff --git a/assets/sass/components/_content.scss b/assets/sass/components/_content.scss new file mode 100644 index 0000000..ba016b1 --- /dev/null +++ b/assets/sass/components/_content.scss @@ -0,0 +1,7 @@ +body > main > section { + padding: var(--spacing-elements); + + header h1 { + margin: 0; + } +} diff --git a/assets/sass/components/_sidebar.scss b/assets/sass/components/_sidebar.scss index 1c9c64b..5963dfc 100644 --- a/assets/sass/components/_sidebar.scss +++ b/assets/sass/components/_sidebar.scss @@ -1,5 +1,4 @@ -body > nav { - max-width: var(--width-sidebar-max); +body > main > nav { border: { right: var(--color-blue-light) solid var(--width-border-default); } diff --git a/assets/sass/index.scss b/assets/sass/index.scss index dea2c91..0c3b2f1 100644 --- a/assets/sass/index.scss +++ b/assets/sass/index.scss @@ -2,4 +2,6 @@ @import 'elements'; @import 'components/header'; @import 'components/sidebar'; +@import 'components/content'; @import 'components/footer'; +@import 'layout'; diff --git a/composer.json b/composer.json index 1b58a1a..20980e0 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,7 @@ "php": "^7.2.5", "ext-ctype": "*", "ext-iconv": "*", + "sensio/framework-extra-bundle": "^5.5", "symfony/asset": "5.0.*", "symfony/console": "5.0.*", "symfony/dotenv": "5.0.*", @@ -15,6 +16,9 @@ "symfony/yaml": "5.0.*" }, "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^3.3", + "symfony/maker-bundle": "^1.18", + "symfony/profiler-pack": "^1.0" }, "config": { "preferred-install": { diff --git a/composer.lock b/composer.lock index 7a09235..807a5c2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f28137780ed4bbe2e8ff224340449ea7", + "content-hash": "e758c06757d10ff8c2fbac8950b983a3", "packages": [ { "name": "doctrine/annotations", @@ -1629,6 +1629,79 @@ ], "time": "2020-03-23T09:12:05+00:00" }, + { + "name": "sensio/framework-extra-bundle", + "version": "v5.5.5", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", + "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "php": ">=7.1.3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "nyholm/psr7": "^1.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/monolog-bridge": "^4.0|^5.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.3.5|^5.0", + "symfony/psr-http-message-bridge": "^1.1", + "symfony/security-bundle": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "time": "2020-05-06T12:12:33+00:00" + }, { "name": "symfony/asset", "version": "v5.0.8", @@ -4307,7 +4380,639 @@ "time": "2018-04-25T15:33:34+00:00" } ], - "packages-dev": [], + "packages-dev": [ + { + "name": "doctrine/data-fixtures", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "7ebac50901eb4516816ac39100dba1759d843943" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7ebac50901eb4516816ac39100dba1759d843943", + "reference": "7ebac50901eb4516816ac39100dba1759d843943", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.11", + "doctrine/persistence": "^1.3.3", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "doctrine/dbal": "^2.5.4", + "doctrine/mongodb-odm": "^1.3.0", + "doctrine/orm": "^2.7.0", + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM with PHP 7", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2020-05-25T19:45:03+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "39defca57ee0949e1475c46177b30b6d1b732e8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/39defca57ee0949e1475c46177b30b6d1b732e8f", + "reference": "39defca57ee0949e1475c46177b30b6d1b732e8f", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.3", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.6.0", + "doctrine/persistence": "^1.3", + "php": "^7.1", + "symfony/config": "^3.4|^4.3|^5.0", + "symfony/console": "^3.4|^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.3|^5.0", + "symfony/doctrine-bridge": "^3.4|^4.1|^5.0", + "symfony/http-kernel": "^3.4|^4.3|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.4", + "symfony/phpunit-bridge": "^4.1|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2020-04-02T16:40:37+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2020-04-10T16:34:50+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "b38c75be880b152ab55cef6cd52bf882d2b6518e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/b38c75be880b152ab55cef6cd52bf882d2b6518e", + "reference": "b38c75be880b152ab55cef6cd52bf882d2b6518e", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.2", + "nikic/php-parser": "^4.0", + "php": "^7.1.3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.8|^2.0", + "doctrine/orm": "^2.3", + "friendsofphp/php-cs-fixer": "^2.8", + "friendsoftwig/twigcs": "^3.1.2", + "symfony/http-client": "^4.3|^5.0", + "symfony/phpunit-bridge": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "generator", + "scaffold", + "scaffolding" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-15T18:51:23+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/profiler-pack", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/profiler-pack.git", + "reference": "99c4370632c2a59bb0444852f92140074ef02209" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209", + "reference": "99c4370632c2a59bb0444852f92140074ef02209", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/web-profiler-bundle": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony web profiler", + "time": "2018-12-10T12:11:44+00:00" + }, + { + "name": "symfony/string", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", + "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-16T13:02:39+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/67fc2302ba7ca3d917decea6d3accdbd055398d1", + "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/form": "<4.4", + "symfony/messenger": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + } + ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], diff --git a/config/bundles.php b/config/bundles.php index 9cf791c..cdc47d3 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -6,4 +6,8 @@ return [ Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], ]; diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml new file mode 100644 index 0000000..e92166a --- /dev/null +++ b/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..1821ccc --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml new file mode 100644 index 0000000..03752de --- /dev/null +++ b/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml index 747b309..a159146 100644 --- a/config/packages/twig.yaml +++ b/config/packages/twig.yaml @@ -2,3 +2,4 @@ twig: default_path: '%kernel.project_dir%/templates' globals: app_name: RSS Reader + buckets: '@App\Repository\BucketRepository' diff --git a/config/routes.yaml b/config/routes.yaml index 14a7559..40e54b5 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -4,3 +4,7 @@ start: controller: Symfony\Bundle\FrameworkBundle\Controller\TemplateController defaults: template: 'static/start.html.twig' + +bucket: + path: /bucket/{slug} + controller: App\Controller\BucketController::show diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml deleted file mode 100644 index e92efc5..0000000 --- a/config/routes/annotations.yaml +++ /dev/null @@ -1,7 +0,0 @@ -controllers: - resource: ../../src/Controller/ - type: annotation - -kernel: - resource: ../../src/Kernel.php - type: annotation diff --git a/config/routes/dev/web_profiler.yaml b/config/routes/dev/web_profiler.yaml new file mode 100644 index 0000000..c82beff --- /dev/null +++ b/config/routes/dev/web_profiler.yaml @@ -0,0 +1,7 @@ +web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + +web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/config/services.yaml b/config/services.yaml index 5c4b417..ff7ddf6 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -22,6 +22,3 @@ services: App\Controller\: resource: '../src/Controller' tags: ['controller.service_arguments'] - - # add more service definitions when explicit configuration is needed - # please note that last definitions always *replace* previous ones diff --git a/public/css/style.css b/public/css/style.css index f080c96..e3cf2a4 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -9,17 +9,23 @@ --color-white-dark: #B0B0B0; --spacing-elements: 1rem; --width-border-default: 0.2rem; - --width-sidebar-max: 10rem; } + --width-sidebar-max: 15rem; + --font-family-default: "DejaVu Sans Mono", "Menlo", "Consolas", monospace; + --font-family-headlines: "Montserrat", "Avenir", "Roboto", sans-serif; } body { - font: "DejaVu Sans Mono", "Menlo", "Consolas", monospace; + font-family: var(--font-family-default); background: --color-background; color: --color-foreground; margin: 0; padding: 0; } h1 { - color: var(--color-blue-dark); } + color: var(--color-blue-dark); + font-family: var(--font-family-headlines); + font-weight: 300; + letter-spacing: .14em; + word-spacing: .3em; } a { color: var(--color-wihte-light); @@ -36,13 +42,21 @@ body > header { body > header h1 { margin: 0; } -body > nav { - max-width: var(--width-sidebar-max); +body > main > nav { border-right: var(--color-blue-light) solid var(--width-border-default); } - body > nav a { + body > main > nav a { display: block; padding: var(--spacing-elements); } +body > main > section { + padding: var(--spacing-elements); } + body > main > section header h1 { + margin: 0; } + body > footer { padding: var(--spacing-elements); border-top: var(--color-blue-light) solid var(--width-border-default); } + +body > main { + display: grid; + grid-template-columns: var(--width-sidebar-max) 100%; } diff --git a/src/Controller/BucketController.php b/src/Controller/BucketController.php new file mode 100644 index 0000000..1041dfb --- /dev/null +++ b/src/Controller/BucketController.php @@ -0,0 +1,16 @@ +render('bucket/index.html.twig', [ + 'bucket' => $bucket, + ]); + } +} diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php new file mode 100644 index 0000000..c714cc1 --- /dev/null +++ b/src/DataFixtures/AppFixtures.php @@ -0,0 +1,52 @@ +slugger = $slugger; + } + + public function load(ObjectManager $manager) + { + $buckets = [ + 'TYPO3 (official)', + 'TYPO3 (related)', + 'Updates', + 'Linux', + 'Work', + 'New', + 'tech', + 'Random', + 'Music', + 'Sport', + 'Games', + 'Coding', + 'Vim', + 'Magazine', + 'Podcasts', + ]; + + foreach ($buckets as $bucketName) { + $bucket = new Bucket( + $bucketName, + strtolower($this->slugger->slug($bucketName)) + ); + $manager->persist($bucket); + } + + $manager->flush(); + } +} diff --git a/src/Entity/Bucket.php b/src/Entity/Bucket.php new file mode 100644 index 0000000..8d7db3e --- /dev/null +++ b/src/Entity/Bucket.php @@ -0,0 +1,53 @@ +name = $name; + $this->slug = $slug; + } + + public function getId(): int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + public function getSlug(): string + { + return $this->slug; + } +} diff --git a/src/Migrations/Version20200526101712.php b/src/Migrations/Version20200526101712.php new file mode 100644 index 0000000..ca9dcf8 --- /dev/null +++ b/src/Migrations/Version20200526101712.php @@ -0,0 +1,36 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); + + $this->addSql('CREATE TABLE bucket (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL)'); + $this->addSql('CREATE UNIQUE INDEX bucket_routing ON bucket (slug)'); + } + + public function down(Schema $schema) : void + { + // this down() migration is auto-generated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); + + $this->addSql('DROP TABLE bucket'); + } +} diff --git a/src/Repository/BucketRepository.php b/src/Repository/BucketRepository.php new file mode 100644 index 0000000..28ad12a --- /dev/null +++ b/src/Repository/BucketRepository.php @@ -0,0 +1,21 @@ +{{ app_name }} - +
+ - {% block body %}{% endblock %} +
+ {% block body %}{% endblock %} +
+