primo commit
This commit is contained in:
159
libraries/fof40/Render/FEF.php
Normal file
159
libraries/fof40/Render/FEF.php
Normal file
@ -0,0 +1,159 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FOF
|
||||
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
|
||||
* @license GNU General Public License version 3, or later
|
||||
*/
|
||||
|
||||
namespace FOF40\Render;
|
||||
|
||||
defined('_JEXEC') || die;
|
||||
|
||||
use FOF40\Container\Container;
|
||||
|
||||
/**
|
||||
* Renderer class for use with Akeeba FEF
|
||||
*
|
||||
* Renderer options
|
||||
*
|
||||
* wrapper_id The ID of the wrapper DIV. Default: akeeba-rendered-fef
|
||||
* linkbar_style Style for linkbars: joomla3|classic. Default: joomla3
|
||||
* load_fef Load FEF CSS? Set to false if you are loading it outside the renderer. Default: true
|
||||
* load_fef_js Load FEF JS? Set to false if you are loading it outside the rendered. Default: true
|
||||
* load_fef_js_minimal Load the minimal FEF JS (without features depending on FEF CSS)? Default: inverse of load_fef
|
||||
* fef_reset Should I reset the CSS styling for basic HTML elements inside the FEF container? Default: true
|
||||
* fef_dark Should I load the FEF Dark Mode CSS and supporting JS? Default: 0 (no). Options: 1 (yes and
|
||||
* activate immediately), -1 (include dark.css but not enable by default, also enables auto mode
|
||||
* for Safari)
|
||||
* custom_css Comma-separated list of custom CSS files to load _after_ the main FEF CSS file, e.g.
|
||||
* media://com_foo/css/bar.min.css,media://com_foo/css/baz.min.css
|
||||
* remove_wrapper_classes Comma-separated list of classes to REMOVE from the container
|
||||
* add_wrapper_classes Comma-separated list of classes to ADD to the container
|
||||
*
|
||||
* Note: when Dark Mode is enabled the class akeeba-renderer-fef--dark is applied to the container DIV. You can use
|
||||
* remove_wrapper_classes to remove it e.g. when you want it to be enabled only through a JavaScript-powered toggle.
|
||||
*
|
||||
* @package FOF40\Render
|
||||
*/
|
||||
class FEF extends Joomla
|
||||
{
|
||||
public function __construct(Container $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
|
||||
$helperFile = JPATH_SITE . '/media/fef/fef.php';
|
||||
|
||||
if (!class_exists('AkeebaFEFHelper') && is_file($helperFile))
|
||||
{
|
||||
include_once $helperFile;
|
||||
}
|
||||
|
||||
$this->priority = 20;
|
||||
$this->enabled = class_exists('AkeebaFEFHelper');
|
||||
}
|
||||
|
||||
public function initialise(string $view, string $task): void
|
||||
{
|
||||
$useReset = $this->getOption('fef_reset', 1);
|
||||
$useFefCss = $this->getOption('load_fef', 1);
|
||||
$useFefJs = $this->getOption('load_fef_js', 1);
|
||||
$minimalJs = $this->getOption('load_fef_js_minimal', $useFefCss ? 0 : 1);
|
||||
$useDarkMode = $this->getOption('fef_dark', 0);
|
||||
|
||||
if (class_exists('AkeebaFEFHelper'))
|
||||
{
|
||||
if ($useFefCss)
|
||||
{
|
||||
\AkeebaFEFHelper::loadCSSFramework((bool) $useReset, (bool) $useDarkMode != 0);
|
||||
}
|
||||
|
||||
if ($useFefJs)
|
||||
{
|
||||
\AkeebaFEFHelper::loadJSFramework((bool) $minimalJs);
|
||||
}
|
||||
}
|
||||
|
||||
// Unlike the Joomla renderer we do NOT load jQuery unless explicitly enabled
|
||||
$loadJQuery = $this->getOption('load_jquery', false);
|
||||
$this->setOption('load_jquery', $loadJQuery ? 1 : 0);
|
||||
|
||||
parent::initialise($view, $task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the FEF styling wrapper element. Our component's output will be inside this wrapper.
|
||||
*
|
||||
* @param array $classes An array of additional CSS classes to add to the outer page wrapper element.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function openPageWrapper(array $classes): void
|
||||
{
|
||||
$useDarkMode = $this->getOption('fef_dark', false);
|
||||
|
||||
if (($useDarkMode == 1) && !in_array('akeeba-renderer-fef--dark', $classes))
|
||||
{
|
||||
$classes[] = 'akeeba-renderer-fef--dark';
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove wrapper classes. By default these are classes for the Joomla 3 sidebar which is not used in FEF
|
||||
* components anymore.
|
||||
*/
|
||||
$removeClasses = $this->getOption('remove_wrapper_classes', [
|
||||
'j-toggle-main',
|
||||
'j-toggle-transition',
|
||||
'row-fluid',
|
||||
]);
|
||||
|
||||
if (!is_array($removeClasses))
|
||||
{
|
||||
$removeClasses = explode(',', $removeClasses);
|
||||
}
|
||||
|
||||
$removeClasses = array_map('trim', $removeClasses);
|
||||
|
||||
foreach ($removeClasses as $class)
|
||||
{
|
||||
$x = array_search($class, $classes);
|
||||
|
||||
if ($x !== false)
|
||||
{
|
||||
unset($classes[$x]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add the following classes to the wrapper div
|
||||
$addClasses = $this->getOption('add_wrapper_classes', '');
|
||||
|
||||
if (!is_array($addClasses))
|
||||
{
|
||||
$addClasses = explode(',', $addClasses);
|
||||
}
|
||||
|
||||
$addClasses = array_map('trim', $addClasses);
|
||||
$customClasses = implode(' ', array_unique(array_merge($classes, $addClasses)));
|
||||
|
||||
$id = $this->getOption('wrapper_id', 'akeeba-renderer-fef');
|
||||
$id = empty($id) ? "" : sprintf(' id="%s"', $id);
|
||||
|
||||
echo <<< HTML
|
||||
<div id="akeeba-renderer-fef" class="akeeba-renderer-fef $customClasses"$id>
|
||||
|
||||
HTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the FEF styling wrapper element.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function closePageWrapper(): void
|
||||
{
|
||||
echo <<< HTML
|
||||
</div>
|
||||
|
||||
HTML;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user