diff --git a/administrator/language/en-GB/lib_joomla.ini b/administrator/language/en-GB/lib_joomla.ini index 85ac2c10268e5..cab86acb6cb02 100644 --- a/administrator/language/en-GB/lib_joomla.ini +++ b/administrator/language/en-GB/lib_joomla.ini @@ -501,6 +501,7 @@ JLIB_HTML_FEATURED_PENDING_ITEM="Featured, but is Pending." JLIB_HTML_FEATURED_STARTED="Start: %s" JLIB_HTML_GOTO_PAGE="Go to page %s" JLIB_HTML_GOTO_POSITION="Go to %s page" +JLIB_HTML_ICONS_NO_ICON="No icon provided." JLIB_HTML_MOVE_DOWN="Move Down" JLIB_HTML_MOVE_UP="Move Up" JLIB_HTML_NO_PARAMETERS_FOR_THIS_ITEM="There are no parameters for this item." diff --git a/build/build-modules-js/settings.json b/build/build-modules-js/settings.json index 276c31954dd8f..02ac7527d7e99 100644 --- a/build/build-modules-js/settings.json +++ b/build/build-modules-js/settings.json @@ -255,6 +255,7 @@ }, "filesExtra": { "scss": "scss", + "svgs": "images", "webfonts": "webfonts" }, "provideAssets": [ diff --git a/language/en-GB/lib_joomla.ini b/language/en-GB/lib_joomla.ini index 85ac2c10268e5..cab86acb6cb02 100644 --- a/language/en-GB/lib_joomla.ini +++ b/language/en-GB/lib_joomla.ini @@ -501,6 +501,7 @@ JLIB_HTML_FEATURED_PENDING_ITEM="Featured, but is Pending." JLIB_HTML_FEATURED_STARTED="Start: %s" JLIB_HTML_GOTO_PAGE="Go to page %s" JLIB_HTML_GOTO_POSITION="Go to %s page" +JLIB_HTML_ICONS_NO_ICON="No icon provided." JLIB_HTML_MOVE_DOWN="Move Down" JLIB_HTML_MOVE_UP="Move Up" JLIB_HTML_NO_PARAMETERS_FOR_THIS_ITEM="There are no parameters for this item." diff --git a/layouts/joomla/quickicons/icon.php b/layouts/joomla/quickicons/icon.php index 023b9ec4fb75f..adf68456fac19 100644 --- a/layouts/joomla/quickicons/icon.php +++ b/layouts/joomla/quickicons/icon.php @@ -9,6 +9,7 @@ defined('_JEXEC') or die; +use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; $id = empty($displayData['id']) ? '' : (' id="' . $displayData['id'] . '"'); @@ -63,7 +64,12 @@ href="">
- + Text::_($displayData['name']), + 'svg' => true + ] + ); ?>
diff --git a/libraries/src/HTML/Helpers/Icons.php b/libraries/src/HTML/Helpers/Icons.php index 54dcc541c16d5..90a86e905aa21 100644 --- a/libraries/src/HTML/Helpers/Icons.php +++ b/libraries/src/HTML/Helpers/Icons.php @@ -12,9 +12,11 @@ use Joomla\CMS\Factory; use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\FileLayout; use Joomla\CMS\Uri\Uri; use Joomla\Filesystem\Path; +use Joomla\Utilities\ArrayHelper; /** * Utility class for icons. @@ -128,4 +130,57 @@ public static function svg(string $file, bool $relative = true): ?string return $file; } + + /** + * Method to write a `` element for an icon + * + * @param string $icon The functional name for an icon. + * @param array $attribs Attributes to be added to the wrapping element + * + * @return string + * + * @throws \InvalidArgumentException + * + * @since __DEPLOY_VERSION__ + */ + public static function icon(string $icon, array $attribs = []): string + { + if ($icon === '') + { + throw new \InvalidArgumentException(Text::_('JLIB_HTML_ICONS_NO_ICON')); + } + + $class = $icon; + + if (isset($attribs['class'])) + { + $class .= ' ' . $attribs['class']; + } + + $attribs['class'] = $class; + + if (!isset($attribs['aria-hidden'])) + { + $attribs['aria-hidden'] = 'true'; + } + + if (isset($attribs['text']) && $attribs['aria-hidden'] === 'true') + { + $text = htmlspecialchars($attribs['text'], ENT_COMPAT, 'UTF-8'); + $text = '' . $text . ''; + unset($attribs['text']); + } + + $output = ''; + + if (isset($attribs['svg'])) + { + $provider = $attribs['svg']['provider'] ?? 'fontawesome-free'; + $group = $attribs['svg']['group'] ?? 'regular'; + $path = '/media/vendor/' . $provider . '/svgs/' . $group; + $output = HTMLHelper::_('icons.svg', $icon . '.svg', $path); + } + + return $output . $text; + } }