From 4d7c4cde5f3182589449b73b86f6cf7969a7217e Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Thu, 10 Jan 2019 10:39:10 +0000 Subject: [PATCH 1/4] Simplify setting attributes in patterns --- Dockerfile | 5 ++- composer.json | 3 ++ config/config.yml | 2 + gulpfile.babel.js | 13 ++++-- .../content-header/content-header.twig | 4 +- source/php/Twig/MergeExtension.php | 42 +++++++++++++++++++ 6 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 source/php/Twig/MergeExtension.php diff --git a/Dockerfile b/Dockerfile index 6a6e3de3..8a3bfe03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,8 +47,11 @@ COPY composer.json \ ./ RUN mkdir public source && \ - composer --no-interaction install --ignore-platform-reqs --classmap-authoritative --no-suggest --prefer-dist + composer --no-interaction install --ignore-platform-reqs --classmap-authoritative --no-autoloader --no-suggest --prefer-dist +COPY source/php/ source/php/ + +RUN composer --no-interaction dump-autoload --classmap-authoritative # diff --git a/composer.json b/composer.json index 64eba3a4..d833042e 100644 --- a/composer.json +++ b/composer.json @@ -4,6 +4,9 @@ "autoload": { "psr-0": { "PatternLab\\": "core/src/" + }, + "psr-4": { + "Libero\\PatternLibrary\\": "source/php" } }, "require": { diff --git a/config/config.yml b/config/config.yml index 8554362a..5401f480 100644 --- a/config/config.yml +++ b/config/config.yml @@ -39,3 +39,5 @@ twigFilterExt: filter.php twigFunctionExt: function.php twigTagExt: tag.php twigTestExt: test.php +twigExtensions: + - Libero\PatternLibrary\Twig\MergeExtension diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 9e2a2801..600552e9 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -50,6 +50,7 @@ const buildConfig = (invocationArgs, publicRoot, sourceRoot, testRoot, exportRoo config.dir.src.fonts = `${config.sourceRoot}/fonts`; config.dir.src.templates = `${config.sourceRoot}/_patterns`; config.dir.src.js = `${config.sourceRoot}/js`; + config.dir.src.php = `${config.sourceRoot}/php`; config.dir.test.sass = `${config.testRoot}/sass`; @@ -59,6 +60,7 @@ const buildConfig = (invocationArgs, publicRoot, sourceRoot, testRoot, exportRoo config.dir.out.images = `${config.exportRoot}/images`; config.dir.out.fonts = `${config.exportRoot}/fonts`; config.dir.out.templates = `${config.exportRoot}/templates`; + config.dir.out.php = `${config.exportRoot}/php`; config.files = { src: {}, @@ -86,8 +88,9 @@ const buildConfig = (invocationArgs, publicRoot, sourceRoot, testRoot, exportRoo config.files.src.templates = [ `${config.dir.src.templates}/*.twig`, `${config.dir.src.templates}/**/*.twig`, - `!${config.dir.src.templates}/02-pages/**/*.twig` + `!${config.dir.src.templates}/02-pages/**/*.twig`, ]; + config.files.src.php = `${config.dir.src.php}/**/*`; config.files.src.derivedConfigs = [ `${config.dir.src.sass}/variables/**/*`, `${config.dir.src.js}/derivedConfig.json`, @@ -180,7 +183,7 @@ const exportFonts = () => const exportTemplates = () => gulp.src(config.files.src.templates) - // Rename files to standard Twig usage + // Rename files to standard Twig usage .pipe(rename(path => { path.basename = path.basename.replace(/^_/, ''); path.extname = '.html.twig'; @@ -191,9 +194,13 @@ const exportTemplates = () => .pipe(flatten({includeParents: false})) .pipe(gulp.dest(config.dir.out.templates)); +const exportPhp = () => + gulp.src(config.files.src.php) + .pipe(gulp.dest(config.dir.out.php)); + export const exportPatterns = gulp.series( cleanExport, - gulp.parallel(exportCss, exportSass, exportSassVendor, exportImages, exportFonts, exportTemplates), + gulp.parallel(exportCss, exportSass, exportSassVendor, exportImages, exportFonts, exportTemplates, exportPhp), ); // Default diff --git a/source/_patterns/01-molecules/content-header/content-header.twig b/source/_patterns/01-molecules/content-header/content-header.twig index 444623ce..8c3431a8 100644 --- a/source/_patterns/01-molecules/content-header/content-header.twig +++ b/source/_patterns/01-molecules/content-header/content-header.twig @@ -1,4 +1,4 @@ -{% set attributes = attributes|default({})|merge({class: attributes.class|default([])|merge(['content-header', 'wrapper']) }) %} +{% set attributes = {class: ['content-header', 'wrapper']}|merge_recursive(attributes) %}
@@ -26,7 +26,7 @@ {% set lengthClass = 'xx-long' %} {% endif %} - {% set attributes = attributes|default({})|merge({class: attributes.class|default([])|merge(['content-header__title', 'content-header__title--' ~ lengthClass]) }) %} + {% set attributes = {class: ['content-header__title', 'content-header__title--' ~ lengthClass]}|merge_recursive(attributes) %} {% set level = 1 %} {% include 'atoms-heading' %} diff --git a/source/php/Twig/MergeExtension.php b/source/php/Twig/MergeExtension.php new file mode 100644 index 00000000..ef6f6a8d --- /dev/null +++ b/source/php/Twig/MergeExtension.php @@ -0,0 +1,42 @@ +toArray($one), $this->toArray($two)); + } + + private function toArray(iterable $iterable): array + { + $result = []; + + foreach ($iterable as $key => $value) { + if (is_iterable($value)) { + $value = $this->toArray($value); + } + + $result[$key] = $value; + } + + return $result; + } +} From 41fbb981c57df8343bc4398ae3d2938b0b0065fe Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Wed, 3 Apr 2019 16:28:51 +0100 Subject: [PATCH 2/4] Not meant --- config/listeners.json | 8 ++++---- gulpfile.babel.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/listeners.json b/config/listeners.json index 2c617154..a54b1b78 100644 --- a/config/listeners.json +++ b/config/listeners.json @@ -1,6 +1,6 @@ { - "listeners": [ - "\\PatternLab\\Twig\\PseudoPatternsListener", - "\\PatternLab\\Twig\\StrictVariablesListener" - ] + "listeners": [ + "\\PatternLab\\Twig\\PseudoPatternsListener", + "\\PatternLab\\Twig\\StrictVariablesListener" + ] } diff --git a/gulpfile.babel.js b/gulpfile.babel.js index ffcebcff..dcf14a33 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -183,7 +183,7 @@ const exportFonts = () => const exportTemplates = () => gulp.src(config.files.src.templates) - // Rename files to standard Twig usage + // Rename files to standard Twig usage .pipe(rename(path => { path.basename = path.basename.replace(/^_/, ''); path.extname = '.html.twig'; From 4557ed5e4ac153044b93640eb377f697c8be752a Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Wed, 3 Apr 2019 16:29:07 +0100 Subject: [PATCH 3/4] Make public --- source/php/Twig/MergeExtension.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/php/Twig/MergeExtension.php b/source/php/Twig/MergeExtension.php index 28b1ad20..0adbce91 100644 --- a/source/php/Twig/MergeExtension.php +++ b/source/php/Twig/MergeExtension.php @@ -2,7 +2,6 @@ namespace Libero\PatternLibrary\Twig; -use Closure; use Twig\Extension\AbstractExtension; use Twig\Extension\GlobalsInterface; use Twig\TwigFilter; @@ -13,10 +12,10 @@ final class MergeExtension extends AbstractExtension implements GlobalsInterface { public function getFilters(): iterable { - yield new TwigFilter('merge_recursive', Closure::fromCallable([$this, 'mergeRecursive'])); + yield new TwigFilter('merge_recursive', [$this, 'mergeRecursive']); } - private function mergeRecursive(iterable $one, iterable $two): iterable + public function mergeRecursive(iterable $one, iterable $two): iterable { return array_merge_recursive($this->toArray($one), $this->toArray($two)); } From c6d6eafddf838dd3069aa2cdcdbbcbe407f345da Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Wed, 3 Apr 2019 16:36:53 +0100 Subject: [PATCH 4/4] Simplify --- .../00-atoms/block/paragraph/paragraph.twig | 2 +- .../01-molecules/content-meta/content-meta.twig | 6 +++--- source/_patterns/01-molecules/section/section.twig | 6 +++--- .../_patterns/01-molecules/tag-list/tag-list.twig | 14 ++++++++------ .../content-header/content-header.twig | 2 +- .../02-organisms/item-tags/item-tags.twig | 2 +- .../03-templates/content-grid/content-grid.twig | 2 +- .../03-templates/page-grid/page-grid.twig | 2 +- 8 files changed, 19 insertions(+), 17 deletions(-) diff --git a/source/_patterns/00-atoms/block/paragraph/paragraph.twig b/source/_patterns/00-atoms/block/paragraph/paragraph.twig index 6d689086..76a51631 100644 --- a/source/_patterns/00-atoms/block/paragraph/paragraph.twig +++ b/source/_patterns/00-atoms/block/paragraph/paragraph.twig @@ -1,4 +1,4 @@ -{%- set attributes = {class: ['paragraph']}|merge_recursive(attributes|default({})) -%} +{%- set attributes = {class: 'paragraph'}|merge_recursive(attributes|default({})) -%}

