Your IP : 216.73.216.240


Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/View/Sky/
Upload File :
Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/View/Sky/Accordion.php

<?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;
    }
}