.
*/
namespace Alledia\Framework\Joomla\Toolbar;
use Alledia\Framework\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Toolbar\Toolbar;
use Joomla\CMS\Utility\Utility;
use Joomla\CMS\Version;
defined('_JEXEC') or die();
abstract class ToolbarHelper extends \Joomla\CMS\Toolbar\ToolbarHelper
{
/**
* @var bool
*/
protected static $exportLoaded = false;
/**
* Create a button that links to an external page
*
* @param string $url
* @param string $title
* @param ?string $icon
* @param ?mixed $attributes
*
* @return void
*/
public static function externalLink(string $url, string $title, ?string $icon = null, $attributes = [])
{
if (is_string($attributes)) {
$attributes = Utility::parseAttributes($attributes);
}
$icon = $icon ?: 'link';
$attributes['target'] = $attributes['target'] ?? '_blank';
$attributes['class'] = join(
' ',
array_filter(
array_merge(
explode(' ', $attributes['class'] ?? ''),
[
'btn',
'btn-small'
]
)
)
);
$button = HTMLHelper::_(
'link',
$url,
sprintf(' %s', $icon, $title),
$attributes
);
if (Version::MAJOR_VERSION > 3) {
$button = sprintf('%s', $button);
}
$bar = Toolbar::getInstance();
$bar->appendButton('Custom', $button, $icon);
}
/**
* Create a button that links to documentation
*
* @param string $url
* @param string $title
*
* @return void
*/
public static function shackDocumentation(string $url, string $title)
{
static::externalLink($url, $title, 'support', ['class' => 'btn-info', 'target' => 'shackdocs']);
}
/**
* Export button that ensures the task input field is cleared if
* the export does not return to refresh the page
*
* @param string $task
* @param string $alt
* @param string $icon
*
* @return void
* @throws \Exception
*/
public static function exportView(string $task, string $alt, string $icon = 'download')
{
static::custom($task, $icon, null, $alt, false);
if (static::$exportLoaded == false) {
Factory::getApplication()->getDocument()->addScriptDeclaration(<<