Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Creates add_attribute twig function #10

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

waako
Copy link

@waako waako commented Mar 19, 2018

Replicates the Drupal twig function create_attribute for patternlab
https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates#create_attribute

#8 got me thinking about this, so used existing link twig function to make create_attribute work in Pattern Lab.
Tested locally with:

<p{{ create_attribute({'class': ['paragraph', 'text']}) }}>{{ content }}</p>

which results in generated html:

<p class="paragraph text">Test paragraph content</p>

@waako waako mentioned this pull request Mar 19, 2018
@waako
Copy link
Author

waako commented Mar 19, 2018

Needs improving to work with any attribute though

@waako
Copy link
Author

waako commented Mar 20, 2018

Function now loops through all the attributes

@piouPiouM
Copy link

Hi @waako,

I used the following to rely on Drupal's tools:

<?php
/**
 * @file
 * Add "create_attribute" function for Pattern Lab.
 */

use \Drupal\Core\Template\Attribute;

$function = new Twig_SimpleFunction('create_attribute', function ($attributes = []) {
  return new Attribute($attributes);
});

@sghoweri
Copy link

sghoweri commented Jul 6, 2018

@piouPiouM @waako

We do something virtually identical in our design system in order to make sure all of Drupal’s attributes functionality makes it in there (including the setAttribute, addClass, and removeClass methods, etc)

https://github.com/bolt-design-system/bolt/blob/master/packages/core-php/src/TwigFunctions.php#L240

use \Drupal\Core\Template\Attribute;

//...

// Backport the native create_attribute function from Drupal to natively work in Pattern Lab
  public static function create_attribute() {
    return new Twig_SimpleFunction('create_attribute', function($attributes) {
      return is_array($attributes) ? new Attribute($attributes) : $attributes;
    });
  }

@waako
Copy link
Author

waako commented Jul 18, 2018

@piouPiouM @sghoweri Thanks, that seems to make sense, did not realise that could use a Drupal class inside patternlab function.

@kristiaanvandeneynde
Copy link

Any way I can include this in my project already? The fix mentioned by sghoweri?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants