151 lines
4.9 KiB
PHP
151 lines
4.9 KiB
PHP
<?php
|
|
|
|
|
|
namespace Nextend\SmartSlider3\Renderable\Component;
|
|
|
|
|
|
use Nextend\Framework\Parser\Common;
|
|
use Nextend\Framework\View\Html;
|
|
use Nextend\SmartSlider3\Renderable\ComponentContainer;
|
|
use Nextend\SmartSlider3\Slider\Slide;
|
|
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
|
|
|
|
class ComponentSlide extends AbstractComponent {
|
|
|
|
protected $type = 'slide';
|
|
|
|
/**
|
|
* @var Slide
|
|
*/
|
|
protected $owner;
|
|
|
|
/**
|
|
* ComponentSlide constructor.
|
|
*
|
|
* @param Slide $owner
|
|
* @param $data
|
|
*/
|
|
public function __construct($owner, $data) {
|
|
if (!$owner->underEdit) {
|
|
$data['layers'] = AbstractComponent::translateUniqueIdentifier($data['layers'], false);
|
|
}
|
|
|
|
parent::__construct(0, $owner, false, $data);
|
|
|
|
$this->container = new ComponentContainer($owner, $this, $data['layers']);
|
|
$this->data->un_set('layers');
|
|
|
|
$this->container->addContentLayer($owner, $this);
|
|
|
|
$this->upgradeData();
|
|
|
|
$devices = $this->owner->getAvailableDevices();
|
|
|
|
foreach ($devices as $device) {
|
|
$padding = $this->data->get($device . 'padding');
|
|
if (!empty($padding)) {
|
|
$this->style->add($device, '', 'padding:' . implode('px ', explode('|*|', $padding)) . 'px');
|
|
}
|
|
}
|
|
}
|
|
|
|
protected function upgradeData() {
|
|
|
|
if ($this->data->get('background-type') == '') {
|
|
$this->data->set('background-type', 'color');
|
|
if ($this->data->get('backgroundVideoMp4')) {
|
|
$this->data->set('background-type', 'video');
|
|
} else if ($this->data->get('backgroundImage')) {
|
|
$this->data->set('background-type', 'image');
|
|
}
|
|
}
|
|
|
|
$linkV1 = $this->data->getIfEmpty('link', '');
|
|
if (!empty($linkV1)) {
|
|
list($link, $target) = array_pad((array)Common::parse($linkV1), 2, '');
|
|
$this->data->un_set('link');
|
|
$this->data->set('href', $link);
|
|
$this->data->set('href-target', $target);
|
|
}
|
|
}
|
|
|
|
public function getPlacement() {
|
|
return 'default';
|
|
}
|
|
|
|
protected function admin() {
|
|
/**
|
|
* Hide on properties
|
|
*/
|
|
$this->createDeviceProperty('', 1);
|
|
|
|
$this->createProperty('title', '');
|
|
$this->createProperty('publish_up', '0000-00-00 00:00:00');
|
|
$this->createProperty('publish_down', '0000-00-00 00:00:00');
|
|
$this->createProperty('published', 1);
|
|
$this->createProperty('description', '');
|
|
$this->createProperty('thumbnail', '');
|
|
$this->createProperty('thumbnailAlt', '');
|
|
$this->createProperty('thumbnailType', 'default');
|
|
|
|
$this->createProperty('static-slide', 0);
|
|
$this->createProperty('slide-duration', 0);
|
|
$this->createProperty('ligthboxImage', '');
|
|
|
|
$this->createProperty('record-slides', 0);
|
|
|
|
SliderTypeFactory::getType($this->owner->getSlider()->data->get('type'))
|
|
->createAdmin()
|
|
->registerSlideAdminProperties($this);
|
|
|
|
$this->createProperty('href', '');
|
|
$this->createProperty('href-target', '');
|
|
$this->createProperty('aria-label', '');
|
|
|
|
|
|
$this->createProperty('background-type', 'color');
|
|
|
|
$this->createProperty('backgroundColor', 'ffffff00');
|
|
$this->createProperty('backgroundGradient', 'off');
|
|
$this->createProperty('backgroundColorEnd', 'ffffff00');
|
|
$this->createProperty('backgroundColorOverlay', 0);
|
|
|
|
$this->createProperty('backgroundImage', '');
|
|
$this->createProperty('backgroundFocusX', 50);
|
|
$this->createProperty('backgroundFocusY', 50);
|
|
$this->createProperty('backgroundImageOpacity', 100);
|
|
$this->createProperty('backgroundImageBlur', 0);
|
|
$this->createProperty('backgroundAlt', '');
|
|
$this->createProperty('backgroundTitle', '');
|
|
$this->createProperty('backgroundMode', 'default');
|
|
$this->createProperty('backgroundBlurFit', 7);
|
|
|
|
|
|
$this->createProperty('backgroundVideoMp4', '');
|
|
$this->createProperty('backgroundVideoOpacity', 100);
|
|
$this->createProperty('backgroundVideoLoop', 1);
|
|
$this->createProperty('backgroundVideoReset', 1);
|
|
$this->createProperty('backgroundVideoMode', 'fill');
|
|
|
|
$this->createDeviceProperty('padding', '10|*|10|*|10|*|10');
|
|
}
|
|
|
|
public function render($isAdmin) {
|
|
$this->attributes['data-sstype'] = $this->type;
|
|
|
|
$this->placement->attributes($this->attributes);
|
|
|
|
$this->serveLocalStyle();
|
|
|
|
if ($isAdmin) {
|
|
$this->admin();
|
|
}
|
|
|
|
$uniqueClass = $this->data->get('uniqueclass', '');
|
|
if (!empty($uniqueClass)) {
|
|
$this->addUniqueClass($uniqueClass . $this->owner->unique);
|
|
}
|
|
|
|
return Html::tag('div', $this->attributes, parent::renderContainer($isAdmin));
|
|
}
|
|
} |