diff --git a/source/_patterns/01-molecules/content-meta/content-meta.twig b/source/_patterns/01-molecules/content-meta/content-meta.twig index 908766ae..c8667a6b 100644 --- a/source/_patterns/01-molecules/content-meta/content-meta.twig +++ b/source/_patterns/01-molecules/content-meta/content-meta.twig @@ -1,4 +1,4 @@ -{%- set attributes = {class: ['content-meta']}|merge_recursive(attributes|default({})) -%} +{%- set attributes = {class: 'content-meta'}|merge_recursive(attributes|default({})) -%}

    @@ -7,7 +7,7 @@ {%- with item only -%} {%- block item -%} - {%- set attributes = {class: ['content-meta__item']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'content-meta__item'}|merge_recursive(attributes|default({})) -%}
  • @@ -15,7 +15,7 @@ {%- block content -%} {%- if attributes.href is defined -%} - {%- set attributes = {class: ['content-meta__link']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'content-meta__link'}|merge_recursive(attributes) -%} {%- endif -%} {%- include 'atoms-link' -%} diff --git a/source/_patterns/01-molecules/section/section.twig b/source/_patterns/01-molecules/section/section.twig index 511c3965..c470ac35 100644 --- a/source/_patterns/01-molecules/section/section.twig +++ b/source/_patterns/01-molecules/section/section.twig @@ -1,4 +1,4 @@ -{%- set attributes ={class: ['section']}|merge_recursive(attributes|default({})) -%} +{%- set attributes ={class: 'section'}|merge_recursive(attributes|default({})) -%}
    @@ -8,7 +8,7 @@ {%- if text is defined -%} - {%- set attributes = {class: ['section__heading']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'section__heading'}|merge_recursive(attributes|default({})) -%} {%- set level = level|default(2) -%} {%- include 'atoms-heading' -%} @@ -23,7 +23,7 @@ {%- block content -%} - {%- set attributes = {class: ['section__body']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'section__body'}|merge_recursive(attributes|default({})) -%}
    {%- include 'atoms-text' with {nodes: content} -%} diff --git a/source/_patterns/01-molecules/tag-list/tag-list.twig b/source/_patterns/01-molecules/tag-list/tag-list.twig index 94e940a6..fae5bd04 100644 --- a/source/_patterns/01-molecules/tag-list/tag-list.twig +++ b/source/_patterns/01-molecules/tag-list/tag-list.twig @@ -1,4 +1,4 @@ -{%- set attributes = {class: ['tag-list']}|merge_recursive(attributes|default({})) -%} +{%- set attributes = {class: 'tag-list'}|merge_recursive(attributes|default({})) -%}
    @@ -7,7 +7,7 @@ {% if text is defined %} - {%- set attributes = {class: ['tag-list__title']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'tag-list__title'}|merge_recursive(attributes|default({})) -%} {%- include 'atoms-heading' with {level: level|default(4)} -%} {% endif %} @@ -18,12 +18,14 @@ {%- with list only -%} {%- block list -%} - {%- set attributes = {class: ['tag-list__list']}|merge_recursive(attributes|default({})) -%} + {%- set classes = ['tag-list__list'] -%} {%- if singleLine|default(false) -%} - {%- set attributes = {class: ['tag-list__list--single-line']}|merge_recursive(attributes|default({})) -%} + {%- set classes = classes|merge(['tag-list__list--single-line']) -%} {%- endif -%} + {%- set attributes = {class: classes}|merge_recursive(attributes|default({})) -%} +
      {%- for item in items -%} @@ -31,7 +33,7 @@ {%- with item only -%} {%- block item -%} - {%- set attributes = {class: ['tag-list__item']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'tag-list__item'}|merge_recursive(attributes|default({})) -%}
    • @@ -39,7 +41,7 @@ {%- block content -%} {%- if attributes.href is defined -%} - {%- set attributes = {class: ['tag-list__link']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'tag-list__link'}|merge_recursive(attributes|default({})) -%} {%- endif -%} {%- include 'atoms-link' -%} diff --git a/source/_patterns/02-organisms/content-header/content-header.twig b/source/_patterns/02-organisms/content-header/content-header.twig index 897e1566..48aa5b24 100644 --- a/source/_patterns/02-organisms/content-header/content-header.twig +++ b/source/_patterns/02-organisms/content-header/content-header.twig @@ -1,4 +1,4 @@ -{% set attributes = {class: ['content-header']}|merge_recursive(attributes|default({})) %} +{% set attributes = {class: 'content-header'}|merge_recursive(attributes|default({})) %}
      diff --git a/source/_patterns/02-organisms/item-tags/item-tags.twig b/source/_patterns/02-organisms/item-tags/item-tags.twig index 1c788b92..40f45b57 100644 --- a/source/_patterns/02-organisms/item-tags/item-tags.twig +++ b/source/_patterns/02-organisms/item-tags/item-tags.twig @@ -1,4 +1,4 @@ -{%- set attributes = {class: ['item-tags']}|merge_recursive(attributes|default({})) -%} +{%- set attributes = {class: 'item-tags'}|merge_recursive(attributes|default({})) -%}
      diff --git a/source/_patterns/03-templates/content-grid/content-grid.twig b/source/_patterns/03-templates/content-grid/content-grid.twig index 3fede325..0269235e 100644 --- a/source/_patterns/03-templates/content-grid/content-grid.twig +++ b/source/_patterns/03-templates/content-grid/content-grid.twig @@ -34,7 +34,7 @@ {%- with arguments|merge({_template: template}) only -%} - {%- set attributes = {class: ['content-grid__item']}|merge_recursive(attributes|default({})) -%} + {%- set attributes = {class: 'content-grid__item'}|merge_recursive(attributes|default({})) -%} {%- include _template -%} diff --git a/source/_patterns/03-templates/page-grid/page-grid.twig b/source/_patterns/03-templates/page-grid/page-grid.twig index 974590bd..79c27d68 100644 --- a/source/_patterns/03-templates/page-grid/page-grid.twig +++ b/source/_patterns/03-templates/page-grid/page-grid.twig @@ -1,4 +1,4 @@ -{% set attributes = {class: ['page-grid']}|merge_recursive(attributes|default({})) -%} +{% set attributes = {class: 'page-grid'}|merge_recursive(attributes|default({})) -%}