Your IP : 216.73.216.240
<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library\View\Sky;
defined('_JEXEC') or die;
use TechFry\Library\TResource;
class Accordion extends Bootstrap
{
public $accordion_id;
public $always_open;
public $show;
public $collapsed;
public $aria_expanded;
public $i;
public function display()
{
// config - flush, first_open, always_open
if (!$this->data)
{
return;
}
if ($this->framework == 'amp')
{
return $this->display_amp();
}
$items = $this->data;
$flush = isset($this->config['flush']) && $this->config['flush'] ? ' accordion-flush' : '';
$first_open = $this->config['first_open'] ?? 0;
$this->always_open = $this->config['always_open'] ?? 0;
$this->accordion_id = $this->get_id();
$this->i = 1;
$output = $this->html->open_div(array('class' => 'accordion mb-3' . $flush, 'id' => $this->accordion_id));
foreach ($items as $item)
{
$item = array_values((array) $item);
// Show first accordion by default
$this->show = ($this->i == 1 && $first_open) ? ' show' : '';
$this->collapsed = ($this->i == 1 && $first_open) ? '' : ' collapsed';
$this->aria_expanded = ($this->i == 1 && $first_open) ? 'true' : 'false';
$output .= $this->html->open_div(array('class' => 'accordion-item'));
$output .= $this->accordion_header($item[0]);
$output .= $this->accordion_body($item[1]);
$output .= $this->html->close_div();
$this->i++;
}
$output .= $this->html->close_div();
// Add CSS
$this->include_tfcss('accordion');
// Add JavaScript
$this->include_bsjs('collapse');
return $output;
}
public function accordion_header($text)
{
$output = '<h2 class="accordion-header">';
$output .= '<button class="accordion-button' . $this->collapsed . '" type="button" data-bs-toggle="collapse" data-bs-target="#collapse' . $this->accordion_id . $this->i . '"';
$output .= ' aria-expanded="' . $this->aria_expanded . '">';
$output .= $text;
$output .= '</button>';
$output .= '</h2>';
return $output;
}
public function accordion_body($text)
{
$output = '<div id="collapse' . $this->accordion_id . $this->i . '" class="accordion-collapse collapse' . $this->show . '"';
if (!$this->always_open)
{
$output .= ' data-bs-parent="#' . $this->accordion_id . '"';
}
$output .= '>';
$output .= '<div class="accordion-body">' . $text . '</div>';
$output .= '</div>';
return $output;
}
public function display_amp()
{
$items = $this->data;
// Add AMP JS
$js_url = 'https://cdn.ampproject.org/v0/amp-accordion-0.1.js';
$r = new TResource();
$r->add_resource('script', 'amp.accordion', $js_url, [], array('async' => 'async', 'custom-element' => 'amp-accordion'));
$output = '';
$output .= '<amp-accordion id="my-accordion" animate disable-session-states>';
$n = 1;
foreach ($items as $i => $item)
{
$item = (array) $item;
$item = array_values($item);
// First item should be expanded
$expanded = ($n == 1) ? ' expanded' : '';
$output .= '<section class=""' . $expanded . '>';
$output .= '<h5 class="p-3">' . $item[0] . '</h3>';
$output .= '<div class="p-3">' . $item[1] . '</div>';
$output .= '</section>';
$n++;
}
$output .= '</amp-accordion>';
return $output;
}
}