<?php
namespace PHPFUI;
class SlickSlider extends \PHPFUI\HTML5Element
{
use \PHPFUI\Traits\Page;
private array $attributes = [];
private array $slides = [];
public function __construct(protected \PHPFUI\Interfaces\Page $page)
{
parent::__construct('div');
$this->addClass('slick-slider');
$page->addStyleSheet('slick/slick.css');
$page->addTailScript('slick/slick.min.js');
}
public function addImage(string $image, string $alt = '') : SlickSlider
{
$extra = '';
if (empty($alt))
{
$alt = $image;
}
else
{
$extra = "<div>{$alt}</div>";
}
return $this->addSlide("<img src='{$image}' alt='{$alt}'>{$extra}");
}
public function addSlide(string $html) : static
{
$this->slides[] = $html;
return $this;
}
public function addSliderAttribute(string $attribute, mixed $value = '') : static
{
$this->attributes[$attribute] = $value;
return $this;
}
public function count() : int
{
return \count($this->slides);
}
protected function getBody() : string
{
$active = ' class="slick-slide slick-current slick-active" aria-hidden="false"';
$output = '';
foreach ($this->slides as $slide)
{
$output .= "<div{$active}>{$slide}</div>";
$active = ' class="slick-slide" aria-hidden="true"';
}
return $output;
}
protected function getStart() : string
{
$js = '$("#' . $this->getId() . '").slick(' . \PHPFUI\TextHelper::arrayToJS($this->attributes) . ');$("#' . $this->getId() . '").show();';
$this->page->addJavaScript($js);
return parent::getStart();
}
}