223 lines
5.6 KiB
PHP
223 lines
5.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved
|
|
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
* JCE is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses
|
|
*/
|
|
defined('JPATH_PLATFORM') or die;
|
|
|
|
final class WFTabs extends JObject
|
|
{
|
|
private $_tabs = array();
|
|
private $_panels = array();
|
|
private $_paths = array();
|
|
|
|
/**
|
|
* Constructor activating the default information of the class.
|
|
*/
|
|
public function __construct($config = array())
|
|
{
|
|
if (!array_key_exists('base_path', $config)) {
|
|
$config['base_path'] = WF_EDITOR_LIBRARIES;
|
|
}
|
|
|
|
$this->setProperties($config);
|
|
|
|
if (array_key_exists('template_path', $config)) {
|
|
$this->addTemplatePath($config['template_path']);
|
|
} else {
|
|
$this->addTemplatePath($this->get('base_path') . '/tmpl');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a reference to a WFTabs object.
|
|
*
|
|
* This method must be invoked as:
|
|
* <pre> $tabs = WFTabs::getInstance();</pre>
|
|
*
|
|
* @return object WFTabs
|
|
*/
|
|
public static function getInstance($config = array())
|
|
{
|
|
static $instance;
|
|
|
|
if (!is_object($instance)) {
|
|
$instance = new self($config);
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* Add a template path.
|
|
*
|
|
* @param string $path
|
|
*/
|
|
public function addTemplatePath($path)
|
|
{
|
|
$this->_paths[] = $path;
|
|
}
|
|
|
|
/**
|
|
* Load a panel view.
|
|
*
|
|
* @param object $layout Layout (panel) name
|
|
*
|
|
* @return panel JView object
|
|
*/
|
|
private function loadPanel($panel, $state)
|
|
{
|
|
$view = new WFView(array(
|
|
'name' => $panel,
|
|
'layout' => $panel,
|
|
));
|
|
|
|
// add tab paths
|
|
foreach ($this->_paths as $path) {
|
|
$view->addTemplatePath($path);
|
|
}
|
|
|
|
// assign panel state to view
|
|
$view->state = (int) $state;
|
|
|
|
return $view;
|
|
}
|
|
|
|
public function getPanel($panel)
|
|
{
|
|
if (array_key_exists($panel, $this->_panels)) {
|
|
return $this->_panels[$panel];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Add a tab to the document. A panel is automatically created and assigned.
|
|
*
|
|
* @param object $tab Tab name
|
|
* @param int $state Tab state (active or inactive)
|
|
* @param array $values An array of values to assign to panel view
|
|
*/
|
|
public function addTab($tab, $state = 1, $values = array())
|
|
{
|
|
if (!array_key_exists($tab, $this->_tabs)) {
|
|
$this->_tabs[$tab] = (int) $state === 1 ? $tab : '';
|
|
|
|
$panel = $this->addPanel($tab, $state);
|
|
|
|
// array is not empty and is associative
|
|
if (!empty($values) && array_values($values) !== $values) {
|
|
foreach($values as $key => $value) {
|
|
$panel->$key = $value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add a panel to the document.
|
|
*
|
|
* @param object $panel Panel name
|
|
*/
|
|
public function addPanel($tab, $state)
|
|
{
|
|
if (!array_key_exists($tab, $this->_panels)) {
|
|
$this->_panels[$tab] = $this->loadPanel($tab, $state);
|
|
|
|
return $this->_panels[$tab];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a tab from the document.
|
|
*
|
|
* @param object $tab Tab name
|
|
*/
|
|
public function removeTab($tab)
|
|
{
|
|
if (array_key_exists($tab, $this->_tabs)) {
|
|
unset($this->_tabs[$tab]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Render the document tabs and panels.
|
|
*/
|
|
public function render()
|
|
{
|
|
$output = '';
|
|
|
|
if (!empty($this->_tabs)) {
|
|
$output .= '<div id="tabs">';
|
|
}
|
|
|
|
// add tabs
|
|
if (count($this->_tabs) > 1) {
|
|
$output .= '<ul class="uk-tab" role="tablist">' . "\n";
|
|
|
|
$x = 0;
|
|
|
|
foreach ($this->_tabs as $name => $tab) {
|
|
$class = '';
|
|
|
|
if ($x === 0) {
|
|
$class .= ' uk-active';
|
|
}
|
|
|
|
if (!$tab) {
|
|
$class .= ' uk-hidden';
|
|
}
|
|
|
|
$output .= "\t" . '<li role="presentation" aria-selected="false" class="' . $class . '"><button type="button" class="uk-button uk-button-link uk-button-tab" tabindex="-1" value="' . $name . '">' . JText::_('WF_TAB_' . strtoupper($name)) . '</button></li>' . "\n";
|
|
++$x;
|
|
}
|
|
|
|
$output .= "</ul>\n";
|
|
}
|
|
|
|
// add panels
|
|
if (!empty($this->_panels)) {
|
|
$x = 0;
|
|
|
|
$output .= '<div class="uk-switcher">';
|
|
|
|
foreach ($this->_panels as $key => $panel) {
|
|
$class = '';
|
|
|
|
if ($panel->state === 0) {
|
|
$class .= ' uk-hidden';
|
|
}
|
|
|
|
if (!empty($this->_tabs)) {
|
|
if ($x === 0) {
|
|
$class .= ' uk-active';
|
|
} else {
|
|
$class .= ' uk-tabs-hide';
|
|
}
|
|
}
|
|
|
|
$output .= '<div id="' . $key . '_tab" class="' . $class . '" role="tabpanel" aria-hidden="true">';
|
|
$output .= $panel->loadTemplate();
|
|
$output .= '</div>';
|
|
|
|
++$x;
|
|
}
|
|
|
|
$output .= '</div>';
|
|
}
|
|
|
|
// add closing div
|
|
if (!empty($this->_tabs)) {
|
|
$output .= "</div>\n";
|
|
}
|
|
|
|
echo $output;
|
|
}
|
|
}
|