mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-16 13:44:12 +02:00
[ticket/16944] Generate iconify bundle as needed via icons & assets bag
PHPBB3-16944
This commit is contained in:
@@ -13,6 +13,8 @@
|
||||
|
||||
namespace phpbb\template;
|
||||
|
||||
use phpbb\assets\iconify_bundler;
|
||||
|
||||
class assets_bag
|
||||
{
|
||||
/** @var asset[] */
|
||||
@@ -21,6 +23,17 @@ class assets_bag
|
||||
/** @var asset[] */
|
||||
protected $scripts = [];
|
||||
|
||||
/** @var string[] */
|
||||
protected $iconify_icons = [];
|
||||
|
||||
/**
|
||||
* Constructor for assets bag
|
||||
*
|
||||
* @param iconify_bundler $iconify_bundler
|
||||
*/
|
||||
public function __construct(protected iconify_bundler $iconify_bundler)
|
||||
{}
|
||||
|
||||
/**
|
||||
* Add a css asset to the bag
|
||||
*
|
||||
@@ -41,6 +54,30 @@ class assets_bag
|
||||
$this->scripts[] = $asset;
|
||||
}
|
||||
|
||||
public function add_iconify_icon(string $icon): void
|
||||
{
|
||||
$this->iconify_icons[] = $icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inject iconify icons into template
|
||||
*
|
||||
* @param string $output Output before injection
|
||||
* @param string $variable_name Variable name for injection
|
||||
* @param bool $use_cdn Flag whether to use CDN or local data
|
||||
*
|
||||
* @return string Output after injection
|
||||
*/
|
||||
public function inject_iconify_icons(string $output, string $variable_name, bool $use_cdn): string
|
||||
{
|
||||
if (str_contains($output, $variable_name))
|
||||
{
|
||||
$output = str_replace($variable_name, $use_cdn ? '' : $this->get_iconify_content(), $output);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all css assets
|
||||
*
|
||||
@@ -92,4 +129,22 @@ class assets_bag
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the HTML code to include all iconify icons
|
||||
*
|
||||
* @return string HTML code for iconify bundle
|
||||
*/
|
||||
public function get_iconify_content(): string
|
||||
{
|
||||
$output = '';
|
||||
if (count($this->iconify_icons))
|
||||
{
|
||||
$output .= '<script>';
|
||||
$this->iconify_bundler->add_icons($this->iconify_icons);
|
||||
$output .= $this->iconify_bundler->run();
|
||||
$output .= '</script>';
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user