IconDefinition.php
Namespace
Drupal\Core\Theme\IconFile
-
core/
lib/ Drupal/ Core/ Theme/ Icon/ IconDefinition.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Core\Theme\Icon;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Theme\Icon\Exception\IconDefinitionInvalidDataException;
use function Symfony\Component\String\u;
/**
* Handle an icon definition.
*
* @internal
* This API is experimental.
*/
class IconDefinition implements IconDefinitionInterface {
public const ICON_SEPARATOR = ':';
/**
* Constructor for IconDefinition.
*
* @param string $pack_id
* The id of the icon pack.
* @param string $icon_id
* The id of the icon.
* @param string $template
* The template of the icon.
* @param string|null $source
* The source, url or path of the icon.
* @param string|null $group
* The group of the icon.
* @param array $data
* The additional data of the icon.
*/
private function __construct(string $pack_id, string $icon_id, string $template, ?string $source, ?string $group, array $data) {
}
/**
* {@inheritdoc}
*/
public static function create(string $pack_id, string $icon_id, string $template, ?string $source = NULL, ?string $group = NULL, array $data = []) : self {
$errors = [];
if (0 === strlen($pack_id)) {
$errors[] = 'Empty pack_id provided!';
}
if (0 === strlen($icon_id)) {
$errors[] = 'Empty icon_id provided!';
}
if (0 === strlen($template)) {
$errors[] = 'Empty template provided!';
}
if (count($errors)) {
throw new IconDefinitionInvalidDataException(implode(' ', $errors));
}
// Cleanup of data that do not need to be passed.
unset($data['config']['sources'], $data['relative_path'], $data['absolute_path']);
return new self($pack_id, $icon_id, $template, $source, $group, $data);
}
/**
* {@inheritdoc}
*/
public static function createIconId(string $pack_id, string $icon_id) : string {
return sprintf('%s%s%s', $pack_id, self::ICON_SEPARATOR, $icon_id);
}
/**
* {@inheritdoc}
*/
public static function getIconDataFromId(string $icon_full_id) : ?array {
$icon_data = explode(self::ICON_SEPARATOR, $icon_full_id, 2);
if (count($icon_data) < 2) {
return NULL;
}
return [
'pack_id' => $icon_data[0],
'icon_id' => $icon_data[1],
];
}
/**
* {@inheritdoc}
*/
public static function getRenderable(string $icon_full_id, array $settings = []) : ?array {
if (!($icon_data = self::getIconDataFromId($icon_full_id))) {
return NULL;
}
if (isset($settings[$icon_data['pack_id']])) {
$settings = $settings[$icon_data['pack_id']];
}
return [
'#type' => 'icon',
'#pack_id' => $icon_data['pack_id'],
'#icon_id' => $icon_data['icon_id'],
'#settings' => $settings,
];
}
/**
* {@inheritdoc}
*/
public function getLabel() : string {
return self::humanize($this->icon_id);
}
/**
* {@inheritdoc}
*/
public function getId() : string {
return sprintf('%s%s%s', $this->pack_id, self::ICON_SEPARATOR, $this->icon_id);
}
/**
* {@inheritdoc}
*/
public function getIconId() : string {
return $this->icon_id;
}
/**
* {@inheritdoc}
*/
public function getPackId() : string {
return $this->pack_id;
}
/**
* {@inheritdoc}
*/
public function getSource() : ?string {
return $this->source;
}
/**
* {@inheritdoc}
*/
public function getGroup() : ?string {
return $this->group;
}
/**
* {@inheritdoc}
*/
public function getTemplate() : string {
return $this->template;
}
/**
* {@inheritdoc}
*/
public function getPackLabel() : ?TranslatableMarkup {
return $this->data['label'] ?? NULL;
}
/**
* {@inheritdoc}
*/
public function getLibrary() : ?string {
return $this->data['library'] ?? NULL;
}
/**
* {@inheritdoc}
*/
public function getAllData() : array {
return $this->data;
}
/**
* {@inheritdoc}
*/
public function getData(string $key) : mixed {
return $this->data[$key] ?? NULL;
}
/**
* Humanize a text for admin display.
*
* @param string $text
* The text to humanize.
*
* @return string
* The human friendly text.
*/
public static function humanize(string $text) : string {
return (string) u($text)->snake()
->replace('_', ' ')
->title(allWords: TRUE);
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
IconDefinition | Handle an icon definition. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.